在计算机视觉众多的技术领域中,目标检测(Object Detection)是一项非常基础的任务,图像分割、物体追踪、关键点检测等通常都需要借助于目标检测。目标检测作为基础任务通常和图像分类、图像分割相关联,我们简单看一下它们之间的区别与联系。
图像分类:图像分类侧重于输入图像中只有单个物体,用来判断这个图像属于什么类别,比如人、动物等大类别,也可以是不同种类的动物小类别等,这些图像级别的任务,相对比较简单,容易理解,所以最先得到发展与运用。
目标检测:目标检测偏向于一张输入图像中包含多个类别的很多物体,我们经常拍摄或者看到的图像往往都是具有多个类别的物体,比较复杂,目的是找出图像中不同物体的位置并判断其类别。
图像分割:图像分割与目标检测的输入类似,不同的是,它把图像中像素作为基本单位,判断每一个像素的类别,属于像素级别分类,一般图像分割与目标检测互相关联,很多模型与方法可以相互借鉴。
一、目标检测的基本概念
目标检测是对图像中所有感兴趣的目标进行分类并检测出它们各自的位置坐标。
如下图所示,目标检测到的图像中包括dog、bicycle、truck三个目标,并且识别了它们各自的位置信息。
当然目标检测可以检测到各种类别信息,只要我们想检测某一图像当中是否有我们所需要的目标,我们都可以按照对预先标注类别的图像进行特征信息训练,使网络模型学习到已知目标特征,进而对其它图像进行目标类别与位置的识别。
二、目标检测的发展历程
目标检测一开始是基于手工特征的传统算法,传统算法对于目标检测通常分为3个阶段:区域选取、特征提取和特征分类。
随着近年来计算机的发展,深度学习得到了广泛的运用,基于深度学习的目标检测成为目前流行的检测方法。
目标检测算法经过历年的研究和对网络模型不断改进与优化,出现了许多优秀的算法模型。
这些模型按照过程的不同主要分为两种类型。
如以R-CNN系列为主的两阶段(2-stage)检测模型和以SSD系列、YOLO系列为主的单阶段(1-stage)检测模型。
自从Faster-RCNN提出了anchor机制之后,后续的改进算法很多都沿用了这一方法,因此,模型还有另一种划分方式,按照是否应用 anchor机制划分为anchor-base和anchor-free 。
1.Two stage与One stage
1)Two stage
常见two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。
在two-stage的⽬标检测领域中,以faster R-CNN模型为典型代表。
首先算法会先经过主网络提取特征,然后提取的特征图经过会先通过Region proposal network(RPN网络)来生成候选区域(Region Proposal,简称RP,包含检测目标的区域建议框),根据特征图和RP⽣成感兴趣区域(ROI)来完成后续位置坐标信息的回归的分类。
2)One Stage
常见的one stage目标检测算法有:OverFeat、YOLOv1~YOLOv7、SSD和RetinaNet等。
目前最新出来的著作YOLOv7在 5-160 FPS 范围内速度和精度超过所有已知目标检测器。
one stage检测模型不存在RPN部分,而是一步到位地在卷积网络中提取特征来预测目标的类别和位置。
所以在拥有特征提取网络的预训练权重后,整个one-stage是可以直接进⾏端到端的训练的。
总而言之,one stage检测器大大简化了模型结构的框架,提升了推理速度和简化了训练步骤。
2.anchor-base和anchor-free
目前基于深度学习的目标检测逐渐发展成为anchor-based、anchor-free和两者融合类型,区别就在于有没有利用anchor提取候选目标框。
首先让我们了解下什么是anchor?
anchor也叫做锚,其实是预设一组不同尺度,不同大小的边界框,在网络训练的时候,真实的边框位置相对于预设边框的偏移。
通俗点说就是预先在目标可能存在的位置设置预设框,然后再在这些预设边框的基础上进行细微调整。而它的本质就是为了解决标签分配的问题。
锚作为一系列先验框信息,其生成以下几个部分:
(1)用网络提取特征图的点来定位边框的位置;
(2)用锚的尺寸来设定边框的大小;
(3)用锚的长宽比来设定边框的形状。
1)anchor-base
近几年,anchor在目标检测领域应用十分广泛,使用anchor机制的模型有很多,包括Faster-RCNN、SSD、YOLOV2~ YOLOV7等。
这类算法的流程可以分为三步:
(1)在图像或者点云空间预设大量的anchor(2D/3D);
(2)回归目标相对于anchor的四个偏移量;
(3)用对应的anchor和回归的偏移量修正精确的目标位置。
以目标检测算法中one stage和anchor base的目标检测模型为例。
模型获取的过程主要包括训练和测试两个部分。
训练的主要目的是利用训练数据集进行检测网络的参数学习,训练数据集包含大量的视觉图像及标注信息(物体位置及类别)。
训练阶段的主要过程包括数据预处理、检测网络、以及标签匹配与损失计算等部分。
测试阶段主要利用得到的训练模型对输入图像进行预测,经过后处理得到检测结果。
(Ⅰ)训练过程
(Ⅱ)测试过程
(Ⅱ)测试过程
目标检测得到的是各个类别的名称与矩形框位置信息,在网络中通常用数字代替类别,比如用0代表Dog,1代表Cat,物体的位置信息通常用矩形边界框(Bounding Box)来表示。以边界框的四个点确定目标的位置信息。
非极大值抑制
(Non-Maximum-Suppression,NMS)
模型预测阶段,我们给图像生成多个锚框,并分别预测类别与位置偏移量,但是会生成很多冗余的没有完全包含目标的预测框,也可能一个目标输出多个相似的预测框,因此,我们需要NMS操作得到跟真实目标最匹配的目标框。
先通过对预测框之间进行IOU(交并比)比较,通过设置阈值除去一些重叠较多的预测框,最终得到每个类别最高得分单个预测框。
如图所示为交并比定义和NMS处理前后的目标检测输出目标框的示意图。
2)Anchor-free
anchor-free类算法代表是CornerNet、ExtremeNet、CenterNet、FCOS等。
Anchor-Free的目标检测算法有两种方式:
(1)基于多关键点联合表达的方法
(2)基于单中心点预测的方法
基于多关键点联合方法,是通过定位目标物体的几个关键点来限定它的搜索空间。例如 Grid R-CNN算法基于RPN找到候选区域,对每个ROI区域提取特征图。
将特征图传到全卷积网络层里面输出概率的热度图,用于定位与目标对齐的边界框的网格点,利用网格点进行特征图融合,最终确定目标的边界框。
而基于单中心点预测的方法,是通过目标物体的中心点来定位,然后预测中心到边界的距离。例如CenterNet将目标当成一个点来检测,即用目标box的中心点来表示这个目标,预测目标的中心点偏移量(offset),宽高(size)来得到物体实际box,而heatmap则是表示分类信息。
每一个类别都有一张heatmap,每一张heatmap上,若某个坐标处有物体目标的中心点,即在该坐标处产生一个keypoint(用高斯圆表示),如下图所示:
由上可见,anchor-base和anchor-free的最主要区别在于定义正负样本和回归的方式。在anchor-free中,物体落到哪个网格,哪个网格就是正样本,其余都是负样本。anchor-base则计算每个anchor预选框和实际框的IOU,超过多少阈值就算正样本。
在回归部分中,anchor-free是基于point做回归的,而anchor-base是基于anchor box和ground truth之间的偏移做回归的。
这也导致了发展了融合anchor-based和anchor-free分支的方法,如FSAF、SFace、GA-RPN等。
三、目标检测在车载中的应用场景
目标检测应用在我们生活的方方面面,随着自动驾驶领域的快速发展,目标检测算法在此领域也得到了极大的应用。
其中应用场景包括道路行人与车辆检测、驾驶员疲劳监测中的人脸检测、智能座舱内遗留物检测、乘员位置检测等。
1.舱外行人与车辆检测
对道路上来往的行人与车辆进行检测,实时观察道路的运行状况。
2.舱内驾驶员人脸检测
检测驾驶员人脸框的位置,作为为实时监测驾驶员的状态的基础。
3.舱内后排遗留物检测
检测下车后座舱内遗留的的物品,方便提醒驾驶员注意停车后座舱安全。