R-CNN架构流程的详细讲解

前言

本文主要讲解了R-CNN的架构流程和该流程中很多不为人知的“心机”细节。作为深度学习在目标检测领域的“吃螃蟹”模型,R-CNN与传统计算机视觉的目标检测流程的对比也是非常具有创新意义的。

R-CNN的相关理论讲解

传统计算机视觉目标检测与R-CNN的异同比较?

在这里插入图片描述

Resize操作的目的:为了使最终得到的Hog/LBP特征向量或者Feature Map的大小相同,使得R-CNN的全连接层的输入维度大小一致。(卷积不要求输入维度大小一致)

R-CNN与传统计算机目标检测的相同之处:1.都对输入图片采用Selective Search进行可能的ROI(Region Of Interest)提取。2.分类器都采用SVM进行分类。3.都采用NMS非极大值抑制方式筛选最终检测结果。

R-CNN与传统计算机目标检测的不同之处:1.R-CNN采用卷积+池化+全连接层的特征提取方式替代了传统目标检测的Hog/LBP特征向量。2.R-CNN加入了Bounding box回归操作。(因为传统的目标检测的边框获取来自于Selective Search阶段产生的边框,存在误差需要进一步修正的问题,而R-CNN采用Bounding box回归操作可以进一步对边框的大小和位置信息进行修正和优化。)

R-CNN算法的执行过程是什么?

在这里插入图片描述

R-CNN算法中采用和传统目标检测类似的执行过程,主要包含以下几个步骤:

  1. 区域提名(Region Proposal):通过区域提名的方法从原始图片中提取2000个左右的区域候选框(所有可能是物体的区域),一般选择Selective Search(SS);

  2. 区域大小归一化:将所有候选框大小缩放固定大小(eg:227*227);

  3. 特征提取:通过CNN网络,对每个候选区域框提取高阶特征向量,并将特征向量存储到磁盘中;

  4. 分类与回归:对于每个候选区域提取的高阶特征向量使用SVM进行分类(二分类); 用线性回归来微调边框位置与大小(回归器);使用非极大值抑制剔除重复框。(NOTE: 论文中建议针对每个类别训练一个分类器和回归器)

Resize有哪些操作方式?

在这里插入图片描述

Resize:使用padding、填充(真实内容填充、特殊值填充)、缩放等操作,将候选区域转换227*227的图像大小。

B方式:先按最长的边进行等比例缩放至指定尺寸,使用真实图像进行填充剩余的区域。

C方式:先按最长的边进行等比例缩放至指定尺寸,使用灰度值为0的像素进行填充剩余的区域。

D方式:先将指定区域的四周填充16px,然后将图像resize填充至指定尺度的图像区域。

如何理解其中的分类模型和回归模型?

分类模型是如何进行的?

在这里插入图片描述

对于进行大小缩放的ROI区域图像,使用CNN网络提取出区域图像对应的高阶特征信(FC7层),然后使用SVM算法将其划分为两个类别:

  • 正样本:包含当前类别的区域图像。

  • 负样本:不包含当前类别的区域图像。

【注】在RCNN模型训练中,主要有一下几点:

  • 直接使用AlexNet作为前面的特征提取的网络来预训练模型,AlexNet的网络结构如下图所示:

在这里插入图片描述

  • 将AlexNet的最后一层替换成N+1个输出神经元的CNN softmax模型,然后使用fine-tuning训练,batch_size为128,其中32个正样本,96个负样本(1:3)。最终得到当前任务上的特征提取网络。

  • 在SVM训练阶段,假设要检测车辆,Ground Truth的Bounding Box当做正样本,和Ground Truth重叠IOU值低于0.3的bounding box当做负样本。比如提取出2000个候选框,然后高阶特征维度为4096,也就是可以得到一个2000* 4096的特征向量矩阵,那么这个时候只需要训练一个4096*N的权重系数W就可以完成SVM的训练(N为分类类别数目)。

  • 使用RCNN的分类模型进行预测,得到当前图像上各个ROI属于各个类别的概率值(置信度),形状为:2000*(N+1)的矩阵。

为什么选择FC7层的输出作为SVM训练的ROI的高阶特征?
  • 直接把CNN当做特征提取器,卷积层所学到的特征其实就是基础的共享特征提取层(位置信息、轮廓信息…),而FC全连接是将特征任务相关的特征信息提取出来(将局部的高阶特征的合并成全局的),并且在fine-tuning的时候是基于分类的业务去微调的,也就是说FC6和FC7的功能/效果是和分类相关的。(参考链接:
    深入理解卷积层,全连接层的作用意义?
为什么进行fine-tuning?
  • 如果不进行fine-tuning训练,相当于直接把AlexNet模型当做万金油使用,也就是不针对特定的任务,直接应用提取的特征,这种方式没有考虑到具体的任务相关特征。
回归模型是如何进行的?

在这里插入图片描述

对于进行大小缩放的ROI区域图像,使用CNN网络提取出区域图像对应的高阶特征信息(Conv5层),使用回归器精细修正候选框位置: 对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。

回归模型的训练原理是怎么样的?

如下图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G^表示Region Proposal进行回归后的预测窗口,现在的目标是找到P到G^的线性变换。

在这里插入图片描述

Region Proposal窗口表示:

在这里插入图片描述

(注:分别表示中心点坐标横轴值、中心点坐标纵轴值、窗口宽度、窗口高度。)

Ground Truth窗口表示:

在这里插入图片描述

Region Proposal进行回归转换后的窗口表示:

在这里插入图片描述

定义四种变换函数,其中中心点通过对x和y进行平移变换得到, 宽度w和高度h通过进行缩放变换得到。最终希望的计算公式如下所示:

在这里插入图片描述

(注:d* (P)表示待训练的偏移映射函数,负责偏移系数的计算。 * 表示x、y、w、h )

这里的w即需要学习的回归参数,损失函数如下:

在这里插入图片描述

【注】在Bounding Box的回归模型训练中,主要有以下一点:

  • 对于每个类别均训练一个BBR线性转换结构。也就是RCNN中最终由N个BBR线性转换。
为什么在CNN softmax模型训练之外,需要单独训练一个SVM分类器呢?
  • 这是因为svm训练和cnn训练过程中的正负样本定义方式不同,导致CNN softmax的输出比采用svm的精度低。在CNN softmax中,将IOU大于等于0.5的当做正样本,IOU小于0.5当做负样本;而在SVM中,将Ground Truth当做正样本,IOU在[0.1,0.3)的当做负样本

  • SVM分类器训练过程中,采用标准的hard negative mining方式进行训练,即:难负例样本挖掘算法,用途就是正负例数量不均衡,而负例分散代表性又不够的问题,hard negative就是每次把那些顽固的棘手的错误的负样本,再送回去继训练,练到模型的效果不再提升为止.这一个过程就叫做“hard negative mining”。

  • CNN softmax模型的分类识别能力比较强,鲁棒性会更强(泛化能力更强,也就是对于区域中仅包含部分轮廓的情况,也可以产生一个当前类别的预测),对于精准的定位效果就不会特别的好

  • 个人认为最主要的原因是:R-CNN中输入的是经过resize操作之后的候选框图像,图像存在大量的信息失真的情况,所以单独使用Softmax的分类效果不佳,所以作者提出使用softmax+svm的方式。

R-CNN存在哪些缺陷问题?

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

  • 训练测试分为多步:区域提名、特征提取、分类、回归都是断开的训练的过程,中间数据还需要单独保存

  • 训练的空间和时间代价很高:卷积出来的特征需要先存在硬盘上,这些特征需要几百G的存储空间;

  • 执行效率慢:GPU上处理一张图片需要13秒,CPU上则需要53秒。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super__Tiger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值