人脸识别究竟如何工作?
深入分析之前, 首先让我们探究一下人脸识别的工作原理.
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, 微软现在在用什么?
目前为止, 各大公司仍然使用深度卷积神经网络或者结合其他深度学习技术进行人脸识别.
亚马逊: AWS.Amazon.com/cn/rekognition/faqs/
谷歌: www.YouTube.com/watch?v=OcycT1Jwsns&feature=youtu.be&t=2m41s
IBM:www.ibm.com/cloud/watson-visual-recognition
微软: docs.microsoft.com/en-us/azure/cognitive-services/face/overview
这四种工具看起来都差不多, 但是结果还有些许不同. 首先我们从价格看起.
价格
亚马逊, 谷歌和微软三家的价格模式类似, 都是用量越多收费越少. 但是 IBM 不同, 当你的免费额度用完后, 每个 API 接口的价钱都是一样的. 四种工具中, 微软的免费额度是最高的, 每月可处理 30000 张图片.
价格对比
现有以下三种情况:
A: 小型创业公司每月处理 1000 张图片
B: 数字生产商每月处理 10 万张图片
C: 数据中心每月处理 1000 万张图片
动手试试
本文所用代码可在我的 GitHub 中找到: GitHub.com/dpacassi/face-detection
建立图像数据集
要做人脸识别, 首先就要建立数据集. 本文所用到的图像是从 pexels 网站上下载的, 你可以直接到我的 GitHub 中下载.
编写基础测试框架
说是 "框架", 实际上我的自定义代码只有两种类别. 然而, 这两种类别很容易地就帮我分析了原始图像数据, 在不同的任务上也只需要少量代码.
FaceDetectionClient 中记录了图片存储的信息, 四种工具的细节以及所有处理过的图像.
比较四种 SDK
以下是四种工具支持的语言:
inter-rater 可信度
在让计算机进行人脸识别之前, 我先记录下了自己所观察到的图片中人脸数量. 同时, 我还找了三位同时对图片进行识别.
什么是人脸?
我在进行手动标记时, 只要露出四分之一脸就算一个人脸, 而我的同事们有的会把不明显的也算作人脸, 或者看到眼睛, 鼻子就算一张脸. 所以每个人的判断标准不同.
对这张图, 我们四人有不同的结论, 分别是 10 张, 13 张, 16 张和 16 张人脸. 所以我打算取平均值, 14.
比较结果
图中可以看出, 微软智能达到 17.55% 的人脸检测率, 为什么成功率如此低? 首先, 图片数据集中的确有一些故意刁难识别器的图像, 另外要知道, 机器的能力比人类还差得远, 想提高人脸识别的效率, 还有很大的进步空间.
虽然亚马逊的工具能检测出最多的人脸, 但是谷歌和微软的处理时间明显更快.
另外, 在人脸相对较小的图片中, 同样还是亚马逊表现得更好:
在这张图片中, 亚马逊检测出了 10 个人脸, 而谷歌为 4,IBM 和微软都是 0.
不同角度和不完整人脸
看了上面的例子, 可能会觉得 IBM 不中用. IBM 的作用在普通图片上一般般, 但是在难度更大的图片上, IBM 的能力就很大了. 尤其是在不常见的角度进行人脸识别或者残缺人脸识别. 例如下面三张图片的人脸只有 IBM 识别了出来:
边界框
没错, 各家的边界框也有差别. 亚马逊, IBM 和微软都会返回只含有人脸的边界框. 而谷歌不光会圈起来人脸, 会连带整个头部一起选中.
谷歌
微软
看出差别了吗?
误报率
虽然我的数据集很小(只有 33 张照片), 但是有两张图没有模型识别出人脸.
亚马逊和谷歌都只识别出了上图中纹身中的头像, 而微软识别失败. 只有 IBM 正确识别到了前面吉他手的人脸. 恭喜 IBM!
这张照片, 谷歌在同一区域检测出了两张人脸. 莫非看到了人眼看不到的东西?(细思极恐)
结语
虽然每种工具都有自己的有缺点, 但总的来说, 亚马逊, 谷歌和 IBM 还不错, 微软就很一般了, 它的分数最低.
在这里给大家推荐一个 python 系统学习 q 群: 250933691 有免费开发工具以及初学资料,(人工智能, 数据分析, 爬虫, 神经网络)每天有老师给大家免费授课, 欢迎一起交流学习
来源: http://www.jianshu.com/p/e3d73f2b0923