README: document probe scheduling with measured A/B numbers

Adds the two probe flags to Key options plus a 'Probe scheduling'
section recording the 2026-10-28 CUDA verification run (same 43k-frame
special, GPU1: 6m11s/475 every-frame vs 2m34s/459 at stride25x4) and
the accepted miss trade-off.
This commit is contained in:
2026-10-28 16:33:03 -04:00
parent 6b5b27477a
commit 4d25975582
+21
View File
@@ -63,10 +63,31 @@ context leaks onto the wrong card:
| `--min-aspect` / `--max-aspect` | 0.45 / 1.6 | face box W/H ratio window — effect blobs rarely keep face proportions | | `--min-aspect` / `--max-aspect` | 0.45 / 1.6 | face box W/H ratio window — effect blobs rarely keep face proportions |
| `--edge-margin` | 0 | require faces this far inside frame edges; `0` accepts edge-touching faces (original hard-rejected them) | | `--edge-margin` | 0 | require faces this far inside frame edges; `0` accepts edge-touching faces (original hard-rejected them) |
| `--scene-threshold` | 30.0 | PySceneDetect ContentDetector threshold (same as original) | | `--scene-threshold` | 30.0 | PySceneDetect ContentDetector threshold (same as original) |
| `--probe-stride` | 1 | within a scene still needing a face, run inference every Nth frame instead of every frame (1 = original behavior). Decode stays frame-perfect; only inference is thinned |
| `--probe-max-per-scene` | 4 | with `--probe-stride > 1`, probes per scene before giving up and waiting for the next scene start |
| `--imgsz` | 1280 | inference size; model was trained at 1280, `640` is faster at some recall cost | | `--imgsz` | 1280 | inference size; model was trained at 1280, `640` is faster at some recall cost |
| `--all-files` | off | also scan OP/ED files. Off by default: music videos are full of stylized graphics (feather storms, transformation emblems) that false-positive as face-shaped; episodes carry the real character close-ups | | `--all-files` | off | also scan OP/ED files. Off by default: music videos are full of stylized graphics (feather storms, transformation emblems) that false-positive as face-shaped; episodes carry the real character close-ups |
| `--preview-dir` | off | also write annotated copies (green boxes) of every saved frame for eyeball QC | | `--preview-dir` | off | also write annotated copies (green boxes) of every saved frame for eyeball QC |
### Probe scheduling (thinned inference)
The original loop predicts on *every* frame until a scene yields a face —
free on a 3090 (~0.2 s/predict), hopeless on an iGPU (~5 s/img). With
`--probe-stride N` the decode stays frame-perfect but inference runs only
at scene starts and then every Nth frame, giving up after
`--probe-max-per-scene` probes and waiting for the next scene. Ported from
the `feat/igpu-ov` branch to main (Oct 28) so both platforms share one
schedule.
| mode (same 43k-frame special, 3090 GPU1) | wall time | stills |
|-------------------------------------------|-----------|--------|
| default (every frame) | 6m11s | 475 |
| `--probe-stride 25 --probe-max-per-scene 4` | 2m34s | 459 (96.6%) |
Use `25`/`4` for real runs; stride 1 keeps byte-identical behavior, so
older extracted corpora are unaffected. Accepted trade-off: a face visible
for less than ~stride frames between probes can slip through.
## Notes ## Notes
- Runs every frame of every scene until a face qualifies, then waits - Runs every frame of every scene until a face qualifies, then waits