留着胡子、戴墨镜和侧面:计算机视觉的困难情况

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

我们未来计算机视觉系统的技术和模型是在我们公司的不同项目(邮件、云、搜索)中逐步创建和改进的。 它们像优质奶酪或白兰地一样成熟。 有一天,我们意识到我们的神经网络在识别方面表现出了出色的效果,因此我们决定将它们组合成一个 B2B 产品 - Vision - 我们现在自己使用该产品并提供给您使用。

今天,我们在 Mail.Ru Cloud Solutions 平台上的计算机视觉技术正在成功运行并解决非常复杂的实际问题。 它基于许多神经网络,这些神经网络在我们的数据集上进行训练并专门解决应用问题。 所有服务都在我们的服务器设施上运行。 您可以将公共 Vision API 集成到您的应用程序中,通过它可以使用该服务的所有功能。 API 速度很快 - 得益于服务器 GPU,我们网络内的平均响应时间为 100 毫秒。

去找猫吧,里面有详细的故事和很多Vision的作品例子。

我们自己使用上述面部识别技术的服务示例是 展会活动。 它的组件之一是 Vision 照相架,我们在各种会议上安装它。 如果您走近这样的照相亭,用内置相机拍照并输入您的电子邮件,系统会立即在一系列照片中找到会议工作人员摄影师拍摄到的您的照片,并且如果需要,将通过电子邮件将找到的照片发送给您。 我们不是在谈论舞台肖像照——即使在一群游客的背景下,视觉也能认出你。 当然,被识别的并不是照相亭本身,这些只是漂亮展位上的平板电脑,它们只是用内置摄像头为客人拍照并将信息传输到服务器,所有识别魔法都在服务器上发生。 我们不止一次地看到,即使对于图像识别专家来说,该技术的有效性也是令人惊讶的。 下面我们就讲一些例子。

1.我们的人脸识别模型

1.1. 神经网络和处理速度

为了进行识别,我们使用了ResNet 101神经网络模型的修改版,最后的平均池化被全连接层取代,类似于ArcFace中的做法。 然而,矢量表示的大小是 128,而不是 512。我们的训练集包含 10 人的约 273 万张照片。

得益于精心挑选的服务器配置架构和 GPU 计算,该模型运行速度非常快。 从我们内部网络上的 API 接收响应需要 100 毫秒 - 这包括面部检测(检测照片中的面部)、识别并返回 API 响应中的 PersonID。 对于大量传入数据(照片和视频),将数据传输到服务并接收响应将需要更多时间。

1.2. 评估模型的有效性

但确定神经网络的效率是一项非常模糊的任务。 他们的工作质量取决于模型所训练的数据集以及模型是否针对特定数据进行了优化。

我们开始使用流行的 LFW 验证测试来评估我们模型的准确性,但它太小而且太简单。 达到99,8%的准确率后就不再有用了。 有一个很好的评估识别模型的竞赛 - Megaface,我们逐渐达到了 82% 的第一名。Megaface 测试包含一百万张照片 - 干扰因素 - 该模型应该能够很好地区分 Facescrub 中的数千张名人照片来自干扰物的数据集。 然而,在清除了 Megaface 测试中的错误后,我们发现通过清除后的版本,我们达到了 1% 的 98 级准确率(名人的照片通常非常具体)。 因此,他们创建了一个单独的识别测试,类似于 Megaface,但使用的是“普通”人的照片。 然后我们提高了数据集的识别准确性并取得了遥遥领先。 此外,我们使用由数千张照片组成的聚类质量测试; 它模拟用户云端中的面部标记。 在这种情况下,集群是由相似个体组成的组,每个可识别的人对应一个组。 我们检查了真实小组的工作质量(正确)。

当然,任何模型都会出现识别错误。 但这种情况通常可以通过针对特定条件微调阈值来解决(对于所有会议,我们使用相同的阈值,但是,例如,对于访问控制系统,我们必须大大增加阈值,以减少误报)。 我们的 Vision 照相亭正确识别了绝大多数与会者。 有时有人会看着裁剪后的预览并说:“你的系统犯了一个错误,不是我干的。” 然后我们把照片完整地打开,原来照片里确实有这个访客,只是我们拍的不是他,而是别人,这个人只是恰好在模糊区域的背景里。 此外,即使面部的一部分不可见,或者人站在侧面,甚至半转身,神经网络通常也能正确识别。 即使面部处于光学畸变区域(例如使用广角镜头拍摄时),该系统也可以识别人。

1.3. 困难情况下的测试示例

以下是我们的神经网络如何工作的示例。 照片被提交到输入,她必须使用 PersonID(一个人的唯一标识符)对其进行标记。 如果两张或多张图像具有相同的 ID,那么根据模型,这些照片描绘的是同一个人。

让我们立即注意到,在测试时,我们可以访问各种参数和模型阈值,我们可以配置它们来实现特定结果。 公共 API 经过优化,可在常见情况下实现最大准确度。

我们先从最简单的开始,前置人脸识别。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

嗯,那太容易了。 让我们把任务复杂化,加上胡子和几年。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

有人会说这也不是太困难,因为在这两种情况下,整个面部都是可见的,并且算法可以使用有关面部的大量信息。 好吧,让我们来看看汤姆·哈迪的个人资料。 这个问题要复杂得多,我们花了很多精力才成功解决它,同时保持较低的错误率:我们选择了训练集,思考了神经网络的架构,磨练了损失函数并改进了预处理照片。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

让我们给他戴上头饰:

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

顺便说一句,这是一个特别困难情况的例子,因为脸部被严重遮挡,并且在底部照片中还有一个很深的阴影隐藏了眼睛。 在现实生活中,人们经常借助墨镜来改变自己的外表。 让我们对汤姆做同样的事情。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

好吧,让我们尝试加入不同年龄段的照片,这次我们将尝试不同的演员。 让我们举一个更复杂的例子,其中与年龄相关的变化尤其明显。 这种情况并非牵强;当您需要将护照上的照片与持证人的脸部进行比较时,这种情况经常发生。 毕竟,第一张照片是在主人 20 岁的时候添加到护照上的,而到了 45 岁,一个人就会发生巨大的变化:

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

你认为不可能任务的主要专家随着年龄的增长没有太大变化吗? 我想即使有几个人也会把上面和下面的照片组合起来,这个男孩这些年来变化太大了。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

神经网络更频繁地遇到外观变化。 例如,有时女性可以借助化妆品极大地改变自己的形象:

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

现在让我们把任务变得更加复杂:假设脸部的不同部分被不同的照片覆盖。 在这种情况下,算法无法比较整个样本。 然而,Vision 很好地处理了这种情况。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

顺便说一句,一张照片中可以有很多面孔;例如,一张大厅的一般照片可以容纳 100 多人。 对于神经网络来说,这是一个困难的情况,因为许多面孔可能会受到不同的照明,有些面孔会失焦。 但是,如果拍摄的照片具有足够的分辨率和质量(覆盖面部的每方格至少有 75 个像素),Vision 将能够检测和识别它。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

报告文学照片和监控摄像机图像的独特之处在于,人们常常因为失焦或当时正在移动而变得模糊:

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

此外,图像之间的照明强度可能会有很大差异。 这也常常成为绊脚石;许多算法很难正确处理太暗和太亮的图像,更不用说精确匹配它们了。 让我提醒您,要实现此结果,您需要以某种方式配置阈值;此功能尚未公开。 我们为所有客户端使用相同的神经网络;它具有适合大多数实际任务的阈值。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

我们最近推出了该模型的新版本,可以高精度识别亚洲面孔。 这曾经是一个大问题,甚至被称为“机器学习”(或“神经网络”)种族主义。 欧洲和美国的神经网络对白种人脸的识别效果很好,但对于蒙古人和黑人的脸,情况就糟糕得多。 也许,在中国,情况恰恰相反。 这都是关于反映特定国家的主要人群类型的训练数据集。 然而,情况正在发生变化;今天这个问题不再那么严重。 不同种族的人视力都没有问题。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

面部识别只是我们技术的众多应用之一;视觉可以通过训练来识别任何东西。 例如,车牌,包括算法难以处理的条件:锐角、肮脏且难以读取的车牌。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

2. 实际用例

2.1. 物理门禁:两个人使用同一张通行证时

在 Vision 的帮助下,您可以实施记录员工到达和离开的系统。 基于电子通行证的传统系统有明显的缺点,例如,一张证卡可以让两个人通行。 如果门禁系统(ACS)辅以Vision,它将如实记录谁来/离开以及时间。

2.2. 时间跟踪

此 Vision 用例与前一个用例密切相关。 如果您使用我们的面部识别服务来补充门禁系统,它将不仅能够检测门禁违规行为,还能够登记员工在建筑物或设施中的实际存在。 换句话说,Vision 将帮助您诚实地考虑谁上班、什么时间下班、谁干脆旷工,即使他的同事在上级面前替他顶薪。

2.3. 视频分析:人员跟踪和安全

通过使用 Vision 跟踪人员,您可以准确评估购物区、火车站、通道、街道和许多其他公共场所的真实流量。 我们的跟踪对于控制访问(例如仓库或其他重要办公场所)也有很大帮助。 当然,跟踪人和面部有助于解决安全问题。 发现有人从你的商店偷东西? 将 Vision 返回的他的 PersonID 添加到您的视频分析软件的黑名单中,下次如果再次出现该类型,系统将立即向保安发出警报。

2.4. 交易中

零售和各种服务企业对队列识别感兴趣。 借助Vision,您可以识别这不是随机的人群,而是队列,并确定其长度。 然后系统会通知负责人排队情况,以便他们了解情况:要么是访客大量涌入,需要呼叫更多工作人员,要么是有人偷懒。

另一项有趣的任务是将大厅里的公司员工与访客分开。 通常,系统经过训练可以区分穿着特定衣服(着装规范)或具有某些显着特征(品牌围巾、胸前徽章等)的物体。 这有助于更准确地评估出勤率(这样员工就不会仅仅因为大厅里的人数而“夸大”他们的统计数据)。

使用面部识别,您还可以评估您的受众:访客的忠诚度如何,即有多少人返回您的场所以及频率。 计算每月有多少独立访客来找您。 为了优化吸引和保留成本,您还可以根据一周中的某一天甚至一天中的不同时间找出流量的变化。

特许经营商和连锁公司可以根据各种零售店的品牌质量照片进行评估:是否存在徽标、标牌、海报、横幅等。

2.5. 乘坐交通工具

使用视频分析确保安全的另一个例子是识别机场或火车站大厅中的废弃物品。 视觉可以被训练来识别数百种物体:家具、袋子、手提箱、雨伞、各种类型的衣服、瓶子等等。 如果您的视频分析系统检测到无主对象并使用 Vision 识别它,它会向安全服务发送信号。 类似的任务与自动检测公共场所的异常情况有关:有人感觉不舒服,或者有人在错误的地方吸烟,或者有人跌倒在铁轨上,等等 - 所有这些模式都可以被视频分析系统识别通过视觉 API。

2.6。 文件流程

我们目前正在开发的 Vision 的另一个有趣的未来应用是文档识别及其自动解析到数据库中。 您可以扫描文档并通过安全通道自动发送它们,而不是手动输入(或更糟糕的是输入)无休止的系列、数字、发行日期、帐号、银行详细信息、出生日期和地点以及许多其他正式数据。到云端的 API,系统将动态识别这些文档、解析它们并返回包含所需格式的数据的响应,以便自动输入数据库。 如今,Vision 已经知道如何对文档(包括 PDF)进行分类 - 区分护照、SNILS、TIN、出生证明、结婚证书等。

当然,神经网络无法立即处理所有这些情况。 在每种情况下,都会为特定客户构建新模型,考虑许多因素、细微差别和要求,选择数据集,并进行培训、测试和配置的迭代。

3. API操作方案

Vision为用户提供的“入口”是REST API。 它可以接收来自网络摄像机的照片、视频文件和广播(RTSP 流)作为输入。

要使用 Vision,您需要 注册 在 Mail.ru 云解决方案服务中并接收访问令牌(client_id + client_secret)。 使用 OAuth 协议执行用户身份验证。 POST 请求正文中的源数据将发送到 API。 作为响应,客户端从 API 接收 JSON 格式的识别结果,并且响应是结构化的:它包含有关找到的对象及其坐标的信息。

留着胡子、戴墨镜和侧面:计算机视觉的困难情况

答案示例

{
   "status":200,
   "body":{
      "objects":[
         {
            "status":0,
            "name":"file_0"
         },
         {
            "status":0,
            "name":"file_2",
            "persons":[
               {
                  "tag":"person9"
                  "coord":[149,60,234,181],
                  "confidence":0.9999,
                  "awesomeness":0.45
               },
               {
                  "tag":"person10"
                  "coord":[159,70,224,171],
                  "confidence":0.9998,
                  "awesomeness":0.32
               }
            ]
         }

         {
            "status":0,
            "name":"file_3",
            "persons":[
               {
               "tag":"person11",
               "coord":[157,60,232,111],
               "aliases":["person12", "person13"]
               "confidence":0.9998,
               "awesomeness":0.32
               }
            ]
         },
         {
            "status":0,
            "name":"file_4",
            "persons":[
               {
               "tag":"undefined"
               "coord":[147,50,222,121],
               "confidence":0.9997,
               "awesomeness":0.26
               }
            ]
         }
      ],
      "aliases_changed":false
   },
   "htmlencoded":false,
   "last_modified":0
}

答案包含一个有趣的参数awesomeness——这是照片中脸部的条件“酷度”,借助它,我们可以从序列中选择脸部的最佳镜头。 我们训练了一个神经网络来预测一张照片在社交网络上被喜欢的可能性。 照片的质量越好,脸上的笑容越多,就越令人惊叹。

API Vision 使用一个称为空间的概念。 这是一个用于创建不同组面孔的工具。 空间的示例有黑白名单、访客、员工、客户等列表。对于 Vision 中的每个令牌,您最多可以创建 10 个空间,每个空间最多可以有 50 万个 PersonID,即最多 500 万个每个令牌。 此外,每个账户的代币数量不受限制。

目前该 API 支持以下检测和识别方法:

  • 识别/设置 - 面部检测和识别。 自动为每个唯一的人员分配一个 PersonID,返回找到的人员的 PersonID 和坐标。
  • 删除 - 从人员数据库中删除特定的 PersonID。
  • 截断 - 清除 PersonID 中的整个空间,如果它被用作测试空间并且您需要重置数据库以进行生产,则非常有用。
  • Detect - 检测物体、场景、车牌、地标、队列等。返回找到的物体的类别及其坐标
  • 检测文件 - 检测俄罗斯联邦的特定类型文件(区分护照、SNILS、纳税识别号等)。

我们还将很快完成OCR方法的工作,确定性别、年龄和情绪,以及解决商品陈列问题,即自动控制商店中商品的陈列。 您可以在这里找到完整的 API 文档: https://mcs.mail.ru/help/vision-api

4。 结论

现在,通过公共API,您可以访问照片和视频中的面部识别;支持识别各种物体、车牌、地标、文档和整个场景。 应用场景——大海。 来吧,测试我们的服务,为其设置最棘手的任务。 前 5000 笔交易免费。 也许它将成为您项目的“缺失要素”。

注册并连接后,您可以立即访问 API。 愿景。 所有 Habra 用户都会收到额外交易的促销代码。 请写信给我您注册帐户时使用的电子邮件地址!

来源: habr.com

添加评论