基于深度学习的目标检测算法综述

导言

  目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视觉领域最具挑战性的问题。本文将针对目标检测(Object Detection)这个机器视觉中的经典任务进行解析。

一,什么是目标检测?

  计算机视觉中关于图像识别有四大类任务:

  • 分类——Classification:解决“是什么”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
  • 定位——Location:解决“在哪里”的问题,即定位出这个目标的位置。
  • 检测——Detection:解决“是什么,在哪里”的问题,即定位出这个目标的位置并且知道目标物是什么
  • 分割——Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

 

二,目标检测要解决的核心问题

  除了图像分类之外,目标检测要解决的核心问题是:

  1. 目标可能出现在图像的任何位置
  2. 目标有各种不同的大小
  3. 目标可能有各种不同的形状

  如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采用经典的滑动窗口+图像缩放的方案解决通用目标检测问题的成本太高

三,目标检测的应用

  目标检测在很多领域都有应用需求。其中倍广为研究的是人脸检测,行人检测,车辆检测等重要目标的检测。

  行人检测:行人检测在视频监控,人流量统计,自动驾驶中都有重要的地位:智能辅助驾驶,智能监控,暴恐检测(根据面相识别暴恐倾向),移动侦测、区域入侵检测、安全帽/安全带检测

 

  车辆检测:车辆检测在智能交通,视频监控,自动驾驶中有重要的第位。车流量统计,车辆违章的自动分析等都离不开它,在自动驾驶中,首先要解决的问题就是确定道路在哪里,周围有哪些车、人或障碍物。

 

  其他应用:交通标志如交通灯、行驶规则标志的识别对于自动驾驶也非常重要,我们需要根据红绿灯状态,是否允许左右转、掉头等标志确定车辆的行为。

交通标志检测

  除了这些常见的检测之外,很多领域里也需要检测自己感兴趣的目标。比如工业中材质表面的缺陷检测,硬刷电路板表面的缺陷检测等。

表面缺陷检测

 

  农业中农作物表面的病虫害识别也需要用到目标检测技术:

  人工智能在医学中的应用目前是一个热门话题,医学影像图像如MRI的肿瘤等病变部位检测和识别对于诊断的自动化,提供优质的治疗具有重要的意义。

四,目标检测相关算法

  目标检测问题意味着我们不仅要用算法判断图片中是不是一辆汽车,还要再途中标记出它的位置,用边框或红色方框把汽车圈起来,这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。

 

  近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类:

  • 一类是基于Region Proposal的R-CNN系算法(R-CNN, Fast R-CNN, Faster R-CNN等),它们是two-stage的,需要:1)先算法产生目标候选框,也就是目标位置, 2)然后再对候选框做分类与回归。先进行区域生成,该区域称之为region proposal(简称RP,一个可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。任务流程:特征提取-->生成RP-->分类/定位回归。常见two stage目标检测算法有:R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN和R-FCN等
  • 另一类是Yolo, SSD这类one-stage算法,其仅仅使用一个卷积神经网络CNN直接预测不同目标的类别与位置。不用RP,直接在网络中提取特征来预测物体分类和位置。任务流程:特征提取-->分类/定位回归。常见的one stage目标检测算法有:OverFeat, YOLOV1, YOLOV2, YOLOV3, SSD和RetinaNet等

  第一类方法是准确度高一些,但是速度慢,但是第二类算法是速度快,但是准确性要低一些。这些可以在下图中看到:

 

 4.1 目标检测原理

  目标检测分为两大系列——RCNN系列和YOLO系列,RCNN系列是基于区域检测的代表性算法,YOLO是基于区域提取的代表性算法,另外还有著名的SSD是基于前两个系列的改进。

4.1.1 候选区域产生

  很多目标检测技术都会涉及候选框(bounding boxes)的生成,物理候选框获取当前主要使用图像分割区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。目标识别与图像分割拘束的发展进一步推动有效提取图像中信息。

1) 滑动窗口

  通过滑窗法流程图可以很清晰理解其主要思路:首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。

  滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,不推荐使用滑窗法

 

  2)选择性搜索

    什么是选择性搜索?

    滑窗法类似穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的。学者们自然而然想到只对图像中最有可能包含物体的区域进行搜索以此来提高计算效率。选择搜索(selective search, 简称SS)方法是当下最为熟知的图像bounding boxes提取算法,由Koen E. A于2011年提出

    选择搜索算法的主要思想:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes。首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间的相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。

  

 

  选择搜索流程:

  • step0:生成区域集R
  • step1:计算区域集R里每个相邻区域的相似度S={s1, s2,...}
  • step2:找出相似度最高的两个区域,将其合并为新集,添加进R
  • step3:从S中移除所有与step2中有关的子集
  • step4:计算新集与所有子集的相似度
  • step5:跳至step2,直至S为空

  选择搜索优点:

  • 计算效率优于滑窗法
  • 由于采用子区域合并策略,所以可以包含各种大小的疑似物体框
  • 合并区域相似的指标多样性,提高了检测物体的概率

4.1.2  数据表示

  经过标记后的样本数据如下所示:

 

  预测输出可以表示为:

 

  其中,$p_c$为预测结果的置信概率,$b_x, b_y, b_w, b_h$为裱框坐标, $C_1, C_2, C_3$为属于某个类别的概率。通过预测结果,实际结果,构建损失函数。损失函数包含了分类、回归两部分组成。

4.1.3 效果评估

  使用IoU(Intersection over Union, 交并比)来判断模型的好坏。所谓交并比,是指预测边框、实际边框交绩和并集的比率,一般约定0.5为一个可以接受的值。

 

4.1.4 非极大值抑制

  预测结果中,可能多个预测结果间存在重叠部分,需要保留交并比最大的、去掉非最大的预测结果,这就是非极大值抑制(Non-Maximum Suppression, 简写作NMS)。如下图所示,对同一个物体预测结果包含三个概率0.8/0.9/0.95,经过非极大值抑制后,仅保留概率最大的预测结果。

 

 4.2 目标检测模型

4.2.1 R-CNN系列

1) R-CNN

  定义:R-CNN(全称Regions with CNN features),是R-CNN系列的第一代算法,其实没有过多的使用“深度学习”思想,而是将“深度学习”和传统的“计算机视觉”的知识相结合。比如R-CNN pipeline中的第二步和第四步其实就属于传统的“计算机视觉”技术。使用selective search提取region proposals,使用SVM实现分类。

  流程:

  • 预训练模型:选择一个预训练(pre-trained)神经网络(如AlexNet, VGG)。
  • 重新训练全连接层:使用需要检测的目标重新训练(re-train)最后全连接层(connected layer)
  • 提取proposals并计算CNN特征。利用选择性搜索(Selective Search)算法提取所有proposals(大约2000幅images),调整(resize/warp)它们成固定大小,以满足CNN输入要求(因为全连接层的限制),然后将feature map保存到本地磁盘
  • 训练SVM。利用feature map训练SVM来对目标和背景进行分类(每个类一个二进制(二分类?)SVM)
  • 边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器

  效果:

  • R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测算法

  缺点:

  • 重复计算,每个region proposal,都需要经过一个AlexNet特征提取,为所有的RoI(region of interest)提取特征大约花费47秒,占用空间
  • selective search方法生成region proposal,对一帧图像,需要花费2秒
  • 三个模块(提取、分类、回归)是分别训练的,并且在训练时候,对于存储空间消耗较大

 4.2.2  YOLO系列

1)YOLOv1(2016)

  YOLO(You Only Look Once)是继RCNN,fast-RCNN之后,Ross Girshick针对DL目标检测速度问题提出的另一种框架,其核心思想是生成Rol+目标检测两阶段(two-stage)算法用一套网络的一阶段(one-stage)算法替代,直接在输出层回归bounding box的位置和所属类别。

  之前的物体检测方法首先需要大量可能包含待检测物体的先验框,然后用分类器判断每个先验框对应的边界框里是否包含待检测物体,以及物体所属类别的概率或者置信度,同时需要后处理修正边界框,最后基于一些准则过滤掉之心度不高和重叠度较高的边界框,进而得到检测结果。这种基于先产生候选区再检测的方法虽然有相对较高的检测准确度,但运行速度较慢。

  YOLO创造性的将物体检测任务直接当作回归问题(regression problem)来处理,将候选区和检测两个阶段合二为一。只需一眼就能知道每张图像中有那些物体以及物体的位置。下图展示了各物体检测系统的流程图

 

  实际上,YOLO并没有真正去掉候选区,而是采用了预定义候选区的方法,也就是将图片划分为7*7个网格,每个网格允许预测出两个边框,总共49*2个bounding box,可以理解为98个候选区,它们很粗略地覆盖了图片地整个区域。YOLO以降低mAP为代价,大幅提升了时间效率。

 

  每个网格单元预测这些框地2个边界框和置信度分数。这些置信度分数反映了该模型对框是否包含目标地可靠程度,以及它预测框的准确程度。置信度定义为:$Pr(Object) * IOU_{pred}^{truth}$。如果该单元格中不存在目标,则置信度分数应为零。否则,我们虚妄置信度分数等于预测框与真实值之间联合部分的交集(IOU)。

 

 

转载:https://mp.weixin.qq.com/s?__biz=MzU4MjQ3MDkwNA==&mid=2247483731&idx=1&sn=237c52bc9ddfe65779b73ef8b5507f3c&chksm=fdb69cc4cac115d2ca505e0deb975960a792a0106a5314ffe3052f8e02a75c9fef458fd3aca2#rd

https://blog.csdn.net/electech6/article/details/95240278

https://blog.csdn.net/yegeli/article/details/109861867

posted @ 2021-07-30 14:47  玻璃公主  阅读(2550)  评论(0编辑  收藏  举报