如何看待Tencent AI 人脸检测结果在FDDB上的逆天表现?

转载来自知乎的一篇讨论。看来腾讯AI应该是用到了FDDB测试集的数据来训练,不过如果它是按照FDDB的说明文档http://vis-www.cs.umass.edu/fddb/fddb.pdf里规定的10-fold cross-validation的方式来做的(9/10的FDDB数据训练,剩下的1/10 FDDB数据做测试),也无可厚非。没有必要纠结于它是否算是作弊,这里转载只是因为觉得楼主对fddb的分析很有深度。


作者:刘子非
链接:https://www.zhihu.com/question/55042389/answer/142392557
来源:知乎


原文如下:


腾讯的检测结果比第二名高出太多,是真牛逼,还是可能存在作弊?


----------------------------------------------------------------------------------------------------------------------------

好吧,没人回复,那我就发表一下自己的看法。欢迎指正
我说,肯定是拿测试集参与训练了,作弊无疑!!

先介绍下背景:FDDB数据集是一个公开的人脸检测的测试数据集,里面包含2845张图片共5171张人脸。这些图片中的人脸来自不同场景,包括各种变化条件,如光照变化,遮挡,不同大小,不同分辨率,模糊等诸多变换。因为比较接近真实场景,大部分做人脸检测的研究者或者公司都会将他们的检测器到上面做一个测试,跑一张ROC曲线图,也就是对应图一中的不同颜色的线,每根线对应的是某个检测器的结果。横轴表示的是误检的人脸个数(对应的是误检率),纵轴表示的是准确率。误检率越小,准确率越高,检测器越强,对应的是曲线越靠近左上角越厉害。

早先的方法是基于手工设计特征来实现的,误检个数在1000以内的检测准确率基本是在90%以下。不要觉得弱,这样的检测器已经很努力了,看看下面的样例图就知道,要让他检测这种遮挡模糊的人脸真的是太难了!!。

(图片中框是ground truth,在这里将他们在图片上显示出来了)


    

DeepLearning崛起后,准确率就刷刷上去了,这得益于深度神经网络强大的处理能力,能够融合更多信息,拟合更复杂的数据分布。左上角扎堆在一块的基本上都是用不同神经网络方法来实现的检测结果。


不难发现,大多数曲线距离左上角1的位置(左上角就是100%的准确率,0 误检),还是有一段距离的, 既然深度神经网络这么厉害,为什么大家都上不去了呢?是不是因为大家的检测器还不够牛逼,准确率还待提升呢?

然而并不是,而是因为数据本身就存在误差,噪声等。而这个测试集中标注的很多也是不一致的,很多真实人脸没有标注,而有些模棱两可的人脸又标出来了,这锅自然是要甩给标注人员的。但是人家也没办法,这么多数据,不同的人标注,很多主观因素在里面。FDDB的论文中说是侧脸大于90度的就不标,像素小于20 的不标,太过模糊的不标,遮挡超过一定比例的不标。但是临界处的,真的就不好说了。我们来看几张典型的图,红色的框是标注的结果,没框的就是没标。试下一下,如果你来标是怎样的。下面选几张典型的出来看看,这种不一致性的图片还是挺多的,尤其是遮挡的情况。有些遮挡厉害的标注出来了,有些遮挡少一点的没有标注出来。模糊的情况也类似。


要拟合这样一个因人工标注导致的人脸分布,误差是不可避免的。所以针对这个问题,不同应用场景下,就有了各自取舍。

有些检测器为了使误检数目少,然后就牺牲了那些不确定的人脸,反正不是特别确定的就当不是人脸吧,所以其在左端升得很快,误检很少,很可靠。但是那些什么个遮挡,小人脸之类的,检测器才不关心呢,管他们是不是人脸,我要的就是误检少,那你们就都不是人脸吧。

有些检测器就是要把那些遮挡,模糊的都给检测出来,这样的任务其实更难,尤其是遮挡和小人脸。这样的检测器虽然厉害,但是在这个测试集上的表现就不怎好了,无法很好体现不出其强大。拿tiny face 的检测器到这上面测试下看,可能会把测试集中没有标注的人脸都检测出来了,测试曲线肯定是不行的,后面升得高,前面肯定比较低。原因就在于不确定人脸的模糊性,同样类型的人脸,有可能标,也有可能没标,把没标的检测出来,那自然就是误检了。所以曲线在左端是上不去的。

那丢掉这些不确定的,是不是误检就少了,曲线就上去了? 这样也不行,因为这些不确定的人脸,有部分标注了啊。丢掉之后准确率也就上不去了。

而有另外一个难度更大的测试数据集wider face,那上面真正是人眼都看不清的都标注了。(看看wider face 上的标注领略一下什么叫惨绝人寰WIDER FACE: A Face Detection Benchmark

那回过头来看看腾讯的结果,腾讯在50个误检的时候就到95%左右了。甩开第二名3~4个百分点。有人问腾讯的检测器就是这么屌,难道不可能么?

腾讯误检在50左右的检测结果

第二名的检测结果

有人会问,是不是标注很多与测试集场景类似的图片来进行训练,就可以达到这样的效果,大腾讯那么多数据,扩充样本不就可以了么?

实质上,前几名的曲线可能都是对训练集进行了扩充或清洗,可能加入了与测试场景类似的图片,或者是对原有的训练数据集进行清洗得到的。但是腾讯的结果,除非用上测试集参与训练,否则是不可能出现的。

怎么证明腾讯是作弊了呢。

相信很多人跑过这个测试集,那么我们来验证一下。

步骤如下:

1.你拿检测器跑一遍这个测试集,当然你的检测器不要太渣,准确率90%以上就可以了,如果没有,那推荐个开源检测器好了(tornadomeet/mxnet-face)。

2 你的检测器肯定有不少误检和漏检的图片,将误检和漏检图片都保存下来(大概可能有两百多张误检和三四百张误检图片),同时将检测结果按FDDB评测的要求进行保存。

3.你的检测器肯定是不够完美的。那假设还有另外一个检测器,这个检测器就是你的人工验证,来进一步对检测器的检测结果进行修正。你可以先了解下大概哪样的人脸是应该要检测出来的(vis-www.cs.umass.edu/fd)。最好不要看这些漏检和误检图片的真实标注,参考一下也行,尽量不要因为label而影响你的判断。如果你认为你一个人主观因素太强,可以找专业的标注人员来完成这个工作。其实这个工作也挺费时间的。

4.修正后的结果你是不是认为很牛逼了。你把修正后的结果去评测一遍。这个结果其实是检测器加人眼睛的结果,或者直接说是人眼的结果,检测器只是为了帮我们减少工作量。

5.那这个曲线和腾讯的对比一下。我的个乖乖。是不是被腾讯的结果吓到了,我可是根据标注准则相当于是做了下标注校验,那腾讯在没有测试集参与的情况下能够拟合到这样一个效果,是不是匪夷所思,是不是要上天了!!!

所以唯一的可能,腾讯用了测试数据参与了训练,才将这个有误差的人脸数据拟合到这么好。

Naiyan Wang 的回复很有道理的。我再补充一下,因为我得到的分别是误检图和漏检图,有些图人眼睛看没误检,但是标注说有误检,所以我就要参考标注,把这个人脸删掉。上面说不参考标注是说错了。验证结果其实是比人眼的结果更贴近标注数据的结果。

检测结果

标注的真实结果

就拿侧脸来说,比如测设图像中有100张这样的不好判定的侧脸,五十张标注了,五十张没有标注。而腾讯的检测器刚好能够把那五十张没有标注的人脸当不是人脸,把另外标注了的五十张当成人脸。这是难以置信了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值