【论文解读】目标检测的发展之作|Ross大神续作 | Fast R-CNN

前言

先放出Ross大神的履历链接, 以此镇楼!祝愿各位读者能早发paper, 一切顺利,少有bug~~

Ross Girshick

在这里插入图片描述
2014 年R-CNN 单位署名还是 UC Berkeley.
那个时候的作品还是从传统图像识别世界向深度学习转变的萌芽过程(毕竟AlexNet 夺冠时候才2012年)/带着明显的学术探究和实验氛围.(哇, 19页的paper写的是真的详细)
R-CNN也还是并存着传统图像识别(SS/SVM) + 深度学习分类(AlexNet)的初步探索.

在这里插入图片描述

但是进入了2015年之后, Ross大神已经进入微软开始工作. 已经从开始的R-CNN的处女秀, 到必须要在投入使用性(运行时间/ 精度 / 转化效率)等多方面进行进一步的发展了.
于是第二年有了Ross大神的的续作, Fast R-CNN.

参见 [官方相关链接] Fast R-CNN | [ICCV' 15] | [pdf] | [official code - caffe] | [tutorial-slides] | [[fast-rcnn-slides]]

1 简介

建议在了解Fast R-CNN之前, 最好先了解一下其前身RCNN以便于有更深体会和了解.
参见 【论文解读】深度学习目标检测的开山鼻祖 |R-CNN详解 | 两阶段目标检测代表

1.1 摘要

在这里插入图片描述
这个也许就解释了名字的由来了, 为啥叫做Fast R-CNN?
因为他真的快啊!

  • backbone换成VGG16的话, 相比于RCNN训练时间提升9倍/测试时间提升213倍/并且精度还提升了, 相比于一些新的框架SPPNet等,也是更快更准更强~~
  • 并且采用了caffe框架python来实现,比较亲民了.毕竟正版的matlab还是要收费的.
  • 单张图片的检测时间0.3s, PASCAL VOC 2012 mAP 提升到了66% (RCNN 最高是62%)

1.2 paper自述的主要贡献

在这里插入图片描述
看到了没, 更快更高更强更省空间!

以前RCNN又是单独训练SVM+ bounding box regression, 又是fine-tuning AlexNet的, 多个流程的训练往往是比较繁琐(先固定这个在训练那个, 然后固定那个在训练这个, 看看效果在反复一下)
现在把除了提取ROI的部分(SS method), 其他全都是用深度学习的方式表示出来了(resize img -> back bone for feature map -> classfication + bounding box), (除了SS)全部都变成single-stage—一条流水线上的过程了!!
那深度学习的反向传播大法就有了大用场了!!他可以自动更新权重参数了!

2 Fast R-CNN网络结构

2.1 网络结构概览

在这里插入图片描述
为了方便表示和理解, 使用一张ross大神slides上的图来说明:
在这里插入图片描述
训练过程说明:
->输入一张大小固定的图像(227 x 227)
-> 使用selective search 在原始图像上提取ROI区域 、将原始图像送入VGG16主干网络提取整体的图像特征(feature map)
-> 将ROI (即初始的目标的bounding box)映射到提取的图像特征中, 即在feature map 中找到对应的bounding box
-> 将bounding box送入ROI pooling layer提取成固定尺寸的图像特征
-> 送入FC layer
-> 使用softmax 进行分类计算,使用线性回归拟合bounding box
-> 计算总的损失函数(分类、回归)、并使用SGD优化器反向传播从而更新整个网络权重

PS: 再简化的流程图
在这里插入图片描述

2.2 提取img ROI候选框

提取初始的候选框的方法, 还是选择了selective search method
tips:
此处还是残留的一点传统图像处理的痕迹, 也是后续Faster R-CNN提升的关键点。

主体思想
输入一张图片,首先通过图像分割的方法(大名鼎鼎的felzenszwalb算法)获得很多小的区域,然后对这些小的区域不断进行合并(通过相似性公式计算, 相邻区域相似度最高的合并),一直到无法合并为止。
此时这些原始的小区域和合并得到的区域的就是我们得到的bounding box.

具体可以参见
[论文解读] 图像分割 & 目标识别 | Selective Search和python实现| <Selective Search for Object Recognition>

2.3 获取feature map ROI

2.3.1 从整张图提取整体图像特征(feature map)

提取整体图像特征的话, 这次选择的back-bone的话有3个版本 。依据网络深度和参数数量,可以分为如下:

  • S - 轻量级的网络,CaffeNet (也就是AlexNet)
  • M - 中量级级的网络,VGG_CNN_M_1024
  • L - 重量级的网络, VGG16
    在VOC上相关准确度也是逐渐上升的。

2.1的图中的ConvNet, 也就是Fast R-CNN中采用了、用来提取整张图片的feature map的结构,是这些网络结构的卷基层(即在max pooling之前的全部结构)。

为了方便了解, 我大致画了一下主干网络的网络结构图、标注了使用的结构:

  • VGG16
    在这里插入图片描述
  • AlexNet
    在这里插入图片描述

详细的结构层次, 可以参见ross大神caffe模型结构定义

2.3.1 从img ROI映射到feature map ROI

Fast R-CNN相比与R-CNN, 最大的时间节省在提取卷基层的时间。
因为 Selective Search提取出来ROI的框后, R-CNN是将这2k个框住的图片resize之后送入主干网络, 然后再每一个都提取feature map;
Fast R-CNNSelective Search提取出来ROI的框后, 只提取了整张图的feature map(只是提取了1张), 然后将img ROI(bounding box)映射成为feature map ROI (bounding box)!
所以, 所需时间是大大缩短了的!

当然这个映射的方法是参考了何恺明 - SPPNet 的影响的, 包括后面的ROI Pooling 也是。

SPP-net 是把img ROI的左上角和右下角 映射到 feature map上的两个对应点。 有了feature map上的两对角点就确定了 对应的 feature map 区域(下图中橙色)。

在这里插入图片描述
在这里插入图片描述
tips:
Si -> 第i层的stride
⌊⌋ -> 地板函数,或取整函数,表示小于 x 的最大整数;
⌈⌉ -> 天花板函数,表示大于 x 的最小整数

当然, 这样img ROI -> feature map ROI的映射, 是一种近似,并不是100%完全一致。

2.4 ROI pooling

上面的过程, 提取feature map、并且还映射img ROI -> feature map ROI了,但是这些feature map ROI是大小各异的。所以, 提出了ROI Pooling, 将这些图像特征的区域变成统一大小的feature vector, 然后在送入后续的过程。

关于ROI Pooling, paper中是这样描述的:
在这里插入图片描述
在这里插入图片描述
我觉得可能还是动图比较有说服力:
在这里插入图片描述
关于 普通的 max pooling vs roi max pooling ,可以参看一下这个 ROI Pooling和ROI Align
双线性插值(Bilinear Interpolation)

注意: roi max pooling的某一些元素,因为可能有多个ROI候选框重叠,多次计算,所以计算反向传播的时候,是各个求导累加的。

2.5 Truncated SVD for FC

2.5.1 什么要进行SVD?

提取了,固定大小的图像特征,之后就是经过Full Connected Layer.
VGG16为例,他最后的FC6,FC7,这2层在前向传播的时间就占据了快一半时间,可想而知如果想要提升检测速度,必须要对于FC Layer进行优化。

进行SVD 与不进行SVD的前向传播时间对比:
在这里插入图片描述
哎哟,不错哦~~ 这时间降低了100ms,精度还没怎么下降,真是可以!

2.5.2 怎么进行SVD分解?

在这里插入图片描述
在这里插入图片描述

2.5.2 为什么会极大减少运行时间?

简单来说,就是将原来硕大的矩阵, 进行奇异值分解,变成3个稀疏矩阵相乘,这样运算量会大大减少。

举例来说:
以前W 维度是u * v;
现在进行SVD分解, W = U * T * V, 其中维度 U -> u * t, T -> t * t, V-> t * v, 当然 t 的维度会取得非常小。
这样, 以前的计算量是 u * v, 现在使用U * T * V近似代替W,那计算量是 u * t+t * v = t * (u+v), 当t非常小的时候,整体的计算量是会减少非常多的。

2.6 softmax & bbox regression

  • 说明
    在上一步feature map ROI经过FC Layer之后, 就形成了ROI feature vector,之后就会经过一个兄弟fc层, 一个通过softmax计算分类的概率, 另一个通过regressor计算bounding box.

  • 计算最终多任务总损失(分类损失+回归损失)
    在这里插入图片描述
    在这里插入图片描述

3 实验和评估

3.1 不同VOC数据的mAP表现

在这里插入图片描述

3.2 训练和预测时间对比

在这里插入图片描述

3.3 muti-task与否的对比

在这里插入图片描述

在这里插入图片描述

3.4 softmax 影响对比

在这里插入图片描述

Reference

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI扩展坞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值