使用计算机视觉进行零售照片验证

参赛作品


作为贷款计划的一部分,该银行与许多零售商店合作。
贷款申请的关键要素之一是借款人的照片-合伙商店的代理人为购买者照相; 此类照片将落入客户的“个人档案”中,并在将来用作在申请贷款时确认其存在的一种方式。

不幸的是,总是存在代理商不诚实行为的风险,代理商可能将不正确的照片转移到银行,例如,来自社交网络或护照的客户照片。

通常,银行通过验证照片来解决此问题-办公室员工查看照片并尝试识别不正确的图像。
我们想尝试使过程自动化并使用神经网络解决问题。

任务形式化


我们只检查了有人的照片。 可以使用打开的Dlib剪切露面的图片。

为了清楚起见,我们举例说明照片(图中为银行员工):

图片
图1.销售点的照片

图片
图2.来自社交网络的照片

图片
图3.护照照片

因此,我们需要编写一个模型来分析照片的背景。 她的工作结果是确定照片是在我们合作伙伴的销售点之一拍摄的可能性。 我们确定了解决此问题的三种方法:细分,与同一销售点的其他照片进行比较,分类。 让我们更详细地考虑它们。

A)细分


首先想到的是通过分割图像,以合作伙伴商店的背景识别区域来解决此问题。

缺点:

  • 培训样品准备需要太多时间。
  • 基于此模型构建的服务将无法快速运行。

决定仅在放弃其他选择的情况下才返回此方法。 剧透:没有回来。

B)与同一销售点的其他照片进行比较


连同照片一起,我们会收到有关制造地点的信息。 也就是说,我们在同一销售点拍摄了几组照片。 每组中的照片总数从几个单位到几千个不等。

另一个想法出现了:建立一个模型来比较两张照片并预测它们在某个销售点被拍摄的可能性。 然后,我们可以将新收到的照片与同一商店中的现有照片进行比较。 如果事实证明它们相似,那么图片肯定是可靠的。 如果照片被打掉,我们会另外发送它以进行手动验证。

缺点:

  • 采样不平衡。
  • 如果在销售点有很多照片,则该服务将长期运行。
  • 当出现新的销售点时,您需要重新训练模型。

尽管有很多缺点,我们还是使用神经网络VGG-16和ResNet-50的模块来实现本文中的模型。 并且...在两种情况下,他们收到的正确答案的百分比均不高于50%:(

B)分类!


最诱人的想法是创建一个简单的分类器,将照片分为3组:销售点,护照和社交网络中的照片。 仅需验证此方法是否有效。 好吧,还要花一些时间准备数据进行培训。

资料准备


在使用Dlib库来自社交网络的图像数据集中,仅选择具有人物的照片。

护照照片必须进行不同的修剪,仅保留面部。 Dlib再次来到这里营救。 结果是这样的:使用库找到人脸的坐标->剪下护照照片,留下人脸。

在3个班级的每个班级中,都留下40,000张照片。 不要忘记数据扩充

型号


二手ResNet-50。 他们解决了作为不相交类的多类分类问题。 即,认为照片只能属于一个类别。

model = keras.applications.resnet50.ResNet50() model.layers.pop() for layer in model.layers: layer.trainable=True last = model.layers[-1].output x = Dense(3, activation="softmax")(last) resnet50_1 = Model(model.input, x) resnet50_1.compile(optimizer=Adam(lr=0.00001), loss='categorical_crossentropy', metrics=[ 'accuracy']) 

结果


在测试样本中,剩下24,000张照片,即20%。 误差矩阵如下:

图片
社交网络-社交网络;
护照-护照;
pos-credit-销售点,提供贷款的合作伙伴。

对于销售点的照片,错误的总百分比为1.6%-1.2%。 大多数错误定义的图像是同时类似于两个类别的图像。 例如,几乎所有pos-credit类中定义不正确的照片都是从不成功的角度拍摄的(与白墙相对,只有面部可见)。 因此,它们也类似于社交网络类的照片。 这样的照片具有最大的可能性低。
我们添加了最大概率阈值。 如果最终值较高-我们相信分类器,较低-我们将图片发送给人工验证。

结果,摄影服务的结果

图片

看起来像这样:

图片

总结


因此,使用一个简单的模型,我们学习了如何自动确定照片是在合作伙伴的销售点之一拍摄的。 这使我们能够自动化批准贷款申请这一大型过程的一部分。

Source: https://habr.com/ru/post/zh-CN432056/


All Articles