R-CNN
RCNN算法流程可分为4个步骤
- 一张图像生成1K~2K个候选区域(使用Selective Search方法)
- 对每个候选区域,使用深度网络提取特征
- 特征送入每一类的SVM 分类器,判别是否属于该类
- 使用回归器精细修正候选框位置
候选区域的生成
利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。
对每个候选区域,使用深度网络提取特征
将2000候选区域缩放到227227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到20004096维矩阵
特征送入每一类的SVM分类器,判定类别
将2000*4096维特征与20个SVM组成的权值矩阵4096*20相乘获得2000*20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000*20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。
非极大值抑制剔除重叠建议框
IoU(Intersection over Union)
表示$(A\cap B)/(A\cup B)$
使用回归器精细修正候选框位置
对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗$\hat{G}$表示Region Proposa1进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题
R-CNN存在的问题:
测试速度慢:
- 测试一张图片约53s(cpu)。用 Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
训练速度慢:
- 过程及其繁琐
训练所需空间大:
- 对于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数据集上)。
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 对齐为固定大小的特征图,从而能够方便地进行后续的分类、定位等计算。
一次性计算整张图像特征
R-CNN依次将候选框区域输入卷积神经网络得到特征。
Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算。
不限制输入图像的尺寸
训练样本的采样(正样本 ,负样本)
正样本是IOU大于0.5的 随机的选取25%
负样本是在真值中IOU大于0.1~0.5之间的
RoI Pooling Layer不限制输入图像的尺寸
注意:这里忽略了深度channel
分类器
输出N+1个类别的概率 (N为检测目标的种类,1为背景) 共N+1个节点
边界框回归器
输出对应N+1个类别的候选边界框回归参数$(d_x,d_y,d_w,d_h)$,共$(N+1)\times 4$个节点
$$ \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 交叉熵损失
- 针对多分类问题(softmax输出,所有输出概率和为1)
$H=-\sum_i o^*_i \log(o_i)$ 针对二分类问题(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框架
Faster R-CNN
Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及Coco竞赛中获得多个项目的第一名
Faster R-CNN算法流程可分为3个步骤
- 将图像输入网络得到相应的特征图
- 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
- 将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图接着将特征图展平通过一系列全连接层得到预测结果
RPN+Fast R-CNN
RPN网络结构
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
对于ZF感受野:171
对于VGG感受野:228
CNN 感受野
计算Faster R-CNN中ZF网络feature map 中3x3滑动窗口在原图中感受野的大小。
$$ 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
$$ 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的主要组件包括:
- 卷积神经网络(CNN):Fast R-CNN使用预先训练好的CNN(例如VGG或ResNet)作为特征提取器。输入图像首先通过CNN,生成一组特征映射。
- 区域建议网络(Region Proposal Network,RPN):Fast R-CNN仍然依赖于外部区域建议方法(例如Selective Search)来生成候选框。这些候选框后续被送入RoI池化层。
- RoI池化层:RoI池化层将不同尺寸的候选框映射到固定大小的特征映射。这实现了对目标区域的特征提取,为后续的分类和边界框回归做准备。
- 全连接层(FC):RoI池化后的特征映射被送入全连接层,以学习区域特征。
- 多任务损失函数: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的主要组件包括:
- 卷积神经网络(CNN):与Fast R-CNN类似,Faster R-CNN也使用预训练好的CNN作为特征提取器。
- 区域建议网络(RPN):RPN是Faster R-CNN的核心创新。它是一个小型的全卷积网络,用于在特征映射上生成候选框。通过学习目标和背景的边界框,RPN实现了端到端的区域建议生成。
- RoI池化层:与Fast R-CNN相同,RoI池化层将不同尺寸的候选框映射到固定大小的特征映射。
- 全连接层(FC):与Fast R-CNN相同,全连接层用于学习区域特征。
- 多任务损失函数:与Fast R-CNN相同,Faster R-CNN也使用多任务损失函数来同时优化目标分类和边界框回归。
Faster R-CNN相较于Fast R-CNN的优势在于,它将区域建议和特征提取整合到同一个网络中,实现了端到端的训练和推理。这使得Faster R-CNN在保持准确性的同时,大幅提高了目标检测的速度。