人脸识别哪家强?四种API对比

 ·  2018-11-04 19:32:35  ·  北京瑞铭安普科技有限公司
Viola-Jones的人脸识别

     2001年,Paul Viola和Michael Jone开始了计算机视觉的革命,当时的人脸识别技术并不成熟,识别准确度较低,速度也很慢。直到提出了Viola-Jones人脸识别框架后,不仅成功率大大提高,而且还能实施进行人脸识别。

 

     自从上世纪90年代开展了各项人脸识别、目标识别挑战赛,这类技术得到了迅猛发展。

深度卷积神经网络

     2010年,ImageNet视觉识别挑战赛开始举办,前两年,大部分参赛队伍都用Fisher Vectors和支持向量机的结合。但2012年,一切都变了。
 
     多伦多大学的团队(Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton)第一次在目标物体识别任务上使用了深度卷积神经网络,并拿到冠军。他们使用的方法错误率为15.4%,而第二名的错误率为26.2%。到了2013年,前5名的队伍全部都开始用深度卷积神经网络。
 
价格

     亚马逊、谷歌和微软三家的价格模式类似,都是用量越多收费越少。但是IBM不同,当你的免费额度用完后,每个API接口的价钱都是一样的。四种工具中,微软的免费额度是最高的,每月可处理30000张图片。

 
价格对比
 
现有以下三种情况:
 
A:小型创业公司每月处理1000张图片
B:数字生产商每月处理10万张图片
C:数据中心每月处理1000万张图片
 
动手试试

建立图像数据集

 
     要做人脸识别,首先就要建立数据集。本文所用到的图像是从pexels网站上下载的,你可以直接到我的GitHub中下载。
 
编写基础测试框架
 
     说是“框架”,实际上我的自定义代码只有两种类别。然而,这两种类别很容易地就帮我分析了原始图像数据,在不同的任务上也只需要少量代码。
 
FaceDetectionClient中记录了图片存储的信息、四种工具的细节以及所有处理过的图像。
 
比较四种SDK
以下是四种工具支持的语言:
 
 
 
inter-rater 可信度

     在让计算机进行人脸识别之前,我先记录下了自己所观察到的图片中人脸数量。同时,我还找了三位同时对图片进行识别。

 
什么是人脸?
 
     我在进行手动标记时,只要露出四分之一脸就算一个人脸,而我的同事们有的会把不明显的也算作人脸,或者看到眼睛、鼻子就算一张脸。所以每个人的判断标准不同。

 
 
 
对这张图,我们四人有不同的结论,分别是10张、13张、16张和16张人脸。所以我打算取平均值,14。
 
比较结果
 

     图中可以看出,微软智能达到17.55%的人脸检测率,为什么成功率如此低?首先,图片数据集中的确有一些故意刁难识别器的图像,另外要知道,机器的能力比人类还差得远,想提高人脸识别的效率,还有很大的进步空间。
 
     虽然亚马逊的工具能检测出最多的人脸,但是谷歌和微软的处理时间明显更快。
 
     另外,在人脸相对较小的图片中,同样还是亚马逊表现得更好:
 
 
在这张图片中,亚马逊检测出了10个人脸,而谷歌为4,IBM和微软都是0。
 
不同角度和不完整人脸
 
看了上面的例子,可能会觉得IBM不中用。IBM的作用在普通图片上一般般,但是在难度更大的图片上,IBM的能力就很大了。尤其是在不常见的角度进行人脸识别或者残缺人脸识别。例如:
 
边界框
 
没错,各家的边界框也有差别。亚马逊、IBM和微软都会返回只含有人脸的边界框。而谷歌不光会圈起来人脸,会连带整个头部一起选中。
 
谷歌
 
 

微软
 
看出差别了吗?
 
误报率
 
     虽然我的数据集很小(只有33张照片),但是有两张图没有模型识别出人脸。

 
     亚马逊和谷歌都只识别出了上图中纹身中的头像,而微软识别失败。只有IBM正确识别到了前面吉他手的人脸。恭喜IBM!

 
 
     这张照片,谷歌在同一区域检测出了两张人脸。莫非看到了人眼看不到的东西?(细思极恐)
 
结语

     虽然每种工具都有自己的有缺点,但总的来说,亚马逊、谷歌和IBM还不错,微软就很一般了,分数最低。