Object Detection 学习笔记 (1) R-CNN

paper reading

以下是博主认为文章中较重要的部分,内容为翻译加自己的理解。

Introduction

文章关注两个主要问题

  1. 使用深度网络解决目标定位问题
  2. 在已标注检测数据的数据量小的情况下,训练一个大容量的模型。

对于问题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做目标检测

整个目标检测的模型一共分为三部分

  1. 产生与类别无关的候选框。后面的步骤只处理这些候选框,所以这一步产生了一个候选检测区域的集合。
  2. 使用 CNN 从这些候选框中提取固定长度的特征向量。
  3. 使用一系列针对特定类别的SVM处理特征向量。

R-CNN模型

产生候选框

有很多方法都可以产生候选框,如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是红色的框 P ,ground truth bbox 是 绿色的框 G。我们的目标就是求得变换参数,使 P 变换到 \widehat{G}(一个相比P 更接近 G 的框)。

P = ( P_x,P_y,P_w,P_h)代表了框P在图像中的中心像素坐标和宽高的像素大小,G= ( G_x,G_y,G_w,G_h)P对应的 ground truth 框的数据,格式相同。最简单的变换就是平移加缩放

这里定义平移量

\Delta\ x=P_wd_x(P) \ \ \ \ \ \ \Delta\ y=P_hd_y(P)

所以平移的结果是:

\\ \hat{G}_x=P_wd_x(P)+P_x \\ \hat{G}_y=P_hd_y(P)+P_y

可以看到,这里要学习的值是d_x(P)d_y(P)

定义log空间下的缩放量d_w(P)d_h(P)

缩放结果是:

\\\hat{G}_w =P_wexp(d_w(P))\\ \hat{G}_h =P_hexp(d_h(P))

 

输入   N组数据:{\left\{(P^i,G^i)\right\}}_{i=1,...,N},其中P^i=(P^i_x,P^i_y,P^i_w,P^i_h),代表了图像中第i个框的中心像素坐标和宽高的像素大小,G^i格式相同,是P^i对应的 ground truth 框的数据。但是在实际操作时,真正作变换的量是 region proposal 对应的pool5输出的 feature 值,定义其为\phi_5(P)

d_\star(P) =w^T_\star\phi_5(P)\ \ \ (\star=x,y,w,h ),所以,实际要学习的量是w^T_\star

这里定义

\\t_x=(G_x-P_x)/P_w\\ t_y=(G_y-P_y)/P_h\\ t_w=log(G_w/P_w)\\ t_h=log(G_h/P_h)\\

所以优化目标(输出)就是

w_\star=\underset{\hat{w}_\star}{argmin}\overset{N}{\underset{i}{\sum}}(t^i_\star-\hat{w}^T_\star\phi_5(P^i))^2+\lambda \left \| \hat{w}_\star \right \|^2

为了正则化,设置\lambda=1000

 

另,考虑到当P和距离P最近的G空间距离较远时线性回归模型不适用,故在此之前筛选出PG的 IoU>0.6 的 region proposal ,用这些数据训练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值