Rich feature hierarchies for accurate object detection and semantic segmentation Tech report (v5)
By Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik
Contents
- Architecture
- Training
- Results
- Appendix
1. Architecture
R-CNN主要由三个模块组成:
1.1 region proposals
第一个模块生成类别无关的region proposals,用selective search方法来获得;region proposals用来给后面的detector使用。
1.2 Feature extraction
第二个模块是一个卷积网络,用来提取每个region proposal的固定长度的特征向量。
这里我们提取的是4096维度的特征向量,就是region proposal通过AlexNet的5个卷积层和2个全连接层后获取的feature。
1.3 class-specific linear SVMs
第三个模块是class-specific linear SVMs。
2. Training
2.1 Supervised pre-training
首先在ILSVRC2012 classification任务上训练模型;使用的模型是AlexNet。
作者说这里没有bounding box的labels;应该就是说做最常规的分类任务
2.2 Domain-specific fine-tuning
- 为了更好地使模型适应我们的任务,作者又进行了fine-tuning,使其更好的适应我们 的新domain(warped proposal window)
- 把AlexNet模型的最后一个全连接层(原本1000的分类),替换成21分类的全连接层(此任务中的20个类别加上一个background类别)
- fine-tuning时,region proposal与其对应类别的ground-truth box的$IoU\geq0.5$的,算为相应类别的样本;其余的都算作background类别
- leanrning rate为0.001,是第一步supervised pre-training时的0.1倍,其目的是为了不破坏先前训练好的结构
- 每次迭代选取32个positive windows(over all classes)和96个background windows,组成一个mini-batch
- 使用SGD
2.3 Object category classifiers
这里使用SVMs进行分类训练,对第个类别训练一个linear SVM分类器。
在选取负样本的问题上,作者进行了实验,就是IoU多少以下算为负样本更为合适,最终作者的实验指出$IoU\leq0.3$的windows作为负样本是效果最好的(当然没有相应当前分类器类别的也都是负样本);至于正样本,是严格的ground-truth bounding box。
注:除了上述符合正负标准的样本之外,其余的全部舍弃。
3. Results
- VOC 2010:mAP值在使用了Bounding-box Regression的情况下是53.7%,不使用时是50.2%;
- VOC 2011/2012 test上的结果是53.3%;
- VOC 2013: 200-class的任务上,mAP为31.4%。
4. Appendix
4.1 Bounding-box Regression
这里主要参考:
- 基础知识:IoU、NMS、Bounding box regression,此文整个流程比较阐述比较清晰
- 边框回归(Bounding Box Regression)详解,这里主要有平移和缩放方法的设计原理
Bounding-box的动机是因为selective search的region proposal不一定能找到合适的边界框;因此对于一个识别为相应label的window,我们希望通过回归的方式,找到更加精确的边界框。
问题定义
在目标检测中,我们通常会用四维向量(x, y, w, h)来表示一个window,分别表示其中心点坐标和宽高。对于一个region proposal的window,我们自然知道其四维向量坐标,因此我们希望学习一种变换,使变换后的(x, y, w, h)更加接近真实的ground truth的值。
所以在训练过程中,我们希望学习一种映射关系,使得给定的$P$为$(P_x, P_y, P_w, P_h)$的情况下,经过映射$f$得到$G’$,即有:$f(P_x, P_y, P_w, P_h)=(P’_x, P’_y, P’_w, P’_h)$,且$(P’_x, P’_y, P’_w, P’_h)\approx(G_x, G_y, G_w, G_h)$。
解决方法
接着我们需要来看如何实现映射$f$。实现方法就是简单的平移+缩放。
- 平移($\Delta x, \Delta y$),在R-CNN中对应如下的平移操作:
其中$\Delta x = P_w d_x(P), \Delta y = P_hd_y$。
- 缩放($S_w, S_h$),缩放操作为:
其中$S_w=\exp(d_w(P)), S_h = \exp (d_h(P))$。
以下四个公式中,有$d_x(P), d_y(P), d_w(P), d_h(P)$四个未知量,是我们需要通过学习来算得的。
设计回归
- 输入值$x$:region proposal经过CNN后第5层conv后的pooling层的特征。(注意:开始我以为输入值是window的中心点坐标和宽高,但后来想想光靠这4个值怎么可能能够推得实际的坐标嘛;肯定是需要把图片输入,经过conv等操作,才能知道这个图片包含的某一类别的目标是不是完整的,又或是缺了多少的内容)。
- 输出值$y$:输出值就是平移和缩放的尺度,即$d_x(P), d_y(P), d_w(P), d_h(P)$。在测试过程中,我们得到了这四个值自然可以从window的$P$,经过运算(1~4)公式的运算,得到调整后的$G’ $。
- label值:预测值是$d_x(P), d_y(P), d_w(P), d_h(P)$这四个,因此label值自然也是四个,我们$t_x, t_y, t_w, t_h $分别来表示label的话,结合公式(1~4)把四个$G’ $替换为相应的$G$后,自然可以得到$t$的值:
所以,最终我们需要训练一组参数$W$,使得$W\phi_5(P) \approx t$,因此我们得到损失函数为(加上正则):
其中,$*$表示$x, y, w, h$。得到损失函数后,我们使用梯度下降或最小 二乘法就可以求得$W$。
测试
测试时即把region proposal的第5层的pooling层结果输入进去,得到$d_x(P), d_y(P), d_w(P), d_h(P)$后,代入公式(1~4),即可得到微调过后的bounding box。
4.2 Non-maximum suppression
基础知识:IoU、NMS、Bounding box regression,这个是目前参考的;
具体细节稍后还要参考,验证自己理解的是否正确。
NMS(Non-maximum suppression),即非极大值抑制;在目标检测中,对于同一个物体,不可避免地会预测出多个bounding box,而NMS的作用就是把多余的bounding box去掉,只保留最好的。
在目标检测中,分类器会给每个bounding box(BB)计算一个class score,就是这个BB属于每一个类的概率;所以NMS的主要流程为:
- 对于每一类,首先把其所有$score<threshold1$的BB的score设置为0;
- 按该类的score,对BB进行降序排序,选取score最高的BB为基准;
- 遍历其余BB,如果该BB与基准BB的IoU大于一定阈值,便将该BB删除;
- 从未处理BB中继续选择一个score最高的为基准,重复步骤3;
- 重复步骤4,直到找到全部要保留的BB;
- 处理一个类别后,我们继续重复上述步骤,直到处理完所有的类别;
- 最终保留下来的BB就是我们所需要的。