FaceNet人脸聚类指南:用Chinese Whispers算法给照片自动分组 📅 发布时间:2026/9/19 21:43:14 👁 浏览次数: FaceNet人脸聚类指南用Chinese Whispers算法给照片自动分组【免费下载链接】facenetFace recognition using Tensorflow项目地址: https://gitcode.com/gh_mirrors/fa/facenetFaceNet 人脸聚类可以把相册里的照片按“出现的人是谁”自动分组无需人工整理。FaceNet 是基于 TensorFlow 实现的人脸识别项目其contributed/目录提供了现成的人脸聚类脚本先用深度网络把每张照片里的人脸编码成 128 维向量再用 Chinese Whispers 图聚类算法自动把属于同一个人的照片归入同一个文件夹。本指南会带你理解原理、跑通脚本并学会调优关键参数。为什么需要人脸聚类想象一下你的相册几百上千张照片堆在一个目录里想找出“所有含小王的照片”只能一张张翻。人脸聚类Face Clustering正是解决这个问题的技术——不依赖任何标签自动判断哪些照片里是同一个人然后把它们归组到不同文件夹中。它的典型应用场景包括家庭相册归档按人物自动整理多年积累的照片快速检索先聚类再按人查找️数据预处理训练人脸识别模型前先按身份组织样本FaceNet 项目提供了两种聚类实现都放在 contributed/ 目录下脚本聚类算法特点contributed/clustering.pyChinese Whispers基于相似度图无需预设聚类数量contributed/cluster.pyDBSCAN基于距离矩阵可控制最小簇大小FaceNet 人脸聚类原理从照片到人脸向量聚类之前FaceNet 把每张照片转换成一个“人脸指纹”整个过程分三步第 1 步人脸检测与对齐。项目内置了 MTCNN 多任务卷积网络负责在照片中定位人脸框并做几何对齐实现代码在 src/align/detect_face.py。这一步保证不同照片里的人脸在相同位置、相同角度。第 2 步生成人脸嵌入Embedding。对齐后的人脸送入 Inception ResNet 网络输出一个 128 维的向量——同一个人在不同照片中的向量会很接近不同人则相差较远。模型的加载与预处理逻辑见 src/facenet.py。第 3 步向量聚类。有了向量之后问题就变成了“把相似的向量分到一组”这正是 Chinese Whispers 算法的强项。Chinese Whispers 算法是如何给照片分组的contributed/clustering.py 中的_chinese_whispers()函数完整实现了这套算法可以把它理解为三幕剧① 建图把人脸向量变成社交网络。每张含人脸照片是一个节点如果两张照片的人脸相似度超过阈值默认threshold0.55见 clustering.py就在两个节点之间连一条边边的“权重”就是相似度。② 迭代传播像传话游戏一样投票。算法重复多轮默认iterations20每轮随机打乱节点顺序每个节点统计邻居所属各个簇的边权总和然后“加入”权值总和最大的那个簇clustering.py。经过若干轮后图会自然收敛成若干彼此独立的社区——也就是“人”的分组。③ 输出把照片复制到簇文件夹。主函数 main() 会在输出目录下创建0、1、2……子目录按“簇越大越靠前”的顺序把照片复制进去文件夹名本身就是一个“人”的编号。运行方式参数解析见 parse_args()python clustering.py --model_dir 模型目录 --input 照片目录 --output 输出目录 --batch_size 30 提示Chinese Whispers 不需要你预先告诉它“照片里有几个人”分组数量由数据自己决定这也是它比 K-Means 更适合相册场景的原因。替代方案用 DBSCAN 聚类照片如果你更喜欢基于距离矩阵的方案contributed/cluster.py 提供了一个 DBSCAN 实现先对所有人脸嵌入两两计算欧氏距离打印出完整的距离矩阵再用sklearn.cluster.DBSCAN完成聚类。它的额外好处是可以设置最小簇大小过滤掉孤立的噪声簇python cluster.py 模型 照片目录 输出目录 \ --cluster_threshold 1.0 --min_cluster_size 3 --largest_cluster_only其中--cluster_threshold控制“多相似才算同一人”默认 1.0--largest_cluster_only只保存人数最多的那个簇——适合“从一堆照片里找出主角”的场景。关键参数调优让分组更准的 3 个技巧调相似度阈值Chinese Whispers 中默认0.55DBSCAN 中默认1.0。阈值太松会把两个人合并太紧会把同一个人拆开。建议先跑一遍看效果再按 ±0.05 微调。控制最小簇大小DBSCAN 的--min_cluster_size设为 2 或 3可以避免单人照片被误认为独立身份。批量生成嵌入照片数量大时可以先用 contributed/batch_represent.py 离线生成并缓存所有嵌入向量避免每次聚类都重复跑网络推理。常见问题解答FAQQ一张照片里有多个脸怎么办DBSCAN 版脚本会对检测到的每张脸单独裁剪、编码cluster.pyChinese Whispers 版则按整图嵌入处理更适合以“单人照”为主的相册。Q运行需要什么环境项目基于 TensorFlow 1.7 开发依赖清单见 requirements.txt核心依赖包括tensorflow、scipy、scikit-learn、opencv-python。Q聚类结果里混进了非人脸图片FaceNet 人脸聚类只处理检测到人脸的照片风景、截图等会被自动跳过输出文件夹中只包含成功编码的人脸照片。掌握以上步骤后你就能把混乱的相册变成“按人归档”的结构化资料库——这正是 FaceNet 论文提出人脸统一嵌入Unified Embedding后最实用的落地场景之一。【免费下载链接】facenetFace recognition using Tensorflow项目地址: https://gitcode.com/gh_mirrors/fa/facenet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考