cnn 怎么提取纹理_目标检测合集 | 1 R-CNN解析

R-CNN是一种目标检测方法,通过选择性搜索选择区域,使用CNN提取特征,配合SVM分类器和回归模型进行物体检测。尽管有效,但存在计算量大、耗时等问题。R-CNN采用预训练的CNN(如AlexNet)进行特征提取,通过SVM进行分类,同时用线性回归修正边界框。选择性搜索生成的候选区域在CNN中进行特征提取,然后用SVM进行二分类,并利用边界框回归优化位置。尽管R-CNN提高了检测率,但其繁琐的训练流程和计算需求限制了实时应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

R-CNN(Regions with CNN features,具有CNN特征的区域),Ross B. Girshick在2013.11年提出,用CNN代替了传统的颜色、纹理等浅层的特征,在DPM多年瓶颈期后,显著提升了检测率,但没有改进传统的流程框架,依然还存在检测速度、精度不满意。Rich feature hierarchies for accurate object detection and semantic segmentation,作者主页核心思想:

  • 选择性搜索选出推荐区域,在自下而上的区域推荐上使用CNN提取特征向量
  • 分别训练三个模型:CNN fine-tuning模型(提取图像特征,AlexNet训练ImageNet)、SVM分类器(预测类别)、回归模型(修正边界,L2损失)
  • 提出了数据缺乏时训练大型CNNs的“辅助数据集有监督预训练—小数据集特定领域调优”训练方法。
  • VOC2007 58.5%,VOC2010 53.7%

缺点:

  • 重叠区域特征重复计算,GPU还要40s;
  • 输入CNN的区域推荐图片有缩放会造成物体形变、信息丢失,导致性能下降。
  • 分别训练三个模型,繁琐复杂:因为用的是传统目标检测的框架,需要训练CNN fine-tuning模型(提取图像特征)、SVM分类器(预测类别)、回归模型(修正边界),中间数据还需要单独保存。训练SVM时需要单独生成样本,而这个样本和CNN提取带出来的样本可能存在差异,将各个模型拼在一起就会有性能损失。
  • 候选框选择搜索算法还是耗时严重,2000个候选框都需要CNN单独提取特征,计算量很大;
  • 多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;

目标检测系统:(分类和定位)

  • 通过选择性搜索从图像提取大约2000个自下而上的区域推荐
  • 用AlexNet提取每个变形后的区域推荐(227×227)的特征
  • 使用线性SVM对每个区域的特征向量进行分类,再边界框回归精修得到对应的位置坐标信息。

2dc89563f6c4c85b49d10267091012c5.png

dcff3476a5da83a6ac9214ecc8e689d6.png

检测算法架构(预测)

  • 提取候选框:通过选择性搜索(Selective Search)生成2K个区域推荐(region proposal),作为物体出现的位置假设,并且是能够判定物体类别的矩形框。SS就是首先通过简单的聚类生成区域集合,然后根据定义的相似度不断合并相邻区域构成更多不同尺度的新候选框。参考2012年的 Selective Search for Object Recognition,翻译,OpenCV有实现SelectiveSearchSegmentation。以下步骤也称区域层次合并算法(Selective Search by Hierarchical Grouping)
    • 1)生成区域集R:采用区域分割模型来获取原始分割区域R={r1,r2,…,rn},这些区域在图像中可能是物体。参考Efficient GraphBased Image Segmentation,翻译,OpenCV有实现GraphSegmentation。
    • 2)计算R里两两相邻区域之间的相似度,添加到相似度集合S=(s1,s2...)。这里计算相似度需要采用颜色、纹理、尺寸、交叠4个低层次的特征,参考。
    • 3)合并区域:从相似度集合S中找出相似度最大的两个区域 ri 和rj,将其合并成为一个区域 rt 并添加到R中;
    • 4)减少S集合:从S中除去原先与ri和rj相邻区域之间计算的相似度(3个值),计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度(2个值),将其结果添加的到相似度集合S中(这时S里已少了一个值)。
    • 5)跳至(3)迭代,直至S为空,直到最后的一个rn是整个图像变成的一个单独区域。
    • 6)获取每个区域的Bounding Boxes,通过这样的区域合并,可以得到一系列物体的位置假设L。
    • 最终得到候选区域的尺度有不同,候选区域个数相比滑动窗口也比较少。接下来的任务就是如何从中找出物体的真正位置并确定物体的类别。(滑动窗口,要考虑步长、窗口大小、很多候选框,计算量大很耗时)

0beb518815a45672a10aadb8e6e96bfa.png
  • 提取CNN特征向量:输入候选框到卷积网络。将每个region proposal归一化为同一尺寸,再使用CNNs在每个region proposal中提取一个4096维的特征向量
    • 对于每个候选框:让候选框是CNN的输入,利用CNN网络对候选框提取出特征。
  • SVM分类:对每个region proposal提取的特征向量使用特定种类的线性SVM进行分类(二分类)
    • 训练SVM分类器:输入是正负样本在AlexNet下计算出来的4096维特征,输出是该类的得分,训练的是SVM权重向量,每个类别对应一个SVM分类器,需要21个,有背景。
      • 由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本。框内没有物体或者部分重叠的IOU阈值小于0.3的为负样本。
    • 分类器预测:用CNN提取了2000个候选框,就得到了2000*4096的特征向量矩阵,然后把矩阵与svm权值矩阵4096*N点乘(N为类别数目,N个SVM,每个SVM包好了4096个W),就可以得到类别预测结果。

d670fdbf8daa01eec8d4707f901bbb6e.png
  • 边界框回归,精修候选框位置:利用线性回归模型判定框的准确度,对Bounding-box做矫正(Bounding Box regression)
    • 候选区域可能存在以下情况,线性回归模型将会对(dx,dy,dw,dh)是四个值进行回归,dx dy是候选框的横、竖偏差值,dw dh是候选框宽、高的多余值。

715ef4a8d72b71d86401466af6069782.png
  • NMS非极大值抑制:计算和当前最高置信度候选框的IOU,大于一定國值的,就将其刪除,对候选框进一步做了筛选和合并。
    • IOU定义了两个bounding box的重叠度,IOU=(A∩B)/(A∪B)。

17eb3a99862a848e7f7c4c1185abfa45.png
  • 最终得到目标检测的输出,即类别和位置信息。

训练

  • 训练CNN特征表达能力(目的是提取特征向量)
    • 选择预训练网络模型:借用了AlexNet训练ImageNet得出的预训练模型,用它的权重值作为接下来的初始值。把一个预先训练好的模型的部分挪到一个类似的任务上使用,这是迁移学习(Transfer Learning)的思想。

ced8e6bf4abb7e41153f876bf889ea36.png
    • fine-tuning(微调):
      • 更改全连接层:把CNN预训练模型的最后一层全连接层给更改成N+1个输出的神经元(加上了背景),然后这一层直接采用参数随机初始化的方法,其它网络层的参数不变还是预训练模型的权值;
      • 接着就可以用类别样本继续SGD训练了,训练目的是使FC输出的特征向量更准确。最后目的是提取出全连接层输出的特征向量,以用于SVM分类。
      • 注意:如果省去fine-tuning阶段,不重新训练CNN,直接采用Alexnet模型,用p5、或者f6、f7的特征作为特征向量,然后进行训练svm,这样精度会比较低。因为前面的卷积层所学习到的是共性特征,全连接层所学习的是针对分类的特征。
      • 注意:后面没有直接用CNN的最后一层softmax分类层来做物体边界框的分类,而是用了SVM分类器,这个是因为它们训练过程的正负样本定义方式各有不同,导致前者的输出精度低。
        • CNN容易过拟合,所以需要大量的训练数据,对Bounding box的位置限制条件限制的比较松,就对训练数据做了比较宽松的标注,比如一个bounding box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练cnn;
        • SVM适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,只有当bounding box将近把整个物体都包含进去了,我们才把它标注为物体类别,分类结果的精度高。

1f538131fa801f5cf0579c7741cfaa00.png
  1. 训练SVM分类模型
  2. 训练回归模型,使用L2损失

选择搜索遵循的原则

  • 捕获所有尺度:选择搜索采用了层次算法(Hierarchical Algorithm)有效地考虑所有对象的比例。而穷举搜索通过改变窗口大小来适应物体的不同尺度。如图2是选择性搜索的两个例子表明了不同尺度的必要性,在左边,我们发现许多不同尺度的物体。在右边,我们必须找到不同尺度的物体,因为女孩被电视所包含。层次算法可能就是由最初分割的很多小区域,不断合并出了较大尺度的区域,与原分割区域相加构成了更大的区域集合R。

a687e03c7464a09559bf36ae63ae8557.png
  • 区域合并的算法应该多元化:单一的策略无法应对多种类别、不同场合的图像,要使用颜色、纹理、大小等多种策略对分割好的区域进行合并。也就是计算的相似度要用多种方法。
  • 快速计算:选择性搜索的目标是生成一组可能的对象位置,以便在实际的对象识别框架中使用。这个集合的创建不应该成为计算瓶颈,因此我们的算法应该相当快。

论文测试结果
在PASCAL VOC 2010上的平均精度(mAP)达到53.7%。VOC2007 58.5%

a8710ceba721a3298ad8d64e88057efe.png


表2:2007年VOC检测平均精度(%)。第1-3行显示没有fine-tuned的R-CNN性能,第4-6行显示了CNN在ILSVRC 2012上的预训练结果,然后在VOC 2007上进行了fine-tuned,第7行包括一个简单的边界框回归(BB)阶段,它减少了定位错误(C部分)。第8-10行提供了DPM方法作为一个强基线,第一种方法只使用HOG,而后面两种方法使用不同的特性学习方法来增强或替换HOG。

a8fc2b5c423eb089c317d28f6df436f0.png


在200类的ILSVRC2013 检测测试集的平均精度比较(Mean average precision),R-CNN的mAP为31.4%,较之前的最佳结果为24.3%的OverFeat[34]有较大的改进。

f2bee0548494e271c3c1cb24f9f8b0e6.png

5ae983bf45c5e16b18bf6ff2fe4fa529.png


其他参考:
作者课件 综述简要 learnopencv.com选择性搜索 RCNN分析 课件取材
作者源码(MATLAB): https://github.com/rbgirshick/rcnn

还可在我的知乎中查看其他系列专栏《CNN模型合集》《人脸识别合集》《目标检测合集》《CS231n深度视觉笔记》《OpenCV图像处理教程》
转载请注明:https://zhuanlan.zhihu.com/ObjectDet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值