RCNN、Fast-RCNN、Faster-RCNN

学习 · 2023-06-03 · 456 人浏览

R-CNN

RCNN算法流程可分为4个步骤

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM 分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置

image-20230415134202015

候选区域的生成

利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

image-20230415134422185

对每个候选区域,使用深度网络提取特征

将2000候选区域缩放到227227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到20004096维矩阵

image-20230415134732781

特征送入每一类的SVM分类器,判定类别

将2000*4096维特征与20个SVM组成的权值矩阵4096*20相乘获得2000*20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000*20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

image-20230415135444229

image-20230415135813844

非极大值抑制剔除重叠建议框

IoU(Intersection over Union) 表示$(A\cap B)/(A\cup B)$

image-20230415140236828

image-20230415140256285

image-20230415140441421

使用回归器精细修正候选框位置

对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。

如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗$\hat{G}$表示Region Proposa1进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题

image-20230415140812935

R-CNN存在的问题:

  1. 测试速度慢:

    • 测试一张图片约53s(cpu)。用 Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
  2. 训练速度慢:

    • 过程及其繁琐
  3. 训练所需空间大:

    • 对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOC07训练集上的5k图像上提取的特征需要数百GB的存储空间

Fast R-CNN

Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再PascalVOC数据集上)。

image-20230417134915813

Fast R-CNN算法流程可分为3个步骤

  • 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  • 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

    ROI region of interest

    ROI 是 Region of Interest 的缩写,表示感兴趣区域。在计算机视觉中,ROI 通常指的是图像中需要特别处理或者分析的区域,例如图像中的目标对象或者感兴趣的区域。ROI 可以是任意形状的区域,例如矩形、多边形等。

    在目标检测中,ROI 通常指的是图像中可能包含目标对象的区域。这些 ROI 可以使用一些图像分割算法(如 Selective Search)或者人工标注的方式进行生成。对于每个 ROI,可以对其进行分类、定位等任务,以识别图像中的目标对象。在 Faster R-CNN、Mask R-CNN 等目标检测算法中,ROI 池化(ROI Pooling)操作用于将不同大小的 ROI 对齐为固定大小的特征图,从而能够方便地进行后续的分类、定位等计算。

image-20230417135254975

一次性计算整张图像特征

R-CNN依次将候选框区域输入卷积神经网络得到特征。

image-20230417142432568

Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算。

不限制输入图像的尺寸

image-20230417142505938

训练样本的采样(正样本 ,负样本)

正样本是IOU大于0.5的 随机的选取25%

负样本是在真值中IOU大于0.1~0.5之间的

RoI Pooling Layer不限制输入图像的尺寸

image-20230417145416912

image-20230417145511912

注意:这里忽略了深度channel

分类器

输出N+1个类别的概率 (N为检测目标的种类,1为背景) 共N+1个节点

image-20230417145753867

边界框回归器

输出对应N+1个类别的候选边界框回归参数$(d_x,d_y,d_w,d_h)$,共$(N+1)\times 4$个节点

image-20230417145900077

$$ \begin{aligned} \hat{G}_x &=P_wd_x(P)+P_x\\ \hat{G}_y&=P_hd_y(P)+P_y\\ \hat{G}_w&=P_wexp(d_w(P))\\ \hat{G}_h&=P_hexp(d_h(P)) \end{aligned} $$

$(d_x,d_y,d_w,d_h)$分别为候选框的中心x,y坐标,以及宽高

$\hat{G}_x,\hat{G}_y,\hat{G}_w,\hat{G}_h$分别为最终预测的边界框中心x,y坐标,以及宽高

Multi-task loss

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

$L_{cls}(p,u)$分类损失

$\lambda[u \geq1]L_{loc}(t^u,v)$ 边界框回归损失

$p$是分类器预测的softmax概率分布$p=(p_0,...,p_k)$

$u$对应目标真实类别标签

$t^u$对应边界框回归器预测的对应类别$u$的回归参数$(t^u_x,t^u_y,t^u_w,t^u_h)$

$v$对应真实目标的边界框回归参数$(v_x,v_y,v_w,v_h)$

分类损失

$$ L_{cls}(p,u)=-\log p_u $$

误差计算

Cross Entropy Losss 交叉熵损失

  1. 针对多分类问题(softmax输出,所有输出概率和为1)
    $H=-\sum_i o^*_i \log(o_i)$
  2. 针对二分类问题(sigmoid输出,每个输出节点之间互不相干)

    $H=-\frac{1}{N}\sum^N_{i=1}[o^*_i\log o_i+(1-o^*_i)\log (1-o_i)]$

其中$o^*_i$为真实标签值,$o_i$为预测标签值,默认log以e为底等于ln

边界框回归损失

$$ \lambda[u\geq 1]L_{loc}(t^u,v) $$

$[u \geq 1]$是艾弗森括号

$L_{loc}(t^u,v)=\sum_{i\in \{x,y,w,h\}} {smooth}_{L_1}(t^u_i-v_i)$

$$ smooth_{L_1}(x)= \begin{cases} 0.5x^2 \quad if |x| <1 \\[2ex] |x|-0.5 \quad otherwise \end{cases} $$

Fast R-CNN框架

image-20230417163041816

Faster R-CNN

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及Coco竞赛中获得多个项目的第一名

image-20230417163346522

Faster R-CNN算法流程可分为3个步骤

  • 将图像输入网络得到相应的特征图
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图接着将特征图展平通过一系列全连接层得到预测结果

image-20230417165837766

RPN+Fast R-CNN

image-20230417170207386

RPN网络结构

image-20230417170321273

image-20230417170748086

image-20230417170843567

cls 两个一组 reg四个一组

cls 两个分别为前景的概率 背景的概率

reg xy为中心的预测偏移量 wh为宽度和高度的调整

在Faster R-CNN中:经验所得

​ 给了三种尺度(面积)$\{ 128^2,256^2,512^2 \}$

​ 三种比例$\{1:1,1:2,2:1 \}$

每个位置(每个滑动窗口)在原图上都对应有$3\times3=9$anchor

image-20230417171612297

对于ZF感受野:171

对于VGG感受野:228

CNN 感受野

计算Faster R-CNN中ZF网络feature map 中3x3滑动窗口在原图中感受野的大小。

image-20230417220218085

$$ F (i) = (F (i +1) - 1)\times Stride + Ksize $$

$$ \begin{align} &Feature map(Conv5): F = 3 \\ &Feature map(Conv4): F = (3 - 1) x 1 + 3 = 5 \\ &Feature map(Conv3): F = (5 - 1) x 1 + 3 = 7 \\ &Feature map(Pool2): F = (7 - 1) x 1 + 3 = 9 \\ &Feature map(Conv2): F = (9 - 1) x 2 + 3 = 19 \\ &Feature map(Pool1): F = (19 - 1) x 2 + 5 = 41 \\ &Feature map(Conv1): F = (41 - 1) x 2 + 3 = 83 \\ &Feature map(Image): F = (83 - 1) x 2 + 7 = 171 \end{align} $$

对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。

总共256个anchor 正样本和负样本个128个如果正样本不够可多采样负样本。

在Faster R-CNN中正样本为IoU为0.7,极少数条件下选与ground-truth最大的IoU最大的anchor

负样本为与所有的ground-truth都小于0.3的IoU

RPN Multi-task loss

$$ L(\{ p_i \},\{ t_i\}) = \frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p^*_i)+\lambda \frac{1}{N_{reg}}\sum_ip^*_iL_{reg}(t_i,t^*_i) $$

$\sum_iL_{cls}(p_i,p^*_i)$ :分类损失

$\sum_ip^*_iL_{reg}(t_i,t^*_i)$ :边界框回归损失

$p_i$表示第i个anchor预测为真实标签的概率

$p^*_i$当为正样本时为1,当为负样本时为0

$t_i$表示预测第i个anchor的边界框回归参数

$t^*_i$表示第i个anchor对应的GTBox的边界框回归参数

$N_{cls}$表示一个mini-batch中的所有样本数量256

$N_{reg}$表示anchor位置的个数(不是anchor个数)约2400

分类损失

Softmax Cross Entropy:多类的交叉熵损失

Binary Cross Entropy : 二分类交叉熵损失

注意:使用二分类交叉熵损失,cls layer 只预测k scorse

image-20230418110349227

$$ L_{cls}=-[p^*_i \log (p_i)+(1-p^*_i)\log (1-p_i)] $$

$p_i$表示第i个anchor预测为目标的概率

$p^*_i$当为正样本时为1,当为负样本时为0

边界框回归损失

$$ L_{reg}(t_i,t^*_i)=\sum_i {smooth}_{L_i}(t_i-t^*_i)\\ t_i=[t_x,t_y,t_w,t_h] \;\;\; t^*_i=[t^*_x,t^*_y,t^*_w,t^*_h]\\ $$

$$ {smooth}_{L_1}(x) = \begin{cases} 0.5x^2 \quad if |x|<1 \\[2ex] |x|-0.5 \quad optherwise \end{cases} $$

$p^*_i$当为正样本时为1,当为负样本时为0

$t_i$表示预测第i个anchor的边界框回归参数

$t^*_i$表示第i个anchor对应的GT Box的边界框回归参数

$$ \begin{aligned} t_x&=(x-x_a)/w_a,\; & t_y&=(y-y_a)/h_a,\\ t_w&=\log(w/w_a),\; &t_w&=\log(h/h_a),\\ t^*_x&=(x^*-x_a)/w_a,\;&t^*_y&=(y^*-y_a)/h_a,\\ t^*_w&=\log(w^*/w_a),\;&t^*_h&=\log(h^*/h_a) \end{aligned} $$

Faster R-CNN训练

直接采用RPN Loss+ Fast R-CNN Loss的联合训练方法

原论文中采用分别训练RPN以及Fast R-CNN的方法

(1)利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;

(2)固定RPN网络独有的卷积层以及全连接层参数,再利用lmageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数。

(3)固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数。

(4)同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络。

详细介绍Fast-RCNN和Faster-RCNN

Fast R-CNN

Fast R-CNN是一个用于目标检测的深度学习模型,由Ross Girshick于2015年提出。它是R-CNN(Region-based Convolutional Networks)的改进版本,提高了目标检测的速度和准确性。Fast R-CNN的主要贡献是引入了RoI(Region of Interest)池化层以及多任务损失函数。

Fast R-CNN的主要组件包括:

  1. 卷积神经网络(CNN):Fast R-CNN使用预先训练好的CNN(例如VGG或ResNet)作为特征提取器。输入图像首先通过CNN,生成一组特征映射。
  2. 区域建议网络(Region Proposal Network,RPN):Fast R-CNN仍然依赖于外部区域建议方法(例如Selective Search)来生成候选框。这些候选框后续被送入RoI池化层。
  3. RoI池化层:RoI池化层将不同尺寸的候选框映射到固定大小的特征映射。这实现了对目标区域的特征提取,为后续的分类和边界框回归做准备。
  4. 全连接层(FC):RoI池化后的特征映射被送入全连接层,以学习区域特征。
  5. 多任务损失函数:Fast R-CNN使用一个多任务损失函数同时优化目标分类和边界框回归。损失函数包含两部分:Softmax交叉熵损失用于分类,Smooth L1损失用于边界框回归。

Faster R-CNN

Faster R-CNN是Fast R-CNN的改进版本,由Shaoqing Ren等人于2015年提出。Faster R-CNN的主要创新是引入了区域建议网络(RPN),使得区域建议和特征提取可以在同一网络中完成,从而提高了目标检测的速度。

Faster R-CNN的主要组件包括:

  1. 卷积神经网络(CNN):与Fast R-CNN类似,Faster R-CNN也使用预训练好的CNN作为特征提取器。
  2. 区域建议网络(RPN):RPN是Faster R-CNN的核心创新。它是一个小型的全卷积网络,用于在特征映射上生成候选框。通过学习目标和背景的边界框,RPN实现了端到端的区域建议生成。
  3. RoI池化层:与Fast R-CNN相同,RoI池化层将不同尺寸的候选框映射到固定大小的特征映射。
  4. 全连接层(FC):与Fast R-CNN相同,全连接层用于学习区域特征。
  5. 多任务损失函数:与Fast R-CNN相同,Faster R-CNN也使用多任务损失函数来同时优化目标分类和边界框回归。

Faster R-CNN相较于Fast R-CNN的优势在于,它将区域建议和特征提取整合到同一个网络中,实现了端到端的训练和推理。这使得Faster R-CNN在保持准确性的同时,大幅提高了目标检测的速度。

目标检测 RCNN Faster-RCNN 深度学习 人工智能 Fast-RCNN
Theme Jasmine by Kent Liao