1 计算机视觉任务
分类:给定一张输入图像,图像分类任务旨在判断该图像所属类别;
定位:在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式;
分类和定位任务中往往目标数量较少,且目标占据图像的核心位置;
检测:在目标定位中,通常只有一个或固定数目的目标,而目标检测更一般化,其图像中出现的目标种类和数目都不定,甚至根本不包含目标,且检测任务中的目标更小。因此,目标检测是比目标定位更具挑战性的任务;
分割:语义分割是目标检测更进阶的任务,目标检测只需要框出每个目标的包围盒,语义分割需要进一步判断图像中哪些像素属于哪个目标。
2 分类
2.1 分类模型
分类任务借鉴AlexNet的网络结构,区别是:
- 没有用局部对比归一化层LRN;
- 使用无重叠最大池化;
- 第一层和第二层的stride更小,因此输出的feature map更大,更大的stride有助于加速但是会降低准确率。
训练了两个版本的网络fast vs. accurate:
accurate版本准确率16.39%,七个模型集成准确率13.6%;
fast版本准确率为14.18%。
2.2 多尺度分类
AlexNet网络中,对测试图像进行了多次预测的集成以改善分类性能,具体的实现是从 256 * 256的图像中裁剪227 * 227子块,分别是四个角和中心位置及其水平镜像共10个重复块。但是这种做法存在以下两个缺点:
- 这种方法可能会忽视图像的很多区域,说不定你这样的裁剪,刚好把图片物体的一部分给裁剪掉了;
- 对重叠区域重复进行了CNN的前向计算,浪费了计算资源;
- 上述方式只在单个尺度上进行了目标处理,有可能不能得到最佳识别/检测置信度。
作者使用下述2.3节所示的方法使用卷积层代替全连接层,从而可以一次性对各个图像块进行高效的CNN前向运算。
作者使用6个不同大小的输入图像进行CNN前向计算,因为输入图像不同,所以CNN产生的pool5层的feature map也大小不同,以下面2.4节所述的方式进行池化,产生的特征如下图所示。
2.3 ConvNets:使用卷积层代替全连接层一般
一般CNN网络中由于使用了全连接层,需要输入图像大小是固定的,因此很多时候是在输入图像上滑动获得固定大小的图像块再送入CNN网络进行处理。但是还有另外一种叫做ConvNets的方式,可以对任意大小的输入图像进行一次前向原始获得所有子块的特征,这主要得益于用卷积层代替全连接层。
使用ConvNets比滑动窗口的方式更加高效。
具体的代替过程如下图所示:
如上图所示,训练网络时使用卷积层代替全连接层,比如将第一个全连接层换成kernel为5 * 5的卷积,将第二、第三个全连接层换成1 * 1 的卷积。这样在对一个更大的输入图像进行预测时,就可以一次性完成预测过程。
如这幅图所示,若第一个卷积层有400个神经元,则使用卷积层代替全连接层时,需要使用400个5 * 5的卷积核,这样就保证了同样有400个神经元,每个神经元和 5 * 5 * 16个单元相连接。
注:关于ConvNets和offset池化,可以参考 https://www.jianshu.com/p/6d441e208547 获取更加详细的解释。
2.4 offset池化
作者对未池化的POOL5层特征进行如下池化过程为:
- 使用无重叠的3 * 3池化,但是基于在x,y方向上的偏置量为{0,1,2}\{0,1,2\}{0,1,2}重复,共重复了3 * 3次;
- 以2.2节表格中第一行为例,输入为17 * 17,每次池化都产生了 5 * 5的输出,将这(5 * 5)*(3 * 3) 的送入后面的第6,7,8层得到C类的分类结果。
上述的offset池化可以看作是将分类器(第6,7,8层)的输入窗口在pooling层上以单个像素为单位进行平移获取待处理数据。
作者对6个尺度图像及其水平翻转图像共12张图像应用上述offset池化,最后得到分类结果的过程为:对每一个尺度及其翻转图像进行预测,计算其平均值作为分类结果。
作者将网络的1-5层看作是特征提取层,将第6-输出层看作是分类层。在特征提取过程中,是对整幅图像进行一次CNN运算,该方式相对于在输入图像上滑动获取不同子块进行处理效率更高。但是,对于网络的分类部分,使用了offset池化保证输入是固定的5 * 5。
2.5 分类结果
3 定位
定位任务时将上述分类器换成了回归器用于获取不同位置和尺度的目标的bounding box,将其和各个位置的分类结果结合获取了定位结果。
3.1 训练回归器
作者在用于分类的特征基础上训练用于定位的回归器,该回归网络以pool5的池化特征为输入,包含两个全连接层,神经元数量分布为4096个和1024个,最后的输出为四个坐标值,损失函数为预测bounding box和ground truth之间的l2l_2l2损失。和分类时一样,同样使用了offset池化,网络结构如下图所示:
这个regressor network的最后一层是class specific的,也就是说,对于每一个class,都需要训练单独最后一层。这样,假设类别数有1000,则这个regressor network输出1000个bounding box,每一个bounding box对应一类。
单个尺度的定位结果:
训练回归网络在多个缩放比例下对于不同缩放比例融合非常重要。在一个比例上训练网络在原比例上表现很好,在其他比例上也会表现的很好;但是多个缩放比例训练让预测在多个比例上匹配更准确,而且还会指数级别的增加预测类别的置信度。
回归器同样需要训练多个尺度的版本,这样可以实现多不同大小的目标的定位。作者使用的图像下采样系数是1.4。
多个尺度的定位结果:
3.2 预测
a)在6个缩放比例上运行分类网络,在每个比例上选取top-k个类别,就是给每个图片进行类别标定Cs
b)在每个比例上运行预测boundingbox网络,产生每个类别对应的bounding box集合Bs
c)各个比例的Bs到放到一个大集合B
d)融合bounding box。具体过程应该是选取两个bounding box b1,b2;计算b1和b2的匹配分式,如果匹配分数大于一个阈值,就结束,如果小于阈值就在B中删除b1,b2,然后把b1和b2的融合放入B中,在进行循环计算。
3.3 定位结果
本文多个multi-scale和multi-view的方式非常关键,multi-view降低了4%,multi-scale降低了6%。令人惊讶的是本文PCR的结果并没有SCR好,原因是PCR的有1000个模型,每个模型都是用自己类别的数据来进行训练,训练数据不足可能导致欠拟合。而SCR通过权值共享,得到了充分的训练。
5 检测
检测和分类训练阶段相似,但是是以空间的方式进行;一张图片中的多个位置可能会同时训练。和定位不通过的是,图片内没有物体的时候,需要预测背景。
6 总结
多尺度、多view的方式取得了良好的分类、定位和检测效果;
一个网络同时完成了分类、定位、检测任务,多任务模型。
可以做的改进点:
定位中,训练回归器的时候梯度可以在整个网络中回传;
使用IOU替换定位中的l2l_2l2损失。
从现在来看,本为提出的使用卷积层代替全连接层以及offset池化更具有创新性,但是由于offset池化的计算量大,目前在我的阅读范围内没有看到复用的地方。
特别声明:本文引用了 https://www.jianshu.com/p/6d441e208547 中部分内容。
才疏学浅,若有错误,欢迎批评指正!