龙空技术网

旷视研究院详解如何解决被遮挡人脸区域检测问题

量子位 957

前言:

而今看官们对“facenetnetwork”大概比较重视,你们都需要剖析一些“facenetnetwork”的相关内容。那么小编同时在网上收集了一些有关“facenetnetwork””的相关知识,希望咱们能喜欢,兄弟们一起来学习一下吧!

主讲人:袁野 | 旷视研究院研究员

屈鑫 编辑整理

量子位 出品 | 公众号 QbitAI

12月27日晚,量子位·吃瓜社联合Face++论文解读系列第四期开讲,本期中旷视(Megvii)研究院解读了近期发表的Face Attention Network论文。

本篇论文所提出的Face Attention Network,是基于分层注意力机制的人脸图像区域检测器,能够在不影响速度的情况下显著提高被遮挡的人脸检测问题的召回率。

本期主讲人为旷视研究院研究员袁野,同时也是论文共同一作,wider face legend board第一。主要负责face detection工作。

量子位应读者要求,将精彩内容整理如下:

这篇论文中主要提出的是如何设计和使用Attention的机制去解决大尺度变化下的遮挡问题。论文通过精心设计的anchor setting和anchor level 的attention机制能够在不影响速度的情况下显著提高被遮挡的人脸的召回率。

Face detection的主要背景

从背景上来看,对于Face的检测,跟General detection一脉相承。从是否需要提取proposal和是否需要对这个proposal进行二次操作的角度来简单划分的话,主要分为One stage detector和Two stage detector。

这两个方法总体来说是各有利弊。One stage detector主要的优势是快速,这个主要是从工程上来说,假如你在手机上从一个256甚至更高维度的1024的 channel上直接crop一个feature出来,是一个相当耗时的工作,所以one stage天然就有很好的速度优势。

但是one stage有也存在不足,它由于没有后面refine的过程,在两个人脸或者是两个物体挨得比较近,或者是难以辨认的情况下,one stage通常会在性能上会有一定的劣势。

Face detection的挑战

在Face detection上面,相比于其他有哪些特别困难的地方?

首先是scale,由于face自身的特殊性,不论是通用物体或者行人检测,通常情况下,我们只是在意比较近处的物体。scale的变化远远没有人脸这么大。

其次是occlusion,也就是遮挡问题。遮挡问题简单地分为两部分:物体的遮挡;face的自遮挡。识别戴头巾或者口罩的人脸,这是一个典型的物体遮挡的问题。如果两个人挨得特别近,以至于把后面的人挡住了一部分,但是勉强还是可以看到另一部分,这就是face的自遮挡。

那么去解决这个遮挡问题,我们的motivation是什么?

对于遮挡的物体,我们首先需要确定这是不是一个脸,或者是至少要确定这是不是一个头。这就需要context信息,例如能够看到更多的地方,能看到身躯或者是看到头的整个区域,这样就有助于判断。这些信息可以通过合理的Anchor setting或者是合理的大感受野去隐式地学到。

此外,只看context信息也会产生一些误导,所以需要可见的部分来辅助确认这块区域真的是人脸,而不是其他的东西。这个时候我们可以考虑用segmentation或者是attention的机制去处理。

那么基于这个motivation应该怎么去设计网络?

这张图是我们主要的网络设计构架。从网络设计构架上面来说,前面这个红色和这个白色的区域,可以理解为一个FPN的结构,可以复用多层的信息,通过合理的anchor设计,保证每个anchor都有较大的感觉野,隐式地学习context信息。(c)这个部分是一个attention的子网络,我们在得到feature之后,会另开一支去学习attention,之后对attention做一个E指数的操作乘到原来的feature map上面,加强可见区域信息。

后面是一个类似于fast R-CNN两支操作:一支做classification,一支做regression。 Anchor setting设置可以保证每个人脸都有足够的感受野以及足够的context信息。底下这个attention的subnet,它可以通过有监督的信息,学到visible的information,也就能提高对遮挡物体检测的能力。

anchor setting

先统计一下Wider face本身,大概80%以上的人脸其实都是集中在16 pixel到406 pixel这样的量级上面,还有约10%的量级是在8pixel到16pixel。

所以我们在设计上的时候,需要考虑到如何让anchor去覆盖这么大的一个区域。Ratio上的设置,我们选择了1和1:1.5,其实是潜在地考虑了正脸和侧脸两种情况,因为通常情况下一个face,在正脸的情况下,1:1都是可以接受的。侧脸的情况下,可以近似到1:1.5。

P3、P4、P5、P6、P7是分别是表示我们FPN的各个layer,P3表示的是一个浅层的信息,然后P7表示的是越深层的信息。

在感受野上面,feature的感受野是anchor的4倍左右,例如P3层达到了接近99的水平,是P3 anchor的四倍大小。这样就可以提供足够的context信息来保证能够检测出轮廓。铺设密度上,没有选择传统的每一层只有一个anchor的铺设方式,采用每层3个scale,以2 ^ -1/3 步进。如果每层只铺设一个anchor,就会导致个别的ground truth,分配不到一个很好的anchor。

当然anchor也不是铺设得越密越好。如果把anchor铺设得更密一些,比如每层每个layer铺4个anchor,这样会导致的有很多的FP,最终导致性能下降。

还有一个问题是:我们统计出来的anchor只有16到406,而wider face上有大概10%的是在8到16或者是更低的程度,我们可以放弃这一部分吗?

如果这个face在8pixel量级的情况下,我们把它放大出来,图像就很糊,基本上也已经没有什么纹理的信息。加入训练会引来大量的噪声,反而会导致detector性能的下降。就实验结果来看下降还是比较明显的,大概会下降2到3个点。

Attention的操作

我们之前说过,只有context的信息,很难分辨这个物体到底是不是一个被遮挡人脸。这个时候需要加入一些attention,或者是加入一些segmentation,把这些区域给学出来,那么到底怎么学?

首先ground truth只有bounding box。那么我们就采用将bounding box的区域填1,直接作为segmentation去学。由于大量的ground truth是没有遮挡的,当发生遮挡时,最后学出来的segmentation会对于这些未遮挡的信息更加敏感。

其次还有一个细节,在我们的attention网络里面,做完attention之后,不是简单的点乘到原来的feature map上面,而是先做了一个E指数的操作,再去点乘到feature map上面。这样做就不是只保留attention高量的部分,而是对高量的部分做一些增强,这样能够很好地保留它原有的context信息,同时也能够突出它自身那个可见区域的信息。

然后是attention机制的整体框架。我们相比于其他的attention来说,attention不仅是有监督的,同时不同的层赋予不同的anchor level的监督信息。

我们来简单看一下左边这张图,是unsupervised的attention map,unsupervised attention基本上是在随机地学,这对我们来说就没有什么意义。右边这张图,是加了supervised的attention之后,对于一个遮挡的物体,它能够很好地focus到可见的部分。

其次,我们看这张图,左边是全部采用统一监督信号的结果,这表示如果我们把所有的layer都放上同样的监督信号,网络主要focus的是一些比较显著的脸;对于一些比较小的人脸学习的并不理想。右边是采用了anchor level attention的结果,不同的layer根据anchor去生成不同的ground truth。这保证在不同的layer上面,它focus的地方是不一样的,就减轻了这些大脸对小脸的干扰。

然后这是Ablation study的信息。从base model来看,它只有63点多,然后通过修正anchor,它能够达到79.8的水平。加入attention之后它会有一个80.9的涨幅。后面是scale test的一些技巧,最终可以达到88.8,相比于市面上最好的结果也要高出一个多点。

还有我们在两个主要数据集上的表现:在widerface数据集上,我们比第二名高了3个点,比现今legend board上第一高1.2个点。在mafa这个遮挡数据集上,我们比之前的AP提升了接近11个点左右。

接下来是Wider face上的检测结果:不论是尺度变化比较大,还是遮挡比较严重的情况都能够有很好的结果。

接下来是我们在MAFA上的处理的结果,也可以看到对于这些口罩或者是在被遮挡的问题上都能处理得还不错。

Paper总结

简单对paper做一些总结。

对于大尺度变化以及高遮挡的问题,detector是一个十分艰巨的任务。

对于这样的任务,首先需要保证它有足够的感受野来提供context信息,尤其是对小脸或者是遮挡的脸来说。

同时在anchor assign的策略上,比较密集的合理的分布,能够保证ground truth都有一个很好的proposal。

Attention的机制可以帮助网络学到很好的可见区域。

最后是Multi anchor-level attention,这样能够让不同的layer去学face scale的information,使小脸更好地得到学习。

除总结之外,还有一些展望。

刚刚看到的视频上存在有很多的FP,这其实是一个很难调和的问题。比如说在识别小脸这种特别艰巨的问题的时候,为了保证recall,可能就会引入大量的anchor和大量的机制,这样就会导致FP激增。对于这样的问题还需要进一步的探索。

现在的Face Attention Network,它的base model是一个很大的model,如何小型化,也是我们下一步将要探索的一个地方。

一则招人硬广:

希望加入旷视科技(Megvii)一起登上CV巅峰的同学可以投简历至俞刚:yugang@megvii.com,长期招聘算法实习生。实习优秀者,更有直接跳过面试阶段,入职Megvii研究院的机会。

Q&A

小的人脸比较模糊,为了防止引入一些噪声,就把这些数据给去掉了,那这些小的人脸到底有多小,是怎么定义的?

一部分是实验本身得出来的结论,另一方面是本身我们是在8倍pixel上面去做的classification,对于8倍pixel以下的人脸,他在8倍的feature上,它可能最后就变成了1个pixel到2个pixel,本身这个任务就很艰难地完成,所以我们当时就简单地先按8 pixel来去做,后来实验表明的确这是一个很合理的setting。

Attention的机制和分割的联系?

Segmentation可以理解为一个简单的per pixel的classification,它有很好的标注信息。但是我们的attention是一个隐式的学习的过程,也就是说attention本身在ground truth的时候,给它大量无遮挡的脸和一些正脸的图像,让它去学习。我们在COCO上面其实是用到了segmentation,加入了segmentation之后会有一个很好的涨点。

如果技术落地的话,对哪些场景比较合适?

目前我们发paper的这个model是很难去做一些很实时的东西。以现在paper角度上来看,它可以做一些这样任务:安防入库;录入其他数据。也可以在云端上去做。如果说它可以小型化,就有很多很开阔的场景,比如说抓拍机,一些人脸解锁,无人化的超市等等。

框架是怎样的?

这个框架应该算one stage的detector。因为后面没有接ROI pooling或者是它之类的这些衍生物,主要是考虑到本身对于速度的要求。加上ROI pooling之后,对高feature数进行crop 的操作会非常耗时。所以我们就采用了one stage的detector。

以上就是此次旷视研究院袁野带来分享的全部内容。在量子位公众号(QbitAI)界面回复“180107”可获得完整版PPT以及视频回放链接。

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

标签: #facenetnetwork