目标检测综述

1 原理

1.1什么是目标检测

图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车, 还要在图片中标记出它的位置, 用边框或红色方框把汽车圈起来, 这就是目标检测问题。 其中“定位”的意思是判断汽车在图片中的具体位置。
目标检测=分类+回归

在这里插入图片描述
上面中间两幅图都是目标检测

主要需要解决的问题是,对象在哪里。对象是什么直接分类就可以很好的解决。

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

在这里插入图片描述

1.2传统方法

一般地,传统目标检测算法主要包括预处理、窗口滑动、特征提取、特征选择、特征分类和后处理等6 个关键步骤。其中,窗口大小、滑动方式与策略对特征提取的质量影响较大,常采用部位形变模(deformable part model,DPM)及其扩展模型(Divvala 等,2012)对滑动窗口进行判别,如方向梯度直方图(histogram of oriented gradient,HOG) ( Wang 等,2009)、尺度不变特征变换 ( scale invariant featuretransform,SIFT)(Juan 和 Gwun,2013)等,整个检测过程效率与精度都较低。

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

1.3深度学习

Girshick 等人(2014)首次采用基于区域的卷积神经网络(region based convolutional neural network,R-CNN)将深度学习用于目标检测,在 PASCAL VOC 2007 数据集上的检测精度从 29. 2% 提升到 66. 0% ,极大地提高了目标检测的准确率。这种基于端到端的训练,将目标的特征提取、特征选择和特征分类融合在同一模型中,实现了性能与效率的整体优化。

1.3.1 物体检测的两个步骤

物体检测的两个步骤可以概括为:

步骤一:检测目标位置(生成矩形框)
步骤二:对目标物体进行分类

物体检测主流的算法框架大致分为one-stage与two-stage。two-stage算法代表有R-CNN系列,one-stage算法代表有Yolo系列。按笔者理解,two-stage算法将步骤一与步骤二分开执行,输入图像先经过候选框生成网络(例如faster rcnn中的RPN网络),再经过分类网络;one-stage算法将步骤一与步骤二同时执行,输入图像只经过一个网络,生成的结果中同时包含位置与类别信息。two-stage与one-stage相比,精度高,但是计算量更大,所以运算较慢。

就R-CNN系列算法与Yolo系列算法简单列出发表时间线:
在这里插入图片描述
引用至:
https://zhuanlan.zhihu.com/p/70387154

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

1.3.2 两阶段目标检测

第 1 种是基于候选区域的方法,即先选取候选区域,后对候选区域进行分类和回归的算法,称为两阶段算法;
包含一个用于区域提议的预处理步骤,使得整体流程是两级式的。代表:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等

首先先介绍一下滑动窗口技术,采用滑动窗口的目标检测算法思路非常简单,它将检测问题转化为了图像分类问题。其基本原理就是采用不同大小和比例(宽高比)的窗口在整张图片上以一定的步长进行滑动,然后对这些窗口对应的区域做图像分类,这样就可以实现对整张图片的检测了,如下图3所示,如DPM就是采用这种思路。但是这个方法有致命的缺点,就是你并不知道要检测的目标大小是什么规模,所以你要设置不同大小和比例的窗口去滑动,而且还要选取合适的步长。但是这样会产生很多的子区域,并且都要经过分类器去做预测,这需要很大的计算量,所以你的分类器不能太复杂,因为要保证速度。解决思路之一就是减少要分类的子区域,这就是R-CNN的一个改进策略,其采用了selective search方法来找到最有可能包含目标的子区域(Region Proposal),其实可以看成采用启发式方法过滤掉很多子区域,这会提升效率。
在这里插入图片描述
如果你使用的是CNN分类器,那么滑动窗口是非常耗时的。但是结合卷积运算的特点,我们可以使用CNN实现更高效的滑动窗口方法。这里要介绍的是一种全卷积的方法,简单来说就是网络中用卷积层代替了全连接层,如图4所示。输入图片大小是16x16,经过一系列卷积操作,提取了2x2的特征图,但是这个2x2的图上每个元素都是和原图是一一对应的,如图上蓝色的格子对应蓝色的区域,这不就是相当于在原图上做大小为14x14的窗口滑动,且步长为2,共产生4个字区域。最终输出的通道数为4,可以看成4个类别的预测概率值,这样一次CNN计算就可以实现窗口滑动的所有子区域的分类预测。这其实是overfeat算法的思路。之所可以CNN可以实现这样的效果是因为卷积操作的特性,就是图片的空间位置信息的不变性,尽管卷积过程中图片大小减少,但是位置对应关系还是保存的。说点题外话,这个思路也被R-CNN借鉴,从而诞生了Fast R-cNN算法。

在这里插入图片描述
上面尽管可以减少滑动窗口的计算量,但是只是针对一个固定大小与步长的窗口,这是远远不够的。Yolo算法很好的解决了这个问题。

1.3.3 单阶段目标检测

第2种基于回归的目标检测方法,同时对图像进行分类和候选框参数的回归,摒弃了多次回归的步骤,称为一阶段算法。
代表:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等

Yolo算法不再是窗口滑动了,而是直接将原始图片分割成互不重合的小方块,然后通过卷积最后生产这样大小的特征图,基于上面的分析,可以认为特征图的每个元素也是对应原始图片的一个小方块,然后用每个元素来可以预测那些中心点在该小方格内的目标,这就是Yolo算法的朴素思想。

在这里插入图片描述

1.3.4 基于单阶段、双阶段目标检测算法的结合

也有单独把基于 anchor-free 的图像目标检测分为一类

高准确率和高效率(Liu 等,2018b)是每个算法设计与应用的核心目标

数据、计算力和算法是人工智能发展的 3 大要素

1.4 4个问题

(1)高准确率和高效率
(2)小目标检测
(3)多类别物体检测
(4)轻量化(存储小)

1.5 常见俗语

(1)ROI 感兴趣区域
region of interest,

(2)region proposal network,RPN)候选区域生成网络

(3)NMS非极大抑制
目标检测中的一个算法:

Non-Maximum Suppression就是需要根据score矩阵和region的坐标信息,从中找到置信度比较高的bounding box。对于有重叠在一起的预测框,只保留得分最高的那个。

<1>NMS计算出每一个bounding box的面积,然后根据score进行排序,把score最大的bounding box作为队列中首个要比较的对象;

<2>计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box,保留小的IoU得预测框;

<3>然后重复上面的过程,直至候选bounding box为空。

最终,检测了bounding box的过程中有两个阈值,一个就是IoU,另一个是在过程之后,从候选的bounding box中剔除score小于阈值的bounding box。需要注意的是:Non-Maximum Suppression一次处理一个类别,如果有N个类别,Non-Maximum Suppression就需要执行N次。

(4)特征金字塔网络(feature pyramid network,FPN)

(5)backbone在目标检测和语义分割中的一个词,就是主干网络
backbone这个单词原意指的是人的脊梁骨,后来引申为支柱,核心的意思。在神经网络中,尤其是CV领域,一般先对图像进行特征提取(常见的有vggnet,resnet,谷歌的inception),这一部分是整个CV任务的根基,因为后续的下游任务都是基于提取出来的图像特征去做文章(比如分类,生成等等)

主干网络,用来做特征提取的网络,代表网络的一部分,一般是用于前端提取图片信息,生成特征图feature map,供后面的网络使用。通常用VGGNet还有你说的Resnet,因为这些backbone特征提取能力是很强,并且可以加载官方在大型数据集(Pascal 、Imagenet)上训练好的模型参数,然后接自己的网络,进行微调finetune即可。

(6)理解3个框
第1个是网络预定于的框
第2个是自己网络预测的框
第3个是物体的真实框

2 数据集

目标检测中使用的通用数据集主要包括Caltech256 ( Griffin 等,2017 )、PASCAL VOC 2007、PASCAL VOC 2012、Tiny Images(Torralba 等,2008)、Cifar10(Williams 和 Li,2018)、Sun(Xiao 等,2016)、
ImageNet、Places ( Zhou 等,2018a )、MS COCO 、Open Images和LIVS。
PASCAL VOC 2007和MS COCO是大多数网络用到的数据集,可能再加个ImageNet用这3个就够了。
在这里插入图片描述

LIVS[69]数据集是 2019 年提出的大型实例分割数据集,包含了 1000 多个类别,164000 张图像,220 万个高质量的实例分割掩码,这是即将应用于目标检测领域的全新数据集,而且 LIVS 数据集中每个对象类别的训练样本很少,旨在用于目标检测在低样本数量条件下的研究.

3 常见网络

3.1 两阶段目标检测网络

(1) R-CNN
(2) SPP-Net
(3) Fast R-CNN
(4) Faster R-CNN
(5) Mask R-CNN

3.2 单阶段目标检测网络

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

4 评价指标

4.1模型大小

4.2处理时间

处理时间由模型计算量和算法复杂度还有处理设备等影响

4.2.1 训练时长

4.2.2 检测速度(帧/s)

4.3准确率

目标检测中的性能指标主要包括准确率(accuracy)、精确(precision)、召回率(recall)、平均精度(average precision,AP)、平均精度均(mean average precision,mAP)。
目标检测算法中主要使用的性能指标是 mAP:

参考下面:
https://blog.csdn.net/xiaotiig/article/details/109857750

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

5 练习实现

两阶段:
(1) R-CNN
(2) SPP-Net
(3) Fast R-CNN
(4) Faster R-CNN
(5) Mask R-CNN
(5.1)FPN

单阶段:
(6) yolov1-v5
(7) SSD
(8) DSSD
(9) FSSD

结合:
(10) RON
(11) RetinaNet
(12) FSAF
(13) FCOS
(14) CornerNet
(15) CenterNet
(16) ExtremeNet

在这里插入图片描述
设计一个目标检测网络,通常替换图中的四个部分就可以了。

参考文献:

[1]. 赵永强等, 深度学习目标检测方法综述. 中国图象图形学报, 2020. 25(4): 第629-654页.

[2]. 申奉璨等, 目标检测中的尺度变换应用综述. 中国图象图形学报, 2020. 25(09): 第1754-1772页.
[3]. 张婷婷等, 基于深度学习的图像目标检测算法综述. 电信科学, 2020. 36(7): 第92-106页.

感谢提供上述资料的作者!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晓码bigdata

如果文章给您带来帮助,感谢打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值