目标检测系列(一):R-CNN
References:
- https://blog.csdn.net/chaipp0607/article/details/78112861
- https://blog.csdn.net/zijin0802034/article/details/77685438 (Bounding Box Regression)
《Rich feature hierarchies for accurate object detection and semantic segmentation》
STAR
S:
- Object detection: The best-performing methods are complex ensemble systems that typically combine multiple low-level image features with high-level context, and these methods have made small gains.
- Image classification: CNNs by showing substantially higher image classification accuracy on the ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
T: To what extent do the CNN classification results on ImageNet generalize to object detection results on the PASCAL VOC Challenge?
A:
- one can apply high-capacity convolutional neural networks (CNNs) to bottom-up region proposals in order to localize and segment objects
- when labeled training data is scarce,supervised pre-training for anauxiliary task, followed by domain-specific fine-tuning, yields a significant performance boost.
R: improves mean average precision (mAP) by more than 30% relative to the previous best result on VOC2012 — achieving a mAP of ***53.3%***.
1. Region Proposal(区域建议)
ss(selective算法,一种根据图像自身信息产生推荐区域的算法,它大概会产生1000-2000个潜在目标区域。ss在生成了1000-2000个推荐区域之后,就和训练任务没啥关系了,训练样本是由ss区域生成出来的子图构建起来的。(所以这是典型的非端对端的情况)
2. Feature Extraction(特征提取)
AlexNet 用于特征提取:Features are computed by forward propagating a mean-subtracted 227 × 227 RGB image (simple warped VOC windows)through five convolutional layers and two fully connected layers.然后第7层特征给了SVM分类器,第五层特征给了Bounding Box回归模型。
3. SVM(分类器)
R-CNN使用了线性SVM分类器,分类器有20个,它的输入特征是AlexNet提取到的fc7层特征。
4. Bounding Box Regression
在R-CNN中,Bounding box的作用是修正ss推荐的区域的边界,输入的特征是AlexNet的第五层特征,与SVM分类器一样,它也是每一个类别都有一个模型,一共20个。
对于窗口一般使用四维向量(x,y,w,h)来表示, 分别表示窗口的中心点坐标和宽高。对于下图,红色的框 P 代表原始的Proposal, 绿色的框 G 代表目标的 Ground Truth。我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^。
1. 边框回归的做法:平移+缩放
2. 边框回归的输入:窗口对应的CNN特征向量
3. 边框回归的输出:需要进行的平移变换和尺度缩放
可以根据公式(1)、(2)、(3)、(4)得到最后的位置。
5. RCNN的训练
RCNN只需要训练CNN、SVM、bounding box三个模型。
1. 训练CNN
网络:CNN是在ImageNet上pre-train的AlexNet模型,在R-CNN中进行fine-tune,fine-tune的过程是将AlexNet的Softmax改为任务需要的类别数(21),然后还是当做一个分类模型来训练。之后softmax层丢掉,剩下的参数用于特征提取。
训练样本:训练样本的构建使用ss生成的子图,当这些图与实际样本的框(Ground-truth)的IoU大于等于0.5时,认为是某一个类的正样本,这样的类一共有20个;IoU小于0.5时,认为是负样本。
训练方法:SGD(lr: 0.001), In each SGD iteration, we uniformly sample 32 positive windows (over all classes) and 96 background windows to construct a mini-batch of size 128.
2. 训练SVM
网络:SVM的输入特征是AlexNet fc7的输出,然后SVM做二分类,一个有20个SVM模型。
训练样本:那么对于其中某一个分类器来说,它的正样本是所有Ground-truth区域经过AlexNet后输出的特征,负样本是与Ground-truth区域重合IoU小于0.3的区域经过AlexNet后输出的特征,特征和标签确定了,就可以训练SVM了。
3. 训练bounding box
输入的 Proposal 与 Ground Truth 相差较小:RCNN 设置的是 IoU>0.6。
6. RCNN的测试
经过训练的R-CNN就可以拿来做测试了,测试过程还是可以一次完成的,它有下面几步:
1.ss算法提取1000-2000个区域;
2.对所有的区域做归一化,为了CNN网络能接受;
3.用AlexNet网络提出两套特征,一个是fc7层的,一个是con5层的;
4.对于一个fc7区域的特征,分别过20个分类器,看看哪个分类器给的分数最高,以确定区域的类别,并把所有的区域一次操作;
5.对上述所有打好label的区域使用非极大值抑制操作,以获取没有冗余(重叠)的区域子集,经过非极大值抑制之后,就认为剩下的所有的区域都是最后要框出来的;
6.重新拿回第5步剩下的区域con5层的特征,送入Bounding box模型,根据模型的输出做出一次修正;
7.根据SVM的结果打标签,根据修正的结果画框;
8.结束!!!!!!
7. RCNN性能评价
8. RCNN主要问题
- R-CNN的致命缺陷,超长的训练时间(84h)和测试时间(47s),造成这个问题的主要原因就是重复性的卷积计算:在R-CNN中,输入到CNN网络中的图片是ss算法提取到的区域,每一张待检测图都会产生1000-2000个区域,这也就意味着卷积计算要重复1000-2000次,但是由于ss算法提取到的区域本身就有很多重叠,所以这种重复计算是非常没有必要的。
那么能不能只通过一次卷积计算就完成整张图像的特征提取工作呢?这就是SPP-Net的主要贡献,也是在R-CNN之后的很多网络结构的统一目标——如何共享卷积计算。 - 多阶段训练过程。
转载请注明出处,谢谢!