【论文解读】深度学习目标检测的开山鼻祖 |R-CNN详解 | 两阶段目标检测代表

前言

R-CNN论文地址/ 代码, 参见文末Reference 1

目标检测近年里程碑

在这里插入图片描述

上图,回顾近20年来的图像检测和识别的历史,可以发现,目标检测的实现,已经从传统的图像技术 逐渐进入深度学习驱使和全面应用。从最早的闻名于耳的SIFTHOG,已经逐渐演变成anchor free & anchor based 的深度学习范式。尤其是AlexNet 在一骑绝尘夺冠之后,将深度学习应用到目标检测领域成为大家竞相开展的学术热点。其中最值得一提的就是 和何凯明大神齐名的另一个大神Ross Girshick。他在deep learning object detect的开山之作(2014) 就是---- R-CNN.

深度学习目标检测

在这里插入图片描述

来自首尔国立大学的 Lee hoseong 开源了 「deep learning object detection」 GitHub 项目,列举了近些年来深度学习-目标检测重要论文。其他论文可参考上图。后续我也会逐渐在本专栏详细描述。
项目链接是: https://github.com/hoya012/deep_learning_object_detection#2014

1 R-CNN简介

1.1 何为R-CNN?

引用论文的解释:

Since we combine region proposals with CNNs, we call our method R-CNN:
Regions with CNN features.

白话来说,就是 作者在进行目标检测的时候,首次提出将目标位置候选框(region proposals, R)和使用深度学习框架(CNN)进行特征提取相结合的方法,并且检测效果较好,遂取名R-CNN.

1.2 摘要

1.2.1 论文综述

在这里插入图片描述

1.2.2 优点汇总

作者认为的最大的优势
是在当时(2014年)对于检测目标精读的大幅提升、甚至是正确率最强(mAP@VOC 2012 = 53.3% / mAP@ILSVRC2013 detection dataset = 31.4%)

作者认为最大的2 个亮点:

  • (1)使用state-of-art CNN应用到目标检测进行定位和分割(精度在同类模型比较下当时已是最优)
  • (2)在训练方法上,也是提出了新的fine-tuning技术优化方法

1.2.3 缺点汇总

次年,作者RBG更新的的Fast RCNN也陈述了RCNN以及类似模型的缺点:
在这里插入图片描述
具体来说,就是:
(1) 训练是个多流程的过程.
先要fine-tuning 主干网络(Alexnet)以便能提取对应分类的图像特征, 然后训练SVM以便于适配从主干网络提取特征后能实行分类的功能呢, 最后还要训练线性回归模型以便于实现找到bounding box的功能.
tips: 补充说明
这些过程因为是传统图像处理(使用svm, 而不是softmax; 线性回归也是一般的线性拟合,不是深度学习)和深度学习(Alexnet)结合, 所以不适用深度学习的反向传播能同时更新各个模块的权重, 所以需要每个模块单独训练,最后组合起来.
(2) 训练过程在空间和时间上损耗比较大
因为(1)的原因, 在进行svm / bounding box regression训练之前, 输入的特征需要提前保存到硬盘上. 也就是Alexnet训练完成之后, 在进行特征提取,然后保存到硬盘上,以便于后续的训练过程能够开展. 这个过程比较花时间和空间了.
(3) 检测过程特别慢
在GPU上, 如果主干网络使用VGG(VGG准确率 > Alexnet), 检测一张图片的时间超级长, 大约需要47秒!!!

2. RCNN网络结构解析

2.1 整体结构概览

在这里插入图片描述
论文中整体过程如上图所示,描述基本可以大致了解。

2.1.1 过程介绍:

这个过程大致可以分成3 个阶段:

step 1: 提取2k 个region proposals ( selective search(SS method)+ warped img)
									|
									|
									|
									|
									V
step 2: 将region proposals (目标物体候选框)送入主干网络(VGG or Alexnet)提取feature map(图像特征)
									|
									|
									|
									|
									V
step 3: 利用feature map 通过 SVM实现分类+ 通过bounding box regression实现定位(输出目标对应的x,y,w,h)

为了具体描述,可以用一个更形象的图来更详细地描述一下整体结构:
在这里插入图片描述

2.1.2 详述过程:

(1)输入: 固定图片
(2)提取roi: 使用 selective search(SS method)方法,提取2k候选目标框
(3)warped ROI: 使用特定方法resize不同尺寸的候选目标框(ROI)到固定尺寸(227 x 227)
(4)特征提取: 使用AlexNet提取这2k固定尺寸的候选框中图像特征(每个ROI 最终是4096维度)
(5)class & regression : 针对提取的图像特征,利用训练的多个线性SVM进行分类判断(每一个类别都有一个svm, 判断属于该类别与否); 利用训练的线性回归模型 (bounding-box regression)拟合目标框坐标(x,y,w,h).(每一个类别都有一个线性回归模型, 用于拟合具体的坐标)

整个过程还是利用传统图像方法(SS method /SVM)和深度学习技术结合(AlexNet),是从传统走向深度学习的转型之作。

2.2 对于输入图片提取ROI ---- selective search method

输入一张图片, 首先需要做的就是尽可能多的找到目标所在的候选框位置,当时非常流行的方法就是selective search

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

selective search的主要思路:
输入一张图片,首先通过图像分割的方法(如大名鼎鼎的felzenszwalb算法)获得很多小的区域,然后对这些小的区域不断进行合并(通过相似性公式计算, 相邻区域相似度最高的合并),一直到无法合并为止。此时这些原始的小区域和合并得到的区域的就是我们得到的初始的ROI的bounding box.
在这里插入图片描述
算法分为如下几个大步:

  1. 生成原始的区域集R(利用felzenszwalb算法)
  2. 计算区域集R里每个相邻区域的相似度S={s1,s2,…}
  3. 找出相似度最高的两个区域,将其合并为新集,添加进R
  4. 从S中移除所有与第3步中有关的子集
  5. 计算新集与所有子集的相似度
  6. 跳至第三步,不断循环,合并,直至S为空(到不能再合并时为止)

整体计算过程 , 相关流程伪代码参见如下:
在这里插入图片描述
Tips:
补充说明一下.

  1. 使用selective search method 提取roi的做法, 是由J.R.R. Uijlings 的论文最早提出来的, 是传统视觉处理的代表之作.

详细的参见 [SS-Method]论文/项目 Selective search for object recognition. | [IJCV, 2013] |[pdf] |[matlab code]
或者 链接地址

这个论文其实本身也是在前人 Felzenszwalb图像分割 基础上的改进

  1. R-CNN的结构几乎和<Selective search for object recognition> 的都是非常类似的, 区别就是RCNN中提取图像特征的方式已经不是什么HOG,SIFT了, 而采用的是CNN网络; 并且有一个线性回归对于bound box的校正
  2. 读到这个论文的时候, 真的感觉天下文章一大抄, 改点东西就能发顶刊

2.3 warped ROI

因为当时的CNN网络要求,输入图片必须是尺寸大小固定的, 所以使用CNN主干网络提取网络特征的之前,需要对于SS 提取的ROI做一下变化/使之变成尺寸固定的ROI
(送入AlexNet的话,输入图片的大小需要227 x 227)

作者当时提供的几种方法:
在这里插入图片描述
方法1:tightest square with context
使用一定尺度的正方形bounding box,略微扩大背景内容.(例如图片原来是100x200 -> 250 x 250).如果没有填满的话,使用图像平均值填满(在送入CNN网络之前,减去该平均值)
方法2:tightest square without context
就是原始的长方形bounding box
方法3:warp 
就是将原始长方形resize到固定尺寸

注意:
每一个图像的第一行,是原始bounding box没有填充的情况, 即是p=0;
第二行,是原始图像先填充padding,然后在按照方法1-3进行操作,p=16

当然方法还有众多, paper中也是说这个可以留作后续的点继续拓展, 只是对于这3中方案选择最优.

结论: 方案3 使用padding的方法, mAP高于其他方案3-5个点.作为最终warped img方法.

2.4 主干网络结构back bone — AlexNet & vgg

关于用来提取特征的主干网络, 其实paper中也做了一下实验对比:
在这里插入图片描述
Tips:
T-Net : 指的是AlexNet
O-Net: 指的是 VGG16
BB: 表示的是增加使用paper中提到的bounding box regressor去修正, 没有写BB的则是仍然使用SS 提供的最初的bounding box

通过上表, 可以发现使用VGG确实要比AlexNet提高了整体上的准确度,mAP从58.2% -> 66%. 但是所使用的时间确实提高了大约7倍!!(VGG网络在当时的GPU上运行, 可能消耗了巨大的运行成本了)

结论: 作者最终的选择是, backbone使用 AlexNet

2.5 classfication — SVM

这个就是利用线性SVM(判断是否属于该类别), 对于back bone提取的4096-d图像特征, 进行每个类别的分类. 如果有N个类别, 则有 N+1 个类别(都不属于的话, 就是背景,所以是N+1) 需要训练SVM.

这就有人要问了, 为啥不使用softmax 作为 fc之后分类的判断依据, 还再多加一个SVM训练呢?
paper上作者的回答也很简单, 因为使用 softmax进行分类的话, 在同样情况下, VOC2007 上的mAP会跌 (SVM: 54.2% vs Softmax: 50.9% )

为啥使用 softmax mAP会降低呢?
paper上作者猜测可能跟 训练backbone(使用image-net结果进行fine-tuning), 训练SVM中的positive / negtive 定义不同有关系.
使用softmax的话, 那做分类的时候, 关于positive / negtive样本(正/负样本)就是训练backbone的定义一样了. 关于负样本的话, 送入softmax的就不是"hard negetive"的了,而是一般的negtive了. 可能减弱了分类能力.

fine-tuning 过程中positive / negtive 和 SVM训练的时候, 定义有啥不同?
fine-tuning:
ROI和各个类别的ground truth的IOU > 0.5 都算作 positive;
其他的都当做background, 即negtive
SVM:
只是ground truth当做positive;
和ground truch IOU <0.3, 才被当做negtive;(如果>0.3,会被忽略)
补充说明:
此处训练SVM明显是借鉴了< Selective search for object recognition>, 那边文章
positive: 就是ground truth,
negtive: overlap 20%-50% with ground truth

-------------------以下是个人理解-----------------------------------
这样的负样本是hard negetive, 是非常确定的假正样本, 送入训练的话理论上应该是能提升识别正负样本的能力的. 因为训练SVM就只是判断一个类别是某个类别或者不是, 要比softmax同时判别几个类别的效果在一定情况下是要好一些的;并且softmax中定义的negetive有大量数据, 而且又不是非常的hard negtive, 所以对于分类能力上会减弱.

2.6 regression

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看完以上分析, 你在对比paper中的公式, 也许会好理解很多:

表示P映射到G的最终的bounding box的公式
在这里插入图片描述
G: ground truth bounding box
P: proposal bounding box
在这里插入图片描述

使用最小二乘法, 让G 和G_hat差值最小, 从而取得相关的映射权重参数, 就是过程,
最终的求取权重的公式:
在这里插入图片描述
其中 t_star 表达的内容如下:
在这里插入图片描述
其他的符号表示内容:
在这里插入图片描述

4. 实验过程和结论

这篇paper还是进行了大量的实验和对比的, 除了上面提到的几个实验结果(关于backbone选择/ resize方法), 我个人觉得最主要的是关于fine-turning方法的比较, 也是比较有启示性.

4.1 关于fine-turning 与否的优劣比较

在这里插入图片描述
说明:

(FT):使用fine-turning
(BB) :使用bounding box校正
(fc7) :提取的图像特征是从Full-connect 7层开始

从上图可以观察到:
1 mAP准确性:
R-CNN FT fc7 BB > R-CNN FT fc7 > R-CNN FT fc6 > R-CNN FT pool5
> R-CNN fc6 > R-CNN fc7 > R-CNN FT pool5
> 传统的图像处理技术
2. Table 2 rows 1-3(没有经过FT, 普通训练出来的RCNN)
结果可以看出, 从 fc7之后的提取图像特征的效果是恶化了的(R-CNN fc6 > R-CNN fc7) , 并且直接从pooling 层提取的特征, 最终结果和从fc6, 或者fc7提取的特征的结果差不多.

结论: fc7 层以后的fc层参数大约有 16.8 million, 占比29%, 这些其实都可以移除掉不使用(对于提取特征单方面来看的话);
参数比占比 6%卷基层(pooling层以前), 作用远远大约fc层的作用.

  1. Table 2 rows 4-6 (使用image-net 进行FT训练出来的RCNN)
    可以看到mAP一下子提升了8个点, 到了54.2%. 这个远远要比改变提取层(pool/fc6/fc7)位置提高的多.

结论:这个大部分的功劳应该是卷基层的作用.
即 FT能够更快/ 更好地 提升卷积普通层的效果.

4.2 目标特性敏感性讨论

在这里插入图片描述

结论:
fine-tune并未 改变减少图片的敏感度的但是却大幅度高 图像的表现性;
提升了最高、最低 子集的表现在 对于高宽比、 bb-area方面;
提高了在遮挡、截断、限定框区域、高宽比、视点 、部分可见性的鲁棒性

还有不少实验和验证, 不再赘述. 感谢去的可以去拜读原文.

Reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI扩展坞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值