引言

目标检测:

目标检测的目标是确定某张给定图像中是否存在给定类别(比如人、车、自行车、狗和猫)的目标实例;如果存在,就返回每个目标实例的空间位置和覆盖范围(比如返回一个边界框)。

目标检测的意义

作为图像理解和计算机视觉的基石,目标检测是解决分割、场景理解、目标追踪、图像描述、事件检测和活动识别等更复杂更高层次的视觉任务的基础。目标检测在人工智能和信息技术的许多领域都有广泛的应用,包括机器人视觉、消费电子产品、安保、自动驾驶、人机交互、基于内容的图像检索、智能视频监控和增强现实。

目标检测的过程:

传统的目标检测方法一般分为三个阶段:首先在给定的图像上选择一些候选区域,然后对这些区域提取特征,最后使用分类器进行分类。

目标检测面临的难点:

  • 高准确度(Loc acc.+Reg acc.)

    • 对类内形变的鲁棒性

      • 同类物体有很多不同的实例(不同纹理/颜色/材质等)
      • 目标实例的多样性(姿态/非刚性形变等)
      • 采样过程的条件和环境的影响(光照/尺度/遮挡/阴影/污迹/角度/背景)
      • 图像噪声(采样过程的噪声/滤波器影响/压缩的噪声等)
    • 高的可区分性
      • 类间的相似性
      • 目标物体类别多样
  • 高效性(时间、内存效率)

    • 实际中目标类别成千上万
    • 需要定位并辨别目标类别
    • 目标的可能定位数量太多
    • 图像/视频数据太多

目标检测发展:

过去20年的进展:


整体而言,这些检测器可以分为两大主要类别:

  • 两级式(2-stage):区域提议+检测(R-CNN系列),主要倾向于准

  • 单级式(1-stage):无区域提议框架,提议和检测是整体的(SSD,YOLO系列),主要倾向于快

1. R-CNN(2013)

R-CNN是利用卷积神经网络进行“目标检测”的开山之作,其意义深远

R-CNN流的发展过程:

R-CNN -> SPP Net -> Fast R-CNN -> Faster R-CNN -> Mask R-CNN

实现步骤:

1)Region Proposal+Crop/Wrap归一化:通过SS方法生成约2000个候选区域,并将候选区域resize成固定大小(227*227)

2)对每个框进行CNN特征提取:对每个候选区域提取卷积特征图,得到4096-d的向量

3)SVM分类+边界回归:将2000个特征向量送入SVM学习N个SVM分类器

  • 每个分类器用来对特定类别分类,预测出候选区域中所含物体属于每个类的概率值。由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本。

  • 通过回归方法得到目标b-box

  • 定位精度:利用IoU来近似表示

  • 思路:假设得到的物体检测框与实际标注的物体边界框存在一个线性变化,则可以通过学习线性变换参数的方法实现位置精修。通过学习线性变换参数,从而得出使得loss函数最小的线性变换。

R-CNN的贡献:

1)使用ImageNet训练好的优质模型,在PASCAL VOC数据集上机芯微调,因为大数据集图像高达几百万,利用卷积网络充分学习了浅层特征,之后在小数据集上微调后进行特征提取,获得了好多特征提取效果。

2)使用b-box regression进行了目标包围框的修正

R-CNN的缺点:

1)SS耗时:每幅图像的SS需要花费2s

2)每个候选区域内的图像都要经过一次AlexNet,为所有的框提取特征大约花费47s,且每个特征都要存储下来,浪费空间。

3)三个模块(SS+特征提取+分类)是分别训练的,导致训练分类器时没有更新网络参数,且对存储空间消耗很大

4)所有的框都暴力归一化到统一大小227*227,造成图像内容损失,引起物体形变,影响精度。

R-CNN的主要特点有以下三点:

1)利用了selective search方法,即先通过实例分割将图像分割为若干小块,然后选择相似度较高的小块,把这些相似小块合并为一个大块,最后整个物体生成一个大的矩形框,通过这种方法大大提高候选区域的筛选速度。

2)用在ImageNet数据集上进行学习的参数对神经网络进行预处理,解决了在目标检测训练过程中标注数据不足的问题。

3)通过线性回归模型对边框进行校准,减少图像中的背景空白,得到更精确的定位。

4)该方法将PASCAL VOC上的检测率从35.1%提升到了53.7%,其意义与AlexNet在2012年取得分类任务的大突破是相当的,对目标检测领域影响深远。

2. SPPnet(空域金字塔池化,2014)

该方法提出的最初原因是为了解决全连接层的输入要求大小统一的问题,SPP层可以和R-CNN结合起来提升网络性能。R-CNN中采用暴力resize的方法将所有的框都归一化为227*227,但这会影响识别精度,于是SPPnet在CNN层与全连接层之间插入了空间金字塔池化层来解决该矛盾。

SPPnet(下)与普通网络(上)对比:

SPP原理:

假定CNN层得到的特征图大小为a×a(比如13×13,随输入图片大小而变化),设定的金字塔尺度为n×n bins(对于不同大小图片是固定的),那么SPP层采用一种滑动窗口池化,窗口大小win_size=⌈a/n⌉,步长为stride=⌊a/n⌋,采用max pooling,本质上将特征图均分为n×n个子区域,然后对各个子区域max pooling,这样不论输入图片大小,经过SPP层之后得到是固定大小的特征。一般设置多个金字塔级别,文中使用了4×4,2×2和1×1三个尺度。

每个金字塔都得一个特征,将它们连接在一起送入后面的全连接层即可,这样就解决了变大小图片输入的问题了。SPP-net在ImageNet ILSVRC 2014图像分类大赛中夺得了第三名。


空间金字塔池化过程:

输入图像 → \to → 卷积层 → \to → 三种不同尺度的最大池化( 4 × 4 , 2 × 2 , 1 × 1 4\times 4,2\times 2,1\times 1 4×4,2×2,1×1) → \to → 三组向量组合成一个固定大小的特征向量

SPPnet和R-CNN的关系:

R-CNN中送入全连接层的特征必须是相同大小的,于是就使用暴力resize方法将其统一大小,会导致出现形变而影响精度。SPP层就很好的利用池化的方法来解决该问题,可以大大减少计算量并提升计算速度,基于SPP的R-CNN在模型准确度上的提升不是很大,但在速度上比原始R-CNN模型快24-102倍,这也正是Fast R-CNN所改进的方向。

SPPnet工作过程:

1)利用SS方法获得区域提议,通过Stride区域映射的方法,在卷积层的后面加入位置信息,便于在卷积特征图中找到每个区域的位置。

2)对整张图进行卷积特征提取,解决了卷积层的重复计算的问题

3)空间金字塔池化,也就是替换最后一个池化层为SPP pooling layer

4)SVM分类

缺点:

1)提取候选框 | 计算CNN特征 | SVM分类 | 回归训练过程都是各自独立的,大量中间结果需要转存,无法整体训练参数

2)无法同时微调卷积层和全连接层,在很大程度上限制了CNN的效果

3)候选区域仍然使用SS方法,很耗时

3. Fast R-CNN(2015)


Fast R-CNN如其名,在R-CNN的基础上增加了RoI pooling层,并且简化了模型,大幅度提高了检测速度。

特点:

1)共享卷积特征:借鉴SPP的方法,对输入图像首先进行CNN,之后在从特征图中取出候选区域的内容进行后续过程,加速了检测过程。

2)提出了RoI pooling层,借鉴SPP pooling,但只是用单尺度的max pooling,来获得固定长度的特征图

  • RoI pooling层的Caffe官方实现,RoI pooling层在大部分深度学习框架中是没有官方实现的,需要自己扩展,Tensorflow上的开源实现可以参考deepsense-ai/roi-pooling,但是在TensorFlow中可以基于一种crop+resize+pooling的方式,可以看一下Luminoth上的实现)

  • RoI pooling 过程


3)使用softmax进行分类

4)将R-CNN的串行结构改成了并行结构,也就是可以同时进行分类+回归

Fast R-CNN的工作过程:

1)使用SS方法生成一系列的候选区域

2)对整幅图像进行卷积特征提取,将最后一层的池化层替换为RoI pooling层,输出固定长度的特征向量

3)将特征向量输入全连接层,用于多任务学习并计算多任务损失,输出两个分支:

  • softmax loss(log loss):K+1个类别的分类损失函数
  • Regression loss(smooth L1 loss):K+1类的b-box的坐标

4)通过NMS处理获得最终的目标检测和识别结果

论文提出的重要讨论结果:

1)多任务的训练相比独立训练,效果确有提升,但时间开销也更大

2)在更大的数据集上(VOC)训练后,效果确有提升

3)softmax比SVM表现略好,引入了类间竞争

4)更多的候选区域不一定带来更多的精度提升

存在的问题:

依然靠SS来提取候选框,很耗时

4. Faster R-CNN(2016)

针对Fast R-CNN的使用传统方法进行区域提议方法的不足,提出了RPN来直接实现区域提议,使得检测任务可以由神经网络端到端的完成,且RPN和CNN是共享卷积的,计算量很小,Faster R-CNN=Fast R-CNN+RPN,在精度方面也达到了SOTA(State Of The Art)。

流程:

网络结构图(基于ZF):


Faster R-CNN的结构主要分为三个部分:

  • 共享卷积层
  • 候选区域生产网络RPN
  • 对候选区域进行分类的网络

RPN网络:将proposal这一任务建模为二分类问题(是目标物体/不是目标物体)

RPN本质上是一个树状结构:

  • 树干是一个 3 × 3 3\times3 3×3的卷积层,获得256个不同的特征图

  • 树枝是两个 1 × 1 1\times1 1×1的卷积层

    • 一个解决了前后景的输出(对于每个像素点,输出9个anchor,每个anchor有一个前景分数和一个背景分数,故输出 2 × 9 = 18 2\times 9=18 2×9=18个值)

    • 另一个解决了边框和anchor的偏移位置输出(对于每个像素点,输出 4 × 9 = 36 4\times 9=36 4×9=36个值)

RPN工作原理:

RPN依靠一个在共享特征图上的滑动窗口,为每个像素位置生成9种预先设置好长宽比与面积的目标框(anchor),包含三种面积( 128 × 128 , 256 × 256 , 512 × 512 128\times 128,256\times 256,512\times 512 128×128,256×256,512×512),每种面积包含三种长宽比(1:1,1:2,2:1),示意图如下:


假设特征图大小为 40 × 90 40\times90 40×90,那么RPN生成的初始anchor总数约为20k个( 40 × 60 × 9 40\times60\times9 40×60×9)。

对于生成的anchor,RPN要做两件事:

  • 首先要判断是前景还是背景,也就是判定这个anchor到底有没有覆盖到目标(使用softmax直接训练,在训练时排除掉超越图像边界的anchor)

  • 其次是为属于前景的anchor进行第一次坐标修正(使用smooth L1 损失进行训练)。

训练RPN的loss=cls loss+reg loss

L ( p i , t i ) = 1 N c l s Σ i L c l s ( p i , p i ∗ ) + λ 1 N r e g Σ i p i ∗ L r e g ( t i , t i ∗ ) L({p_i},{t_i})=\frac{1}{N_{cls}}\Sigma_iL_{cls}(p_i,p_i^*)+\lambda \frac{1}{N_{reg}}\Sigma_ip_i^*L_{reg}(t_i,t_i^*) L(pi​,ti​)=Ncls​1​Σi​Lcls​(pi​,pi∗​)+λNreg​1​Σi​pi∗​Lreg​(ti​,ti∗​)

  • i是小批量中每个锚的索引
  • p i p_i pi​是锚点 i i i预测为目标的概率,如果锚点为正,那么真实标签 p i ∗ p_i^* pi∗​为1,如果锚点为负,则为0。
  • t i t_i ti​表示预测边界框四个参数的坐标向量
  • t i ∗ t_i^* ti∗​是正锚点的真实边界框向量。
  • 分类损失 L c l s L_{cls} Lcls​是两个类别(目标或非目标)上的对数损失
  • 回归损失使用 L r e g ( t i , t i ∗ ) = R ( t i − t i ∗ ) L_{reg}(t_i,t_i^*)=R(t_i - t_i^*) Lreg​(ti​,ti∗​)=R(ti​−ti∗​),其中 R R R是鲁棒损失函数(L1损失)
  • p i ∗ L r e g p_i^*L_{reg} pi∗​Lreg​表示回归损失只在锚点为正( p i ∗ = 1 p_i^*=1 pi∗​=1)的时候被激活,否则被禁用( p i ∗ = 0 p_i^*=0 pi∗​=0)
  • cls和reg层的输出由 p i {p_i} pi​和 t i t_i ti​构成。
  • 这两项用 N c l s N_{cls} Ncls​和 N r e g N_{reg} Nreg​进行标准化,且由一个平衡参数 λ \lambda λ进行权衡。

为了边界框的回归,我们依据如下方式进行四个坐标的参数化:

  • t x = ( x − x a ) / w a , t y = ( y − y a ) / h a t_x=(x-x_a)/w_a, t_y=(y-y_a)/h_a tx​=(x−xa​)/wa​,ty​=(y−ya​)/ha​
  • t w = l o g ( w / w a ) , t h = l o g ( h / h a ) t_w=log(w/w_a), t_h=log(h/h_a) tw​=log(w/wa​),th​=log(h/ha​)
  • t x ∗ = ( x ∗ − x a ) / w a , t y ∗ = ( y ∗ − y a ) / h a t_x^*=(x^*-x_a)/w_a, t_y^*=(y^*-y_a)/h_a tx∗​=(x∗−xa​)/wa​,ty∗​=(y∗−ya​)/ha​
  • t w ∗ = l o g ( w ∗ / w a ) , t h ∗ = l o g ( h ∗ / h a ) t_w^*=log(w^*/w_a), t_h^*=log(h^*/h_a) tw∗​=log(w∗/wa​),th∗​=log(h∗/ha​)

其中,x,y,w和h分别表示边界框的中心坐标、宽和高。

变量 x x x, x a x_a xa​和 x ∗ x^* x∗分别表示预测框、锚框和真实框,这可以被认为是从锚框到邻近真实边界框的回归。

Faster R-CNN 如何训练:四步交替优化法

  • 训练 RPN:使用 ImageNet 预训练模型对 RPN 进行进行初始化,训练 RPN 网络
  • 训练 Fast R-CNN:使用 ImageNet 预训练模型初始化检测网络,并固定 RPN 网络参数,使用 RPN 得到的 proposal,训练 Fast R-CNN 的检测网络(也就是除过 RPN 外的所有需要训练的层都算作检测网络的部分)
  • 调优 RPN:使用检测网络训练好的共享卷积(即主分支那些参数),固定共享卷积,继续修正 RPN 网络
  • 调优 Fast R-CNN:保持共享卷积层的固定,使用调优后的 RPN 网络,对 Fast R-CNN 的一些层进行微调

注意:

1)训练时忽略超过图像边界的anchor boxes(不收敛且误差难以纠正),测试时剪切跨边界的框。

2)一些RPN proposals相互高度重叠,为了减少冗余,根据cls分数采取非极大值抑制,阈值为0.7,NMS不会影响检测准确性,但会大大减少proposal的数量。在NMS之后使用前N个候选区域进行检测。

5. Mask R-CNN(2017)

R-CNN家族系统对比

从R-CNN,SPP-net,Fast R-CNN到Faster R-CNN,基于深度学习目标检测的流程变得更加精简、精度更高、速度更快,因此基于region proposal的R-CNN系列目标检测方法是当前目标最主要的一个分支。

Faster RCNN这种基于CNN的目标检测方法使得real-time检测成为可能,在这个方向上有老进一步的研究思路。

RCNN网络的演进如下:

三者的比较:

【目标检测】0、目标检测方法发展综述相关推荐

  1. 检测到目标服务器启用了trace方法_综述:目标检测中的多尺度检测方法

    ↑ 点击蓝字 关注极市平台作者丨SFXiang来源丨AI算法修炼营编辑丨极市平台 极市导读 本文从降低下采样率与空洞卷积.多尺度训练.优化Anchor尺寸设计.深层和浅层特征融合等多个方面入手,对目标 ...

  2. 检测到目标服务器启用了trace方法_CVPR2019目标检测方法进展综述

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的. 其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明 ...

  3. CVPR2019目标检测方法进展综述

    CVPR2019目标检测方法进展综述 文章目录: 一.二维目标检测的优化方向 1.基于目标检测的backbone和特征提取 2.基于优化的算法 3. 基于优化损失函数的方法 4.基于优化NMS的方法 ...

  4. 目标检测——目标检测方法的综述

    一.目标检测问题的定义 1.定义: 目标检测时图片中对可变数量的目标进行查找和分类. 2.需要解决的问题 目标种类与数量问 目标尺度问题:目标稠密.目标大小等 外在环境干扰问题:遮挡.光照 二.目标检 ...

  5. 目标检测算法发展综述

    目标检测算法 一.目标检测算法 二.目标检测算法存在的问题 三.目标检测算法的基本流程 四.传统的目标检测算法 1.Viola-Jones(VJ人脸检测算法) 2.HOG + SVM(行人检测,使用O ...

  6. 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测,目标追踪,卷积神经网络

    一.研究意义 卷积神经网络(CNN)由于其强大的特征提取能力,近年来被广泛用于计算机视觉领域.1998年Yann LeCun等提出的LeNet-5网络结构,该结构使得卷积神经网络可以端到端的训练,并应 ...

  7. 3D目标检测深度学习方法中voxel-represetnation内容综述(三)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 前两篇文章:3D目标检测深度学习方法中voxel-represetnation内容综述(一).3 ...

  8. 3D目标检测深度学习方法之voxel-represetnation内容综述(二)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 前面的一篇文章:3D目标检测深度学习方法中voxel-represetnation内容综述(一) ...

  9. 顶刊TPAMI!目标检测中的不均衡问题综述!

    作者 | Joya  编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/82371629 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷 ...

最新文章

  1. 初始化列表的使用(十五)
  2. scrapy框架_Scrapy框架学习---Scrapy介绍(一)
  3. Docker中安装DB2的详细教程和DBVisualize的安装教程
  4. linux的无密码登录,linux 无密码登录
  5. 个人计算机和家用计算机,航空百问:飞机电脑和个人电脑有什么不同
  6. php mongodb 连接失败,解决PHP使用普通账号连接mongodb报错问题
  7. (转载)7个去伪存真的JavaScript面试题
  8. iOS相同字符串保存地址唯一
  9. CSS常用内容总结(二)
  10. 聊一聊,小程序的开发
  11. 计算机桌面底边出现库如何去掉,Win7电脑桌面图标有蓝底如何去掉?
  12. 第六章 姜小白当机立断逃莒国 姜诸儿瓜期不代终遇鬼
  13. 股票入门浅学20210721
  14. matplotlib柱状图上方显示数据_Python基础数据可视化
  15. geoJson——地理数据编码格式
  16. Nginx✧虚拟主机资源静态化
  17. 简易的GUI图书管理系统(数据库Mysql)
  18. LS1021A 调试问题记录
  19. 硬件基础知识---(8)如何选取 电容
  20. spring clud config分布式配置中心的简单使用

热门文章

  1. java 对 Map的遍历
  2. 支持HEVC/H265 RTMP接收的FFMPEG/FFPLAY WINDOWS版本
  3. 【手写 Vue2.x 源码】第十九篇 - 根据 vnode 创建真实节点
  4. AI写作机器人-ai文章生成器在线
  5. 百度地图自定义标点。
  6. 显示表结构sql语句
  7. android 监听耳机插拔
  8. 查看电脑是几核几线程
  9. STM32笔记--SDIO(SD卡读取)
  10. c语言程序设计教程韩立毛答案,c语言程序设计教程201X韩立毛徐秀芳书后练习题参考答案...