论文:《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》。可在google学术、百度学术下载。
一、Introduction
卷积网络的优点:end to end,由像素对应到最终的类别
缺点:需要大量已标记的样本
本文主要介绍了利用OverFeat进行分类、定位和检测这三大视觉任务。
1. 分类:
图像中通常包含一个大型对象,每张图像分配一个该图像中主要对象的label,允许5个prediction来找到正确的label,因为图像中可能含有多个其他对象。
2. 定位:
定位通常与分类一起。
图像中通常包含一个大型对象,除了需要给出5个prediction,还需要返回图像中主要对象的bbox (bounding box),且bbox与GT的IoU必须达到50%。每个bbox必须标注为正确的label,即bbox和label不能分离。
3. 检测
与分类和定位不同,每张图像都可以由任意数量的object (也可以没有object),评价标准是mAP。
分类和定位共享数据集,但是检测需要额外的数据(因为object更小)
二、Classification
训练集:ImageNet (120W, C=1000)
其中,训练的图像不是原始图像,而是 fixed crop。把图像缩放为最小边长为256 pixels,然后随机截取5个大小分别为221x221的crop,水平翻转后变为10个。然后进行训练。
OverFeat的网络结构为8、9层(快速版和精确版)。
关于stride,需要注意,stride大虽然有利于速度,但会损害准确性。
Multi-Scale Classification:
传统的检测/定位算法是固定image不变,采用不同的sliding window来支持不同尺度的物体。
对于CNN,sliding window的大小就是训练时input的大小,是不可改变的。所以,CNN支持多尺度的方法就是固定sliding window的大小,改变image的大小(将图像resize到对应的尺度上)。
sliding window的 stride = 所有Conv layer和Pooling layer的stride的乘积。
sliding window的 size = 第一个FC层input size
本文在分类(即测试)时,采用的是金字塔+sliding window的方法。
即对图像做不同尺度的缩放,对不同尺度的image进行卷积,得到不同尺寸的feature map,然后用固定大小(i.e.5x5)的sliding window以等距步长在feature map上滑动,对每个sliding window进行分类。
——————————————2018/03/18更新————————————————————–
OverFeat得名于此。Feat即feature,over feat就是说我们得到了不同尺寸的feature map,并且在feature map上遍历。
———————————————更新完毕—————————————————————–
需要注意的是,滑动窗口的stride根据上面的公式,一般而言是比较大的。这会造成feature map上某些位置无法采用得到。本文在layer-5 层max pooling之前做了一个offset处理:针对feature map,pooling filter分别从(0,0),(0,1),(0,2),(1,0),……,(2,2)处开始滑动,得到9个不同的feature map。即每个尺度得到9个feature map。
我们最终分类是通过这样的步骤:
1.在每个尺度下,去每个类的最大值,这样构成C维向量;
2.对不同尺度的C维向量取均值
3.取平均化后的C维向量的Top1或Top5作为预测的类
三、Localization
定位模型与分类模型在卷积层方面完全相同,都是用于提取特征。只是最后用回归层取代分类层,最后将回归预测的bbox与分类结果结合起来。
因此我们固定分类网络的卷积层(1-5层),即参数不需变动。单独训练回归层(利用预测框与GT的L2 loss来训练)
回归层的输出层是class specific的,即对于每个类,都需要单独训练最后一层。深度为1000,代表1000个类,输出1000个bbox,每个bbox对应一类。
回归层有两个FC层,单元为4096,1024.(可能是交叉验证得到的)
定位时,对每个尺度同时运行分类网络和回归网络。这样,分类网络给出类别的概率,回归网络为每个类预测一个bbox。这样对于每个bbox,就有一个置信度与之对应。
置信度:分类器给出预测类别的概率,而分类器本身的结果是否可靠是根据置信度来评判。
bbox最初都是grid,慢慢合并成不同尺度和尺寸的box。
合并预测
1.在6个尺度下运行分类网络,在每个尺度下选取top-k个类别,即对每张图片预测类别,放在Cs集合中(这里面是一张图片的s尺度下类别集合)。
2.在每个尺度s下,运行回归网络预测bbox,将Cs中每个类的bbox放在Bs集合中。
3.将各个尺度的Bs取并集,为B。
4.对bbox进行融合:
取b1,b2
计算math_score(两bbox交集的中心与这两个bbox中心的距离之和)
如果match_score超出阈值t,则不合并这两个bbox
如果match_score小于阈值,就在B中删除不b1,b2.将merge_box(b1、b2的坐标平均值)放入B中。
- 1
- 2
- 3
- 4
最终的结果是得到带有最高置信度的bboxes。
置信度低的bbox会在最后的detection image中消失(比如其他的小物体,非图像中的主要物体),但不仅仅是因为更低的置信度,还因为他们的bbox集合Bs不想熊一样连续,缺乏bbox的一致性,从而没有持续的置信度积累。
四、Detection
是分类和定位的结合。不同的是,一张图片可能多个位置同时训练,且图片中没有物体的时候,需要预测背景。
注意:使用密集的sliding window会增加false postive。
五、参考文献:
1.https://www.cnblogs.com/yinheyi/p/6232152.html (讲分类、FCN讲的不错)
2.http://blog.csdn.net/smf0504/article/details/52745059