Group people at the threshold the library actually supports
0.90 left a third of the reference library ungrouped: 1,213 of 1,813 faces in a
group, and the rest sitting alone in a screen that had nothing to offer for
them.
"Is 0.90 too tight" is not answerable from the number. It is a probability, and
which cosine it lands on depends on the calibration — so the first half of this
is a way to ask the question properly. `face_index --tune` runs the real
clusterer over the real embeddings at ten thresholds and prints what each one
produces. It writes nothing; comparing thresholds by applying them would have
each one pollute the next.
On the reference library:
P cosine groups grouped largest
0.95 0.449 311 62% 51
0.90 0.403 316 67% 51
0.85 0.374 318 70% 57
0.80 0.353 328 74% 69
0.75 0.335 327 77% 69
0.70 0.319 326 79% 81
0.50 0.267 303 85% 90
The count of *groups* is the signal, not the count of grouped faces. Loosening
from 0.95 makes it climb: real people are being assembled out of fragments. It
peaks at 0.80 and then falls — and a falling group count while the grouped faces
keep rising is the shape of over-merging, separate identities being welded
together. That is the FR-CULL-10 failure, and the one the user cannot undo by
hand.
So 0.80: the loosest setting still building people rather than melting them
together. A third more of the library gets grouped than at 0.90, and the largest
group grows by eighteen faces rather than by forty.
The table is one library, and the doc comment says so — `--tune` reruns it on
any other.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -73,7 +73,36 @@ use crate::neighbours::{self, Faces};
|
||||
///
|
||||
/// Stated as a probability and not a cosine, because FR-CULL-9 forbids
|
||||
/// thresholding a bare similarity anywhere in this subsystem.
|
||||
pub const DEFAULT_MERGE_PROBABILITY: f32 = 0.9;
|
||||
///
|
||||
/// # Why 0.80
|
||||
///
|
||||
/// It was 0.90, and 0.90 left most of a real library ungrouped. Measured over
|
||||
/// the 1,813-face reference library, with `dr-ui`'s `face_index --tune`:
|
||||
///
|
||||
/// | P | cosine | groups | faces grouped | largest group |
|
||||
/// |---|---|---|---|---|
|
||||
/// | 0.95 | 0.449 | 311 | 62% | 51 |
|
||||
/// | 0.90 | 0.403 | 316 | 67% | 51 |
|
||||
/// | 0.85 | 0.374 | 318 | 70% | 57 |
|
||||
/// | **0.80** | **0.353** | **328** | **74%** | **69** |
|
||||
/// | 0.75 | 0.335 | 327 | 77% | 69 |
|
||||
/// | 0.70 | 0.319 | 326 | 79% | 81 |
|
||||
/// | 0.50 | 0.267 | 303 | 85% | 90 |
|
||||
///
|
||||
/// The count of *groups* is the signal, not the count of grouped faces. Loosen
|
||||
/// from 0.95 and it climbs: real people are being assembled out of fragments.
|
||||
/// It peaks at 0.80 and then falls, and a falling group count while the grouped
|
||||
/// faces keep rising is the shape of over-merging — separate identities being
|
||||
/// welded, which is the failure FR-CULL-10 warns about and the one the user
|
||||
/// cannot easily undo by hand.
|
||||
///
|
||||
/// So: the loosest setting that is still building people rather than melting
|
||||
/// them together. A third more of the library gets grouped than at 0.90, and
|
||||
/// the largest group grows by eighteen faces rather than by forty.
|
||||
///
|
||||
/// This is a *default*, not a constant of nature — the numbers above are one
|
||||
/// library, and `--tune` reruns the table on any other.
|
||||
pub const DEFAULT_MERGE_PROBABILITY: f32 = 0.80;
|
||||
|
||||
/// A face presented to the clusterer.
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user