人脸识别
概述
Immich 可以识别您照片和视频中的人脸,并将其分组到具体人物中。您可以为这些人物分配名字并进行搜索。
人物列表显示在探索页面中。

点击某个人时,将显示包含他或她脸部的所有资源列表。

资源详细视图中还会显示资源中识别到的脸。

操作
您可以执行以下附加操作:
- 更改人物的特色照片
- 设置人物的出生日期
- 合并两个或多个检测到的人脸为一个人物
- 隐藏某人的脸部,使其在探索页和详细视图中不可见
- 将未识别的人脸分配给某个人物
您可以在访问某人详细视图时通过 应用程序栏找到这些功能。

人脸检测如何工作
人脸检测将生成的预览图像发送至机器学习服务进行处理。服务会检查是否已经下载相关模型,如果未下载则会进行下载。图像会被解码、预处理并传递给人脸检测模型(如果配置了硬件加速会优先使用)。模型输出的边界框和得分用于再次裁剪和预处理图像,以便传递给人脸识别模型(同样加速处理)。人脸识别模型生成的嵌入数据及检测模型输出的边界框和得分将返回服务器并被添加至数据库。这些嵌入数据会被索引,以便在人脸识别分组时快速搜索。
人脸识别如何工作
我们使用的面部识别算法基于 DBSCAN,这是一种流行的聚类算法。本质上,它将每个检测到的人脸视为图中的一个点,并试图将距离较近的点分组。
一个重要的概念是某些点是否为 核心点。核心点拥有一定数量的在特定距离内的周围点。非核心点只能通过连接核心点分配到某个集群;即使非核心点位于集群中,也不能用作扩展集群。在 Immich 中,最少识别脸数 设置可控制被视为核心点的阈值。
对于每张脸,算法会检查其周围是否有其他脸在特定距离内。在这个距离内的脸被认为是相似的,因此会检查这些脸是否与某个已知人物相关联。
如果存在一个已知人物,则将相似度最高的脸关联的人物分配给正在处理的人脸。
如果没有已知人物,则须从 DBSCAN 算法中决定:这张脸是否是 核心点。如果存在一定数量的相似脸(默认为3,包括正在考虑的这张脸),则这张脸是核心点。系统会为这张脸创建一个新人物,并将这张脸分配给该人物。其他脸在处理时,如果与这张脸相似,会看到其已关联到某个人物并分配到该人物。
然而,如果没有足够的相似脸,就不会创建新人物。相反,这张脸将等待所有其他脸处理完毕,查看是否有任何与之相匹配但未关联到人物的脸现在已经有了关联。如果有,则将这张脸分配到该人物。如果没有,这张脸将被视为离群点,例如照片背景中的陌生人。
该算法与 DBSCAN 有一些细微差别:
- DBSCAN 没有递增聚类的概念:它会一次性聚类所有点。而人脸识别算法需要随着更多资源的添加而不断发展,而无需每次重 新聚类。
- 上述算法描述的是在一组排队处理的资源中运行。一旦这些脸处理完毕,新一轮检测的脸出现时,该行为与传统 DBSCAN 不同,因为它会保留之前生成的聚类(人物)。
- 为了优化效果,人脸识别通常会等待脸部检测和缩略图生成完成后再开始:队列中的脸越多,结果就越好。
- 如果之后在人脸识别中对所有资源重新运行,则行为会类似于 DBSCAN。
- 上述算法描述的是在一组排队处理的资源中运行。一旦这些脸处理完毕,新一轮检测的脸出现时,该行为与传统 DBSCAN 不同,因为它会保留之前生成的聚类(人物)。
- DBSCAN 是为基于范围的搜索设计的(即点之间的距离),而高维向量索引一般优化为获取最近的 K 个结果。出于性能考虑,识别算法不会尝试检索距离内的 所有 相似脸,而是为每张脸搜索少量匹配点。最终结果应该非常相似甚至可能是相同,但性能表现可能会有所不同。
- 因此,部分识别过程是通过夜间作业处理的,以确保未分配的潜在匹配脸能够被识别。
如果您没有一次性导入所有资源,或者服务器处理作业的速度快过您的上传速度,那么聚类可能不是最佳的。如果您未投入太多精力到当前结果中,重新在人脸识别中对所有资源运行可能会提供最佳起点。如果为时已晚,您也可以手动分配一部分未分配的脸并将 缺失的脸 加入人脸识别队列以帮助系统学习和自动分配更多人脸。
配置
导航到管理 > 设置 > 机器学习设置 > 人脸识别将显示可用的选项。
更改这里的参数时最好只进行微调,而不要将设置改为非常不同的参数,除非您准备测试各种选项。如果需要设置严格的参数,可以通过放宽其他设置来进行补偿,反之亦然。
您可以通过这份 指南 学习如何优化识别结果。
人脸识别模型
有几个不同的模型可供选择,默认模型通常被认为是最优的。在资源受限的系统上,若默认模型太过耗资源,可以选择较小的模型。
最低检测分数
此设置决定是否将人脸检测模型的结果过滤为误报。虽然可能想将此设置调低以检测更多人脸,但这样可能导致难以处理的误报并对人脸识别产生负面影响。强烈建议此设置不低于 0.5。将其设置为像 0.9 这样非常高的值也不推荐:默认本身已经偏向精准,因此如此高的阈值会导致许多人脸无法检测到。
更改此设置后,它仅适用于新的脸部检测作业。要对所有资源应用新的设置,您需要重新运行脸部检测。
最大识别距离
人脸识别工作方式中描述的距离阈值。默认值对大多数人效果良好,但如果图书馆中有双胞胎或非常相似的个体,可能需要将其调低。过低的阈值会导致在脸部识别后需要手动合并重复人物,而过高的阈值可能导致结果难以挽回。强烈建议不要低于 0.3 或高于 0.7。
最少识别脸数
人脸识别工作方式中描述的核心点阈值。此设置有几个影响。首先,它会立即生效,即脸部少于该数量的所属人物将从视图中隐藏。其次,它使聚类更稳健,因为通过要求一定的密集度防止松散相关的脸相互连接。
如果您增加了识别距离或降低了最低检测分数,那么增加此设置是一个好主意。将其设置为 1 则有效禁用了核心点的概念,但如果您倾向于更多手动操作,这也是一种选择。