Fast R-CNN

  • 相较于 R-CNN 更快且更好
  • 比 R-CNN 训练快9倍测试快213倍
  • 此前的 R-CNN 和 SPP-net 都是多阶段的训练首先训练一个卷积层提取特征fine-tune然后训练 SVM 分类器Fast R-CNN 提出了多任务损失的单阶段训练训练可以更新所有网络层参数

网络架构与训练·

image-20220623234407334

将整个图像和一组候选框作为输入

首先仍使用卷积层和池化层去处理图像得到特征然后对于每个候选框RoI pooling layer 从对应框中的特征中提取固定长度的 feature vector送到全连接中分支成两个输出一个是 K+1 1指 background) 个类别的分类器softmax另外一个是对于 K 个类别的每一个类别输出 4 个实数标识 假设是该类别的情况下 修正后检测框的位置

RoI pooling layer·

使用最大池化

简化版的 SPP layer只有一个金字塔层将矩形窗口内的特征转化为固定大小 H×WH \times W 的小特征图

训练的方法·

Fast R-CNN 能实现单阶段是因为他能够用反向传播训练整个网络的权重

此前的 R-CNN 和 SPP-net 不能够更新 CNN 部分的权重是因为 region proposal 可能很大SGD 的 batch size 假如说是128那就是每次输入 128 个 region proposal他们基本上来自于不同的图并且大概率跟原图差不多大那就跟训练 128 张完整的图差不多算力跟不上

Fast R-CNN 提出我们用比较少的图每次多选几个 region proposal比如同样是 128Fast R-CNN 选择用两张图每张图上选 64 个检测框因为同一张图只需要做一次卷积可以共享参数所以相当于快了 64 倍

Loss 的选择·

image-20220624001219095

Lcls(p,u)=logpuL_{cls}(p,u) = -\log p_u

第二项

对于一个类别 uu首先有一个 true bounding-box vv然后有一个 predicted bounding-box tut^u

λ[u1]\lambda [u \geq 1]u1u \geq 1 是为 1u=0u=0 时为 00就是说 00background) 是不需要这一项 loss 的

具体的计算

image-20220624001557360

大概就是两个框差多少