导言
随着深度学习和计算机视觉的快读发展,相关技术已经在诸多领域广泛应用。目标检测(Object Detection)作为图像理解中的重要一环,其任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。
1 什么是目标检测
目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视觉领域最具有挑战性的问题。
首先,我们考虑下如何理解一张图片?根据任务需要,可以主要分为三个层次:
一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别(string)或实例ID来描述图片。
二是检测(Detection),分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息,检测给出的是对图片前景和背景的理解。
三是分割(Segmentation),分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),解决“每一个像素属于哪个目标物或场景”的问题。
本文关注的是目标检测,即图像理解的中层次。目标检测要解决的核心问题主要有:
1)目标可能出现在图像的任何位置。
2)目标有各种不同的大小。
3)目标可能有各种不同的形状。
如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采用经典的滑动窗口+图像缩放的方案解决通用目标检测问题的成本太高。
2 目标检测的应用
目标检测在很多领域都有应用需求,包括人脸检测,行人检测,车辆检测以及遥感影像中的重要地物检测等。
2.1 人脸检测
人脸检测是人脸识别应用中重要的一个环节,主要用于确定人脸在图像中的大小和位置,即解决“人脸在哪里”的问题,把真正的人脸区域从图像中裁剪出来,便于后续的人脸特征分析和识别。
2.2 行人检测
行人检测具有极其广泛的应用:智能辅助驾驶,智能监控,行人分析以及智能机器人等领域。此外,其在视频监控,人流量统计,自动驾驶中都有重要的地位。特征提取、形变处理、遮挡处理、分类是四个行人检测中的重要部分。
2.3 车辆检测
车辆检测在智能交通,视频监控,自动驾驶中有重要的地位。车流量统计,车辆违章的自动分析等都离不开它,在自动驾驶中,首先要解决的问题就是确定道路在哪里,周围有哪些车、人或障碍物。
此外,交通标志如交通灯、行驶规则标志的识别对于自动驾驶也非常重要,我们需要根据红绿灯状态,是否允许左右转、掉头等标志确定车辆的行为。同时,医学影像图像如MRI的肿瘤等病变部位检测和识别对于诊断的自动化,提供优质的治疗具有重要的意义。还有工业中材质表面的缺陷检测,硬刷电路板表面的缺陷检测等。
2.4 遥感图像中的目标检测
目前,基于大数据的高分影像目标检测是遥感图像处理领域的重要研究方向。传统的目标检测识别方法难以适应海量数据,其所依赖的特征表达是通过人工设计的,这样非常耗时,并且强烈依赖于专业知识和数据本身的特征,而且很难从海量的数据中学习出一个有效的分类器以充分挖掘数据之间的关联。而深度学习强大的高级(更具抽象和语义意义)特征表示和学习的能力可以为影像中的目标提取提供有效的框架。
相关研究包括车辆检测,船舶检测,农作物检测,建筑物等地物检测。检测模型除了传统CNN之外,还有基于混合CNN模型,基于超像素分割和弱监督学习等方式。
高分影像中深度学习的目标检测模型,主要包括两个部分:
1 ) 通过深度学习建立目标表征。从图像像素开始,建立图像的深度学习网络,通过逐层学习得到图像的表达。为了更加有效表达目标,对深度网络的每层赋予一定意义。
2) 利用上下文信息调整深度网络。得到图像表达后,利用目标标记、目标上下文、场景上下文信息对深度网络权值进行调整,通过上下文交互增强深度网络的判别能力,提高目标检测性能。
3 基于深度学习的目标检测算法
深度学习用于目标检测的算法从思路上来看,可以分为两大类,一类是two stage的方法,也就是把整个分为两部分,生成候选框和识别框内物体;另一类是one stage的方法,把整个流程统一在一起,直接给出检测结果,主要包含SSD, YOLO系列。以下将对各类型经典算法的实现流程和算法主要贡献进行总结和简述。
3.1 两阶段(2-stage)检测模型
两阶段模型因其对图片的两阶段处理得名,也成为基于区域(Region-based)的方法。
R-CNN
流程:一是基于图片提出若干可能包含物体的区域(即图片的局部裁剪,被称为Region Proposal),文中使用的是Selective Search算法;二是在提出的这些区域上运行当时表现最好的分类网络(AlexNet),得到每个区域内物体的类别。
贡献: 1)CNN可用于基于区域的定位和分割物体; 2)监督训练样本数紧缺时,在额外的数据上预训练的模型经过fine-tuning可以取得很好的效果。
缺点:需训练三个不同模型,性能问题
论文连接:https://arxiv.org/abs/1311.2524
Fast R-CNN:共享卷积运算
流程:先得到feature map,同时寻找ROI并映射到特征图上;再对每个RoI进行RoI Pooling操作便得到等长的feature vector,正负样本处理同时分类和回归,并将损失统一起来。
贡献: 文章将Proposal, Feature Extractor, Object Classification&Localization统一在一个整体的结构中,并通过共享卷积计算提高特征利用效率
讨论:multi-loss training相比单独训练classification确有提升; multi-scale相比single-scale精度略有提升,但带来的时间开销更大。一定程度上说明CNN结构可以内在地学习尺度不变性; 在更多的数据(VOC)上训练后,精度是有进一步提升的; Softmax分类器比"one vs rest"型的SVM表现略好,引入了类间的竞争; 更多的Proposal并不一定带来精度的提升;
论文链接:https://arxiv.org/abs/1504.08083
Faster R-CNN: 两阶段模型的深度化
流程:在滑动窗口上生成不同大小的anchor box,取定IoU的阈值,按Ground Truth标定这些anchor box的正负。于是,传入RPN网络的样本数据被整理为anchor box(坐标)和每个anchor box是否有物体(二分类标签)。RPN网络将每个样本映射为一个概率值和四个坐标值,最后将二分类和坐标回归的损失统一起来,作为RPN网络的目标训练,同样用多任务损失将二者的损失联合。
贡献:RPN(Regional Proposal Networks)网络取代Selective Search算法使得检测任务可以由神经网络端到端地完成
论文链接:https://arxiv.org/abs/1506.01497
Mask-RCNN
此文获得ICCV最佳论文奖。何恺明大神将网络中涉及特征图尺寸变化的环节都不使用取整操作,而是通过双线性差值填补非整数位置的像素。这使得下游特征图向上游映射时没有位置误差,不仅提升了目标检测效果,还使得算法能满足语义分割任务的精度要求。
论文链接:https://arxiv.org/pdf/1703.06870.pdf
3.2 单阶段(1-stage)检测模型
单阶段模型没有中间的区域检出过程,直接从图片获得预测结果,也被成为Region-free方法。
YOLO
流程:划分等分网格,和GT的IoU结合得到要预测样本,输入CNN。在基础上生成B个box并得到五个回归值(四个位置,和含有物体的概率)(不是某一类物体)。最后用NMS过滤得到最后的预测框。 损失函数被分为三部分:坐标误差、物体误差、类别误差。
YOLO的主要优点是快,全局处理使得背景错误相对少,泛化性能好;
贡献:它将检测任务表述成一个统一的、端到端的回归问题,并且以只处理一次图片同时得到位置和分类。
问题:网格粗糙,限制小物体检测。但后续YOLOv2和YOLOv3在原有基础上进行了网络改进,并取得了更好的检测效果。
论文链接:https://arxiv.org/abs/1506.02640
SSD: Single Shot Multibox Detector
SSD和YOLO相比有以下突出特点:
· 多尺度的feature map:基于VGG的不同卷积段,输出feature map到回归器中。这一点试图提升小物体的检测精度。
· 更多的anchor box,每个网格点生成不同大小和长宽比例的box,并将类别预测概率基于box预测(YOLO是在网格上)。
论文链接:https://arxiv.org/abs/1512.02325
总结
一阶段检测模型整体上由基础网络(Backbone Network)和检测头部(Detection Head)构成。前者作为特征提取器,给出图像不同大小、不同抽象层次的表示;后者则依据这些表示和监督信息学习类别和位置关联。检测头部负责的类别预测和位置回归两个任务常常是并行进行的,构成多任务的损失进行联合训练。
两阶段通常含有一个串行的头部结构,即完成前背景分类和回归后,把中间结果作为RCNN头部的输入再进行一次多分类和位置回归。有优点但是带来更大的算力开销,重复计算等。而单阶段模型只有一次类别预测和位置回归,卷积运算的共享程度更高。
4 目标检测数据集
最后我们整理了相关领域的开源数据集,供大家学习和研究
Pascal VOC(Pascal Visual Object Classes)- benchmark目标检测数据集
http://host.robots.ox.ac.uk/pascal/VOC/
MS COCO(Common Objects in COntext)- benchmark目标检测数据集
http://cocodataset.org
Cityscapes - 现代城市道路场景的理解
https://www.cityscapes-dataset.com
NWPU VHR-10 dataset - 高分遥感影像地物检测
http://www.escience.cn/people/gongcheng/NWPU-VHR-10.html
参考文献
[1] 目标检测入门 李家丞 https://blog.csdn.net/p23onzq/article/details/79598947
[2] Zhu X X, Tuia D, Mou L, et al. Deep learning in remote sensing: a review[J]. 2017.
[3] 基于深度学习的目标检测算法综述 SIGAI 2018.4.24