[mob][photos] Assert that embeddings are always normalized

This commit is contained in:
laurenspriem 2024-05-06 17:16:58 +05:30
parent b4736fb1d6
commit bd495c3860
2 changed files with 17 additions and 2 deletions

View file

@ -482,6 +482,14 @@ class FaceClusteringService {
);
}
// Assert that the embeddings are normalized
for (final faceInfo in faceInfos) {
if (faceInfo.vEmbedding != null) {
final norm = faceInfo.vEmbedding!.norm();
assert((norm - 1.0).abs() < 1e-5);
}
}
// Sort the faceInfos based on fileCreationTime, in ascending order, so oldest faces are first
if (fileIDToCreationTime != null) {
faceInfos.sort((a, b) {
@ -670,8 +678,10 @@ class FaceClusteringService {
} else {
final newMeanVector = newEmbeddings.reduce((a, b) => a + b);
final newMeanVectorNormalized = newMeanVector / newMeanVector.norm();
newClusterSummaries[clusterId] =
(EVector(values: newMeanVectorNormalized.toList()).writeToBuffer(), newCount);
newClusterSummaries[clusterId] = (
EVector(values: newMeanVectorNormalized.toList()).writeToBuffer(),
newCount
);
}
}
log(

View file

@ -808,6 +808,11 @@ class ClusterFeedbackService {
final alreadyUpdatedClustersCnt = serializationEmbeddings.$4;
final smallerClustersCnt = serializationEmbeddings.$5;
// Assert that all existing clusterAvg are normalized
for (final avg in clusterAvg.values) {
assert((avg.norm() - 1.0).abs() < 1e-5);
}
w?.log(
'serialization of embeddings',
);