目标检测-R-CNN

R-CNN在2014年被提出,算法流程可以概括如下:

  • 候选区域生成:利用选择性搜索(selective search)方法找出图片中可能存在目标的候选区域(region proposal)

  • CNN网络提取特征:对候选区域进行特征提取(可以使用AlexNet、VGG等网络)

  • 目标分类:训练分类模型(如svm等)识别目标物体和背景,对于每个类别都会有一个二元SVM

  • 目标定位:训练回归模型,预测每个被识别物体的边界框

综上所述,可以概括为选取候选区域-》提取特征-》分类模型-》回归模型。R-CNN的整体设计思路,与传统图像目标检测很相似,只是将传统特征提取(HOG等方法)变为了卷积网络提取。

候选区域

候选区域(region proposal)选择方法有很多,比如EdgeBox、MSER、MCG和SelectivSearch等,其中SelectivSearch是比较有代表性的一种。

SelectiveSearch方法通常一张图像生成2000~3000左右的候选区域,通过SelectiveSearch产生的区域数量远远少于滑动窗口的穷举法产生的候选区域。具体过程如下:

  • 使用语义分割的方法,将图片中的每一个像素作为一组,利用颜色、纹理和边界等多尺度综合方法,将像素相近的组合为一个像素组。

  • 继续将各个像素组合并,直到整张图片合并完毕。

为了保证候选区域划分更加合理,Selective Search进行了如下设计:

  1. 多样性策略

为了保证候选区域的准确性,SelectiveSearch主要通过颜色空间变换和距离计算方式进行优化。

  • 颜色空间变化:将颜色空间可以转换为八种色彩空间。
  • 距离计算:距离计算包括了颜色距离、纹理距离、尺度相似度衡量、形状重合度衡量和最终相似度衡量。

    • 颜色距离:1)每一个区域用三通道的颜色直方图表示,每个颜色通道设定25bins的直方图,这样每个区域就有3*25=75维的向量;2)对75维进行L1-normal归一化,每个颜色通道累加和为1,三个通道累计和为3;3)如果区域i和区域j直方图一样,则颜色相似度为3;4)如果区域i和区域j直方图差别较大,由于累加取两个区域bin的最小值,因为差距越大,累加和越小,相似度越小

    • 纹理距离:1)论文采用SIFT方法,将每个颜色通道的8个方向计算方差为1的高斯微分;2)用L1-Normal

      对每个颜色通道的每个方向的10bins的直方图,得到8*10*3=240维向量;3)两个区域相似度越高,纹理距离越大,反之越小

    • 尺度相似度衡量:通过颜色距离和纹理距离进行合并,容易使得合并后的区域不断吞并周围的区域,导致多尺度只应用在那个局部,不是全局的多尺度。尺度相似度衡量,就是给小区域更高的权重,保证每个位置都是多尺度在合并

    • 区域重合度衡量:区域重合度主要是为了衡量两个区域的"吻合"程度,不能合并后出现断崖的区域。

    • 最终相似度衡量:将上述四种衡量方式加权合并,得到最终相似度衡量数值

特征提取

利用预训练模型(AlexNet、VGG、GoogLeNet、ResNet等)对候选区域进行特征提取,候选区域提取的图像尺寸大小不一,当时特征提取的网络大多需要将输入图像的大小进行统一。

以AlexNet网络为例,输入图像大小为227*227,通过CNN对候选区域进行特征提取,2000个候选区域组成2000*4096特征矩阵。

特征提取阶段主要涉及以下几个步骤:

  • 设计网络结构

网络结构可以有很多参照,例如AlexNet、VGG、GoogLeNet、ResNet等均可进行特征提取。

  • 有监督训练

相比于随机的初始化网络参数,使用预训练模型可以更快的让模型收敛,取得更好的效果。

  • fine-tune

为了使预训练模型更加适用于当前场景,需要对模型进行再训练,一般仅改变末基层网络参数或结构。

其中,特征提取需要注意以下几点:

  • 全连接层的输入数据尺寸都是固定的,因此在进行特征提取前,需要将输入图像进行裁剪或形变转为固定尺寸

如何裁剪更合理?

论文中尝试了3种裁剪方式,图中A是我们的候选区域,1)将bounding box扩展为正方形,然后进行裁剪,如果延伸到了图片外,使用bounding box中的颜色均值进行替代,如B)所示;2)先将bounding box裁剪出来,然后用bounding box中的颜色均值填充为裁剪的大小,如C)所示;3)直接将原始图像形变为需要的形状,如D。

什么是预训练模型(pre-train)?

预训练模型是指在其他训练集上已经训练好的初始模型,可以将此类模型迁移到现有问题,公用层的参数保持与原本相同,仅对部分网络层进行微调,也就是fine-tune(在训练)

为什么不在fine-tune后进行softmax分类,反而又进行svm分类器训练?

先上结论,论文中也进行添加softmax尝试,发现效果要低于svm。cnn模型相对比较容易过拟合,训练时需要较多的样本,因此在cnn训练阶段,标注是相对宽松的,一个bounding box可能仅包含了物体的一部分,也会被当做正样本。但在SVM阶段,需要bounding box将整个物体都包含进来才算正样本,这样能训练的数据量就很少,而svm在小样本上训练效果还可以,所以最终分类效果更好一些。

目标分类

假设需要检测的类别有N个,则需要训练N个分类器(常见SVM等),对每个图片中的候选区域的特征向量进行识别,假设有2000个候选区域,则产生[2000, N]的得分矩阵。

对2000*N的矩阵中每一列进行非极大值抑制(NMS),剔除重叠建议框,得到该类中得分高相对较高的建议框。

NMS是如何工作的?

假设在识别动物任务中,一张图片中一个猫有5个矩形框,矩形框中是猫的概率从低到高是a、b、c、d、e。

  • 将矩形框分别a、b、c、d与概率最大的e进行判断,计算IOU是否大于某个阈值

  • 假设a、b分别与e的IOU值都大于阈值,则丢弃a、b,e成为第一个被保留的矩形框

  • 从剩余的矩形框c、d中选择概率最大的d,计算c与d的IOU是否大于某个阈值,大于则保留d,丢弃c;小于则保留或丢弃c

  • 按照上述步骤进行重叠建议框剔除

IOU的阈值如何确定?

论文中尝试了0~0.5,在0.3是效果更好一些,小于0.3被标记为负样本;不同数据集阈值大小并不固定,需要进行尝试。

目标定位

**Bounding Box Regression(边框回归):**SelectiveSearch方法获得的区域相对粗略,使用回归模型对给定的区域结果进行预测得到一个更加准确的位置。

如图所示,黄色框是预测的Region Proposal,希望通过回归算法让黄色框更加接近真实的绿色框,即Ground Truth。

为什么回归可以用来目标定位?

当输入的Proposal和Ground Truth相差较小时(RCNN设置为IOU>0.6),认为此时是一种线性变换,此时可以用线性回归来对窗口进行微调,当IOU较小时,此时可能使用线性回归效果不理想。

RCNN存在一下问题:

  • 候选区域的提取,需要较多的磁盘空间来计算与存储;

  • 传统CNN等一些网络,要求输入图像尺寸统一,因此需要对输入图像做形变,可能会导致部分信息缺失

  • 大量的ProposalRegion存在重叠部分,每个ProposalRegion都需要通过主干网络(CNN等)进行计算,因此有很多重复性的计算

  • CNN网络、分类器、回归模型这三个流程,导致整体计算时间长、参数多等问题,训练流程不够迅捷。

相关推荐
CountingStars61913 小时前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
神秘的土鸡17 小时前
LGMRec:结合局部与全局图学习的多模态推荐系统
目标检测·计算机视觉·云计算
matlabgoodboy18 小时前
数据分析帮做spss数据代分析stata实证python统计R语言eviews处理
python·数据分析·r语言
落魄君子20 小时前
CNN回归-卷积神经网络(Convolutional Neural Network)
人工智能·神经网络·回归·cnn
机器懒得学习1 天前
基于YOLOv5的智能水域监测系统:从目标检测到自动报告生成
人工智能·yolo·目标检测
biomooc1 天前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言
KeepThinking!2 天前
YOLO-World:Real-Time Open-Vocabulary Object Detection
人工智能·yolo·目标检测·多模态
发呆小天才O.oᯅ2 天前
YOLOv8目标检测——详细记录使用OpenCV的DNN模块进行推理部署C++实现
c++·图像处理·人工智能·opencv·yolo·目标检测·dnn
深度学习lover2 天前
<项目代码>YOLO Visdrone航拍目标识别<目标检测>
python·yolo·目标检测·计算机视觉·visdrone航拍目标识别