1 Introduction
1.1 CNN的特点(与矩阵乘法相比):
(1) 权值共享(输入共享卷积核的权值)
(2) 稀疏交互(卷积核的参数远少于矩阵乘法所需的参数)
(3) 等变表示(平移不变性)。
1.2 end-to-end learning
传统的机器学习往往由多个独立的模块组成,比如在典型的自然语言处理中,包括分词、词性标注、句法分析、语义分析等多个独立的步骤,每一个步骤都是独立的任务。(非端到端)
端到端的学习是指,在训练过程中,从输入端(输入数据)到输出端会得到一个预测结果,与真实结果相比较会得到一个误差,这个误差会在模型中的每一层传递(反向传播),每一层的表示都会根据这个误差来做调整,直到模型收敛或达到预期的效果才结束。
1.3 ImageNet数据集的特点
目标大多处于图片的中心位置,感兴趣的物体在尺寸和位置上是多样的。
1.4 作者提出的观点
1.4.1 idea1
利用窗口滑动的方法应用卷积神经网络在图片的不同位置和缩放比例。
缺点: 视窗可能只包含物体的一部分(如狗头),而非整个物体 -> 导致能够进行目标分类,但是无法进行定位和预测。
1.4.2 idea2
对每一个视窗都进行物体分类,同时进行物体位置的预测和 bounding box的尺寸预测
1.4.3 idea3
积累每个位置和尺寸对应类别的置信度
2 视觉任务
2.1 分类(classification)
是什么(选取TOP5)
2.2 定位(localization)
对于TOP5种猜测,分别返回对应的bounding box(50%以上的覆盖率认为是正确的)
2.3 检测(detection)
在哪都有什么?
关于这三个任务的介绍可以查看这里。
在本论文中,分类和定位利用相同的数据集,检测由于物体比较小,需要额外的数据集。
3 分类任务
3.1 数据集
数据集采用ImageNet数据集(120万张图片,1000类)
3.2 网络结构
论文的网络结构和alexNet很类似,在网络设计和测试阶段的做法上做了一些改进。论文的网络分为两个版本,一个快速版,一个精确版。下图是精确版的网络结构图。其中Layer 1-5 为特征提取层,layer 6 – output为分类层。
网络结构 | 解释 |
---|---|
channels | 通道数,也就是卷积核的数量(如Layer1可以提取图像96个特征) |
Filter size | 卷积核的大小 |
Conv.stride | 进行卷积计算时的步长,每计算一次向下平移4,向右平移4(因此是4*4) |
Pooling size | 池化核的尺寸 |
Pooling stride | 进行池化时的步长,每计算一次向下平移2,向右平移2(因此是2*2) |
Zero-Padding size | 进行卷积计算时,在外围增加的0的个数 |
Spatial input size | 输入的原始图像大小 |
例: 由Layer 1 的输入 计算Layer 1 的输出,即Layer 2 的输入:
( 221 − 7 ) / 2 + 1 = 108 ( c o n v ) (221-7)/2+1=108 (conv) (221−7)/2+1=108(conv)
( 108 − 3 ) / 2 + 1 = 36 ( m a x − p o o l i n g ) (108-3)/2 +1=36(max-pooling) (108−3)/2+1=36(max−pooling)
因此Layer2的输入尺寸为 36 ∗ 36 36*36 36∗36
根据CSDN上面相关分类的内容,alexNet与本论文的区别是:
- 该网络和alexNet类似,有几点不同,一是没有使用对比归一化,二是没有使用重叠的池化,三是stride的超参用2代替了4,大stride可以提升速度,减小精度。
- 该网络和alexNet最大的不同之处在于测试阶段使用了不同的方法来预测。
- alexNet在测试阶段对256 * 256的图像做裁剪(四个角落和中间)和水平翻转,得到5 * 2 也就是10张227*227的图像,然后送进网络里面得到10个结果求平均来进行预测。这样的做法有两个问题,裁剪时可能忽略了图像的一些区域,以及10张图像有很多重叠部分导致了冗余计算。
- 该网络的测试阶段,用到了多尺度的,滑动窗口的方法(实验最多输入了6个不同尺度的图像)。这也是论文最大的创新点。
3.3 训练过程
权重初始化选择随机标准差为0.01的高斯分布,利用随机梯度下降法,动量为0.6,学习率最开始初始化为0.05,在30,50,60,70,80轮迭代时学习率缩减为0.5倍。
DropOut(第6层、第7层)是在训练过程中随机丢弃网络上一部分的参数,防止过拟合。
3.4 多尺度识别(Classification)
用到了FCN和offset max-pooling的相关原理。点击此处跳转其他人的解析
alexNet采用多视角投票以提升识别效果,利用固定的10张图像(四个角落+一个中间并进行水平翻转)结果取平均值。
alexNet缺点: 这种方法在视角重叠时进行了重复计算,会忽略掉图像中的很多细节。而且单一大小的图像也会影响效果。
Overfeat的改进方法: 采用多尺度识别的方法——在采用上述方法训练完成后,向网络输入不同尺寸的相同图片测试。
- 其中C为对应的channel数
- 将测试集中的图片进行尺寸变化,形成如上图所示的6个尺寸,并进行水平翻转,这样会得到12张图。
- 对于Layer 5 post-pool为进行offset max pooling 后 得到 3 * 3个 5 * 5的图像(以第一行为例)
- 在最后的Classifier map size,对于不同的尺寸会产生不同尺寸的输出,以Scale 1为例,最后会生成 3 ∗ 3 ∗ C 3 *3* C 3∗3∗C的输出,此时取 3 ∗ 3 3*3 3∗3中最大的数作为这一个图片的输出。所以12个图片最后会得到12个长度为C的向量,将12个向量取平均向量,取TOP1-5,作为输出的类别。
4 定位
(1) 将最后的分类层改成回归问题。即保留Layer1-5,在Layer5池化层后接回归网络即可进行定位,回归网络相关参数如下图所示。
(2) 损失函数为bounding box 与真实标注的box之间的欧式距离(l2距离)进行训练。
(3) 以Scale2为例,Layer5输出的是6 * 7的图,通过回归网络的卷积后,得到2 * 3个位置信息(2 * 3个box),在回归网络的Layer 3中有四个channels分别代表bounding box 的四个点的位置
4.1 累计预测求bounding box
对于回归网络得到的一系列bounding box,该论文不是通过传统的非极大值抑制,而是使用了累积预测的方法。
其中match_score(b1,b2)match_score(b1,b2)计算的是两个box中点的距离和交集区域的面积之和,当它大于某个阈值时算法停止,box_merge(b1∗,b2∗)计算的是两个box坐标的平均值。通过合并具有高置信度的box来得到最终预测。这种方法可以淘汰那些低置信度以及低连续(多个box相差很远)的类别,会更加鲁棒。
5 总结
根据这篇论文我了解到CNN的一些基础知识,以及当时进行目标检测的一般方法。其中比较难的地方是卷积输入输出的计算,以及卷积参数个数的确定。