这篇博客主要论述了,RCNN 系列目标检测模型的发展历程,要点总结。

传统的目标检测

ob_tranditional.png

传统的目标检测流程如图所示:

首先使用提取候选区域,然后再提取候选区域的特征,最后将候选区域的特征放入分类器中训练。

  • 提取候选区域
    这一步是为了对目标的位置进行定位。由于目标可能出现在图像的任何位置,而且目标的大小、长宽比例也不确定,所以最初采用滑动窗口(sliding window)的策略对整幅图像进行遍历,而且需要设置不同的尺度,不同的长宽比。这种穷举的策略虽然包含了目标所有可能出现的位置,但是缺点也是显而易见的:时间复杂度太高,产生冗余窗口太多,这也严重影响后续特征提取和分类的速度和性能。(实际上由于受到时间复杂度的问题,滑动窗口的长宽比一般都是固定的设置几个,所以对于长宽比浮动较大的多类别目标检测,即便是滑动窗口遍历也不能得到很好的区域)
  • 特征提取
    这一阶段通常选择人工设计特征比如:SIFT、HOG等
  • 分类器分类这一阶段主要用到的分类器:主要有SVM, Adaboost等。

总结:传统目标检测存在的两个主要问题:一个是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。 CNN出现使得上面的几步可以合并在一起完成。以上内容摘自博客

RCNN

R-CNN(CVPR2014, TPAMI2015)
Region-based Convolution Networks for Accurate Object detection and Segmentation

模型结构

rcnn.png

RCNN的模型结构如图所示:

  • 输入图片
  • 利用 selective search 算法在图像中提取2000个左右的region proposal(候选区)。
  • 对 2000个左右 region proposal 进行缩放(warp)成 227×227 的大小并输入到 CNN 提取特征,将CNN的fc7层的输出作为特征。
  • 之后将 region proposal 在 CNN 中提取出来的特征输入到 SVM 中进行分类。
  • 对分类后的边框进行边框回归,region propersal 不是那么的精确,为了使 region propersal 窗口和 ground truth 的 IOU 值尽可能的大。(图中未画出)
  • 使用非极大值抑制算法(NMS),剔除多余的预测边框。(图中未画出)

创新点

其创新点主要如下:

  • 将 CNN 引入目标检测领域的开山之作,首次提出 propersal + CNN框架。从使用人工设计特征,转变为使用 CNN 对目标检测区域提取特征,提高了特征对样本的表达能力。
  • 证实了迁移学习的可行性,大样本下进行训练,在小样本下进行微调,缓解了小样本难以训练,甚至过拟合的问题。

实验结果

RCNN 的效果很是显著:VOC 2010 测试集上的平均精度(mAP)达到 53.7%,比当时最优的传统目标检测算法高,具体数据如下图所示。
rcnn_data.png

缺点

大部分的缺点都是 region propersal 处理方法不当引起:

  • region propersal 候选区域需要预先提取,占用比较大的磁盘空间。(空间上)
  • 同一个图片的 region propersal 候选区 都需要通过 CNN 进行特征提取,存在重叠区域重复提取特征问题,带来巨大的计算浪费问题。(时间上)
  • region propersal 候选区尺寸不固定,传统 CNN 需要输入固定尺寸,裁剪(crop)、变形(warp),会使候选区域物体被截断或者拉伸,信息丢失。
  • CNN 提取图像特征、SVM 分类预测类别训练、边界框的边界坐标回归是分开训练,流程不易训练。训练时,不同阶段的结果会缓存在硬盘。

疑惑点

为什么不直接 CNN Softmax 来预测目标的类别,而是使用 CNN 先提取特征,再使用 SVM 进行分类?
在作者的主页论文补充文件 supplement,得到了如下答案。
rcnn_supp.png
为了防止 fine-tuning 过程正例数量太少产生了过拟合,所以在 CNN 微调阶段将 region propersal 与 ground truth 之间的 IOU 阈值调整到 0.5 ,将 0.5 到 1 之间的 region propersal 作为正例,正例样本数量扩大了 30X。

因为 IOU 阈值调整 0.5 ,会导致 CNN 对检测目标的位置不敏感,所以用 CNN 提取特征后再使用“难例挖掘 SVM” (hard negatives mining)。将 ground truth 作为正例,在 0 到 0.3 之间的作为负例。

在论文实验中,使用 SVM 后 平均精度有所提升。

SPPNet

SPP-Net(IEEE2015)
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

创新点

ssp-net 的创新点主要有如下两个:

  • 解决 裁剪(crop)、变形(warp)导致信息丢失问题。引入了金字塔池化(spatial pyramid pooling)
  • 当SPP-Net用于目标检测时,通过映射,让同一张图片的 region proposal 重叠部分进行共享计算,特征提取只需要进行一次。

为什么要进行 裁剪(crop)、变形(warp)成固定的尺寸?
传统的 CNN 而言,输入图像的大小对输入 fc 层的特征维度有影响,所以在 RCNN 中通过裁剪后输入 CNN 网络,输出固定的特征向量 。然而, 裁剪(crop)、变形(warp)会导致信息的丢失,所以 SPPNet 中引入了 金字塔池化(spatial pyramid pooling)。如下图所示,通过这个池化层让不同形状 feature map,输出固定的特征向量,再把这个特征向量输入到 fc layer。
金字塔池化(spatial pyramid pooling) 另一个意义在于在 scale-invariance 。训练时使用不同尺度的图片进行训练(multi-scale training),可以提高网络在尺度上的鲁棒性、和测试集上的精度,缓解过拟合
spp_net.png

什么是金字塔池化(spatial pyramid pooling)?
金子塔池化(spatial pyramid pooling layer)结构如下图所示,在不同尺度下对特征图(feature map)进行划分,共有三个 pyramid level ,最左侧蓝色网格表格表示 将 特征图 (feature map) 划分成 目标检测之-RCNN家族那些事 - 图6 个格子,对每个格子提取特征(最大池化),得到 16 个特征;中间绿色的网络表格表示 将特征图(feature map)划分成 目标检测之-RCNN家族那些事 - 图7 个格子,对每个格子提取特征(最大池化),得到 4 个特征;右侧灰色的网格整个特征图( feature map)提取特征(最大池化)。综上,产生的 目标检测之-RCNN家族那些事 - 图8%5Ctimes256#card=math&code=%2816%2B4%2B1%29%5Ctimes256) 维度的特征向量,256 是通道数。
灰色的网格 金字塔池化(spatial pyramid pooling)的特殊形式,灰色的网格是 全局池化(Global Pooling)
spp_net_pool.png

为什么要映射(Mapping a Window to Feature Maps)?
RCNN 需要对每张图片的 2000 个左右的 region propersal 提取特征,重叠区域存在大量重复计算。SPP-Net中被用于目标检测时,对于每张图片仅仅提取一次特征,把原图 region propersal 映射到 feature map 上,在使用 金字塔池化(spatial pyramid pooling)提取特征,实现共享计算。具体结构如下图所示。

spp_net_ob.png

如何映射(Mapping a Window to Feature Maps)?
映射实现的具体方法,论文中描述如下。为了简化运算卷积层会使用 padding 操作,确保不会因为卷积核的大小,导致卷积后的尺度缩放。也就是说,尺度的缩放仅仅和 stride 有关。参考如下公式

目标检测之-RCNN家族那些事 - 图11

对于原图坐标 目标检测之-RCNN家族那些事 - 图12#card=math&code=%28x%2Cy%29) 和特征图对应的坐标点目标检测之-RCNN家族那些事 - 图13#card=math&code=%28x%E2%80%99%2C%20y%27%29) 的关系:目标检测之-RCNN家族那些事 - 图14%3D(Sx’%2CSy’)#card=math&code=%28x%2Cy%29%3D%28Sx%27%2CSy%27%29) ,特征图左上角坐标 目标检测之-RCNN家族那些事 - 图15 ,右下角的坐标 目标检测之-RCNN家族那些事 - 图16

其中 S 表示每层(包括 pool层) 目标检测之-RCNN家族那些事 - 图17 的乘积,即 原图和特征图的缩放比例。
spp_net_map1.png
spp_net_map.png

缺点

  • 与 RCNN 相比去除了 裁剪(crop)、变形(warp)加入了 金字塔池化(spatial pyramid pooling),所以 RCNN 分段训练、候选区域预先提取的缺点 SPP-Net 也有
  • SPP-Net 很难通过 fine-tuning 对 SPP-layer 之前的网络进行参数微调,效率会很低,原因具体是( Fast-RCNN 中的解释): SPP做fine-tuning时输入是多个不同的图片,这样对于每一个图片都要重新产出新的 feature map,效率很低,而 Fast-RCNN 对其进行了改进。

Fast RCNN

Fast RCNN (ICCV2015)

模型结构

Fast RCNN 是基于 RCNN 和 SPP-Net 的进一步改进。具体的模型结构如下图所示。
Fast R-CNN 将整个图片与通过Selective Search筛选出的region proposals一同输入;经过卷积层、池化层产出原图的 feature map;计算出原图的proposal在feature map的映射;将相应的feature送到ROI pooling层,进行池化,产出固定长度的feature vector;将前一步产生的固定长度的feature vector 作为FC层(SVD分解实现)的输入;最终分支成两个并行的输出层:一个通过softmax产生 K+1 个分类的概率,另一个对于每个object 类别输出四个实数,代表一个较为精确的BBox 偏置修正值,最后进行NMS剔除重叠度高的预测。
fast_rcnn.png
fast_rcnn0.png

创新点

  • 提出了 RoI pooling 实现了同一图片下的 region propersals 重叠区域特征共享计算(与 RCNN 相比),同时能够实现 微调 RoI pooling layer 之前的参数(与 SPP-Net 相比)。
  • 提出了 SVD 分解进行 fc 加速。
  • 提出了 分类 和 边框回归 多任务并行训练,将边框回归并入了神经网络流程,不需要将中间结果存储在硬盘上。(与 RCNN 和 SPP-Net 相比)

什么是RoI pooling?
RoI pooling 是 金字塔池化(spatial pyramid pooling)一种特殊形式,可以看做只有一个 pyramid level 的 金字塔池化(spatial pyramid pooling)。所以 金字塔池化(spatial pyramid pooling)的一些优势也被 RoI pooling 继承下来。比如:输出固定尺寸的特征,解决了裁剪、拉伸导致的信息丢失;scale-invariance

为什么 Fast RCNN 可以微调 RoI pooling layer 之前的层,而 SPP-Net 却不能微调 spatial pyramid pooling layer 之前的层?
因为在training时,两者的 RoIs 采样的方式有所区别:
RCNN SPP-Net 采用了 roi-centric sampling 采样方法,每一批次的 R 个RoIs ,从所有图片中进行均匀采样,来自 R 个不同的图片;
Fast RCNN 采用了采用了 image-centric sampling 采样方法 或者称为 层次化采样(hierarchical sampling),每一批次先采样 N 个图片,再在每个图片中采样出 目标检测之-RCNN家族那些事 - 图22 个RoIs,如何给这目标检测之-RCNN家族那些事 - 图23个 RoIs 标注后面会进行论述
RoI pooling layer 或者 spatial pyramid pooling layer 层之前的反向传播需要 cache 图片正向传播方向上的信息,SPP-Net 如果需要做反向传播,则需要cache R 张图片的信息,显然代价比较大,所以不是不能而是代价比较大 (expensive)。而 Fast RCNN 只需要cache N 个图片的信息。
举个具体的例子,如果一个批次 采样 128 个RoIs,对应 SPP-Net 需要cache 128 张图片的信息;对于 Fast RCNN 一个批次采样 目标检测之-RCNN家族那些事 - 图24 张图片,并在每张图片上采样 目标检测之-RCNN家族那些事 - 图25 个 RoIs,所以只需要cache 2 张图片的信息

为什么SVD 分解能进行 fc 加速?
对于一个 全连接层,他的权重矩阵 目标检测之-RCNN家族那些事 - 图26 的大小是 目标检测之-RCNN家族那些事 - 图27 ,他的 SVD 分解公式如下:

目标检测之-RCNN家族那些事 - 图28
其中 目标检测之-RCNN家族那些事 - 图29 是大小为 目标检测之-RCNN家族那些事 - 图30 的矩阵,目标检测之-RCNN家族那些事 - 图31 是大小为 目标检测之-RCNN家族那些事 - 图32 对角矩阵,目标检测之-RCNN家族那些事 - 图33 是大小为 目标检测之-RCNN家族那些事 - 图34 的矩阵。当 目标检测之-RCNN家族那些事 - 图35#card=math&code=t%20%3C%3C%20min%28u%2Cv%29)时,将原先 目标检测之-RCNN家族那些事 - 图36 矩阵拥有的 目标检测之-RCNN家族那些事 - 图37 个参数,降到了 目标检测之-RCNN家族那些事 - 图38#card=math&code=t%28u%2Bv%29)个参数。
论文中具体在神经网络中的处理方法,将原先的一个全连接层,拆分成两个全连接层,第一个全连接成的权重矩阵是 目标检测之-RCNN家族那些事 - 图39 ,第二个全连接层权重矩阵 目标检测之-RCNN家族那些事 - 图40
论文中也做了相关对比试验,结果证明:通过这个方法大大缩减了 fc6 和 fc7 层的计算时间,同时平局精度仅仅是下降了 0.3 个百分点。
fast_rcnn_svd.png

如何进行多任务训练,如何计算多任务 loss?
Fast RCNN 有两个并行的分支输出,对于与每个 RoI 而言,第一个分支输出分类的概率分布 目标检测之-RCNN家族那些事 - 图42#card=math&code=p%3D%28p0%2C…%2Cp_K%29) 一共 目标检测之-RCNN家族那些事 - 图43 个类别,第一个类别表示背景类;第二个分支输出 目标检测之-RCNN家族那些事 - 图44 个类别对应的 bbox regression offset,输出 目标检测之-RCNN家族那些事 - 图45 维度的数组。将第 目标检测之-RCNN家族那些事 - 图46 个类别的 offset 表示为 目标检测之-RCNN家族那些事 - 图47#card=math&code=t%5Ek%20%3D%20%28t_x%5Ek%2Ct_y%5Ek%2Ct_w%5Ek%2Ct_h%5Ek%29) 。
训练的过程中,对每个 RoI 都标注了对应的 ground-truth 类别 目标检测之-RCNN家族那些事 - 图48 ,和 ground-truth bbox regression 对应的目标偏置 目标检测之-RCNN家族那些事 - 图49
对于每个 RoI 而言 多任务损失(multi-task loss)如下:
目标检测之-RCNN家族那些事 - 图50%3DL
%7Bcls%7D(p%2Cu)%2B%5Clambda%5Bu%5Cge1%5DL%7Bloc%7D(t%5Eu%2Cv)%0A#card=math&code=L%28p%2Cu%2Ct%5Eu%2Cv%29%3DL%7Bcls%7D%28p%2Cu%29%2B%5Clambda%5Bu%5Cge1%5DL%7Bloc%7D%28t%5Eu%2Cv%29%0A)
其中 ![](https://g.yuque.com/gr/latex?L
%7Bcls%7D(p%2Cu)%20%3D%20-%5Clog%20pu#card=math&code=L%7Bcls%7D%28p%2Cu%29%20%3D%20-%5Clog%20p_u)表示分类损失(对数损失、或者称为交叉熵),目标检测之-RCNN家族那些事 - 图51 表示背景类不需要计算边框回归损失,边框损失函数如下,

目标检测之-RCNN家族那些事 - 图52%3D%5Csum%7Bi%20%5Cin%20%5C%7B%20x%2Cy%2Cw%2Ch%20%5C%7D%20%7D%20%3D%0A%5Ctext%7Bsmooth%7D%7BL1%7D(t_i%5Eu%20-%20v_i)%0A#card=math&code=L%7Bloc%7D%28t%5Eu%2Cv%29%3D%5Csum%7Bi%20%5Cin%20%5C%7B%20x%2Cy%2Cw%2Ch%20%5C%7D%20%7D%20%3D%0A%5Ctext%7Bsmooth%7D%7BL1%7D%28t_i%5Eu%20-%20v_i%29%0A)
其中,
![](https://g.yuque.com/gr/latex?%5Ctext%7Bsmooth%7D
%7BL1%7D(x)%20%3D%20%5Cbegin%7Bcases%7D%200.5%20x%5E2%20%26%20%5Ctext%7Bif%7D%5C%20%7Cx%7C%3E1%20%5C%5C%0A%7Cx%7C-0.5%20%26%20%5Ctext%7Botherwise%7D%2C%0A%5Cend%7Bcases%7D%0A#card=math&code=%5Ctext%7Bsmooth%7D%7BL_1%7D%28x%29%20%3D%20%5Cbegin%7Bcases%7D%200.5%20x%5E2%20%26%20%5Ctext%7Bif%7D%5C%20%7Cx%7C%3E1%20%5C%5C%0A%7Cx%7C-0.5%20%26%20%5Ctext%7Botherwise%7D%2C%0A%5Cend%7Bcases%7D%0A)
RCNN 和 SPP-Net 使用的是 目标检测之-RCNN家族那些事 - 图53 loss ,这里边框回归使用 smooth 目标检测之-RCNN家族那些事 - 图54 loss,有如下好处:导数的绝对值有控制,不容易发生梯度爆炸问题,不需要细致的调节学习率。

如何给每张图片采样出的 RoI 进行标注?
Fast RCNN 采用了层次化采样(hierarchical sampling),每张图片采样了 目标检测之-RCNN家族那些事 - 图55 个RoIs。计算 RoI 与ground-truth的IoU,把与RoI IoU 最大的 ground-truth bounding box 作为 RoI 对应的 ground-truth bounding box ,得到监督数据: RoI 类别标注,并且计算出 RoI 到 ground truth 的目标偏置。
采出的 目标检测之-RCNN家族那些事 - 图56 个 RoI中 25% 是从 IoU 阈值范围 目标检测之-RCNN家族那些事 - 图57 中采出,作为正例;剩下的是从 IoU 阈值范围 目标检测之-RCNN家族那些事 - 图58#card=math&code=%5B0.1%2C0.5%29) 采出,作为背景例。
至于边框回归相关理论参考博客

缺点

候选边框提取方法(selective search)仍然是速度瓶颈,没有做到完全的端对端(end to end)

疑惑点

为什么Fast R-CNN可以舍弃SVM分类器而直接采用softmax,而不会出现因为IOU阈值选的0.5导致softmax的精度下降?
论文实验结果,Fast-RCNN softmax 确实比 ,SVM效果要好。

fast_rcnn_svm.png

Faster RCNN

Faster RCNN(NIPS2015
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

模型结构

Faster RCNN 是基于 Fast RCNN 的进一步改进,在测试阶段外部的候选区域提取方法(比如 Selective Search)成为了性能瓶颈。在CPU上运算慢。提出了 Region Proposal Network 来进行候选区域提取,再与 Fast RCNN 结合,实现端对端目标检测
如下图所示,一共包含如下几个部分:通过 conv layers 提取 feature maps(extractor),将提取出来的 feature maps 输入到左侧分支网络 Region Proposal Network 生成 proposals,之后再将 feature maps 和 proposals 一起输入到 RoI 检测头进行分类(RoI Head Classifer)。
实际上是在 Fast RCNN 的基础上,接入了另外一个分支网络 Region Proposal Network 用来提取 RoIs, 替换掉了外部的候选区域提取方法(比如 Selective Search)
faster_rcnn.png
faster_rcnn_change.png

创新点

  • 提出 Region Proposal Network 不再依赖于外部候选区域方法,提高了性能。测试阶段实现了端对端(end to end)。
  • 提出了anchor 的概念。

Region Proposal Nework的结构?
region proposal network 主要结构如下图所示(图中 conv(in_chanels, out_chanels, kernel_size, stride, padding) ),分成两个分支:一个分支做anchor前景物体和背景的二分类;一个分支做anchor的边框回归,修正 anchor 的位置。 之后将 anchors 的前景物体置信度,和边框回归偏置 输入 proposal layer,经过过滤 产出一定数量的 rois。
rpn.png
Faster RCNN 整个网络更加详细的结构如下所示:
Faster-RCNN (Base VGG16).svg
什么是 anchors ?anchors 有什么优点?
Anchors 是图像中以某一点为中心的一组矩形示意图如下所示,一共有三种 scale ,三种宽高比 目标检测之-RCNN家族那些事 - 图64共有 9 个矩形。 通过 anchor 引入了多尺度方法。
faster_rcnn_anchors.jpg

因为原图和特征图(feature map)是存在对应关系的,所以特征图(feature map)上每一个像素,都对应着原图上的某一块区域,对应原图上的区域都有一组 anchors(数量 目标检测之-RCNN家族那些事 - 图66),这块区域的中心即使 anchors的中心。如果特征提取器(extractor)是基于 VGG16,那么这块区域的大小是 目标检测之-RCNN家族那些事 - 图67 (16 是 feature map 和原图的缩放比例)。可以看到,anchors 其实是 sliding window 在神经网络中的一种表现形式。
anchors.png

那么就可以解释论文中这张图片中RPN通道数量变化的原因,Region Propersal Network 有两个分支:一个分支是为了进行 anchors 的前景物体和背景二分类,每个anchor 对应着 2 个 scores (前景,和背景分数),每个像素对应着 目标检测之-RCNN家族那些事 - 图69 个anchors,所以通过 目标检测之-RCNN家族那些事 - 图70卷积核,将通道数量 256-d (256-d 是因为通过 ZF 网络提取的特征,VGG16 而言就是 512-d)转变为 目标检测之-RCNN家族那些事 - 图71 ;另外一个分支是为了计算每个 anchor 的 边框回归偏置(bounding box regression offset),每个 anchor 的偏置有 4个值,所以所以通过 目标检测之-RCNN家族那些事 - 图72卷积核,讲通道数量转变为目标检测之-RCNN家族那些事 - 图73
faster_rcnn_anchors_map.png
anchor 具有Translation-Invariant 特性
translation invariant 表示 图片翻转、旋转后不会影响目标检测的精度,anchor 能够适应多尺度、多形状的目标检测;
而类似于MultiBox之类的方法使用 K-means 来生成800个anchor,不具有这个特性。
同时降低了模型的大小,减少了模型的参数个数。MultiBox有 目标检测之-RCNN家族那些事 - 图75%5Ctimes%20800#card=math&code=%284%2B1%29%5Ctimes%20800) 维的全连接输出层,目标检测之-RCNN家族那些事 - 图76 时仅有目标检测之-RCNN家族那些事 - 图77%5Ctimes9#card=math&code=%284%2B2%29%5Ctimes9)维卷积输出层。因此,这种方法的参数远远少于MultiBox的参数。

如何训练

Region Proporsal Network 中 anchor 如何进行标注监督数据,如何计算loss?
标注监督数据:
RPN 中对训练 anchor 进行标注类别,和目标边框回归偏置。
先排除超出图像的 anchor ,在剩下的 anchor 中 选出采样 256 个,其中 50% 是正例,50% 是负例。
正例:与 ground truth 的 IoU 最大的 anchor,与任意 ground truth 的 IoU 大于等于 0.7 的 anchor。在从中选取 128 个 anchor 标记为 1;
反例: 与所有 ground truth 的 IoU 小于 0.3 的 anchor。在从中选取 128 个 anchor 标注为 0。
忽略例:剩余的 anchor 全都标记为 -1。

计算loss :
Region Proporsal Netwark 的 loss 包含两部分:
目标检测之-RCNN家族那些事 - 图78%3D%5Cfrac%7B1%7D%7BN%7Bcls%7D%7D%5Csum_i%20L%7Bcls%7D(pi%2Cp_i%5E*)%20%2B%20%0A%5Clambda%5Cfrac%7B1%7D%7BN%7Breg%7D%7D%5Csumi%20p_i%5E*%20L%7Breg%7D(ti%2Ct_i%5E*)%0A#card=math&code=L%28%5C%7Bp_i%5C%7D%2C%5C%7Bt_i%5C%7D%29%3D%5Cfrac%7B1%7D%7BN%7Bcls%7D%7D%5Csumi%20L%7Bcls%7D%28pi%2Cp_i%5E%2A%29%20%2B%20%0A%5Clambda%5Cfrac%7B1%7D%7BN%7Breg%7D%7D%5Csumi%20p_i%5E%2A%20L%7Breg%7D%28t_i%2Ct_i%5E%2A%29%0A)

其中
目标检测之-RCNN家族那些事 - 图79 表示一个批次(mini-batch)中 anchor 的 index;
目标检测之-RCNN家族那些事 - 图80 表示 ground truth 类别标注,如果是前景物体则为 1,否则为 0;
目标检测之-RCNN家族那些事 - 图81 表示 ground truth 边框回归偏置标注;
目标检测之-RCNN家族那些事 - 图82 表示前景背景分类的 log 损失(交叉熵);
目标检测之-RCNN家族那些事 - 图83 表示边框回归的损失,并且只在标注为前景的 anchor 进行计算损失,目标检测之-RCNN家族那些事 - 图84%20%3D%20R(ti%2Ct_i%5E*)#card=math&code=L%7Breg%7D%28ti%2Ct_i%5E%2A%29%20%3D%20R%28t_i%2Ct_i%5E%2A%29) ,其中 目标检测之-RCNN家族那些事 - 图85 是 smooth L1;
![](https://g.yuque.com/gr/latex?N
%7Bcls%7D%20%3D%20256#card=math&code=N%7Bcls%7D%20%3D%20256) 表示标准化参数 256 是 mini-batch size;
![](https://g.yuque.com/gr/latex?N
%7Breg%7D%5Capprox%202400#card=math&code=N_%7Breg%7D%5Capprox%202400) 标准化参数 anchors location 的总个数;

RoI Head Classifer 如何标注训练监督数据,如何计算loss?
RoI Head Classifer 需要对 RPN 网络 proposal layer 得到的 RoIs,采样出 128 个。其中 25% 是正例,75% 是负例。
正例:从与 ground truth 最大的 IoU 大于等于 0.5 的 roi,从其中采出 32 个,标记为对应 groud truth 的类别。
负例:从与 ground truth 最大的 IoU 在区间 目标检测之-RCNN家族那些事 - 图86 之间的 roi,从其中采出 96 个,标记为背景类别 0。
计算loss 的方式和 Fast RCNN 中相同。

Faster RCNN 训练的方式?
论文中提及了两种训练方式:
4- Step Alternation training(交替训练)

  1. 使用 ImageNet预训练的参数初始化 extractor,进行训练 RPN ,进行 fine-tune;
  2. 由第一步训练出的 RPN 网络进行提取 RoI ,使用 ImageNet 预训练的参数初始化 extractor 和 RoI Head classifer,将 RoI 输入Fast RCNN 部分,进行 fine-tune。这一步还没有共享 extractor;
  3. extractor 参数固定,使用用第二步得出的 extractor 参数初始化,只 fine-tune RPN 网络部分,这一步已经开始共享 extractor;
  4. 由上一步训练出的 RPN 网络进行提取 RoI ,extractor 参数固定,使用第二步得出的 extractor 参数初始化,将 RoI 输入Fast RCNN 部分,进行 fine-tune;

Approximate joint traning(近似的联合训练)
将 RPN 和 Fast RCNN 部分联合在一起训练,两个网络 loss 函数进行相加,进行端对端的训练(end to end),为什么说是近似,因为 proposal layer 不进行 反向传播。

R-FCN

未完待续

Mask RCNN

未完待续