摘要
介绍了文章的大致思路和结构:
1.介绍,经典的目标检测算法,数据集
2.分析比对,各种目标检测算法,包括一阶段和两阶段的
3.介绍,传统和新的应用,以及一些目标检测的其他分支
4.讨论,用目前这些算法来构建有效的系统,目标检测算法未来的发展方向
相关背景
目标检测即找出图像中所有感兴趣的物体,包含物体定位和物体分类两个子任务,同时确定物体的类别和位置。

传统目标检测的方法一般分为三个阶段:
1.在给定的图像上选择一些候选的区域,
2.对这些区域提取特征,
3.使用训练的分类器进行分类。
(1)区域选择:这一步是为了对目标的位置进行定位。比如最早采用滑动窗口的策略对整幅图像进行遍历,而且需要设置不同的尺度,不同的长宽比。
(2)特征提取:常用的特征有 SIFT、HOG等。
(3)分类:根据第二步提取到的特征对目标进行分类,分类器主要有 SVM,AdaBoost 等。
基于深度学习的目标检测算法
目前主流的目标检测算法主要是基于深度学习模型,大概可以分成两大类别:
(1)One-Stage目标检测算法,这类检测算法不需要Region Proposal阶,比较典型的算法有 SSD、YOLO、YOLOv2、YOLOv3和CornerNet;
(2)Two-Stage目标检测算法,这类检测算法将检测问题划分为两个阶段,第一个阶段首先产生候选区域(Region Proposals),包含目标大概的位置信息,然后第二个阶段对候选区域进行分类和位置精修,主要有R-CNN以及其衍生的各种算法。
目标检测模型的主要性能指标是检测准确度和速度,其中准确度主要考虑物体的定位以及分类准确度。一般情况下,Two-Stage算法在准确度上有优势,而One-Stage算法在速度上有优势。
Two-stage (基于候选区域的目标检测)
R-CNN(2014年):第一个把CNN用到目标检测的算法,并且效果远好于传统算法。思路还是和以前的传统算法类似,只是特征抽取使用了CNN。 R-CNN生成Proposals的方法是传统方法Selective Search,主要思路是通过图像中的纹理、边缘、颜色等信息对图像进行自底向上的分割,然后对分割区域进行不同尺度的合并,每个生成的区域即一个候选Proposal。选择性搜索(Selective Search )就是一种典型的候选区域方法。算法原理如下:首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。这张图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。
R-CNN 利用候选区域方法创建了约 2000 个 ROI。这些区域被转换为固定大小的图像,并分别送到卷积神经网络中。之后使用SVM对区域进行分类,使用线性回归损失来校正边界框,以实现目标分类并得到边界框。以下是 R-CNN 整个系统的流程图

Fast R-CNN(2015年):R-CNN中有很多区域是彼此重叠的。如果我们有 2000 个候选区域,且每一个都需要独立地馈送到 CNN 中,那么对于不同的 ROI,我们可能需要重复提取很多次特征。因此 R-CNN 的训练和预测速度非常慢。 直接使用cnn得到的特征图代替原图来检测目标 这样可以提高算法运行速度。
思路上有了很大的一个改进,即输入整张图片到网络中,共享卷积层先做特征抽取再切图,并且用RoI Pooling来统一二阶段的输入特征大小,从而极大提升了速度,除了切图部分其他部分都连起来了。Fast R-CNN 选择了 VGG16 中的卷积层 conv5 来生成 ROI区域在对应的特征图上的映射特征图块,并用于目标检测任务中。我们使用 ROI 池化将特征图块转换为固定的大小,并送到全连接层进行分类和定位。因为 Fast-RCNN 不会重复提取特征,所以它能显著地减少处理时间。
Faster R-CNN(2015年,Fast R-CNN提出3个月后,由何凯明等人提出):Fast R-CNN 依赖于外部候选区域方法,如选择性搜索。但这些算法在 CPU 上运行且速度很慢。Faster R-CNN 采用区域生成网络(Region Proposal Network,RPN)代替了候选区域方法。
RPN
区域生成网络(RPN)将前面卷积网络的输出特征图作为输入,比如VGG16的conv5特征图。它在特征图上滑动一个 3×3 的卷积核,以使用卷积网络构建与类别无关的候选区域。使用VGG网络提取特征的话,每个 3x3 区域会得到一个512维的特征向量,然后送到两个独立的全连接层,以预测边界框和两个目标分数(是目标或者不是目标)。

对于特征图中的每一个位置,RPN 会做 k 次预测。因此,RPN 将输出 4×k 个坐标和每个位置上 2×k 个得分。下图展示了 8×8 的特征图,且有一个 3×3 的卷积核执行运算,它最后输出 8×8×3 个 ROI(其中 k=3)。下图(右)展示了单个位置的 3 个候选区域。

Faster R-CNN 使用更多的锚点。它部署 9 个锚点框:3 个不同宽高比的 3 个不同大小的锚点框。每一个位置使用 9 个锚点,每个位置会生成 2×9 个目标分数和 4×9 个坐标。
Mask R-CNN:Faster R-CNN在Instance Segmentation的改进版,增加了一个mask分支来完成mask任务。最重要的一个贡献,在于提出了RoI Pooling的改进版ROIAlign,提升位置判别的精度。
One-stage
one-stage相较于two-stage,牺牲了精度提升了速度。
YOLO : 将物体分类和物体定位在一个步骤中完成。Yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。通过这种方式,Yolo可实现45帧每秒的运算速度,完全能满足实时性要求(达到24帧每秒,人眼就认为是连续的)。CVPR2016发表的,从2015年的Faster R-CNN,可以比较容易的想到,直接用RPN或者类RPN做分类,直接一次性给判别结果。最直接的,把RPN的二分类改成多分类, YOLO系列算法在构建回归目标时一个主要的区别就是如果将图像划分成SxS的格子,每个格子只负责目标中心点落入该格子的物体的检测;如果没有任何目标的中心点落入该格子,则为负样本。
单次检测器通常需要在准确率和实时处理速度之间进行权衡。它们在检测太近距离或太小的目标时容易出现问题。在下图中,左下角有 9 个圣诞老人,但某个单次检测器只检测出了 5 个。
YOLOv2:针对YOLO做了一些改进,卷积层前加BN层,使用DarkNet等等。
YOLOv3:在YOLOv2之上的改进, 调整了网络结构;利用多尺度特征进行对象检测; 预测对象类别时用logistic取代了softmax。
网络架构
在基本的图像特征提取方面,YOLO v3采用了称之为Darknet-53的网络结构(含有52个卷积层1个全连接层),它借鉴了残差网络residual network的做法,在一些层之间设置了快捷链路(shortcut connections)。DarkNet-53 主要由 3 × 3 和 1× 1 的卷积核以及类似 ResNet 中的快捷链路构成。相比 ResNet-152,DarkNet 有更低的 BFLOP(十亿次浮点数运算),但能以 2 倍的速度得到相同的分类准确率。 每个残差组件有两个卷积层和一个快捷链路。
特征金字塔网络(FPN)——利用多尺度特征进行检测 在YOLO v3更进一步采用了3个不同尺度的特征图来进行对象检测。
结合上图看,卷积网络在79层后,经过下方几个黄色的卷积层得到一种尺度的检测结果。相比输入图像,这里用于检测的特征图有32倍的下采样。比如输入是416x416的话,这里的特征图就是13x13了。由于下采样倍数高,这里特征图的感受野比较大,因此适合检测图像中尺寸比较大的对象。
为了实现细粒度的检测,第79层的特征图又开始作上采样(从79层往右开始上采样卷积),然后与第61层特征图融合(Concatenation),这样得到第91层较细粒度的特征图,同样经过几个卷积层后得到相对输入图像16倍下采样的特征图。它具有中等尺度的感受野,适合检测中等尺度的对象。
最后,第91层特征图再次上采样,并与第36层特征图融合,最后得到相对输入图像8倍下采样的特征图。它的感受野最小,适合检测小尺寸的对象。
上面使用不同尺寸特征图进行预测的网络称为特征金字塔网络(FPN),是一种旨在提高准确率和速度的特征提取器。
9种尺度的 anchor boxes
随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
分配上,在最小的13x13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的26x26特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的52x52特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。
感受一下9种先验框的尺寸,下图中蓝色框为聚类得到的先验框。黄色框式ground truth,红框是对象中心点所在的网格。
对于一个输入图像,YOLO v3将其映射到3个尺度的输出张量,代表图像各个位置存在各种对象的概率。
看一下YOLO v3共进行了多少个预测。对于一个416x416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13x13x3 + 26x26x3 + 52x52x3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。
对比一下,YOLO v2采用13x13x5 = 845个预测,YOLO v3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。
SSD( Single-Shot MultiBox Detector):YOLO的改进版,针对YOLO的不足,加入了多尺度的特征。SSD检测算法的网络结构如下图所示,其中Backbone为VGG网络,使用不同阶段不同分辨率的feature maps进行预测。 SSD系列检测算法在确定正负样本的时候通过交并比大小进行区分,当某一个Ground Truth的目标框与anchor的交并比最大且对应的交并比大于某一个阈值的时候,对应anchor即负责检测该Ground Truth,即每一个anchor最多负责一个物体的检测,同一个物体可能被多个anchor同时检测。
RetinaNet:损失主要包括分类损失(Cls Loss)和定位损失(Loc Loss),常见的损失组合主要有如下两种Cls Loss + Loc Loss(SSD系列算法)、Cls Loss + Obj Loss + Loc Loss (YOLO系列算法),其中YOLO系列算法相比于SSD系列算法多了Object Loss,即判断对应区域是否为物体的损失。 One-Stage目标检测算法的正负样本不均衡的问题比较严重,对于设计损失函数还会有一些针对创新。提出了Focal loss,解决one-stage里普遍存在的类别不平衡问题。
将原先训练 分类任务 惯用的 交叉熵误差
改为 FL (focal loss) 即可。
focal loss的标准公式:

本质改进点在于,在原本的 交叉熵误差 基础上乘上
这一权重。
乘上了该权重,量大的类别所贡献的loss被大幅砍削,量少的类别所贡献的loss几乎没有多少降低。这样训练过程中量少的类别能得到平衡。

Mask R-CNN是继承于Faster R-CNN (2016)的,Mask R-CNN只是在Faster R-CNN上面加了一个Mask Prediction Branch (Mask 预测分支),并且改良了ROI Pooling,提出了ROI Align。

数据集&评估矩阵
早期的数据集:人脸识别、行人识别
通用数据集:PASCAL VOC、MS COCO、ImageNet-loc
通用目标检测算法分析
特征抽取(主干网络)
以FPN为代表(PFPNet、WeaveNet等),由于物体的大小差异,考虑从不同的层抽取信息来判别不同大小的物体。
另一个思路是从不同物体间的语义关系出发来帮助识别遮挡和小物体,个人理解总体来说就是把box之间的信息加入到网络中。(例如R-DAD中,作者把一个anchor再切成上下左右的子anchor,在整个anchor中再加入子anchor的信息,有利于重叠的box间的信息提取。还有一系列其他的文章,后续有需要和时间再细看)
再就是注意力机制,以及可变卷积等等。
提升位置精度
位置精度的衡量标准,主要是IoU。大部分的论文就围绕IoU做文章,一种是设计新的regression loss,在loss中考虑IoU;另一种是设计变种IoU。具体的,在Unitbox中使用-ln(IoU)作为loss代替regression的l2 loss,在Generalized Intersection over Union中,重新定义了一种新的IoU作为更合适的衡量标准。IoU-Net中提出在第一阶段新增一个输出来预测IoU,这样可以接入程度信息。
解决负样本的不平衡
two-stage方法在第一个阶段已经筛选了大量的anchor,故样本不平衡问题相对不大,而在one-stage中则没有。一般的方法有hard negative mining(OHEM)。也有许多其他的算法如Libra r-cnn等等用特定的抽样方法而不是随机抽样(IoU-balanced sampling)。
另一种就是Focal loss及其他的一些loss(Average-Precision loss),通过调整正负样本的loss值解决问题。
提升NMS方法
Relation network中用模型保留了一部分不使用NMS的框。在IoU-Net中使用IoU而不是类别的confidence作为选框依据。另外还有adaptive-NMS,soft-NMS、softer-NMS等等。
结合one-stage和two-stage
一般把是否有ROI作为one-stage与two-stage的判别标准,RefineDet及后续的AlignDet等。
复杂情况的处理
小物体及遮挡物体,许多是人脸识别或是行人识别的场景。有ssd及其变种,也有PGAN,tiny face等等。
尺度跨度太大的物体,一般有3种解决思路:原图缩放到不同尺度来训练,多种大小的filters,设置不同大小的anchor。
anchor-free
这两年挺多的anchor-free的论文,Fcos、Foveabox、CornerNet、CenterNet、Dubox等等,今年非常多~
training from scratch(不预训练)
用预训练模型可能会存在几个问题(如网络结构相对固定,不同场景存在差异等等),于是有DetNet、DSOD、ScratchDet等算法,以及何恺明的Rethinking等等的论文,开始去思考和探索如何设计网络来提升检测。
设计新结构
DetNet,新的backbone。以及Light-head r-cnn: In defense of two-stage object detector,解决两阶段算法的头部计算量太大问题。
加速
mobile等设备上的应用,需要实时高速的模型,故而有一系列的这方面的算法(一阶段的YOLO、SSD等等)
更快更准确
有一些结合one-stage与two-stage的工作;

应用与分支
人脸检测
Hyperface,Wasserstein cnn,Adaacos,ArcFace等等,详见Deep face recognition: A survey,详细介绍各种深度学习的人脸检测方法
行人检测
具体参看Computer vision and deep learning techniques for pedestrian detection and tracking: A survey
总结与展望
gpu等算力的发展,使得深度学习及目标检测成为可能。目标检测朝着更准、更快的方向发展,发展的方向有新的结构、新的特征提取、提升处理速度、从头训练、anchor-free、特定场景(小物体、遮挡物体)、one-stage与two-stage融合、NMS优化、正负样本不平衡、更准确定位、更准确分类等等。并且,目标检测在各领域(公共安全、军事、交通、医学、生活等等)的应用也越来越广泛和成熟。接下来是几个方向的展望:
one-stage与two-stage融合
two-stage过程中有个比较耗时费力的选框过程(比如RoI Pooling和NMS)。而one-stage的准确率一直相对较差一些。如何结合one-stage与two-stage的优点(前者更快,后者更准)是一个挑战。
ps:如果我想更准一些,是否可以重新考虑stage?比如Cascade就是拉长stage的感觉。
视频目标检测
在视频目标检测中,运动模糊、视频散焦、运动目标模糊、目标运动剧烈、目标小、遮挡和截断等问题使得该任务在现实场景和遥感场景中难以获得良好的性能。深入研究移动目标和视频等更复杂的源数据是未来研究的重点之一。
高效的后处理方法
类似NMS之类的,对预测框的进一步处理的方法也对准确率有很大的影响。
弱监督目标检测
多领域目标检测
3D目标检测
显著目标检测(SOD)
无监督目标检测
多任务目标检测
多源信息辅助(比如文本信息)
终端目标检测系统
医学图像和辅助诊断
遥感目标检测
基于GAN的目标检测

Paper Reading:A Survey of Deep Learning-based Object Detection相关推荐

  1. 基于深度学习的目标检测论文综述Paper Reading:A Survey of Deep Learning-based Object Detection(中文)

    摘要 介绍了文章的大致思路和结构: 1.介绍,经典的目标检测算法,数据集 2.分析比对,各种目标检测算法,包括一阶段和两阶段的 3.介绍,传统和新的应用,以及一些目标检测的其他分支 4.讨论,用目前这 ...

  2. 《Recent Advances in Deep Learning for Object Detection 》笔记

    最近看了一篇目标检测的综述,之前对目标检测的认识不是很多,所以简单地记录一下笔记,由于是很早之前写的,对目标检测的很多概念都还不是很清楚,简单记录一下.这篇论文主要讲了目前的目标检测算法的一些设置.检 ...

  3. Week 8 Deep learning for object detection

    目标检测(Object Detection)_图像算法AI的博客-CSDN博客_目标检测

  4. 【Paper】Deep Learning for Anomaly Detection:A survey

    论文原文:PDF 论文年份:2019 论文被引:253(2020/10/05) 922(2022/03/26) 文章目录 ABSTRACT 1 Introduction 2 What are anom ...

  5. Deep Learning based Recommender System:A Survey and New Perspectives

    Deep Learning based Recommender System:A Survey and New Perspectives 论文信息:Shuai Zhang, Lina Yao, and ...

  6. 【推荐算法】深度学习推荐算法综述 Deep Learning based Recommender System: A Survey and New Perspectives

    一.MLP based Recommender System 1. Deep Crossing模型 Deep Crossing模型完整的解决了从特征工程.稀疏向量稠密化.多层神经网络进行优化目标拟合等 ...

  7. 跌倒综述 Deep Learning Based Systems Developed for Fall Detection A Review

    文章目录 1.基本信息 2. 第一节 介绍 3. 第二节 跌倒检测系统文献 4.第三节 讨论和未来方向 5. 第四节 结论 6. 参考文献 1.基本信息 题目:Deep Learning Based ...

  8. Turbo Autoencoder: Deep learning based channel code for point-to-point communication channels

    Turbo Autoencoder: Deep learning based channel code for point-to-point communication channels Abstra ...

  9. Deep learning based multi-scale channel compression feature surface defect detection system

    基于深度学习的多尺度通道压缩特征表面缺陷检测系统 Deep learning based multi-scale channel compression feature surface defect ...

最新文章

  1. 将字符数组中的字符按从小到大的顺序排序
  2. PKI/CA 技术的介绍
  3. 测量场效应晶体管(JFET) 2N3819
  4. log4j.properties中的这句话“log4j.logger.org.hibernate.SQL=DEBUG ”该怎么写在log4j.xml里面呢?...
  5. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
  6. MPU6050首例整合性6轴的姿态模块(转)
  7. 蓝点lilac / ContextMenuManager:win10右键菜单清理工具
  8. Oracle的奇葩设置之非归档模式与RMAN备份
  9. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
  10. 解决 jsp:include 引用文件时出现乱码的问题
  11. 喜报:毒霸成功通过VB100认证
  12. java long to int_Java long(Long)与int(Integer)之间的转换
  13. 为什么外包公司这么不受欢迎??
  14. 7-3 奥运排行榜 (25 分)
  15. 忆2011年的秋天:一个人的项目
  16. mysql查询本用户的表的列名等信息_mysql常用命令查询手册
  17. VS2010 文件存取之CStdioFile
  18. html 状态 304,网站频繁出现304状态码的原因
  19. TP FN FP TN
  20. 小米Pro重装系统无法使用指纹功能

热门文章

  1. 微通道的兵锋 阿里将血腥
  2. 【转】当你进行地图设计时,需要了解这些小知识
  3. 纯前端js(或者vue)导出excel实现:合并单元格、设置单元格样式、单元格内换行
  4. 小米手机在国内使用Android Auto
  5. java ee学生信息管理_【全】JAVAEE_学生信息管理系统
  6. 查询至少有一门课与学号为“01“的同学所学相同的同学的信息
  7. GW620 刷机 ANDROID 1.5、2.2、2.3
  8. 在ubuntu(linux)下安装xbt-Tracker
  9. memset(a, 0x3f, sizeof(a))
  10. 树莓派安装系统、配置远程桌面教程