【CICC独家】目标检测最新发展及未来挑战

 

基于计算机视觉技术的目标检测就是“给定一张图像或者视频帧,找出其中所有目标的位置,并给出每个目标的具体类别”...



基于计算机视觉技术的目标检测就是“给定一张图像或者视频帧,找出其中所有目标的位置,并给出每个目标的具体类别”。
- 中国指挥与控制学会 -
一、检测算法




标检测对于人类来说不难,通过对图片中不同颜色模块的感知,很容易定位并分类出其中目标物体。但对于计算机来说,面对的是红绿蓝像素矩阵,很难从图像中直接得到狗和猫这样的抽象概念并确定其位置,再加上有时候多个物体和杂乱的背景混杂在一起,目标检测就更加困难。

传统目标检测方法一般使用滑动窗口的框架,主要包括以下三个步骤:

(1)利用不同尺寸的滑动窗口,框住图像的某一部分,将其作为候选区域;

(2)提取候选区域相关的视觉特征,比如人脸检测常用的 Harr 特征、行人检测和普通目标检测常用的 HOG 特征等;

(3)利用分类器进行识别,比如常用的 SVM模型。

但是传统目标检测主要存在两个问题:一是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。
二、基于深度学习的目标检测


深度学习的概念由 Hinton 等人于 2006 年提出,深度学习源于大脑认知原理的研究,是一种能够模拟出人脑的神经结构的机器学习方式,从而能够让计算机拥有人工智能,大家所熟知的 AlphaGo 就是深度学习典型的一个应用。深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究。人类识别气球的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。

下面是人脑进行人脸识别的一个示例。

在最底层特征基本上是类似的,就是各种边缘,越往上,越能提取出此类物体的一些特征(如眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确地区分不同的物体。那么我们可以很自然地想到:可以不可以模仿人类大脑的这个特点,构建多层的人工神经网络,来达到这样一个目的呢?答案当然是肯定的,这也是许多深度学习算法(包括 CNN)的灵感来源。

所以,基于深度学习的目标检测便应运而生,主流的检测方式有两种,第一种就是候选区域(Re⁃ gion Proposal)。候选区域利用图像中的纹理、边缘、颜色等信息,预先找出图中目标可能出现的位置,可以保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率。这大大降低了后续操作的时间复杂度,并且获取的候选窗口要比传统目标检测采用的滑动窗口的质量更高。

有了候选区域,剩下的工作实际就是对候选区域进行图像分类了(特征提取+分类)。对于图像分类,首先诞生的就是 R-CNN(基于区域的卷积神经网络),R- CNN 是第一个真正可以实现工业级应用的解决方案,它的诞生,使得目标检测的准确率大幅提升,基于深度学习的目标检测就渐渐成为了科研和工业领域的主流。

基于深度学习的目标检测的实现过程如下:

(1)输入测试图像;

(2)利用选择搜索(selective search)算法在图像中提取 2000 个左右的 region proposal;

(3)将每个候选区域缩放成固定的特征并传入CNN,经过运算输出 CNN 特征(warp)成 227 × 227的大小并输入到 CNN,将 CNN 的 fc7 层的输出作为特征;

(4)将每个候选区域提取到的 CNN 特征输入到 SVM 分类器进行分类。

当然,在这些步骤之前,首先要训练好提取特征的 CNN 模型,以及用于分类的 SVM(使用在 Ima⁃ geNet 上预训练的模型(AlexNet/VGG16)进行微调,得到用于特征提取的 CNN 模型,然后利用 CNN 模型对训练集提取特征训练 SVM)。

但是 R-CNN 框架存在着如下一些问题:

(1)训练分为多个阶段,步骤繁琐;

(2)训练耗时,占用磁盘空间大:5000 张图像产生几百 G 的特征文件;

(3)速度慢: 使用 GPU,VGG16 模型处理一张图像需要 47 秒。

针对速度慢的这个问题,SPP-NET 给出了很好的解决方案。先看一下 R-CNN 为什么检测速度这么慢,通过 R-CNN 框架发现,实际上 R-CNN 对一张图像进行了 2000 次提特征和分类的过程!而我们完全可以对图像只提取一次卷积层特征,然后只需要将候选区域在原图的位置映射到卷积层特征图上,再将每个候选区域的卷积层特征输入到全连接层做后续操作。这便是 SPP-NET,它给定任意给一张图像输入到 CNN,经过卷积操作就可以得到卷积特征。

使用 SPP- NET 相比于 R- CNN 可以大大加快目标检测的速度,但是依然存在不足之处:

(1)训练分为多个阶段,步骤繁琐: 微调网络+训练 SVM+训练边框回归器;

(2)SPP- NET 在微调网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调;

针对这两个新的问题,RBG 又分别提出了 Fast R-CNN 和 Faster R-CNN, 它们都是精简而快速的目标检测框架,融合了 R- CNN 和 SPP- NET 的精髓,并且引入多任务损失函数,使整个网络的训练和测试变得十分方便。无论在速度上还是精度上都得到了不错的提高。但遗憾的是,这两种方式依然无法满足实时性的要求。

总的来说,从 R- CNN、SPP- NET、Fast R-CNN、Faster R-CNN 一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。虽说仍无法满足实时性,基于候选区域的 R-CNN 系列目标检测方法是当前目标检测最主要的一个分支。

第二种主流的深度学习目标检测的方式便是基于回归方法的深度学习目标检测。在实时性的需求下,应用科学家开始考虑直接利用 CNN 的全局特征预测每个位置可能的目标,使用了回归的思想,即给定输入图像,直接在图像的多个位置上回归出这个位置的目标边框以及目标类别。

目前使用的主要方法有 YOLO(45fps)和 SSD (58fps)。YOLO 的主要实现过程是:

(1)给出一个输入图像,首先将图像划分成 7*7的网格;

(2)对于每个网格,我们都预测 2 个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率);

(3)根据上一步可以预测出 7*7*2 个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS 去除冗余窗口即可。

可以看到整个过程非常简单,不需要中间的候选区域找目标,直接回归便完成了位置和类别的判定。YOLO 方法将目标检测任务转换成一个回归问题,大大加快了检测的速度,可以每秒处理 45 张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得误检率大幅降低(充分的上下文信息)。但是,YOLO 方法也存在问题,没有了候选区域机制,只使用 7*7 的网格回归会使得目标不能非常精准的定位,这也导致了 YOLO 方法的检测精度并不是很高。

SSD 方法获取目标位置和类别的机理跟 YOLO方法一样,都是使用回归,但是 YOLO 方法预测某个位置使用的是全图的特征,而 SSD 方法预测某个位置使用的是这个位置周围的特征。

SSD 方法结合了 YOLO 方法中的回归思想和 Faster R-CNN 的机制,使用全图各个位置的多尺度区域特征进行回归,既保持了 YOLO 方法速度快的特性,也保证了窗口预测精准度。速度在 GPU 上达到 58 帧每秒。YOLO 方法的提出给目标检测一个新的思路,SSD 方法的性能则让我们看到了目标检测在实际应用中真正的可能性。

而有了好的软件和算法,硬件平台也是相当重要的。在深度学习神经网络结构上取得的突破让目标检测任务的准确率大幅提升。目标检测模型变得越来越大、越来越复杂,需要大量计算资源来训练和评估。然而商业处理器性能增长日趋缓慢,硬件平台加速是一个必然的趋势。NVIDIA 趁这一波深度学习爆发之势,大力推进了基于 GPU 的加速方案,包括新处理器架构(Kepler、Maxwell、Pascal),高效的加速库(cuBLAS、cuDNN),灵活直观的训练系统(DIGITS)。当前,深度学习系统已经大量使用GPU 集群作为处理平台。GPU 的计算能力发展速度远远超过了同时期的 CPU,一些并行计算任务在GPU 上可以获得显著加速。

传统来说,在评估硬件平台的加速时,必须考虑到灵活性和性能的权衡。一方面,通用处理器(GPP)可提供高度的灵活性和易用性,但相对缺乏效率。另一方面,专用集成电路(ASIC)可提供高性能,但代价是不够灵活且生产难度更大。这些电路专用于某特定的应用程序,并且生产起来,价格昂贵且耗时。而 FPGA 刚好是这两个极端之间的折中。FPGA 属于一类更通用的可编程逻辑设备(PLD),简单来说,是一种可重新配置的集成电路。于是使用 FPGA 也逐渐成为一种替代方案。由于 FPGA 架构灵活,研究者能够发挥模型级别优化,这是在固定架构(如 GPU)上不具备的优势。FPGA 提供每瓦高性能,对于应用科学家大规模基于服务器的部署或资源受限的嵌入式应用非常有吸引力。

相比于 GPU,FPGA 虽然实现难度大,但是有着如下一些优势:

(1)并行计算速度非常快;

(2)功耗非常低;

(3)架构灵活;

(4)对于深度学习而言,FPGA 提供了优于传统通用处理器加速能力的显著潜力。

FPGA 的可编程逻辑原件可用于实现普通逻辑功能中的数据和控制路径,而不依赖于冯诺伊曼结构。能够利用分布式片上存储器,以及深度利用流水线并行,这与前馈性深度学习方法自然契合。支持部分动态重新配置,当 FPGA 的一部分被重新配置时,另一部分仍可使用。这将对大规模深度学习模式产生影响,FPGA 的各层可进行重新配置,而不扰乱其他层正在进行的计算。这将可用于无法由单个 FPGA 容纳的模型,同时还可通过将中间结果保存在本地存储以降低高昂的全球存储读取费用。
三、基于深度学习的目标检测的未来


目标检测可以运用于安防、工业、汽车辅助驾驶等多个领域。比如广受关注的汽车辅助驾驶领域,目标检测能够可以实现精确的检测车身周围的人、车辆、路牌等信息,实时报警等,而且目前已经取得了很多重要成果。但同时也面临着诸多挑战。比如形态各异的外貌特征、复杂多样的背景环境、行人与摄像机之间动态变化的场景、系统实时性与稳定性的严格要求等。还有在安防检测领域中,可以实现比如安全帽、安全带等动态检测,移动侦测、区域入侵检测、物品看护等功能。无论是在深度学习目标检测算法方面,或是为工业大规模应用做铺垫的 FPGA 硬件加速方面,都存在着许多难点和挑战。

韩鹏

刊自  中国指挥与控制学会 通讯

转载请注明出处
扫描二维码回复“原创”

关注更多原创好文
回复“会员”加入我们!


    关注 中国指挥与控制学会


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册