该模型hybrid-resolution model (HR),来自《finding tiny faces》,时间线为2016年12月网络
虽然你们在目标识别上有了较好的进步,但是检测小物体仍然是一个极具挑战的事情。对于几乎全部当前的识别和目标检测系统而言,尺度不变性是一个必须的特性。可是从实际角度来讲,尺度不变性也只是必定程度的不变性,由于对于一个3像素的和300像素的缩放来讲,的确相差太大了。
而如今大多数的目标检测任务使用的无外乎2种形式来解决尺度不变性问题:ide
- 基于一个图像金字塔进行窗口滑动的方式,如MTCNN;
- 基于ROI-pooling方式进行区域分类,如fast-rcnn。
其实,咱们主要是但愿有一个小模板可以检测小模型,大模板可以检测大模型,那么这时候就涉及到须要针对不一样尺度训练不一样的检测器,并且在预测的时候也得处理屡次,而且也缺乏对应的数据集。因此做者这里为了权衡之间的问题,经过训练一个CNN,并基于不一样的网络层提取对应的feature map(就和ssd同样)。不过这样虽然对大目标有较好效果,对于小的人脸,还须要其余考虑。
函数
- 图像金字塔方法:如(a),传统的方法是创建一个单尺度模板,将其用在图像金字塔上面;
- 不一样尺度采用不一样检测器:如(b),而若是想要利用到不一样分辨率上的信息,那么须要基于不一样的对象尺度构建不一样的检测器(如在一张图片上,检测小脸的一个检测器,检测大脸的一个检测器),而这样的方法在极端对象尺度上仍是会失败,由于可能这个尺度的根本没出现过在训练集中;
- 本文方法:如(c)做者先用粗略的图像金字塔去抓取极端的尺度变化。而后为了提高关于小脸的检测,增长了额外的上下文信息,即经过一个固定大小的感觉野在全部特定尺度上进行抓取,如(d)。而后如(e),基于同一个深度模型,在网络不一样层上提取的特征来定义模板。
ps:在一个网络模型中,采用一样大小的划框在多个feature map上进行局部采样,这样造成的特征叫“超级列(hypercolumns)”,被用在语义分割中《Hypercolumns for object segmentation and fine-grained localization》。测试
要说到尺度不变性,还得追述到SIFT模型,不过随着fast-rcnn等提出的ROI pooing等深度网络的兴起,还有近来基于不一样网络层提取多种尺度信息的SSD(其实就是将图像金字塔转换成特征层金字塔)。做者也有了一些想法和灵感。
做者这里基于ResNet-50做为基底模型,并提取每一个残差快最后一层的feature map做为特征,即(res2cx,res3dx,res4fx,res5cx),这里简写成(res2,res3,res4,res5)。经过对不一样层进行超级列(中央凹)等操做,并基于提取的特征作二值热力图预测(即结果也是一个map,其中每一个值表示以其为中心的人脸出现的置信度)es5
固定大小的划框在多层map下的变化
首先设计了一个实验,首先设计一个固定大小的划窗,而后不断的增长层上的区域,从而达到增长感觉野的目的:
spa
这里还是基于固定大小的划框,而后是否采用中央凹(多层通道)的结果,能够看出若是采用了中央凹,那么就能够提供更多信息,从而检测效果上升;若是没有采用,只是考虑感觉野的增大,发现对大人脸效果是有上升,不过对小人脸却有过拟合的风险。设计
总结:经过感觉野的增大,且保证划框恰好框住对象,此时获得的效果最好,然而固定划框若是框多了,或者少了,会形成过拟合或者欠拟合。若是此时增长多通道的特征,能够起到正则效果,并下降框住太多背景噪音而形成的过拟合,这样就解决了划框大小选择的问题,从而不须要不一样尺度目标都去设计不一样的检测模型了3d
做者还作了实验,如何让模板去对应不一样尺度的目标,
对象
- 他假设采用了一个中等尺寸的模板(50x40),而后去找小的人脸(25x20),若是进行放大两倍,那么结果就从原来的69%上升到75%;
- 反过来,若是当前中等尺寸模板大小为125x100,去找大的人脸(250x200),将这张图片缩小两倍,结果也从原来的89%上升到94%。
能够看出,若是若是模板的大小和人脸大小基本一致,那么就能提高检测结果。
做者猜想,这主要就是基于不一样的尺度目标下,训练数据不充分的缘故。
blog
那么如今问题来了,如何实现多个目标尺度上采用不一样的模板呢?
- 如图7所示,假设咱们定义模板为\(t(h,w,\sigma)\);并假设是用来检测分辨率为\(\sigma\)的目标尺度为\((h/\sigma,w/\sigma)\),好比图7中,用\(t(250,200,1)\)和\((t(125,100,0.5))\)能够同时去检测\(250 \times 200\)的人脸。
那么问题又来了,怎么设定模板大小?
- 假设咱们的训练集有图像和对应的边界框,那么先采用聚类的方式去获取其中的对象尺度,这里采用的距离测度是:
\[d(s_i,s_j)=1-J(s_i,s_j)\]
这里\(s_i=(h_i,w_i)\)和\(s_j=(h_j,w_j)\)是一对边界框,\(J\)表示标准的jaccrad类似度(IOU)。
如今,对于每一个对象尺度\(s_i=(h_i,w_i)\),咱们想知道\(\sigma_i\)设多大合适呢?
- 经过多任务模型方法,直接将每一个\(\sigma \in \Sigma\)一块儿作目标函数;并对每一个对象尺度提取最大的,如图8所示
如图8所示,对于每一个\((h_i,w_i)\)的最优\(\sigma_i\),咱们用一个多任务模型去训练一个混合分辨率(HR),在实测中也符合因此曲线的上限。有趣的是,的确存在不一样策略下的天然惩罚:- 为了找到大目标(高度超过140像素),使用2X进行缩小;
- 为了找到小目标(小于40像素),使用2X进行放大;
- 不然就是用1X的分辨率。
咱们的结果也证实了以前关于Imagenet统计的猜想。
剪枝
上面提到的(hybrid-resolution,HR)中仍是有一些冗余的。例如:模板(62,50,2)能够用来寻找31x25的人脸,但是他同时也和寻找64x50的人脸的模板(64,50,1)相冲突了。如图9,冗余删除以后,甚至有点小提高。本质来讲,咱们的模型能够进一步减小到只包含几个具体尺度模板的集合,并在一个粗粒度的图像金字塔上作计算。