也是放假太闲,上知乎来锻炼一下手指。
在回答题主的问题的时候,我觉得应该注意做『科研』和做『产品』之间的区别。论文中汇报的人脸识别技术是属于科研的行列。比如在LFW上99.7%,这种数字的意义更多是让搞研究的那个圈子里面的人更加直观的了解到一些情况,你也知道,通常来说这个准确率是非常高的了,所以我们可以说『人脸识别技术在
LFW上已经很成熟了』,但是一模一样的技术,拿到真实环境下得到的准确率可能只有
75%……也许会有些人觉得这是很可笑的,不,请不要笑,这是科研圈里朋友的普遍做法,不是没有苦衷的。
捣腾过LFW的朋友其实心里都清楚,这并不是一个很好的数据库。图片都是从网上下载的,人脸的质量也是千差万别,有人说这样才接近真实情况……但实际上距离大部分的实际应用场景还是太远了。
目前评价科研中算法的优劣的唯一方法就是找一个数据集,然后大家一起对比,数据集的不同算法得到的结果也会不同,然而……论文上通常是有报喜不报忧的恶习的,所以常常会有不公平的对比存在,随着越来越多更大的人脸数据集的慢慢增加,对于算法的评价会可能会变得稍微公平一些……即便是这样,论文里所谓的人脸识别技术,跟可用的『产品』之间的差距仍然很大。
这并不是说论文的算法不好,而是『产品』的天性。大部分产品都是针对性的解决一类或几类问题,产品讲究是速度,稳定性,成本,等等,不同的产品通常可以加入不同的先验甚至额外的硬件来提升产品的可用性。这是做『产品』和做『科研』的区别。
举两个容易理解的例子:
某著名手机厂商想开发一个自己的人脸解锁功能,在第一次使用手机的时候,经过一个人脸注册的过程,记录下手机主人的样子,在之后的使用中如果被触发,就进行人脸验证,解锁。这里你如果上来一个几十层网络的卷积网络,这个是不行的……因为速度很重要,内存也重要,如果你一个网络模型一上来就已经几十兆几百兆了,产品经理会疯的。做产品的往往是想在保证用户体验的情况下,使用最少的资源。所以最后的产品可能是……下面是我瞎掰的……检测到人脸,检测五官的基本landmark,然后通过几何关系约束来缩小识别范围,再用简单的特征比如LBP,在一个一千张主人人脸的数据库进行验证,验证里可能有各种trick,并且这个一千张人脸的数据库也是实时更新的,比如当前识别正确了,那么就加入进去,如果识别错了,就把这个数据提取特征作为反例存起来……一个可用的产品总是包含了很多看似没有道理的trick的,但是就是这些构成了产品的核心技术。
另外一个例子,做人脸识别,但是是做煤矿工的……请自行脑补一脸煤的辛苦矿工。在这个场景下面,你连人脸检测都没法弄啊……加上光照和脸上煤的干扰,论文上的算法基本上是没办法用的。如果是你,你怎么去做识别?
做一个产品的时候,思路是需要很开阔的。比如人脸的检测实际上是可以通过双目视觉来做的,两个廉价摄像头,简单的算法通过三角化得到一个稀疏的深度图,利用深度信息来做人脸的检测,然后基于眼睛和嘴唇来做识别,眼睛和嘴的识别可以用卷积网络来做,但是真是的产品里面可能还会考虑身高信息,当然,在洞里还需要考虑补光的问题……
说完了这两个例子之后,再回到题主的问题上来吧:
『请问目前业内人脸识别技术的挑战和难点是什么。为什么没有成熟可靠的商业应用。但是论文中已经接近99.7%了。实践和论文的差距是什么。是不是人脸识别的研究没得搞了。』
如果题主这里说的『业内』指的是科研行业,挑战和难点其实都不好说……有些问题是可解决的,有些问题是不可解决的,比如化妆和双胞胎的问题,其实长得像也是很普遍的例子。人脸识别这个行业存在一个由大佬们吹出来的硬伤,就是它在真实环境下总是无法达到100%的可靠,但是总被吹成是极其可靠……以至于领域外的人瞪大眼睛激动地要往里砸钱要项目上线……所以人脸识别在产业界总会给土老板们带去失望。
稍微有点偏,别回来。
我假设这里的业内并不是『科研界』,而是工业界,产业界,『产品』界,那么有很多地方其实都有成熟应用了,比如海关的过关人脸识别系统,当然人家会加上身份证或者指纹来双重验证,比如人脸识别的门禁系统,这个作为产品已经有了,虽然发生了『司机卖掉赵薇豪宅那个事』,但我还是相信在这个应用场景下,这个产品是可以达到可用的程度的。人脸识别技术最大的一个客户可能就是政府了,这个是让我有些伤感的事情,同时我也觉得这个东西在公安系统里面也是『采购了,但是极少用到,领导来了,我们就演示一下Demo,真办案了,还是要靠人来筛选一下以防疏漏』。
另外最近那些银行推出一些自动服务机器,里面有人脸识别功能,道理其实跟过海关一样,你需要的是身份证,人脸,密码甚至指纹……即便是把人脸识别关掉了……也是可以正常运作的……我常常好奇,为什么有些公司,不遗余力地去
集中做一个
产品落地很难的人脸识别技术……并且其做法仍然是按照学术那样,收集大量的数据集,然后交给科研人员,然后搞几个算法,提高准确率,然后把代码交给码农去优化,码农优化完,产品经理觉得仍然没法上线,但是上线压力太大,于是给科研和码农施压,科研人员也烦躁,只能过来给码农施压,码农无处诉苦,开始自我怀疑,失去自信,变得烦躁,更年期早到……
这可能是做科研出身的人,突然跑去做产品的通病。
论文和实践的差别在于数据和方法。针对数据选择方法,是用很多种方法融合,针对不同的情况调试不同的参数,使用不同的trick,甚至使用外围的硬件辅助,最终的目的是提升产品的综合体验。人脸识别,实际的产品里面,最深奥的算法复杂程度也不会超过那些开源出来的已有算法,理解那些通用的算法,再去一线做产品应该足够了。但是注意,这些算法也许根本不会构成你产品的核心技术,真正的核心技术是你做产品的时候处理各种情况,各种数据的经验公式和方法。
在科研里,人脸识别技术还是有很多可以去研究的东西的,比如怎么用更小的数据更小的模型得到更好的准确率。比如怎么克服光照的影响,比如怎么通过局部特征来完成准确识别……。
但是如果是去做产品的话,我认为不需要迟疑,不要仰望科研成果。贴近一线的数据和场景,花时间分析数据钻研工程方法,也许就做出来了。
借用一句话:『未来属于那些愿意弄脏自己双手的人』。