你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

提高准确性的特征、限制和最佳做法

重要

仅为方便起见,提供非英语翻译。 请参阅 EN-US 版本以获取最终版本的此文档。

Azure 视觉在 Foundry Tools 中的人脸 API(“人脸 API”)是创建面部 AI 系统的基础模块。该系统需要添加其他构建模块,因此无法计划部署的实际系统提供普遍适用的准确性估计。 公司可能会根据公共基准竞争衡量的准确度共享准确性,但这些准确性取决于每个基准方法的详细信息,因此与部署的系统的准确性不同。

归根结底,系统准确性取决于多种因素,包括相机技术及其配置方式、环境条件、系统的用例、人们如何识别与相机交互,以及人们如何解释系统的输出。 以下部分旨在帮助你了解在面部识别和活体检测系统的背景下描述准确性的关键概念。 有了这种理解,我们就会介绍系统设计选择、它们如何影响准确性和参考指标。

定义准确性

面部识别系统的准确性基于以下两种情况的组合:系统与在系统中注册的人员正确匹配的频率以及系统正确找到与未注册的人员不匹配的频率。 这两个条件称为“真”条件,结合两个“假”条件来描述面部识别系统的所有可能输出结果。

条件 定义
真正或正确匹配
真正或正确匹配被接受
探测图像中的人员已注册,并且他们已正确匹配。
真负或正确拒绝
真负或正确拒绝
探测图像中的人员未注册,系统找不到匹配项。
误报或错误匹配
误报或错误匹配
探测图像中的人员未 注册 ,但与 已注册 的人员匹配,或者探测图像中的人员已注册,但与错误人员匹配。
假负或错误拒绝
假负或错误拒绝
探测图像中的人已注册,但系统未找到匹配。

误报或误报的后果因面部识别系统的目的而异。 下面的示例演示了此变体,以及你在设计系统时所做的选择如何影响受其约束的人员的体验。

面部识别模型有多准确?

衡量面部识别技术的准确性是一个非常困难的问题和方法因行业而异。 若要了解我们对公平性的承诺并提高 AI 系统的准确性,请查看 负责任的 AI 资源

可以使用 公平度评估示例笔记本 来评估对自己的数据进行人脸验证的公平性。 它是使用 Fairlearn Python 包的 Jupyter 笔记本。

面部活体检测模型有多准确?

Microsoft 的人脸活体检测解决方案在 iBeta 级别 1 和级别 2 呈现攻击检测 (PAD) 测试中实现了 0% 渗透率,该测试由 NIST/NVLAP 认可的实验室进行,符合 ISO/IEC 30107-3 PAD 国际标准

权衡

识别置信度阈值优化

本部分的目的是帮助你了解系统配置如何影响系统准确性,以及误报与漏报之间的权衡。

识别可信度阈值会影响系统的准确性,以及误报与漏报之间的权衡。 它与置信区间无关。

识别置信度分数

识别置信度分数描述探测模板和注册模板之间的相似性。 识别置信度分数范围为 0 到 1。 高识别置信度分数表示,这两个图像更有可能是同一人。

识别置信度阈值

识别置信度阈值是介于 0 和 1 之间的可配置值,用于确定被视为正匹配所需的识别置信度分数。

在使用验证 API 进行身份验证时,如果探针模板与主要标识符关联的注册模板之间的识别置信度分数达到或超过识别置信度阈值,系统将确认探测图像与提交的身份相符。

使用标识 API 函数时,一个人可以查看由识别置信度分数排名的候选人列表,以便做出最终确定。 人脸识别用户可以选择返回多少个达到识别置信度阈值的候选模板,这些模板将按照与探测模板的相似度排名顺序排列。 这些匹配项称为“候选列表”。 面部识别只会返回识别可信度分数至少达到识别可信度阈值的候选项。 如果没有模板具有达到识别置信度阈值的识别置信度分数,则不会返回匹配项。

为什么选择识别置信度阈值小于 1?

设置识别可信度阈值可以平衡误报和漏报之间的误差,从而最有效地应对特定情况。 系统的整体准确性不太可能为 100%,当识别置信度阈值设置为 1 时,最严格的值,发生的所有错误都是误报:系统将返回“不匹配”,因为提交的探测模板不会完全匹配任何已注册的模板。

如果识别置信度阈值设置为 0,则任何探测模板都将匹配任何注册模板。 由于识别置信度分数受探测质量和注册图像的影响,因此识别置信度分数较低表示质量不佳的图像,而不是图像中人员之间的相似性较低。 在进行识别时,如果识别置信度阈值设置得太高,系统可能无法返回足够的候选项来查找真正的匹配项。

另一方面,低识别置信度阈值可能会返回低质量匹配项,并可以减少评审匹配项的人类的效率和准确性。

默认识别置信度阈值为 0.5,这是适用于许多身份验证应用程序的平衡,但你可以更改识别置信度阈值以适应每个应用程序。

应如何选择识别置信度阈值?

系统的最佳识别置信度阈值基于:

  • 系统的目的,
  • 误报和漏报对需要接受面部识别的人的影响,
  • 最终的判断是否由人类做出,以及
  • 整个系统(包括体验设计)如何支持解决错误。

在选择识别置信阈值之前,Microsoft建议你作为面部识别系统所有者,在网站上收集准确标记的评估数据,以确定识别置信度阈值如何影响目标的实现,并影响受制于和解释系统的输出的人员。

可以将准确标记的数据与系统的输出进行比较,以建立总体准确性和错误率,以及误报和误报之间的错误分布。 此准确标记的评估数据应包括对具有不同特征的人员进行充分采样,这些人员将接受识别,以便理解性能差异,并采取纠正措施。 根据此评估的结果,你可以迭代调整识别可信度阈值,直到误报和漏报之间的权衡与你的目标相符。

最大限度减少误报的场景示例

面部识别可以帮助用户登录受控制的应用程序,例如银行应用。 在这种情况下,误报会降低客户安全性,因为它会导致匹配不正确,而误报可能会阻止客户访问其帐户。 由于系统的目的是安全性,因此必须最小化误报,因此,大多数错误都是误报(帐户访问失败)。 应用程序开发人员应设置高识别置信度阈值,以最大程度地减少误报。 由于较高的置信度阈值会产生更多的误判,系统所有者可以考虑提供回退机制,例如通过以访问代码将通知推送到客户的手机。 在这种情况下,客户体验可能效率较低,但不会阻止帐户访问,并且安全性处于优先顺序。

优化真正例的场景示例

具有深入参与人工评审的应用程序可能需要提供更多匹配项,因为人类可以手动消除误报。 例如,请考虑一个照片库应用程序,该应用程序显示用户可能的照片。 在这种情况下,应用构建器会选择较低的识别置信度阈值,以留给用户(在本例中也是人工审阅者)一定的余地来消除误报(显示的照片不是用户本人)。

下面是基于 recognition_03 识别模型数据集给定可信度分数的预期理论误报率列表;实际情况可能会有变化:

识别置信度阈值 误报率
0.1 1 in 10
0.2 1 in 100
0.3 1 以 1,000 为单位
0.4 1/10,000
0.5 1/100,000
0.6 百万分之一
0.7 一百万分之一
0.8 1/100,000,000
0.9 十亿分之一

改进准确性的最佳做法

面部识别技术正在改进,许多系统(包括人脸 API)即使在条件不理想的情况下也能很好地运行。 但是,这些是可以采取的具体行动,以确保面部识别系统的最佳效果。

规划评估阶段

如在选择识别置信度阈值时讨论的那样,在大规模部署或推出任何面部识别系统之前,Microsoft强烈建议系统所有者在系统使用上下文中执行评估阶段,并与将与系统交互的人员一起执行评估阶段。

应与分析和研究团队合作,收集地面真相评估数据,以便:

  • 建立基线准确性、假阳性率和假阴性率。
  • 选择适当的识别置信度阈值以满足目标。
  • 确定错误分布是否偏向于特定的人员组。

这很可能是一个迭代过程,通过调整传感器位置、照明和其他影响准确性的因素,如本部分所述。 此评估应反映你的部署环境和该环境中的任何变化,例如照明或传感器放置,以及代表与系统交互的人员多样性的地面真相评估数据。

除了遥测数据之外,你可能还希望分析基于系统输出做出判断的人的反馈、受识别对象的满意度数据,以及现有客户语音渠道的反馈,以帮助优化系统并确保成功参与。

人脸大小

确保登记或测试图像中的人脸足够大,对于高质量匹配至关重要。

当人脸的大小小于 36x36 像素时可检测到,但为了获得最佳性能,Microsoft建议最小大小为 200x200 像素,眼睛之间至少为 100 像素。 请注意,更高的图像分辨率会增加延迟,但 有一些方法来优化延迟。 允许的最大大小为 4096 x 4096。

一张人们行走的小照片。

人脸方向

从相机中移开的面部可能无法被检测到。 人脸应以朝向相机为基准,俯仰角(头部向前或向后倾斜)和偏航角(头部向左或向右旋转)应在 35 度以内;横滚角(头部向左倾斜或向右倾斜)无关紧要。

显示一个人的脸部照片,并标示出脸部矩形。 头部姿势轴的示意图。

控制映像捕获环境

照明和相机校准

注意图像中人物面部细节的清晰程度。

  • 在适当的照明条件下捕获图像。 照明太亮,太暗吗? 人脸是否背光? 一侧的光太强,而另一侧的光不足吗? 如果可能,请将传感器放置在具有极端照明的区域之外。
  • 照明是否足以准确捕获不同肤色的人脸的细节?

一个人夜晚在户外的照片。

人脸活体检测

面部活体检测会利用设备的屏幕来改变人脸的光照,以检测是否为真实的人。 过度明亮的照明条件可能会掩盖这种效果,并导致面部活体检测失败。 如果检测到这种情况,应指示该人员移动到不太亮的环境。

背景

  • 努力选择浅色且不反光的背景。 避免使用包含人脸的背景,例如背景里有人像照片,或者除了要识别的人之外,还有其他人在画面中较为显眼。

传感器放置和维护

  • 将传感器定位在人脸级别,以最好地捕获满足质量规范的图像。
  • 确保定期检查传感器是否有灰尘、污点和其他障碍物。

规划主体外观和行为的变化

面部遮挡

当整个人脸可见时,面部识别效果最佳。 由于各种原因,人脸可能部分或完全遮挡,包括:

  • 宗教: 头戴覆盖或部分遮挡面孔。
  • 个人防护设备(PPE):PPE,如覆盖或部分遮挡人脸的面罩
  • 天气:衣服像围巾包裹在脸上。
  • 受伤:眼罩或大面积绷带。
  • 眼镜:非常不透明眼镜和针孔眼镜(其他眼镜和镜头应该很好)。
  • 个人风格:覆盖眉毛的刘海、棒球帽、大面部纹身等。

对遮挡的人脸进行注册可能会导致错误。 尽管面部识别可以验证具有遮挡的人脸,但除了传感器放置之外,我们还建议解决遮挡挑战的以下缓解措施:

  • 回退方法(如非生物识别替代方法)至关重要。 对于某些人,回退可能是他们一贯使用的选项。
  • 请注意评估和部署过程中人员面临的挑战,以确定最适合环境的修正措施。
  • 在 Verify、Identify、Group 和 FindSimilar API 中使用 Recogniton_04模型 ,该 API 可以识别戴面罩的人(手术面具、N95 面具、布面具)。

一个被纸屑包围的人的照片。

外观的重大变化

外貌发生巨大变化也可能导致错误,例如剃掉浓密的胡子,或者成年人的注册图像和比对图像相隔多年,甚至儿童在间隔不久的时间内拍摄的两张照片。

  • 除了支持回退方法外,设计用户体验以支持在识别失败后立即重新注册,可以提高用户满意度。
  • 面部识别系统对于儿童来说通常不太准确。 Microsoft建议使用人脸识别年龄超过18岁的人。 面部识别对于13岁和更年轻的人来说尤其具有挑战性。

一个人驾驶执照的照片旁边还有同一个人的另一张照片。

运动、模糊和极端表达式

由于快速移动或极端表情(例如闭着眼睛大打哈欠)导致的面部模糊,增加了识别的难度。 若要解决这些挑战,请执行以下步骤:

  • 设计用户体验,以便人们了解如何提供高质量的图像。
  • 创建一个环境,人们自然地面对相机并放慢速度。 否则,移动可能会导致难以识别的模糊图像。
  • 为人们在识别过程中的行为提供明确的说明(眼睛睁开、嘴闭、站立等)。

人们走路的照片,动作模糊。

生物孪生体

双胞胎、家庭成员和看起来非常相似的其他人将很难让面部识别系统相互区分。 这是支持回退方法的另一个原因。

使用计算机拍摄两张相同孪生体的照片。

设计系统以支持人工判断

在大多数情况下,Microsoft建议使用人脸 AI 的面部识别功能来支持用户做出更准确、更高效的判断,而不是完全自动化流程。 人为评审在以下方面意义重大:

  • 检测并解决错误识别的情况或其他故障。
  • 为认为结果不正确的人提供支持。
  • 根据不断变化的条件(如照明或传感器清洁)确定和解决准确性变化。

例如,当使用人脸识别系统进入建筑物时,经过培训的安全人员可以帮助解决面部识别系统无法匹配认为自己已注册的人的情况,决定该人是否应进入大楼。 在这种情况下,人脸识别技术可以帮助安全管理人员更高效地工作,只有在系统无法识别该人的情况下才需要判断是否允许其进入。

为支持将使用系统输出的人员而创建的用户体验应与这些人一起进行设计和评估,以了解他们可以如何解释输出、他们可能需要哪些附加信息、如何获取问题的答案,最终系统如何支持他们做出更准确的判断能力。

使用多种因素进行身份验证

创建身份验证系统时,使用人脸 API 和其他一个或多个识别因素,例如确认即将登上飞机或确认银行交易的乘客。 如上所述,面部验证利用面部识别作为识别某人而不是单个或主要因素的第二个因素。 面部识别不需要其他因素;但是,面部识别在技术上更为困难,因为探测模板与所有注册的模板进行比较,而不只是与探测模板关联的主要标识符的模板。 使用面部识别时,仍可以使用其他信号来支持身份验证,例如缩小注册模板集,以便通过将搜索限制为具有特定航班票的人员进行比较。 虽然无法为所有方案选择面部验证,但Microsoft建议使用面部验证,包括安全访问建筑物和其他关键业务和安全功能。

使用最新模型

在应用程序中使用 最新的检测和识别模型 。 默认情况下,最早的检测和识别模型用于向后兼容性,因此需要在 API 请求中指定最新的模型。

使用提供的质量属性提供用户反馈,并确定图像是否足以识别面部识别

根据我们的调查,许多问题都是由于用于面部识别的上述限制和权衡所导致的图像质量低造成的。 在这种情况下,即使是人类也会很难做出正确的决定。 为了支持捕获高质量的图像,面部检测 API 提供了一个图像质量属性,该属性标记了与照明、模糊、遮挡或头部角度相关的问题,这些问题可能会限制图像的可用性进行面部识别。 请参阅人脸 快速入门 ,了解如何使用质量筛选器将用户添加到人脸中,以及如何使用人脸客户端 SDK 调用人脸检测,并访问 API 控制台 来测试终结点。

提升面部识别以及面部活体检测滥用监控的最佳实践

面部识别技术在用于访问授权时,可能成为对手试图绕过该技术或活体检测技术的目标。 通常,这些绕过尝试涉及在系统前使用各种打印的照片等材料进行强行破解,这被视为系统滥用。 若要缓解此类暴力攻击,应实施有关重试计数和速率限制的特定措施。

创建具有保守调用和时间限制的会话

会话作为第一道防线,可确保活体检测过程安全且一致,从而阻止暴力破解入侵。 为每个会话生成会话授权令牌,可用于预设的识别配额或活体检测尝试。 如果应用程序用户未能在尝试限制内成功,则需要新的令牌。 这允许重新评估与进一步重试相关的风险。 通过为每个会话设置保守的允许调用数,可以在颁发新令牌之前更频繁地重新评估此风险。

创建会话时使用适当的关联标识符

设备关联 ID 会指导 Face API 中的自动滥用监控启发式方法,帮助你阻止针对实现面部活体检测系统的恶意流量。 当特定关联标识符达到滥用尝试的阈值时,无法使用该标识符创建更多会话。

生成随机 GUID 字符串,并将其与系统中同一单个主标识符中的顺序尝试相关联。 要映射的标识符或标识符的选择取决于应用程序需求以及用于评估访问风险的其他参数。 不要使用应用程序的主要标识符,因为可能需要重新生成新的随机 GUID 以在必要时映射到标识符。

设计系统以支持人工判断

当标记设备关联 ID 且无法再使用标识符创建会话时,请实施有意义的人工评审过程,以确保失败不是由于滥用流量或暴力强制尝试造成的。 如果在审核后决定允许来自同一实体的更多尝试,因为以前的失败被视为合法,请通过生成映射到单个标识符的新随机 GUID 来重置关联。

后续步骤