人工智能时代(AI)

目标检测-- R-CNN讲解

2020-01-14  本文已影响0人  赵小闹闹

这一系列计划将目标检测经典算法进行整理,理解技术发展脉络。
参考:https://zhuanlan.zhihu.com/p/23006190
https://zhuanlan.zhihu.com/p/36278093
https://zhuanlan.zhihu.com/p/39927488
https://www.cnblogs.com/wangguchangqing/p/10393934.html

image.png

R-CNN最大的贡献为将CNN引入目标检测领域,进行目标提取。
RCNN算法分为4个步骤。

候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)
特征提取: 对每个候选区域,使用CNN提取特征
类别判断: CNN最后一层FC特征送入每一类的SVM 分类器,进行二分类判断是否属于该类
位置精修: 使用回归器精细修正候选框位置


image.png

1 候选区域生成

R-CNN使用Selective Search对每张图像生成1k-2k推荐区域。


image.png

Selective Search主体思想为基于过分割方法,产生图像初始区域,使用贪心算法对区域进行迭代分组:

2 特征提取

2.1 reseize

以Alexnet作为特征提取网络。该部分作用为对区域推荐方法推荐的2k区域提取特征。用于后续的svm分类。
Alexnet结果如下图,输入为227*227, f6、f7的神经元个数都是4096,对于每张输入区域裁剪图片,网络最后提取特征得到一个4096维的特征向量。


image.png

由于CNN输入需要固定尺寸,需要将2k推荐区域缩放成固定尺寸,有两种缩放方法:各向异性缩放(相当于直接resize,不考虑长宽比,会造成目标变形扭曲)(上图),各项同性缩放(可以先扩充后裁剪也可以先裁剪后扩充)(下图)。


image.png
最终采用各向异性缩放+padding=16的缩放形式将原始推荐区域裁剪成固定尺寸。

2.2 CNN的训练过程

image.png

CNN训练的作用就是提取特征输出为fc7的4096维特征向量用于分类。由于目标任务数据量可能较小,直接训练易造成收敛困难的问题,故采用预训练+fine-tuning方法。CNN先在Imagenet训练,然后在目标数据集上以每张图像生成的2k个区域作为输入,进行fine-tuning。fine-tuning时,前面网络参数均固定,只改变最后softmax层的维度,将原始imagenet的1000修改为目标任务类别+1(如VOC任务20+1=21).

CNN训练需要需要label,CNN输入为每张图像的2k个推荐区域图像,其label定义为正负样本,规定,iou>0.5是该类别的正样本(20类正样本),iou<0.5是该类别的负样本(1类背景负样本)。

3.SVM分类训练

将CNN f7层特征被提取出来,为每个物体类别训练一个svm分类器。CNN提取2K个候选框,可以得到20004096这样的特征向量矩阵,把这样的一个矩阵与svm权值矩阵4096N点乘(N为分类类别数目,因为我们训练的N个svm,每个svm包含了4096个权值w),就可以得到结果了。

image.png
SVM训练过程正负样本定义推荐区域与bounding box IOU>0.7为正样本,否则为负样本。

4 位置精修

回归器:对每一类目标,使用一个线性脊回归器进行精修。正则项λ=10000。 输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 训练样本:判定为本类的候选框中和真值重叠面积大于0.6的候选框。

5 测试阶段

使用selectivesearch 对输入图像生成2k推荐区域---每个区域resize成227*227---CNN提取特征---对于每个类别,使用这类的SVM对特征向量打分,得到所有区域对于这一类别的分数,使用NMS去除冗余框,得到bounding-box,再进行位置精修。

上一篇 下一篇

猜你喜欢

热点阅读