深度学习之目标检测(一)R-CNN翻译与总结(二)

RCNN总结

测试过程:

  1. 输入一张多目标图像,采用selective search算法提取约2000个建议框;
  2. 先在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接变形为227×227的大小;
  3. 先将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNet CNN网络尽心训练,将最后的1000层的分类器替换为N+1的SVM进行微调训练
  4. 在VOC数据集上进行微调,微调时selective search的正负样本划分为IOU>0.5为正样本,其余为负样本,在进行微调训练时每次SGD迭代,mini-bach的大小设置为128,其中包含32个positive样本,96个negative样本
  5. 获取4096维的特征,2000个建议框的CNN特征组合成2000×4096维矩阵,将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;
  6. 分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;
  7. 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。

文章创新点:

  1. 文章使用CNN网络来提取图像特征,与原来使用SIFT和HOG(blockwise orientation histograms)相比更加有效。因为在CNN中提取特征的方法是自下而上的,这种模式更符合人的视觉系统。
  2. 检测模型的训练受制于有限的数据,少量的数据易产生过拟合问题。论文提出先使用大样本进行有监督的预训练,再使用少量的小样本对模型参数进行微调。

先前方法经验总结:

  1. Szegedy等人将框定位视为回归问题,但其在VOC2007上mAP仅达到了30.5%这证明将定位问题简单的视为回归问题的效果并不好。
  2. 原来检测问题中多使用滑动窗口方法,但是随着网络层次的增加,使用滑动窗口法将使得模型训练更加困难。比如输入图片的感受野为195195,步长为3232,使用滑动窗口法计算难度将大大增加。
  3. selective search
    采取过分割手段,将图像分割成小区域,再通过颜色直方图,梯度直方图相近等规则进行合并,最后生成约2000个建议框的操作

  1. 为什么要将建议框变形为227×227?怎么做? 
    本文采用AlexNet CNN网络进行CNN特征提取,为了适应AlexNet网络的输入图像大小:227×227,故将所有建议框变形为227×227。 
    那么问题来了,如何进行变形操作呢?作者在补充材料中给出了四种变形方式:
  1. 考虑context【图像中context指RoI周边像素】的各向同性变形,建议框像周围像素扩充到227×227,若遇到图像边界则用建议框像素均值填充,下图第二列;
  2. 不考虑context的各向同性变形,直接用建议框像素均值填充至227×227,下图第三列;
  3. 各向异性变形,简单粗暴对图像就行缩放至227×227,下图第四列;
  4. 变形前先进行边界像素填充【padding】处理,即向外扩展建议框边界,以上三种方法中分别采用padding=0下图第一行,padding=16下图第二行进行处理;

Wrap (Objcect proposal 转换)

将各个Redion的大小变换到CNN的输入尺寸

(1)各向异性缩放

这种方法很简单,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227,如下图(D)所示;

(2)各向同性缩放

因为图片扭曲后,估计会对后续CNN的训练精度有影响,于是作者也测试了“各向同性缩放”方案。有两种办法

A、先扩充后裁剪: 直接在原始图片中,把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;如上图(B)所示;

B、先裁剪后扩充:先把bounding box图片裁剪出来,然后用固定的背景颜色填充成正方形图片(背景颜色也是采用bounding box的像素颜色均值),如上图©所示;

对于上面的异性、同性缩放,文献还有个padding处理,上面的示意图中第1、3行就是结合了padding=0,第2、4行结果图采用padding=16的结果。经过最后的试验,作者发现采用各向异性缩放、padding=16的精度最高。

非极大值抑制方法:

IoU又称为交并比,顾名思义就是region proposal与ground-truth box交集与并集的比。我们都知道物体检测中,一个图像中的某个物体可能会有多个预测框,而IoU方法就是将一个物体的多个框进行筛选,去除得分很低的候选框。

具体的过程如下:

对2000*20维矩阵中每列从大到小进行排列。

从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,如果IoU>阈值,则删除两个框中得分较低的建议框,否则保留这个建议框,认为图像中存在多个物体。

再从每列次大的得分建议框开始,重复步骤2。

重复步骤3直至遍历万所有的建议框。

遍历完2000*20维矩阵所有的列,也就是所有种类的物体都做了一遍非极大值抑制。

最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。

NMS (非极大值抑制)

RCNN会从一张图片中找出n个可能是物体的矩形框,然后为每个矩形框为做类别分类概率:

就像上面的图片一样,定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。非极大值抑制的方法是:先假设有6个矩形框,根据分类器的类别分类概率做排序,假设从小到大属于车辆的概率 分别为A、B、C、D、E、F。

(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;

(2)假设B、D与F的重叠度超过阈值,说明有重叠且重叠面积过大,否则没有重叠,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。

(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。

就这样一直重复,找到所有被保留下来的矩形框。

什么叫有监督预训练?为什么要进行有监督预训练?

有监督预训练也称之为迁移学习,举例说明:若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用于人脸年龄识别;现在要通过人脸进行性别识别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的正负样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练。这种方式可以很好地解决小样本数据无法训练深层CNN网络的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。

这篇文章最大的亮点就是采用了这种思想,ILSVRC样本集上用于图片分类的含标注类别的训练集有1millon之多,总共含有1000类;而PASCAL VOC 2007样本集上用于物体检测的含标注类别和位置信息的训练集只有10k,总共含有20类,直接用这部分数据训练容易造成过拟合,因此文中利用ILSVRC2012的训练集先进行有监督预训练。

可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?

文中设计了没有进行微调的对比实验,分别就AlexNet CNN网络的pool5、fc6、fc7层进行特征提取,输入SVM进行训练,这相当于把AlexNet CNN网络当做万精油使用,类似HOG、SIFT等做特征提取一样,不针对特征任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多;

在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显;

由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。

为什么微调时和训练SVM时所采用的正负样本阈值【0.50.3】不一致?

微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本;

SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类【20+背景】?

因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。

为什么进行SVM训练的样本与CNN训练的样本负样本IoU定义不同?

进行微调时,正样本选自与ground-truth>0.5的region做正样本,小于等于0.5的做负样本。

训练SVM时,正样本为ground-truth,负样本为与ground-truth相交<0.3的建议框。

为什么两者的定义差别较大呢,因为CNN训练需要的样本数是大量的,而在数据集中正样本的数量很小,所以将阈值设置为0.5。而训练SVM并不需要大量数据,因此对数据要求严格一些更有利于提高训练精度。

R-CNN缺点:

(1)重复计算:R-CNN虽然不再是穷举,但依然有2000个左右的候选框,这些候选框都需要进行CNN操作,计算量依然很大,其中有不少其实是重复计算;

(2)SVM模型:而且还是线性模型,在标注数据不缺的时候显然不是最好的选择;

(3)训练测试分为多步,训练的空间和时间代价很高:区域提名、特征提取、分类、回归都是断开的训练的过程,中间数据还需要单独保存,卷积出来的特征需要先存在硬盘上,这些特征需要几百G的存储空间;

(4)速度慢:前面的缺点最终导致R-CNN出奇的慢,GPU上处理一张图片需要13秒,CPU上则需要53秒。

·

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值