首页 > 其他分享 >RCNN, fastRCNN, fasterRCNN

RCNN, fastRCNN, fasterRCNN

时间:2023-11-13 15:46:36浏览次数:31  
标签:box ROI region fasterRCNN fastRCNN bounding RCNN proposal

RCNN, fastRCNN, fasterRCNN

参考目录:

RCNN,fast-RCNN,faster-RCNN:https://zhuanlan.zhihu.com/p/64694855

RCNN

参考目录:

RCNN详解:https://blog.csdn.net/weixin_44338712/article/details/107343260

IoU,NMS和bbox回归:https://zhuanlan.zhihu.com/p/60794316

任务

输入:image

输出:1. 类别标签;2. 位置(Bounding box)

解决方法

  • 模块一:提取物体区域(Region proposal)
  • 模块二:对区域进行分类识别(Classification)

传统方法一般是在图片上穷举出所有问题可能出现的区域,然后对这些区域进行分类。对于能分类的区域,使用非极大值抑制(Non-maximumsuppression)去除冗余的区域,在输出结果。

RCNN使用的四个步骤:

  • 设置提取框
  • 对每个框提取特征
  • 图像分类
  • NMS

1. Region

RCNN采用Selective Search生成候选框并合并候选区。算法的主要流程如下:

输入:图片image
输出:物体可能的位置集合L
——————————————————————————————————————————————
使用图像分割算法获得初始区域R={r1,r2,...,rn}
定义相似度集合S={}
for each (ri,rj) in R: # ri,rj互为相邻区域
    计算相似度s(ri,rj)
    S = S ∪ s(ri,rj)
end for

while S ≠ 空:
    s_max(ri,rj) = amax(S)
    合并:rt = ri ∪ rj
    删除所有与ri、rj有关的相似度s(ri,r*),s(rj,r*)
    计算所有与rt相邻区域的相似度,并添加到集合S,S = S ∪ s(rt,r*)
    更新R,R = R ∪ rt
end while
从选区R中获取所有可能的bounding boxes集合L
return L
——————————————————————————————————————————————

2. 特征提取

使用CNN获取各个region proposal的特征。由于不同的region proposal的大小是不一样的,所以需要对图片进行缩放。两种缩放方法:

  1. 各向异性缩放

    即按照尺寸直接强行缩放,图像可能会发生扭曲。

  2. 各向同性缩放

    • 扩充bounding box:在原图上将bounding box扩充到需要的尺寸。
    • 扩充region:用bounding box中颜色的均值对图片的尺寸缺失区域进行填0.

然后使用pretrain后的CNN网络在目标数据集上fine tune。训练过程中会产生一些候选的bounding box,我们将候选框与人工标注的框进行IoU计算,大于0.5记为正样本,否则为负样本。随后通过这些样本进行训练。

3. 训练任务

训练任务主要包括两个:SVM分类和bounding box回归。

3.1 SVM分类

由于训练数据集的数据量很小,所以不适用CNN最后的softmax层进行分类,而是将提取出的特征送入SVM分类器进行分类。SVM适用于小样本训练:IoU<0.3为负例,IoU大于0.7为正例,其余的丢弃。

3.2 bounding box regression

现在设Ground truth的bounding box为\(G=(G_x,G_y,G_w,G_h)\),模型预测的bounding box为\(P=(P_x,P_y,P_w,P_h)\),则bounding boxregression的目标时找到一种映射关系\(f\),使得\(f(P)=G'\) ,\(G'\)是一个和\(G\)接近的框。

我们可以发现,该映射关系可以表示为平移加缩放:

  1. 平移\((\Delta x,\Delta y)\):

    \[G'_x = P_wd_x(P) + P_x \\ G'_y = P_hd_y(P) + P_y \]

    其中\(\Delta x = P_wd_x(P)\), \(\Delta y = P_hd_y(P)\)

  2. 缩放\((S_w,S_h)\):

    \[G'_w = P_w exp(d_w(P)) \\ G'_h = P_h exp(d_h(P)) \]

    其中\(S_w=exp(d_w(P))\), \(S_h=exp(d_h(P))\)

因此,我们所需要的缩放关系即为\(d_x(P)\), \(d_y(P)\), \(d_w(P)\), \(d_h(P)\),接下来我们可以针对这四个两设计算法。

设计回归

输入\(x\):region proposal对应的pool 5层的特征。

输出\(y\):平移和缩放的尺度\(d_x(P)\), \(d_y(P)\), \(d_w(P)\), \(d_h(P)\)

真实的平移和缩放量用\(t\)表示如下:

\[t_x = (G_x-P_x)/P_w \\ t_y = (G_y-P_y)/P_h \\ t_w = log(G_w/P_w) \\ t_h = log(G_h/P_h) \]

MSE下的损失函数可以定义为:

\[loss = \sum^N_{i=1}(t^i-W^Tx)^2 \]

加上L2正则化项后的损失函数:

\[loss = \sum^N_{i=1}(t^i-W^Tx)^2 + \lambda||W||^2 \]

4. 测试过程

  1. Region proposal的确定
  2. RP的特征提取
  3. SVM分类
  4. BBox回归
  5. NMS

RCNN的缺点

  1. 每一个region proposal需要单独计算feature map导致整体的时间变长,且占用空间大;
  2. 每个模块是相互独立的,导致整体精度不高;
  3. 测试时间长。

fastRCNN

参考目录:

ROI pooling:https://blog.csdn.net/fenglepeng/article/details/117885129

fast RCNN:https://blog.csdn.net/weixin_43702653/article/details/124002054?spm=1001.2014.3001.5501

0. 相对于RCNN的改进

  1. 不再对每个region proposal进行卷积,而是对整长图像进行卷积,减少重复计算;
  2. 使用ROI pooling对特征进行尺寸变换,因为全连接层的输入要求尺寸大小一样。
  3. 删除单独的bbox regressor,将regressor放入网络一起进行训练,每个类别对应一个regressor,并用softmax代替原先的SVM分类器。

1. ROI pooling

ROI的全称为region of interest,OI pooling是池化层的一种,整个过程可以看作将region

proposal拼成统一大小的feature map。

输入

  1. 从具有多个卷积池化的深度网络获得的固定大小的feature map;
  2. 一个N*5矩阵,其中N为ROI的数目。5列中,一列为image index,其余四列代表左上角和右下角的坐标。

输出

batch个vector,batch=roi的个数,vector的大小为channel*w*h

实质:将若干个不同大小的box矩形框映射成大小为w*h的矩形框。


具体操作

  1. 根据输入image,将ROI映射到feature map对应位置;
  2. 将映射后的区域划分为相同大小的section;
  3. 对每个section进行max pooling操作。

例如在下图中,我们在一个\(8\times 8\)的feature map,一个ROI,同时我们需要得到\(2 \times 2\)的输出。

设我们取得了一个region proposal的位置(左上角和右下角的坐标)为\((0,3)\)和\((7,8)\),则我们按照下图示意进行划分,将区域不均等地划分为\(2 \times 2\),再取max pooling。

ROI pooling的好处

  1. 不需要进行warp才做,有效避免了物体被扭曲;
  2. 不需要对每个proposal提取特征,只需要用映射的方法从整张图片的feature map上获取ROI feature区域。

2. 模型结构

和RCNN进行对比,有两点主要不同:

  1. 最后一个卷积层后加了一个ROI pooling layer;
  2. 损失函数使用了multi-task loss,将边框回归bounding box regression直接加入了CNN网络的训练。

损失函数

分类器损失:

\[L_{cls}(p,u) = -logp_u \]

回归器损失:

\[L_{loc}(t^u,v) = \sum_{i\in {x,y,w,h}}smooth_{L1}(t_i^u - v_i) \]

where

\[smooth_{L1}(x) = \left\{ \begin{array}{} 0.5x^2 & if\ |x|<1 \\ |x|-0.5 & otherise \end{array} \right. \]

多任务损失函数:

\[L(p,u,t^u,v) = L_{cls}(p,u)+\lambda[u\geqslant 1]L_{loc}(t^u,v) \]

fasterRCNN

参考目录:

faster-RCNN:https://blog.csdn.net/weixin_43702653/article/details/124045469?spm=1001.2014.3001.5501

详解faster-RCNN:https://blog.csdn.net/weixin_42310154/article/details/119889682

RPN:https://zhuanlan.zhihu.com/p/106192020

联合训练:https://blog.csdn.net/Friedrichor/article/details/123943381

fast-RCNN的局限性:依旧使用selective search方法确定region proposal。faster-RCNN改为使用RPN网络提取region proposal。

fast-RCNN的三大模块:

  • Conv layers

    勇于提取输入图像的特征,输出feature map。

  • region proposal networks(RPN)

    最重要的模块,用于提取RP。

  • ROI head

    通过RPN模块确定RP后,后续的结构和fast-RCNN相似。

1. Conv layers

还有三种层,包括13个conv层,13个relu层和4个pooling层。

  • conv: kernel_size=3, pad=1, stride=1
  • pooling: kernel_size=2, pad=0, stride=2

假设输入为图像为\(M \times N\)大小的输入图像,经过网络后会变为\(M/16 \times N/16\)的feature map。

2. Region Proposal Networks

RPN包括以下部分:

  • 生成anchor boxes
  • 判断每个anchor box为foreground(包含物体)或者background(背景)(二分类任务)
  • bbox regression对锚框进行微调,让positive anchor和ground truth更加接近

2.1 anchors

在feature map上,对于每个像素点,预设九个anchor,作为初始的检测框,如下图所示。后面会通过两次bounding box regression来修正检测框的位置。

2.2 cls layer(分类)

在分类任务中,feature map通过sfotmax得到两个值,分别对应目标为前景和背景的概率。

2.3 reg layer (回归)

生成每一个anchor相对于ground truth的坐标偏移量。计算偏移量和缩放量的公式和前文提到的bounding box regression相同。

为什么不直接预测修正后的anchor坐标,而是要预测偏移量?

因为直接预测坐标的数量级较大,难以训练;同时坐标偏移具有较好的数学公式,方便求导。

2.4 生成proposal

proposal层的输入有三个:

  • cls层生成的\((M/16) \times (N/16) \times 2k\)向量
  • reg层生成的\((M/16) \times (N/16) \times 4k\)向量
  • \(im\_info = [M,N,scale\_factor]\)

修正偏移量的要点:

  • 利用 reg layer的值对原始的anchor进行修正;
  • 边界处理:把超出图像边界的positive anchor超出的部分收俩到图像边界处,防止ROI pooling的过程中超出边界;
  • 剔除尺寸非常小的positive anchor;
  • 利用cls layer的score对positive layers进行排序;然后使用NMS;
  • 输出一堆RP的左上角和右下角的坐标值。

3. fasterRCNN的训练方法

3.1 四步交替迭代训练

  1. 训练RPN,使用大型预训练模型共享卷积核权重,端到端训练RPN;
  2. 训练fastRCNN,冻结第一步训练好的RPN,使用和第一步中相同的大型预训练模型共享卷积,训练从RP到最终输出的网络;
  3. 冻结共享卷积,调优RPN;
  4. 冻结RPN和共享卷积,调优fastRCNN;
  5. 重复3,4进行迭代训练。

3.2 联合训练

将四个部分融合到一个网络中,实现端到端的训练过程。

标签:box,ROI,region,fasterRCNN,fastRCNN,bounding,RCNN,proposal
From: https://www.cnblogs.com/pab-oolongtea/p/17829297.html

相关文章

  • TextRCNN、TextCNN、RNN…你都掌握了吗?一文总结文本分类必备经典模型(一)
     本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过SOTA的经典模型逐一详解。前往SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。本文将分3期进行连载,共介绍 20 个在文本分类任务上......
  • RCNN、FastRCNN、FasterRCNN、Mask-RCNN的发展历程
    FasterR-CNN的发展史SelectiveSearch(2012)RCNN(2014)SPPNet(2014)FastR-CNN(2015)FasterR-CNN(2015)总结补充:MaskRCNN7.1、FPN7.2、RPN7.3、ProposalLayer层7.4、DetectionTarget层(预测框匹配groundTrue)7.5、ROIAlign    8.补充:历年主流网络型对比、常用......
  • m基于Faster-RCNN网络的人员吸烟行为检测系统matlab仿真,带GUI操作界面
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要         人员吸烟行为检测系统在公共场所如学校、医院、公共交通工具等广泛使用。这类系统通常通过图像或视频分析来检测人员是否有吸烟行为。其中,基于Faster-RCNN网络的吸烟行为检测是一种常......
  • 基于FasterRCNN深度学习网络的车辆检测算法matlab仿真
    1.算法运行效果图预览 Tttttttttttttt123   2.算法运行软件版本MATLAB2022A 3.算法理论概述       车辆检测是计算机视觉和人工智能领域的重要研究方向,它在交通管理、智能驾驶和安防等领域具有广泛的应用。FasterR-CNN是一种常用的目标检测算法,结合了深度......
  • 【目标检测】RCNN算法实现
    一、前言RCNN(RegionswithCNNfeatures)算法由RossGirshick在2014年的论文“Richfeaturehierarchiesforaccurateobjectdetectionandsemanticsegmentation”提出,是深度学习目标检测的开山之作。RCNN将CNN应用到目标检测问题上,它使用选择性搜索从图像中提取候选区域,利用......
  • 基于RCNN深度学习网络的交通标志检测算法matlab仿真
    1.算法理论概述      基于RCNN(Region-basedConvolutionalNeuralNetwork)深度学习网络的交通标志检测算法的MATLAB仿真。该算法通过使用深度学习网络进行目标检测,针对交通标志的特点和挑战,设计了相应的实现步骤,并分析了实现中的难点。通过本文的研究,可以进一步理解和应用......
  • 基于Fast-RCNN深度学习网络的交通标志检测算法matlab仿真
    1.算法理论概述      Fast-RCNN是一种基于深度学习的目标检测算法,可以用于检测图像中的目标物体。交通标志检测是交通场景下的一项重要任务,它可以在道路上的交通标志被遮挡或损坏时提供帮助。基于Fast-RCNN深度学习网络的交通标志检测算法可以对交通场景下的图像进行检测,......
  • Ubuntu16.04+CUDA8.0+OpenCV3.1+python+caffe+faster-rcnn环境配置
    前言Ubuntu1604注意事项CUDA80安装显卡驱动安装CUDA80编译CUDASampleOpenCV31pythonCaffe安装CaffeMNIST数据集测试faster-rcnn后记前言经过大概两个星期的配置,终于将faster-rcnn安装好了,期间重装了大概十次系统,查阅了无数多文献博客,遇到了无数多坑。本人写这篇文章就是希望读者......
  • maskrcnn详细注解说明(超详细)
     此代码是我对maskrcnn的一些修改,基本还原所有内容,但更加简洁,使代码更易解读。里面有很多注释,非常详细,可自己慢慢品味。若有一些问题,欢迎指正与交流。      此代码为训练文件.py """MASKRCNNalgrithmforobjectdetectionandinstancesegmentationWrittenandmodifi......
  • Mask_RCNN项目下载、配置、运行保姆级教程
    1.下载项目进入国内github镜像https://hub.nuaa.cf/搜索要找的模型下载完成后,放到自己写代码的文件夹内,解压。右键用pycharm打开打开requirements.txt,里面有需要安装的包.(可以在网上查MaskRCNN或你想查的项目的环境配置,网上有的说的很详细,这个requirement说的不太详细,如果版本不......