人脸检测
首发于人脸检测
arxiv2015_baidu_DenseBox

arxiv2015_baidu_DenseBox

百度IDL作品,论文格式有点像NIPS;一作黄李超,当年在IDL实习做出的Densebox,现在在地平线;三作邓亚峰,在清华一直研究人脸方向,百度做到了科学家,现在格灵深瞳CTO;


DenseBox在15年初就做出来了,时间比frcnn还早点,只不过写完论文挂在arxiv上的时间比较晚;三年后再学习这篇论文,也觉得有很多优秀的创新,毕竟现在sota的检测方法都是anchor-based的2-stage方法,在15年frcnn还未能一统江湖的时代,DenseBox提出的anchor-free思路算是目标检测里一个特立独行的方案,至于为什么没有如frcnn那么火?我觉得有两个原因:

1 DenseBox只提供了MALF和KITTI上的评估结果,未能在通用目标检测数据集Pascal VOC、CoCo和人脸FDDB上测评(论文中是没有FDDB上测评的,但IDL还是将DenseBox在FDDB上做过测评,也是sota),吸睛度不够;----- 但这个也情有可原,毕竟DenseBox在百度内部,最先也是应用于人脸检测,再迁移至百度无人车项目的车辆检测业务,可能本身设计的出发点就是为解决业务中的实际问题,也不是做研究发论文吧;

2 未能开源,15年同期的fast rcnn、frcnn确实研究做得好,算法层面创新性也很高,性能特别好,而且开源,代码写得十分规范,易于阅读,启蒙很多人走进目标检测的方向;而DenseBox却未能开源,这样大家仅能凭阅读论文来理解,再想办法去复现,但发现同期的frcnn性能辣么好,还开源了,大家就一股脑投入frcnn的怀抱了;


但DenseBox本身还是有很多在2015年十分创新的理念:

1 提出了基于FCN、end2end的多任务目标检测模型,能直接回归目标出现的置信度及其相对位置;---- 在15年做到end2end还是挺厉害的,fast rcnn当时还需要依赖SS、EdgeBox等proposals提取方法,frcnn刚提出不久,通过RPN提proposals达到训练的end2end;DenseBox就做到了end2end,且联合了目标landmark的多任务,要知道联合人脸landmark的mtcnn发表于16年(虽然在mtcnn、DenseBox之前已经有很多multi-task的人脸检测方案);另外对比CVPR2015年大红大紫的FCN,DenseBox在15年初就已完成目标检测中FCN思想的引入,也真是很厉害了;---- OverFeat(ICLR2014)也引入了FCN的思想;

2 为提高小尺度目标的召回率,如fig 3中conv3_4、conv4_4,在网络中引入了上采样操作,将两层的特征融合以得到更大尺度的feature map输出;-----要知道将多层特征金字塔融合来预测bbox的思路发扬光大的FPN,发表于CVPR2017;

3 使用了OHEM做负样本的难例挖掘;----- OHEM可是在CVPR2016获得oral,当然了,难例挖掘在SVM等机器学习方法中早就被使用到了,不过DenseBox就能有这么巧妙的设计,也是相当之厉害;

4 论文中提到了DenseBox因使用图像金字塔,需要若干秒才能处理一张图像是,速度很慢,但后来对DenseBox做了优化后,DenseBox2可以做到了实时检测;---- 一个重要的优化就是:将多层图像金字塔改为类似SSD的多层特征金字塔;


Abstract

1 我们提出了DenseBox,一个统一的、基于FCN的end2end多任务目标检测框架,可以在金字塔图像的所有位置上同时预测bbox分类得分和位置;

2 DenseBox有两个贡献:

2.1 将FCN引入目标检测,可以获得很好的效率和精度;

2.2 将目标landmark定位引入DenseBox的多任务学习中,检测精度可以进一步提高;

3 DenseBox在MALF和KITTI上取得了sota;


1 Introduction

深度学习之前,目标检测一般是通过滑窗(各种位置 + 图像金字塔的多尺度) + hand-crafted特征 + 分类器的组合完成的;FCN给目标检测带来了新思路,FCN也使用滑窗的方式,但可以end2end训练模型,用于提取图像特征,因而能显著提升检测性能;---- 主要是说的OverFeat;

RCNN比OverFeat性能提升很多,包含3-stage:

1 使用Selective Search在图像上生成region proposals,包含所有目标bbox candidates;

2 用CNN在region proposals上提特征;

3 用SVM等分类器判断每个bbox candidate的类别;

后处理:bbox回归,NMS;

RCNN不足:

1 对小尺度目标,如人脸、远处的车辆检测性能一般;----作者认为主要原因是小尺度目标造成feature map上的低分辨率 + 特征缺失,以及缺乏上下文信息,让分类器很难做出准确判断;

2 RCNN各步骤无法做到end2end训练,各个步骤只能单独优化,陷入局部最优;


本文关注一个问题:如何将1-stage的FCN应用于目标检测?然后就提出了基于FCN的目标检测算法:DenseBox,完全解决RCNN中的两个不足:训练end2end,全局最优;不需要region proposals生成步骤;对比之前同样使用FCN + 滑窗的目标检测方法,DenseBox做了更深入的分析和设计,可以解决小尺度目标和遮挡目标的检测;DenseBox还在训练阶段使用OHEM进一步提升模型性能;还将目标landmark定位引入DenseBox的多任务学习中;---- 为验证联合目标landmark定位的多任务方法之性能,作者还把KITTI中汽车目标手动做了关键点标定;


DenseBox贡献三个:

1 将FCN引入目标检测,能在高度遮挡、大尺度变化的目标上有很好的性能;

2 将目标landmark定位引入DenseBox的多任务学习中,检测精度可以进一步提高;

3 DenseBox在MALF和KITTI上取得了sota;


2 Related Work

目标检测前CNN时代,检测流程分三步:

1 使用hand-crafted特征(如HOG、SIFT等)在图像每个位置上密集地提取特征;

2 使用DPM、PSM将局部形变特征拟合成一个整体;

3 使用SVM、随机森林做滑窗内特征的分类,判断是否包含目标;

缺点就是每个步骤都独自优化的,只能达到局部最优,而非全局最优;


CNN在人脸检测中应用较早,Rowley:实现了一个朝上正脸的人脸检测器,通过路由网络(router network)在图像金字塔上评估人脸的旋转角度,并纠正至正脸检测;----PCN也是基于该思路:zhuanlan.zhihu.com/p/37,参照PCN中fig 2;


OverFeat:训练模型在图像金字塔中预测多类bbox;---- train a convolutional layer to predict the box coordinates for multiple class-specific objects from an image pyramid;

RCNN + MultiBox:MutliBox生成region proposal,RCNN利用proposal做下一步bbox分类 + 回归;

YOLO:基于网格,在图像中直接预测bbox和分类得分;

现有目标检测算法一般分为两步:1 proposal生成;2 proposal的分类 + 回归;YOLO、frcnn将proposal的生成和bbox分类融合到了1-stage、2-stage中,但frcnn等通用目标检测算法在人脸检测领域效果一般,主要原因是人脸尺度太小,frcnn单尺度feature map上的anchor无法覆盖到人脸这么大的尺度变化,frcnn在此复杂环境下召回率很低;


人脸检测中已引入了multi-task思路,参考文献[6]、[21]、[46]中引入人脸检测、特征点定位、姿态估计、表情预测等多任务策略;


3 DenseBox for Detection

DenseBox流程如fig 1,有以下几个关键点

1 使用图像金字塔,输入CNN,同时预测bbox + 分类得分;

2 DenseBox除NMS步骤外,整个模型都是全卷积操作,没有全连接层,也不需要region proposal生成步骤;

3 图像做了下采样 + 上采样,和分割网络FCN有相似之处

4 直接在feature map预测输出bbox结果


测试阶段:输入m x n尺度图像,DenseBox输出(m / 4) x (n / 4) x 5通道的feature map;假定pt = (xt、yt),pb = (xb、yb)为输出feature map空间上bbox的左上、右下角点坐标,那么在该bbox内的每个像素点(xi、yi)可以通过一个5-d向量表达该bbox:---- 5-d向量也就对应了输出5通道的feature map;

t^i = {s^, dx^t = xi - xt, dy^t = yi - yt, dx^b = xi - xb, dy^b = yi - yb};---- 论文中该公式有一处写错了,应该是dx^t = xi - xt;

s^:目标的置信度得分;

dx^t、dy^t、dx^b、dy^b:像素点(xi、yi)到bbox四个边界的距离;

因为是全卷积网络,最后在输出的(m / 4) x (n / 4) x 5通道的feature map上,根据5-d向量可以得到海量bbox坐标 + 置信度得分,在经过NMS过滤 + 阈值过滤求得最终检测框


如果以上概念难以理解的话,配合UnitBox的这张图,就很容易理解了:红点即像素点(xi、yi),红点到bbox四个边界的距离即dx^t、dy^t、dx^b、dy^b;

3.1 Ground Truth Generation

fig 2为DenseBox训练所生成的gt,frcnn等目标检测算法训练时只需要原始图像 + gt bbox;DenseBox也只需要原始图像patch + gt bbox,但最终参与训练的是fig 2中右边的5通道feature map + 原始图像patch5通道feature map如何由gt bbox生成?这就是本节需要介绍的内容;

作者认为frcnn这种使用原始图像 + gt bbox不是很有必要,因为原图中包含了太多的背景,训练耗费大量时间在背景区域的计算与判定上,意义不大;DenseBox的做法就是使用crop的图像patch参与DenseBox的训练,只要crop出的图像patch包含人脸,且有足够的背景信息就行(crop large patches containing faces and sufficient bg information for training);

本文中,DenseBox使用crop出的单尺度图形patch做训练,但使用多尺度的图像金字塔做测试;


具体操作:DenseBox训练有点图像分割图像的路子,首先从原图中crop出图像patch,再resize至240 x 240,该图像中心位置包含一个高50 pix左右的人脸gt bbox;---- 这个操作很容易实现,相当于从原图 + gt的图像中crop出patch,但这个patch必须要保证人脸在patch中心,且resize后gt bbox大小变为50 x 50,那么具体crop多大的patch子区域,就需要做个等比例计算即可;举个栗子:原图中一个人脸gt bbox为80 x 80,我们需要保证resize后该人脸尺度为50 x 50,那么原图中需要crop出的patch子区域为240 x 80 / 50 = 384,也即384 x 384子区域即可;

那么240 x 240大小的,包含50 x 50人脸gt bbox的patch子区域,就是fig 2中的左图,最终生成的fig 2中右图gt feature map尺度为60 x 60 x 5,也即做了4倍下采样;

具体看看5通道如何构成:

通道1:可以参照fig 2右边中的那个白点,patch中的一个gt bbox,会对应一个圆形区域,圆形区域中心与bbox中心重合,半径rc设置为gt bbox高的0.3倍 ---- 这就是个区域的gt,只不过不是全覆盖gt bbox,只覆盖中心区域附近;

通道2 ~ 5:与第三节一致,也是UnitBox里的做法,具体就是在gt bbox里的每个像素位置,距离该bbox四个边界的距离;不在gt bbox里面的像素,在feature map上直接设置距离为0即可 ---- distance between the pixel location of output map between the left top and right bottom corners of the nearest bounding box;

经过以上操作,feature map上的每个像素都可以作为一个独立的单元,对应五个通道中,通道1表示是不是处于人脸区域,如果是,则通道2 ~ 5可以直接计算出所对应bbox的位置;


如果原图中人脸比较密集,可能一个patch中有多个人脸Si,如果其他人脸的尺度Si与patch中心位置人脸Sc的尺度比例在0.8 ~ 1.25之间(对应的高pix相除即可),则将该人脸Si也设置为正样本区域,否则设置为负样本区域;那么就很好理解了:gt feature map的通道1,正样本区域设置为1,负样本区域设置为0;


作者还认为DenseBox中gt feature map的生成方式很屌屌哒:分割算法生成gt feature map都是根据标注的gt区域(多边形 or 不规则区域)直接生成的,但DenseBox中是根据感受野生成的,gt feature map上一个像素设置为1,当且仅当它在gt bbox之内,且满足特定的尺度和感受野范围;---- the output pixel is labeled to 1 if it satisfies the constraint that its receptive field contains an object roughly in the center and in a given scale;

这点作者的解释相当之模糊,简单点说就是被检测图像要过DenseBox网络,经过若干层卷积得到feature map后,我们得到的该feature map上每个像素的感受野大于50 x 50,我们已知gt bbox的尺度为50 x 50,那么这个感受野就包含了人脸bbox,也就是上面一段:its receptive field contains an object roughly in the center,240 x 240就是:in a given scale;也就是说其实输入的图像patch尺度240 x 240,人脸尺度gt bbox都是和DenseBox本身网络结构有关的,经过若干层卷积后,要保证用于预测人脸的feature map上感受野要包含人脸的50 x 50尺度,不然预测是没有意义的;


3.2 Model Design

DenseBox整体结构如fig 3,共16层卷积操作,复用了VGG19的前12层网络参数,conv 4-4后接4个1 x 1的conv层;从fig 3中可知,其实又分为两个分支:两个1 x 1的conv层最终输出1通道feature map,用于人脸分类得分的计算;另两个1 x 1的conv层输出4通道feature map,用于人脸bbox回归的计算;---- 作者认为每个分支的最后一个1 x 1卷积操作,就像滑窗上的全连接操作;---- 这个意会下就明白了,不深入讲了,讲的话又得讲半天;


Multi-Level Feature Fusion

如fig 3中conv 3-4与conv 4-4的feature map特征融合,做的是concate;

作者认为低层feature map上的特征,包含更多目标的局部细节信息,更加方便判断目标的局部区域;---- Part-level feature focus on local details of object to find discriminative appearance parts,;

高层feature map上的特征,因为有更大的感受野,包含更多的语音信息和上下文信息,更加易于识别目标的全局信息;---- object-level or high-level feature has a larger receptive field in order to recognize object and brings in context information to predict more accurate result;

原理讲清楚了,实操就很简单了,conv 3-4与conv 4-4的feature map特征做concate;conv 3-4的感受野为48 x 48,几乎与人脸gt bbox尺度相当,conv 4-4的感受野为118 x 118,因此可以融合更多的全局信息 + 上下文信息;此外,conv 4-4 feature map的尺度是conv3-4尺度的一半(多了个pool3操作),因此在做concate之前,需要先对conv 4-4做个双线性上采样,确保二者尺度相同;----因为只做concate,而非element-wise相加,就不需要保证通道数相同了;


3.3 Multi-Task Training.

DenseBox共16层卷积操作,复用ImageNet上预训练的VGG19中前12层网络参数,剩余4层使用xavier做初始化;接下来看看loss;

分支一:分类loss,feature map上的pixel-wise L2-loss:

pred feature map上每个像素位置输出是否为目标的置信度得分y^,gt feature map每个像素值y* ∈ {0,1},分类loss就是:

作者说在DenseBox中L2-loss性能就很好了,就没尝试诸如hinge loss、cross-entropy loss等;

分支二:bbox回归loss,也是feature map上的pixel-wise L2-loss:

假设某个像素点预测的bbox坐标:

gt bbox坐标:

那么每个bbox的Lloc L2-loss可以计算为:

注:以上两个分支都是以一个像素点上的pixel-wise操作为例,具体到feature map上,就是feature map上每个像素点都要算一遍了;


3.3.1 Balance Sampling

本小节主要介绍DenseBox中使用的难负样本挖掘策略,以平衡每次训练中正负样本的比例;

问题描述很简单:每次mini-batch迭代中,正负样本数量差异很大,负样本占据绝大多数;如果这些负样本都用于训练,那么最终的loss将会偏向于海量的负样本;同时,如果使用那些分类边界上的模棱两可的正负样本训练,模型又学不到有价值的信息,性能也会下降(detector will degrade if we penalize loss on those samples lying in the margin of positive and negative region);本文做法很简单:使用一个binary mask,判断feature map上的每个pixel是否参与到模型的训练;


Ignoring Gray Zone

灰色区域用于定义正负样本区域的边界;处于灰色区域的像素不会被当做正负样本,也不用参与训练,loss权重直接置0;在输出feature map上每个位置上标注为负样本的像素(x, y),如果它附近两个像素距离内有正样本像素,就将该像素(x, y)设为灰色像素;---- For each non-positive labeled pixel in the output coordinate space, its ignore flag Fign is set to 1 only if there is any pixel with positive label within Rnear = 2 pixel length;---- 这样做的意图也很明显,就是那些与正像素比较靠近的负像素,为了避免混淆和模棱两可,干脆直接忽略之;


Hard Negative Mining

本小节介绍DenseBox使用的OHEM策略,选择难负样本(就是每个pixel)参与训练,而非从负样本中随机筛选;通过OHEM策略,难负样本有更高概率被选中参与训练,这样就避免了学习一些分类过于简单的负样本,整个训练过程不仅收敛速度更快,而且也会更鲁棒;

DenseBox中使用的是online bootstrap,跟OHEM相似;mini-batch中,所有样本先做次前向操作,对所有pixel输出依照公式(1)的loss作降序排序,选择top 1%作为难负样本;并保留所有的正样本(positive labeled pixels),控制正负样本比例为1:1;所有的负样本,一半来自从non-hard negative(也即剩余top 99%负样本)中随机取样,一半来自从top 1% hard-negative中的采样;每个mini-batch中,通过设置Fsel = 1来标识样本是否被选中(正样本 + 难负样本 + 随机选中的负样本);


Loss with Mask

对于一个pixel样本 t^i = {y^i,d^i}(5-d,y^i:分类;d^i:bbox坐标)基于以上定义的标签Fign和Fsel,最终的掩码表示为M(t^i)

最终联合mask + 公式(1)的分类loss + 公式(2)的bbox回归loss,DenseBox的多任务损失函数表示为:

公式比较容易理解,如Fast rcnn几乎一致:

θ:模型要学习的参数;

[y*i > 0]:正样本y*i = 1,才需要计算bbox回归loss,负样本没有标签,就不需要计算bbox回归loss;

λlos:权重,平衡分类、bbox回归loss;

gt d*需要做一遍正则化操作,具体地,除以标准gt bbox高,也即输出feature map中gt bbox 50 pix / 4,正则化操作后,λlos设置为3;


Other Implementation Details

训练时,正样本:输入的240 x 240 pix patch,且patch中心位置包含一个特定尺度范围(50 x 50 pix附近)内的正样本,每个patch中正样本附近可能包含若干个负样本;

负样本:random patch:从图像中随机尺度上随机crop出patch(randomly crop patches at random scale from training images),再resize至240 x 240 pix patch输入网络;

训练时,控制正样本与random patch的负样本比例为1:1;

数据增强:对正负patch做随机左右翻转,25 pix的平移,尺度变换[0.5,1.25];

此外,Loss和梯度会根据每次迭代中参与训练的pix数目做归一化操作;---- The loss and output gradients must be scaled by the number of contributing pixels, so that both loss and output gradients are comparable in multi-task learning


3.4 Refine with Landmark Localization

本小节主要介绍DenseBox中增加landmark定位分支(通过增加若干全卷积分支实现),以提升目标检测准确度的工作,并可以联合landmark热度图和人脸得分热度图进一步提升目标检测精准度;


fig 4中,为landmark定位新增了一个分支,如果要输出N个landmark,那么landmark定位分支共输出N通道的feature map,feature map上每个像素表示该位置为一个特定landmark的概率(each pixel represent the confidence score of being a landmark at that location);从这点上来看,landmark分支的gt feature map和检测分支的gt feature map是非常相似的,二者的区别在于:检测分支的gt feature map是四通道,landmark分支的gt feature map是N通道,N对应要输出的landmark数目;---- 有多少landmark点,就输出多少通道即可,因为feature map上每个像素点位置已经包含了landmark的位置信息了;---- gt的生成方式也很简单,以fig 4为例,如果有72个landmark点,那么输出feature map就是72通道,每个通道上按一定规律(例如人脸landmark点按顺时针获取等),将每个gt feature map上属于该通道的landmark位置设置为1,其他位置置0即可;


具体地,以landmark Lik为例,表示第i个目标的第k个landmark点,其对应的gt为第k个输出feature map上对应坐标位置的一块区域 ---- its ground-truth is a positive labeled region located at the corresponding location on the k-th response map in the output coordinate space;这块区域可以认为是一个圆形区域,其半径在文中设置为rl = 1 pix,也就是对应的一个点了

与人脸分类loss分支类似,landmark定位Loss Llm也使用L2-loss损失函数,用于求取feature map上每个像素点pixel-wise值的欧氏距离;同样也如分类分支一样,设置OHEM和 ignore region;


最终的操作如fig 4右下,最终输出的refine分支,将concate分类分支的score map(conv5_2_det_1x1x1)和landmark定位的score map(conv5_2_landmark_1x1x72)作为输入,最终用来进一步提升检测结果的性能(targets on refine of the detection results);目标就是通过结合高层feature map的空间信息,学习landmark置信度得分 + bbox得分,以进一步提升检测准确度;refine detection loss分支定义为Lrf,与分类分支Lcls几乎一致,但输出的feature map为conv6_3_det_1x1x1的refine分支输出,最终全部loss函数可表示为:

λdet、λlm为三个任务的比例因子,实验中分别设置为1、0.5;


批注:

集合公式(4)、(5),可以发现:Ldet = Lcls + Lloc,Lfull = Ldet + Llm + Lrf,也即Lfull包含了四个loss分支,就是说同时学习四个任务;

检测Loss Ldet比较容易理解,就是常规的bbox检测 + 分类loss;Llm也比较容易理解,就是landmark定位loss;三者的结合在MTCNN(多一个landmark loss)、Face R-CNN(多一个center loss)中比较常见,不再赘述;

Lrf我理解了半天,该分支concate了landmark分支和bbox分类分支,那么通道数为72 + 1,变为73通道,再经过各种conv、pooling、up-sampling + conv6_3_det_1x1x1操作,结合fig 4、5,可以发现feature map仍为(240 / 4) x (240 / 4) x 1大小,这时候可以发现,其输出的feature map大小与分类分支输出的feature map大小一致,那么到底是如何进一步提升目标检测精度的?论文中没有讲,我的理解就是分类分支有一个feature map输出,refine detect分支也有一个feature map输出,且refine detect分支还融合了landmark定位分支的feature map + 分类分支的feature map,这样对是否为目标的判定就会更准确,最终判断patch中是否包含目标时,也综合考虑这两个分支的结果,这样就可以达到减少很多误检之目的了;


3.5 Comparison

DenseBox的特点为将目标检测作为一个回归任务,并提供了end2end的训练、测试框架;以下比较DenseBox与其他目标检测算法的异同:


Traditional NN-based Face Detector

特指在2012年CNN重新火热之前,基于CNN的人脸检测算法;

Rowley:通过图像金字塔 + 滑窗操作,使得网络只需要处理特定尺度范围的人脸,实现了一个朝上正脸的人脸检测器,通过路由网络(router network)评估人脸的旋转角度,并纠正至正脸检测;----PCN也是基于该思路:zhuanlan.zhihu.com/p/37

DenseBox与之有很多类似的地方,区别在于使用了更先进的CNN设计理念;


OverFeat

OverFeat是第一个联合分类 + 定位任务至一个CNN网络中的算法;在测试阶段,OverFeat没有使用滑窗金字塔方式生成proposals,而是使用FCN的方式生成proposals,这样可以省去很多重复计算(差异可以参照cascade cnn、mtcnn两者生成proposals的方式);

OverFeat不足是其在训练阶段,分类和定位任务仍然是分开训练的,且为了得到检测结果,还需要做复杂的后处理工作;DenseBox与OverFeat的不同之处在于:分类 + 检测 + landmark定位的多任务联合训练,且做到了end2end;


Deep Dense Face Detector (DDFD)

DDFD:基于CNN的人脸检测算法,作者声称在人脸检测上性能优于RCNN;但DDFD并非end2end,且将分类预测、bbox定位分割为两个任务,且为2-stage;DenseBox的优势为可以直接做到end2end的训练与优化,并可以联合landmark的多任务进一步提升模型性能;


Faster R-CNN

frcnn使用2-stage预测目标,step-1 RPN用于生成proposals,与step-2的fast rcnn共享了卷积层的参数;与DenseBox差异:

1 RPN需要预定义anchor尺度和长宽比,DenseBox不需要;

2 RPN是在多尺度目标上训练(简单点说就是各种尺度目标一起梭哈训练一波,不会专门用某个模型处理某个特定尺度的目标),好处就是单尺度训练 + 测试,都不需要金字塔操作;DenseBox训练是保证所有目标都在240 x 240 patch中的50 x 50 pix左右,这样训练的时候就是单尺度操作,但测试的时候,就需要多层图像金字塔,将目标尽量resize到DenseBox能处理的尺度范围;

3 RPN和DenseBox的训练细节也有很多差异,比如gt的生成、联合landmark信息等等;


MultiBox

MultiBox通过训练一个CNN生成proposals,就相当于RPN中的生成二分类bbox;MultiBox生成的是800个没有平移不变性的anchor,但DenseBox生成的bbox和RPN一样,都是具有旋转不变性的;因为DenseBox输出feature map相当于原图的4倍下采样,且feature map上每个像素点理论上都可能输出bbox,所以DenseBox相当于在原图上stride = 4的密集bbox滑窗采样;


YOLO

DenseBox和YOLO 的相同点:1 都没有使用anchor;2 都可以做end2end的训练 + 测试;

不同点:主要体现在输出层上,YOLO输入448 x 448分辨率图像,输出 7 x 7网格feature map,每个图像仅预测49个bboxes;DenseBox的不同之处在于,通过conv3_4、conv4_4的上采样+特征concate操作,保证了feature map有较大的尺寸,未损失过多的细节信息,从而更容易检测小尺度目标和高重合度目标;


4 Experiments

将DenseBox在MALF和KITTI上测评,同时评估增加了landmark多任务的模型性能提升效果;

4.1 MALF Detection Task

MALF包含5000张人脸数据,只能用于做评估,未提供训练数据集(参照wider face:zhuanlan.zhihu.com/p/40),对比FDDB,包含人脸更多的多样性;

Training and Testing

训练集:从网上收集的训练数据31337张,81024个人脸,每个人脸如fig 5中标注72个landmark;

训练两个模型:M1:只使用bbox分类+定位的两任务;M2:M1+landmark定位的三任务;

ImageNet上预训练的VGG19初始化,参与训练的patch中人脸尺度在50 pix 高左右,尺度随机resize至0.8 ~ 1.25倍;测试阶段:对图像做长边resize,确保图像长边不超过800 pix,然后就是图像金字塔操作,金字塔尺度为2^(-3) ~ 2^1.2,stride2^0.3,这样DenseBox可检出人脸尺度高度范围:20 pix ~ 400 pix,缺点就是,DenseBox上一张图像需要若干秒才能检出人脸;MALF上NMS的IoU阈值设置为0.5;


Results

作者训练了三个版本的DenseBox在MALF上测评:

1 DenseBoxNoLandmark:没有加入landmark的多任务训练;

2 DenseBoxLandmark:加入landmark的多任务训练;

3 DenseBoxEnsemble:集成了10个不同迭代次数的DenseBox + landmark多任务;

如fig 6(a),添加landmark任务能显著提升性能,模型集成也能提升性能;fig 6(b)中与其他人脸检测算法在MALF对比,发现DenseBox是sota;

4.2 KITTI Car Detection Task

KITTI主要包含车辆和行人两类数据,训练 / 测试:7481 / 7518张图像;训练集中共有51867个标注目标,其中28742个为车辆标注;KITTI中车辆检测的挑战是,包含很多小尺度和遮挡的车辆目标(< 40 pix);

Training and Testing

与MALF上一样,在KITTI训练集上训练两个模型:M1:无landmark任务;M2:有landmark任务;

因为KITTI未提供车辆的landmark信息,所以作者为所有大于50 pix像素的大尺度车辆都标注了8个landmark点(如fig 5),最终标注了7790个车辆目标,所有车辆数据的27%;

测试流程与MALF上一致,因为图像中车辆目标过小,所以图像金字塔中没有做下采样;

KITTI上的车辆检测评估标准与通用目标检测略微有点不一样,KITTI的IoU阈值设置为0.7,只有与gt IoU > 0.7才会被认为是一个正检(true positive bbox),而如pascal voc、MALF,设置的阈值是0.5;此外,KITTI数据集上,我们设置的NMS IoU阈值为0.75;


Results

结果如table 1,即使是只做了部分landmark标注(27%),对比完全没有使用landmark标注,性能也有提升;作者认为KITTI上landmark多任务带来的性能提升没有MALF强,是因为KITTI上只标注了27%的车辆目标,标注量还不够,此外KITTI上只标注了8个landmark点,但MALF上标注了72个landmark点,可以发现DenseBox效果还是挺不错的,霸榜KITTI长达四个月的sota,后来才被其他算法超过;

5 Conclusion

1 我们提出了DenseBox,一个end2end的统一检测框架,可通过联合目标landmark信息的多任务训练提升模型性能,

2 文中分析了DenseBox与其他检测算法异同,介绍了DenseBox的优势,DenseBox在MALF、KITTI上取得了不错的性能,充分说明当anchor生成失败时,DenseBox有很好的鲁棒性

3 Densebox速度很慢,需要若干秒才能处理一张图像;在DenseBox2中,我们将在KITTI、人脸检测任务上达到实时处理;


MALF、KITTI上性能如fig 7:


论文参考

1 arxiv2015_DenseBox: Unifying Landmark Localization with End to End Object Detection

编辑于 2018-07-21

文章被以下专栏收录