paper reading
以下是博主认为文章中较重要的部分,内容为翻译加自己的理解。
Introduction
文章关注两个主要问题
- 使用深度网络解决目标定位问题
- 在已标注检测数据的数据量小的情况下,训练一个大容量的模型。
对于问题1的解决方案:
我们使用‘recognition with region’的方法来解决CNN定位的问题,此方法对目标检测和语义分割都有效。在测试时,对每张输入图片(input image)都产生大约 2000 个候选框(region proposal),用CNN从每一个候选框中提取出一个固定大小的特征向量,然后使用线性SVM(支持向量机)对每个特征向量(对应一个候选框)分类。这里的SVM是针对特定类别(category-specfic)的。
(博主的理解是:对每一个特征向量(也就是对应着一个候选框),要用针对各个类别的SVM全部过一遍。假设有2000个候选框,也就是2000个特征向量,一共 20 种类别,每一个特征向量就要过20遍SVM,一共要过2000*20=40000次。论文后面也提到 “特征矩阵大小是 2000×4096,SVM权重矩阵是4096×N,其中N是类别数。(特征向量长 4096)
另外,由于CNN对输入数据的大小格式有限制(227×227 pixle),所以这里的input image必须经过仿射变换,变换到固定大小)。
对于问题2,作者先在一个较大的辅助数据集(ILSVRC)上进行有监督预训练,再针对特定任务在小数据集上做调优(fine-tuning)
系统效率比较好的原因是
针对特定类别的计算(每种类别都要单独计算的部分)只有一些相对小的矩阵、向量相乘以及贪婪NMS(non-maximum suppression)。这种计算特性源于特征在类别之间的共享(博主理解是:对于一个候选框,只得到那一个特征向量,针对任何类别的SVM使用的都是这个向量,所以称为共享)。
在实验中发现主要的错误来自于 定位错误(mislocation),使用bounding-box方法可以有效解决它。
由于R-CNN是在区域上进行操作的,所以很自然的可以拓展到对语义分割的解决上。作者做了一些小改动后再PASCAL VOC的分割任务上实现了 47.9% 的average segmentation accuracy。
用R-CNN做目标检测
整个目标检测的模型一共分为三部分
- 产生与类别无关的候选框。后面的步骤只处理这些候选框,所以这一步产生了一个候选检测区域的集合。
- 使用 CNN 从这些候选框中提取固定长度的特征向量。
- 使用一系列针对特定类别的SVM处理特征向量。
产生候选框
有很多方法都可以产生候选框,如objectness、选择性搜索(selective search)、category-independent object proposals、CPMC等等。CNN对产生候选框的具体方法无所谓。作者为了好和前面的工作比较,使用了 选择性搜索(selective research)方法。
提取特征
把一个227×227的RGB图像输入CNN,通过5个卷积层、2个全连接层,向前传播输出一个 4096 维的特征向量。
由于候选框的大小是随机的,作者用仿射变换把每一个候选框都缩放到227×227大小,然后再输入到CNN中。(详细做法见附录)
训练模型
预训练:
在大数据集(ILSVRC2012的分类数据集)上做预训练,这里只使用了image-level的标记,也就是说没有 目标所在位置的数据。
针对特定任务的调优:
为了让CNN适应新任务( 目标检测 而不是 分类 )以及新范围(变换后的窗口),作者用变换后的候选框(region proposals)用随机梯度下降法(SGD)训练CNN。这里SGD的学习率设置为预训练的1/10 —— 0.001,目的在于防止调优对预训练结果的破坏。此外,把CNN中 ImageNet 专用的 1000-way 分类层换成了随机初始化的(N+1)-way 分类层(N是目标类别数,1代表背景),余下的架构不变。
值得一提的是,调优时,对 IoU >= 0.5 的候选框就认定为正例,否则为负例。这是因为 CNN 对小样本容易过拟合,需要大量训练数据,故对 IoU 限制宽松: IoU >= 0.5 。而 SVM 的机制适合小样本训练,故对样本 IoU 限制很严格: IoU<0.3 就视为负例。
CNN网络架构的影响:
实验显示:O-Net相比T-Net,mAP要高(66.0% vs 58.5%),但速度要慢7倍。
补充: bbox regression 机制
bbox 回归的原因是一开始给出的 region proposals 不一定能很好的定位物体,加了bbox回归这一步,对 region proposals 做平移、缩放,使之更接近于 ground truth bounding box。具体内容就是要学习几个变换的参数。
如上,假设region proposal是红色的框 ,ground truth bbox 是 绿色的框 。我们的目标就是求得变换参数,使 变换到 (一个相比 更接近 的框)。
代表了框在图像中的中心像素坐标和宽高的像素大小,是对应的 ground truth 框的数据,格式相同。最简单的变换就是平移加缩放
这里定义平移量
所以平移的结果是:
可以看到,这里要学习的值是和
定义log空间下的缩放量和。
缩放结果是:
输入 N组数据:,其中,代表了图像中第个框的中心像素坐标和宽高的像素大小,格式相同,是对应的 ground truth 框的数据。但是在实际操作时,真正作变换的量是 region proposal 对应的pool5输出的 feature 值,定义其为。
,所以,实际要学习的量是。
这里定义
所以优化目标(输出)就是
为了正则化,设置
另,考虑到当和距离最近的空间距离较远时线性回归模型不适用,故在此之前筛选出和的 IoU>0.6 的 region proposal ,用这些数据训练。