1.0 综述
人脸检测任务是目前为止落地最好的AI技术之一。人脸检测任务是通用目标检测的运用之一,所以像主流的faster-rcnn系列模型,YOLO模型等用到人脸检测,没有太大问题。但是人脸任务有很多其不一样的情况,例如人脸的bbox一般为正方形,人脸有很多侧脸、遮挡等问题,基于种种涌现出了一大批解决这些问题的特殊模型,这些模型大多是DL模型。本文也是将对这些SOTA模型进行一个综述。
人脸检测相关的工作每年都有很多,不可能每一个工作都介绍,所以这里讲到的工作基于WIDERFACE数据集的SOTA。
2.0 模型
2.1 MTCNN
MTCNN是2016年提出,不算最早提出用CNN结构去检测人脸的工作,但是在工业上运用很多的早期经典方法。
采用一种级联的方式进行人脸检测。整个模型有三个网络,分别是P-Net,R-Net和O-Net。训练的时候,首先训练P-Net,然后挑选出无法检测的人脸输入到R-Net训练,以此类推训练O-Net。所以整个训练过程不是端到端,需要训练三个网络,且每个网络训练的data都不一样。
在每个网络中有三个loss约束。分别是face classification,bounding box regression 以及 facial landmark localization。
值得注意的是,网络中没有一般目标检测任务的anchor,也就是说没有proposal bbox。那么网络是怎么样锁定人脸的初始位置的呢?玄机在P-Net中。仔细观察上图的P-Net部分,最终的输出是都是张量,并不是向量。因此将整张图片输入到P-Net网络中时,最终的输出对应的是每一个原图12*12尺寸图像的输出信息。这种做法的好处就是效率高,速度快,这也是工业上运用比较广泛的原因之一。如下图示意:
文章中还提到一个trick,Online-Hard-Samole-Mining。原理就是选取一个batch中loss靠前的值当做最终的loss,这样对于已经训练很好的那一部分可以忽略。
2.2 CMS-RCNN
在WIDERFACE数据集已公开,就立刻有人用faster-RCNN(Face Detection with the Faster R-CNN)的模型尝试了一下,就刷到了当时的SOTA。CMS-RCNN就是基于faster-rcnn。
- 这个工作与之前最大的不同在于将多尺度(multi-scale information)融入到RPN部分,解决小人脸检测问题。
- 将body的信息融入模型,辅助人脸检测。克服人脸遮挡问题。
CMS-RCNN分为两个部分
- MS-RPN:用于生成人脸proposal regions。
- CMS-CNN,结合上下文信息的人脸检测,在每个candidate上都会计算confidence score + bbox regression,类似于frcnn,最后就是NMS得到最后结果。
我们发现这两部分都融合了不同level的feature map。低层feature map 感受野小,细节特征丰富,适合小尺寸目标的定位和检测;而高层feature map 的感受野大,语义信息丰富,适合大尺度目标检测,这样就能取长补短,搞定所有尺度的目标检测了。
在特征融合的时候,不能简单地将conv3,conv4,conv5上proposals对应的特征pooling到相同尺度后直接concate,因为分布不太一样,在concat之前必须进行normolize。
在information fusion阶段有两种策略:
- late fusion:人脸的feature和body的上下文信息独立操作,在网络最后阶段两个特征再cancat。
- early fusion:在ROI pooling+Normalization之后,将information concat,再进行后续操作。
以上两种都是信息融合,作者选择前者(late),因为作者希望网络能在更好的语义空间上对人脸检测做出高质量的决策,因此late fusion可以获得独立的语义信息,获得相关联的信息,再去做相关的决策。
性能在当时SOTA,但是笔者认为这种方式速度很慢,不太适合实时性要求比较高的场合。
2.3 HR
HR解决的问题依旧是小人脸问题,因为在WIDERFACE数据集中,大人脸比较容易检测,关键就在于如何提升小人脸检测的性能。
解决的方法仍然是利用多尺度。
利用context。周围的信息对于小人脸的检测很有帮助。
整个模型的pipline。
- 首先是图像金字塔。
- 每层图像都输入到HR做人脸检测,使用FCN+ResNet,输出feature map,feature map上每个特征点表示该位置是否包含人脸,人脸的尺度需要结合图像金字塔上预定义的检测模板尺度,
- 在得到feature map的时候用到中心描述符(图2e)。
整个paper讲故事讲得非常多,究其根本就是更好的利用多尺度,很多作者新提出的概念。说得很玄乎,其实很简单。速度也是非常慢。
2.4 Face R-CNN
Face R-CNN是腾讯AI提出的人脸检测方法。基于frcnn的一种方法。
- 加入center-loss来约束整个模型,提高类内的差异。
- online hard example mining(OHEM)
- 多尺度训练/测试
整个模型的pipline
- 创新不是特别大,比较工程一点。
2.5 MSCNN
MSCNN(ECCV2016)其实是一个通用的目标检测方法。后续的很多人脸检测都是基于这篇paper给出的思路。
- MSCNN跟SSD思想相似,但是又迈进一步:
- SSD各个分支上anchor与gt bbox的匹配是很粗放的,一个gt bbox可能与多个分支上的anchor匹配;
- MSCNN在每个分支有特定的anchor进行匹配,某一层的feature map上的anchor仅用于匹配特定尺寸范围的gt bbox。
- 在预测的时候,每个分支预测特定范围类的尺寸目标,相当于三个专家系统。
目标检测中能覆盖到多尺度目标是一个巨大的挑战。如果预设的anchor尺寸能够和目标尺寸能完美匹配,那么会有更高的检测率。paper给出了解决这一问题的一般方法,如下图:
- (a) 训练一个单尺度分类器(即paper中的model template),但是输入多尺度图像金字塔。优点:这样的单尺度分类器也可以检测到各种尺度的目标。缺点:但是可想而知,重复的输入模型将会浪费大量的计算资源。
- (b) 训练一个标准多尺度分类器,只输入单尺度图像。优点:只需要输入单尺度图像,一次前向操作。缺点:需要多尺度分类器能够cover所有尺度目标,所以难度很大,导致检测性能一般。
- (c)是上面两种方式的折中,输入不那么多的图像金字塔,然后不那么多尺度的分类器。
- (d)中使用特征近似,输入不那么多的图像金字塔,但是在feature map中使用特征差值方式generate其他尺度的特征金字塔。
- (e)跟RCNN中方式类似。(a)中是整张图像的缩放,(e)是把proposal区域的特征固定到一个尺度。分类器保持单一不变。
- (f)与(b)类似。单尺度图像输入,但尺度的feature map上得到proposal,目标的多尺度来自于预定义的多尺度anchors。但是所有多尺度的anchor都将通过roi pooling固定到相同尺寸,再通过多个固定尺寸的分类器检测。但是有个不可忽视的问题就是目标尺寸和模板尺寸的不匹配。如下图,假设RPN中的感受野为228*228,与图中大小尺度的目标(640*640,、32*32)并不匹配。
- 受(b)(c)启发,paper提出MSCNN。输入只需要单尺度的图像,在特征金字塔的不同分支上利用多尺度模板检测多尺度目标。具体实现类似SSD,在各个检测分支上,预定义特定的anchors,专门用于检测特定尺度范围类的目标。这个思路有很深远的影响。
模型的pipline
其中检测那一部分的模型如下图:
然后加上一些tricks在一些通用检测的任务上取得了SOTA。当然在人脸上也取得不错效果,最主要是对小人脸检测提供了非常work的思路。
2.6 ScaleFace
ScaleFace看名字就知道是针对人脸多尺度改进的模型。
整个网络的pipline。看起来很简洁,这篇paper提出的网络架构在当时应该算是较新颖的,paper也对如何选择最佳尺度做了很详细的分析和实验。
整个模型的backbone共享参数,branch还是走的frcnn的路数。有三个尺度可变的检测分支,且每个分支只用属于特定尺度范围内的人脸gt做训练,每个分支也只预测特定尺度大小的人脸bbox。作者认为这是和SSD的本质区别,另一个区别就是特征融合。左上角虚线框可知,每个branch检测人脸的尺度不太一样(samll,medium,large),每个分支预定义的anchor尺度也从小到大排列。值得注意的是,相邻分支存在交集。
Finding a network for specific scale range
- 结论很简单:就是本文模型提出的多分支分别预测不同尺度的目标。
- 低层feature map用于预测小目标的检测,因为感受野较小,细节丰富。前面的模型提到过这个结论。高层feature map只用于预测大尺度目标。
- 每个尺度的人脸目标也分别在不同检测分支上做预测才能有最好的性能。主要是因为目标尺度与模板尺度一致。
- 在frcnn中的roi pooling层是7*7。其实并不是每个模型都必须这个尺寸,本文用的是5*5。从下图可以看到,30x25的人脸在stride=8时,即降采样到4*4的尺度时,与roi pooling层的网格5*5最接近,所以在这个尺度上做人脸检测,可以获得最佳性能。同理,下面大人脸在降采样到7*5时,能获得最佳性能。这也就解释了为什么要在不同的feature map层去做对应尺度人脸的检测才能获得最佳性能。
How many scalevariant detectors?
- 上面说了检测要多尺度,但是尺度该怎么样去划分,在这里直接贴结果。正如pipline中那样,分三个branch(三个尺度)去检测效果最好。
- 但并不是每种任务都是性能最佳的,需要根据实际情况考虑目标的尺度与网络结构本身的stride尺度。
How to combine the scale variant detectors?
共享backbone,减少参数,减少计算量,联合优化,多任务优化。很多实现细节可以参看原文。
2.7 SSH
SSH(ICCV2017)也是类似于SSD架构的模型。和上面讲的ScaleFace更是有异曲同工之妙。只不过用的one-stage的检测方式,速度更快。
整个模型的pipline如下图,思路与ScaleFace一样,在不同feature map层检测不同尺度的人脸。
detection module分别预测是否为人脸和anchor bbox的回归值。
训练方式是三个分支独立训练。每个检测分支匹配特定尺度范围的anchor,那么这些被分配到不同分支的anchor,其得到的loss也仅仅用于更新其所处分支的参数。
2.8 S3FD
S3FD仍然是解决小人脸检测问题,方法依旧是在多尺度上下功夫。
贡献有三点:
- 提出尺度均等(scale-equitable的人脸框架,采用EPIP(equal proportion interval principle)确保多层feature map上anchor的采样密度一致,以处理不同尺度的人脸。很熟悉的味道,跟上面ScaleFace很相似。
- 通过SCAMS(scale compensation anchor matching strategy)提升了对小人脸的召回率。作者认为anchor的预定义尺寸是离散的,与图像中连续分布的人脸不会完美匹配(有一些人脸找不到合适的预定义anchor),通过SCAMS,课提升对于小人脸,处于离散的、anchor预定义尺度范围外的人脸召回率。
- 使用MBL(max-out background label)降低了小人脸false positive rate。
整个模型的pipline如下图:
- 利用VGG当做backbone,将fc layers改成cnv layer
- 多层feature map的检测机制,以实现文中所说的Scale equitable framework,strde尺度从4-128。眼熟眼熟眼熟!
- 作者认为多层间的激活尺度不同,对每个channel做一个element-wise的L2正则化,利于训练。
- predicted convolutional layer预测anchor的4个坐标偏移量以及一个2分类的结果。
- 多任务的loss
- 为anchor预定义合适的尺寸。anchor的长宽比1:1,人脸一般是接近方形。每层stride和RF的大小固定,stride是anchor size的1/4。RF根据卷积核算出来的。每层feature map上设置的anchor scale只有唯一一个。
作者认为自然图像中,人脸的尺度时连续的,但是预定义的anchor尺寸离散,这样导致对小尺度人脸和部分离群尺度的人脸 gt bbox,没有足够的anchor与它们匹配,进而影响召回率。为了克服这一现象,提出SCAMS。就是降低IOU,找到更多的备选框。
SCAMS(scale compensation anchor matching strategy):
- 使用常规的fast rcnn的anchor与gt box的jaccard overlap匹配策略,但降低iou阈值至0.35,这样可以提升每个gt bbox匹配的anchor数目N;
- 将anchor与gt bbox的iou阈值降低至0.1,降序选取top N匹配的anchor作为与该gt bbox匹配的anchor;N为step1中的N;注:0.35~0.1 thres的降序排序;
这个地方有点含糊,不是很理解。(需看源码)
在检测小人脸的过程中,因为anchor尺寸太小,但是大部分的anchor都是负样本,会造成大量误判。所以作者通过MBL为每个anchor输出N个bg标签得分,但是只选择最大的score作为输出,再与fg score组成两个标签输出计算softmax。
充满tricks的模型。大的思路没有变,在anchor的选取,尺度等做了大量的尝试。
2.9 Face R-FCN
Face R-FCN基于R-FCN,OHEM,使用虫洞卷积,更小的pooling尺度,小尺度anchor,多尺度训练与测试的策略。
模型的pipline
- 基于全卷积的R-FCN
- 基于全卷积的resnet101作为backbone
- 若干tricks(ps average pooling,多尺度训练,OHEM)
- R-FCN Based Architecture:使用更多小的anchor配合小尺寸人脸;在position roi pooling中用更小的pooling尺度去降噪,抑制干扰信息,然后替换掉原来的roi pooling;在resnet最后一层使用虫洞卷积,增加感受野。
- Position-Sensitive Average Pooling:paper的精髓在此处。作者认为人脸不同的区域,对检测的贡献权重不同,因此paper对roi的不同区域给予不同的权重。
- 工程性十足。具体细节看原文。
2.10 FAN(Face Attention Network)
FAN是一种基于attention机制的人脸检测模型,其他思路跟上面的模型差不多。有效克服小人脸,人脸遮挡。
三个spotlight:
- anchor-level attention:突出人脸区域的特征。
- anchor分配策略
- 为克服人脸遮挡的数据增强
模型的pipline
- 特征金字塔,就是借鉴的FPN。
- Attention Network找到人脸部分强化特征,抑制非人脸区域。(就是对整个feature map点乘一个权重矩阵)
- Anchor Assign Strategy:统计一下人脸的像素尺寸,针对性的设计anchor尺寸。如下图
Attention Function,重点来了,看下图:
上图可以很清楚看到模型的attention机制做了什么事情。
- attention分支的监督信息怎么来的?attention最后的部分用一个sigmoid激活函数,将feature mpa的值限制在0-1之间,值越大表示人脸特征越明显。
- 特征金字塔中的anchor与各个gt如何匹配?
可以看得相当清楚,人脸的gt bbox分配给不同的feature map层,彼此不产生交集。anchor与每一层所对应尺寸的gt bbox匹配,iou>0.5就是正样本。 - 作者认为,对于遮挡的人脸,例如口罩等,对检测没有帮助,通过attention机制,抑制这些区域的特征,进而突出非遮挡部分。
遮挡人脸的数据很少,不够训练。因此paper提出随机crop做增强,crop到的图像,在边缘就会类似于遮挡。笔者感觉比较鸡肋的操作。
- 总体来看,融合各种技术的人脸检测方法,最后效果还是很不错的。
2.11 ZCC
ZCC(Seeing Small Faces from Robust Anchor’s Perspective)从anchor角度出发,设计一系列小人脸检测问题的解决方案。对anchor设计非常具有指导性的工作,建议结合原文看。
- Abstract: 提出EMO(Expected Max Overlapping) score,可以从理论上解释低overlapping问题。并基于此理论,提出ASR(anchor stride reduction with new network architectures)、ESA(extra shifted anchors)、FSJ(stochastic Face Shift Jittering)、HFC(Hard Face Compensation)。
Introduction:
- anchor-based检测器将图像上处于空间连续分布的人脸bbox,量化为离散空间中预定义的离散尺度anchor bbox;并通过IOU来评估anchor与人脸gt bbox的相似性(划分正负样本)。
- 训练阶段: 每个人脸gt box与一个或多个anhcor匹配(高IOU就作为正样本),这些匹配上的gt bbox,用于训练分类器、bbox回归器。
- 测试阶段: 通过图像上预定义的离散anchor,提取anchor内特征,用于人脸分类和bbox回归。
- 尽管anchor-based检测器能处理形状、外观的不变形,但是尺度不变形效果却很一般,因为图像中的人脸可能处于任意尺寸,这将导致对小尺度人脸的检测非常具有挑战。看下图:
从(a)中可以看出,anchor-based检测器对大尺度人脸可以保持高召回,但是对小人脸尺度的性能却急剧下降,换句话说,做完分类+bbox回归的高置信度anchor并没有足够覆盖小尺度人脸。 - 我们进一步分析训练开始时,初始anchor与gt bbox的匹配情况:对每一个人脸的gt bbox,我们计算与之最高IOU的anchor,然后基于gt bbox的尺度划分为不同组,在每个尺度组类就散这些最高IOUdefender平均值,如(b),各个尺度上人脸的召回率与其平均IOU得分正相关,因此,小尺度人脸gt bbox与anchor的低IOU得分,将导致很难利用回归器将anchor回归至gt bbox,并最终造成小尺度人脸的低召回。
- 所以paper提出新的anchor策略,提升anchor-based检测器处理尺度不变性的能力。在新设计的网络框架上降低anchor的采样stride;在预定义的anchor中心位置附近设置更加密集的anchor采样;对图像上人脸的gt bbox做随机扰动,以进一步提升gt bbox与anchor的IOU;对低IOU的gt bbox做进一步补偿,以提升其IOU的匹配数目。
Anchor Setup and Matching:
- (a)(b)表示一般的anchor匹配策略的结果,(c)依照EMO score的匹配方案,可以匹配更贴近的anchor,比单独基于IOU的方案更好。
- EMO依照人脸gt bbox的位置分布,通过计算人脸与所有anchor的期望最大IOU,来提升anchor匹配人脸gt的能力,提高召回率。
- IOU定义为$max_{a\in A}\frac{|B_f \cap B_a|}{|B_f \cup B_a|}$
Computing the EMO Score:
- 人脸可能随机出现在图像中任意位置。如fig2(c)假设人脸gt bbox中心位置坐标为(x,y),如绿色”x”所示,定义p(x,y)为图像上人脸位置分布的概率密度函数,然后就有$\int_{0}^{H}\int_{0}^{W}p(x,y)dxdy = 1$,H,W表示图像的高宽,那么依照上面IOU的公式EMO公式可以定义为:
在widerface中,设置anchor尺度合集S为:{16,32,64,128,256,512},并且长宽比为1(人脸多数为方形)。因此在fig2中的每个’+’对应6个anchor,我们假设每个人脸在任何位置的概率都是一样的,也就是说gt bbox的中心位置(x,y)符合平均分布。
x~U(0,W)
和y~U(0,H)
。- 假设人脸bbox中心在四个相邻anchor中心区域内,如下图:
如果想得到最大的IOU,那么gt bbox(绿框)与anchor(红框)中心完全重合。gt bbox中心点与匹配anchor中心点的相对位置为:$(x^{‘},y^{‘})$,很显然也是服从均匀分布的。再继续假设人脸尺度与anchor尺度一致,那么带入到EMO公式中得到新的计算公式:
1
EMO = \int_{0}^{\frac{s_A}{2}}\int_{0}^{\frac{s_A}{2}}(\frac{2}{s_A})^2\frac{(l-x^{'})(l-y^{'})}{2l^2 - (l-x^{'})(l-y^{'})}dxdy
- fig4展示了不同人脸尺度和anchor步长数据家的EMO score。
对一个固定尺寸的人脸,Sa(步长stride)越小,EMO越大。 - 总结一下:anchor的步长越小,人脸检测性能越好。(很显而易见的结论,但是paper运用严密的数学公式量化证明了一下-.-)
Strategies of New Anchor Design:
基于以上证明,提升IOU score的方法从以下两方面设计。
- 降低anchor的stride。ASR和ESA
- 降低anchor与人脸gt box中心点的距离。FSJ
- ASR:如下图
增加feature map的尺寸来降低anchor的stride,相当于降低感受野,是anchor的密度增大。 - ESA:在原图每个预定义anchor的采样中心位置附近,增加额外偏移的anchor。
非常好理解,增加anchor密度而已。paper提到只需要对小尺寸的anchor需要这么操作。从下图也可以看到,对大尺寸也没有太多的提升。 - FSJ:在训练过程中,增加一个图像的随机抖动,综合上面EMO的分析,可以增加匹配的概率,提高匹配anchor的IOU得分。
HFC:从fig7看出,即使用了众多的tricks,小尺度人脸的平均IOU得分还是低于大尺度人脸。paper提出导致这样结果的原因是因为真实人脸的位置和尺度时连续的,但是anchor的位置和尺度时离散的,有些道理。因此提出和S3FD几乎一模一样的策略。
- 首先选择anchor与gt bbox的IOU大于一定阈值的作为正样本
- 如果一个gt bbox与之匹配的anchor,其最大IOU还小于这个阈值,那么这就是一个hard face,将其anchor按IOU降序排列,选择topN的anchors作为与之匹配的正样本。
总结一下,对anchor的一些问题做了细致的描述和证明,并提出了一些有效的方法。用dl做检测的话这些tricks还是非常有必要了解一下。
2.12 PyramidBox
PyramidBox来自工业界的一篇文章。所以创新性不足,工业味十足,都是在已有方法上的进一步优化。话说回来。能做到这样也需要对任务相关工作和背景有很深刻的认识才行。
模型的pipline如下图
- 依然是利用特征金字塔,backbone是VGG16
- LFPN用于feature map的特征融合。融合方法如下图a
- CPM(Context-sensitive Predict Module)如上图b,能够让预测分支更加的wider和deeper。最后在人脸的输出上也使用S3FD的max-out策略,来降低小人脸的false-positive。
- Context-reinforced PyramidAnchors充分利用了上下文的信息。利用一种半监督的方式(基于人脸bbox来预测head和body的bbox)获取近似的上下文特征。
- 在向前运算时仅用人脸检测分支,不使用人头,人体的分支,因此没有额外的计算开销。
- 在训练过程中,为了增加相对应尺寸人脸的数据(一般来说,小人脸比较少),采用一种Data-anchor-sampling的方式(将原图片根据人脸尺寸的缩放尺度来进行resize)。
2.13 FDNet
FDNet菊厂一篇工作,很多工程技巧。
- 模型pipline
- ResNet-101作为backbone
- 在roi pooling前,使用large kernrl-based deformable layer(Deformable Convolutional Networks)建立更加轻量级的feature map。
- anchor设计3个长宽比,6个scale,在训练和测试阶段保留所有小尺度的proposals(<16 pixels)
多尺度的训练和测试
- 训练阶段使用水平翻转和图像增强,图像短边尺寸做5个尺度的的缩放,再多尺度训练
- 多尺度图像测试过程中,每个单独尺寸的图像,不做NMS过滤;得到了每个尺度上检测的proposals之后,再在所有的proposals上使用voted-based NMS。
工程十足,源码中肯定还有更多细节,但是没有公开。
2.14 SRN
SRN基于RetinaNet的sigle-shot的人脸检测方案,并加入focal loss。
整个模型的pipline
- 使用ResNet-50的backbone,包含6层特征金字塔结构。细节参照paper。
- STC(Selective Two-step Classification)通过C2、C3、C4(1st-step)和P2、P3、P4(2nd-step)完成2-stage的分类。1st-step通过阈值过滤掉大部分易分的样本,减少2nd-step分类器所需要的样本量(想到MTCNN)。STC作用于浅层feature map的原因在于细节丰富,对小人脸保持高的召回率,和上面讲的很多工作的思想类似。
- STR(Selective Two-step Regression)通过C5、C6、C7(1st-step)和P5、P6、P7(2nd-step)完成2-stage的回归。浅层的feature map更专注于分类任务,深层的feature map语义信息更加丰富,更加适合bbox的回归(有点强行植入思想的感觉)。
- 总结一下就是1st-step操作对应于fig2上半部分的箭头流程,其中包含anchor的第一次cls+reg;2st-step操作对应fig 2的下半部分流程,包含对anchor的第二次cls+reg。
- loss使用focal loss + smooth L1 loss,是模型更专注hard training examples。
Receptive Field Enhancement:作者提出,在widerface训练集中,有相当一部分的人脸长宽比在1:2附近,所以提出RFE module加入多样化的感受野(有一些道理)
当然,也做了一些数据增强,实现细节参看paper。
为设计的模型讲了一个很好的故事,最终结果不差,所以故事也还能说得通。
2.15 FANet(Feature Agglomeration Networks for Single Stage Face Detection)
FANet和FAN名字有点撞车,但是思路完全不一样,FAN倾向于mask attention操作,FANet强调层次化聚集的single stage。
本文的pipline
- FANet是三层层次化结构。HL作用于三层feature map上,最终的检测进作用于最后一层feature map。模型通过构建top-down层次化金字塔,让参与检测的每个分支都享受高层语意带来的好处。
- 三个level的金字塔通过A-block聚集特征,如下图
- 输入A-block的高低层feature map的通道数比例为1:8,占比均衡,使得高层信息与低层信息融合得较为合理。
- HL(Hierarchical Loss)因为分支众多,所以每一个level都添加一个监督信息,能更好的收敛
最终实验结果显示,不仅检测效果好,速度也挺快。
2.16 DSFD
DSFD是一个single stage dual shot人脸检测算法。dual shot看起来很玄乎,其实就是做了两个层次化的特征金字塔检测分支。
模型pipline如下图:
- 与前面很多工作类似,特别是FANet。DSFD有两个level的分支,第二个分支通过FEM(Feature Enhance Module)产生。
- FEM跟FANet的A-block非常相似,不难理解,如下图
- loss就是简单的相加,只不过first shot中anchor的尺度为second shot中anchor尺度的一半,作者解释说source feature map更适合小尺度人脸的检测,因为分类的语义少,其实就是信息损失没有那么大。
总结下来,没有特别有创新的idea。优化已有的tricks得到了不错的效果。
2.17 DFS
DFS本来不太想列在这里,因为和上面的工作确实有很多的相似,但是为了保持对wider face官网列出文章的完整性,还是决定简单讲一下。
pipline如下
- backbone的模型和FANet的金字塔结构有‘同曲同工之妙’。
- 最后的loss加入了segmentation的监督信号
最后的结果不算太差。
2.17 VIM-FD
VIM-FD融合了SRN,PyramidBox(data-anchor-sampling),S3FD(max-in-out lable + anchor matching strategy)中的思路,并引入FAN中的attention机制,使用DenseNet-121作为backbone,实现SOTA。
模型的pipline如下图,参照了SRN和FAN的思路:
- 在S3FD中使用了max-out bg label操作,用于浅层feature map上减少目标尺度的FP,PyramidBox在征服样本上都使用了类似的操作。在VIM-FD的cls网络中,也用到了这个策略,召回更多的小尺度人脸,并同时减少false positive。
- 借鉴S3FD中的思路,等比例anchor采样策略+基于尺度补偿的anchor匹配策略。
- 类似与PyramidBox中的data augmentation。
融合多种算法的精髓,组成新的模型,效果卓越,复现工作还是不容易啊。
2.18 ISRN
Improved SRN是AAAI2019的一篇工作,相比之前的模型提高了一点点,widerface感觉都已经刷爆了,需要新的数据集。
- 本工作是是在SRN基础上,增加各种tricks,最终达到SOTA。包括:数据增强,性能更加出众的bacbone,COCO预训练,SENet中的SE-Block,分割分支的额外监督信息,分离分类模块等。
模型如下:
上图模型c不在imagenet预训练,而是在coco上预训练,再在widerface上训练
- 本文创新型不是很足,工程tricks支撑它的结果,对以前的工作有很好的认识。更多细节看paper吧,不难理解,就不赘述了。