# FALSIFIER amendment 3: Grounding DINO face detection + second, independent mouth scorer

Written: 2026-10-27T10:52:40Z (2026-10-27 04:52 MDT, America/Denver), before any new model was downloaded or run, and before any new score was computed.
Chain: FALSIFIER.md (f74b1b4f…), FALSIFIER_AMENDMENT_1.md (f8d436ce…), FALSIFIER_AMENDMENT_2.md
(4544719201ebf18fba2333189fd00d31243a77a46b500870de4f3d3d7dd98d00). None is changed.
The amendment-2 result stays on record as it is: OWLv2 detection, 43 of 100 feature-7446 pairs dropped, verdict INCONCLUSIVE
(raw/confound/, RECEIPT_2.json). The amendment-1 verdict (PASS, whole-image CLIP) also stands. Amendment 3 is a separate, third verdict.

Disclosure: when I wrote this, I had seen amendment 2's numbers, including its per-animal OWLv2 coverage and its CLIP crop effects.
The choices below are fixed before any Grounding DINO or SigLIP output on test images exists.

## Data
The same existing images: raw/test/img, 20 test prompts x seeds 0-4, s = 2.0, baseline / F7446 / 20 random matched-density
features / planted fake (2,300 images, hashes in RECEIPT.json). Nothing new is generated.

## Detector (fixed; no tuning on test images)
IDEA-Research/grounding-dino-tiny @ a2bb814dd30d776dcf7e30523b00659f4f141c71, Apache-2.0, ungated,
model.safetensors sha256 1a2412ef99bd74bcd3c2a246fa1e48581f8889a1300c9051974741314fc042f3.
- Text prompt (exactly): "animal head. animal face."
- box_threshold = 0.25 and text_threshold = 0.25 (the values amendment 2 pre-named for this fallback).
- Per image, keep the single box with the highest box score that passes both thresholds.
  An image with no such box is a detection failure. Thresholds and prompt don't change after this point.
- Calibration: the only calibration is a coverage readout on the 25 existing calibration baselines
  (raw/calib/calib_p{0-4}_s{0-4}_k0.png). It is reported for information only and does NOT change the prompt or the thresholds.
- area = box area / (512*512). Crop = square around the box centre, side 1.3 x max(w, h), clipped to the image.
  These are the same as amendment 2.

## Scorers (both applied to the same crops)
1. CLIP (unchanged): laion/CLIP-ViT-H-14-laion2B-s32B-b79K @ 1c2b8495…;
   S = 100 x [cos(crop, P+) - cos(crop, P-)],
   with P+ = "a photo of an animal with its mouth wide open" and P- = "a photo of an animal with its mouth closed".
2. SigLIP (new, independent): google/siglip-so400m-patch14-384 @ 9fdffc58afc957d1a03a25b10dba0329ab15c2a3, Apache-2.0, ungated,
   model.safetensors sha256 ea2abad2b7f8a9c1aa5e49a244d5d57ffa71c56f720c94bc5d240ef4d6e1d94a.
   Q = 100 x [cos(crop, P+) - cos(crop, P-)], with the same two prompts. Text is padded to max_length (64), as SigLIP requires; fp16.
   Why SigLIP:
   - It is a different model family: Google, WebLI data, sigmoid loss, SoViT-400m encoder. CLIP here is OpenCLIP trained on LAION-2B with a contrastive loss.
   - It is open and ungated, and runs in the same transformers stack.
   - Why not landmarks: I know of no open landmark model that gives a reliable mouth-opening ratio across this species mix
     (mammals, birds, reptiles, fish). Animal-face landmark models cover narrow species sets, mostly cats or dogs, so a
     landmark ratio would itself drop most pairs.
   Limit: both scorers are image-text embedding models. They share a failure mode: they could respond to "looks like a
   mouth-open photo" cues without the mouth geometry changing.

## Pair inclusion and the model (same as amendment 2, per scorer)
- A pair (prompt, seed) is used for intervention j only if both its baseline and its steered_j image have a detection.
  The same pair set is used for both scorers.
- Dropped-pair rule: if more than 20 of F7446's 100 pairs are dropped, the verdict is INCONCLUSIVE, whatever the scores say.
- For each scorer, a pooled pair-differenced OLS over all 22 interventions:
  dScore(j, pair) = b_j + c * dlog_area(j, pair) + e. There is one shared c per scorer.
  b_F is the face-size-controlled effect of feature 7446.
- Bootstrap: 2,000 resamples of the 20 prompts, seed 2027, model refitted each time.

## Rules, applied to each scorer separately
- R1 (threshold):
  - CLIP: b_F >= 1.0 (as in amendment 2).
  - SigLIP: its scale differs, so its threshold is in its own noise units. b_F >= 0.5 x SD_base, where SD_base is the standard
    deviation of Q over all detected baseline crops. That number doesn't depend on any steering. For reference, CLIP's b_F is
    also reported in its own SD_base units, but CLIP's R1 stays at 1.0.
- R2 (rank): b_F > b_r for all 20 random features (rank 1 of 21).
- R3 (bootstrap): 2.5th percentile of b_F > 0.
- R4 (matched size): pairs with |dlog_area| <= ln(1.25). If there are >= 10 of them, their mean dScore must be > 0.
  If there are fewer than 10, R4 is "not estimable", reported but not counted.
- A scorer "passes" if R1, R2 and R3 all hold, and R4 holds where estimable.

## Controls, per scorer
- Planted fake: judged by R1-R3 against the 20 random features. If it passes under EITHER scorer, the verdict is INVALID.
- Random features: each is judged by R1-R3 against the other 19. The false-positive count per scorer is reported.
  It is not a gate, but any false positive is flagged in the report.

## Agreement and final verdict (applied in this order)
1. More than 20 of F's pairs dropped: INCONCLUSIVE (coverage).
2. Planted fake passes under either scorer: INVALID.
3. Both scorers pass: PASS.
4. Both scorers fail: FAIL, listing the failed rules per scorer.
5. One passes and the other fails: INCONCLUSIVE (scorers disagree), listing which rules failed and where.
   It is not a PASS, and it does not override amendment 2.

## Reporting (not gates)
- Per-animal detection coverage for baseline, F7446 and all steered images.
- Face-area ratio (geometric mean) per intervention.
- Pearson correlation of CLIP vs SigLIP dScore over F's pairs.
- Exploratory: failures replaced by the full image (area = 1). This cannot change the verdict.
