计算机视觉有三大任务:分类(识别)、定位、检测,从左到右每个任务是下个任务的子任务,所以难度递增。OverFeat是2014年《OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks》中提出的一个基于卷积神经网络的特征提取框架,论文的最大亮点在于通过一个统一的框架去解决图像分类、定位、检测问题,并提出feature map上的一个点可以还原并对应到原图的一个区域,于是一些在原图上的操作可以转到在feature map上做,这点对以后的检测算法有较深远的影响。它在ImageNet 2013的task 3定位任务中获得第一,在检测和分类任务中也有不错的表现。
OverFeat分类任务
文中借鉴了AlexNet的结构,并做了些结构改进和提高了线上inference效率,结构如下:
相对AlexNet,网络结构几乎一样,区别在于:
去掉了LRN层,不做额外归一化操作 使用区域非重叠pooling 前两层使用较小的stride,从而产生较大的feature map,提高了模型精度
- Offset Pooling 分类任务中一大亮点是提出利用Offset Pooling做多尺度分类的概念,在一维情况的解释如下:
a图代表经过第5个卷积层后的feature map有20个神经元,选取stride=3做非重叠pooling,有以下3种方式:(通常我们只使用第一种)
△=0分组:[1,2,3],[4,5,6],[7,8,9],...,[16,17,18] △=1分组:[2,3,4],[5,6,7],[8,9,10],...,[17,18,19] △=2分组:[3,4,5],[6,7,8],[9,10,11],...,[18,19,20]
在二维情况下,输入图像在经过FCN及第5个卷积层后得到若干个feature map,使用3x3 filter在feature map上做滑动窗口(注意此时不在原图上做,节省大量计算消耗)。按上图的原理,滑动窗口总共要做9次,从(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)处分别滑动。得到的feature map分别经过后面的3个FC层,得到多组特征,最后拼接起来得到最终特征向量并用于分类。
- Inference自适应输入图片大小 训练模型时往往采用的是固定大小图片(后面的SPP-net、Fast R-CNN等模型通过SPP或ROI pooling可以允许输入大小可变),当inference阶段遇到比规定大小更大的图片时怎么办?可以利用Fully Convolutional Networks(《Fully Convolutional Networks for Semantic Segmentation》)的思想:把卷积层到全连接层映射看成对整张图的卷积操作,把全连接层到全连接层的映射可以看成采用1x1卷积核的卷积操作。以下图说明:
绿色代表卷积核,蓝色代表feature map,当输入大于规定尺寸时,在黄色区域会有额外计算,最终的输出也不是一个值而是一个矩阵,可以用各种策略输出最终结果,比如一种简单做法是用矩阵平均值作为最终分类结果。
OverFeat定位任务
- 回归训练 相对于分类问题,定位问题可以与其共享前1~5层网络结构,这种方式也被后面的模型所借鉴,区别是增加了一个l_2的回归损失函数,基本思路是对同一张图缩放产生多尺度图片做输入,用回归网络预测Bounding Box(后面简写为BB)后再做融合,需要注意回归层是与类别相关的,如果有1000个类则有1000个版本,每类一个。回归示意图如下:
第5层pooling结果作为输入,共256个通道,以FCN的思想理解,先走一个4096通道的全连接层再走一个1024通道的全连接层,与前面类似使用Offet Pooing和滑动窗口对每类生成一个4通道矩阵,4个通道分别代表BB的四条边的坐标。
- 网络输出 回归网络的输出例子如下,单图下生成多个BB的预测,这些BB倾向于收敛到一个固定位置并且可以定位物体姿势多样化的情况,当然计算复杂度不小,所以没法用到实时检测中。
- 预测融合策略 a. 同一幅图在6种不同缩放尺度下分别输入分类网络,每种尺度下选top k类别作为标定,用表示; b. 对任意尺度s分别输入BB 回归网络,用表示每个类别对应的BB集合; c. 将所有合并为大集合; d. 重复以下过程直到结束: 其中match_score为两个BB的中心点之间的距离及BB重合区域面积之和,box_merge为两个BB坐标均值,过程很好理解:所有分类(如可能有熊、鲸鱼等)的BB被放在一个大集合,多尺度得到的分类集合中,正确分类会占有优势(置信度、匹配度、BB连续度等),随着迭代的过程正确分类的BB被加强,错误分类的BB被减弱直到消失,不过这个方法确实复杂,可以看到在后来的算法有各种改进和替换。
OverFeat检测任务
与分类类似但需要考虑位置信息,同样采用网络结构共享特征提取,在预测分类中还需要加“背景”这一类。
代码实践
可参见:OverFeat