目标检测概述


        目标检测作为计算机视觉领域中最根本也是最具有挑战性的问题之一,近年来受到社会各界的广泛研究与探索。作为计算机视觉领域的一项重要任务,目标检测通常需要完成的是:提供数字图像中某类视觉对象(如人类、动物或汽车)的具体位置。此外,目标检测也是许多其他任务(例如:实例分割、图像描述生成、目标追踪等)的重要环节。


        从应用的角度来看,目标检测可以分为两个研究主题:一般场景下的目标检测和特定类别的目标检测。两者的区别是:前者类似于模拟人类的视觉和认知,主要意图是探索在统一框架下检测出不同类别物体的方法;而后者是指在特定的应用场景下的检测,如人脸检测、行人检测、车辆检测等任务。近年来,深度学习技术的飞速发展给目标检测带来了显著的突破。目标检测目前已经被广泛地应用于许多现实世界的场景中,如自动驾驶、机器人视觉、视频监控等。



目标检测发展历程与现状


        过去的 20 年,目标检测的发展历程大致经历了两个历史时期:传统的目标检测时期(2014 年以前)和基于深度学习的检测时期(2014 年以后)。传统的目标检测算法可以概括为以下几个步骤:首先,采取滑动窗口的方式遍历整张图像,产生一定数量的候选框;其次,提取候选框的特征;最后,利用支持向量机(SVM)等分类方法对提取到的特征进行分类,进而得到结果。由于当时缺乏有效的图像表示,人们只能设计复杂的特征表示,并通过各种加速技能来充分利用有限的计算资源。该时期主要的检测方法有:


  • Viola Jones检测器: Viola Jones检测器由三个核心步骤组成,即Haar特征和积分图、Adaboost分类器以及级联分类器。
  • HOG检测器:HOG检测器利用了方向梯度直方图(HOG特征描述子,通过计算和统计局部区域的梯度方向直方图来构建特征。HOG特征与SVM分类器算法的结合,在行人检测任务中应用广泛且效果显著。然而,HOG检测器的缺点是始终需要保持检测窗口的大小不变,如果待检测目标的大小不一,那么HOG检测器需要多次缩放输入图像。
  • 基于部件的可变形模型(DPM):DPM所遵循的思想是“分而治之”,训练过程中学习的是如何将目标物体进行正确地分解,而推理时则是将不同的部件组合到一起。比如说,检测“汽车”问题可以分解为检测“车窗”、“车身”和“车轮”等。

        早期的目标检测任务提取特征时,主要的方式是人工提取,具有一定的局限性,手工特征的性能也趋于饱和。2012 年起,卷积神经网络的广泛应用使得目标检测也开启了新的征程。2014年R-CNN算法横空出世,目标检测开始以前所未有的速度快速发展。深度学习时代,目标检测算法根据检测思想的不同通常可以分为两大类别:两阶段(two-stage)检测和一阶段(one-stage)检测。


        两阶段检测算法基于提议的候选框,是一个“由粗到细”的过程。首先产生区域候选框,其次提取每个候选框的特征,最后产生位置框并预测对应的类别,特点是精度高但速度慢。最早期的R-CNN算法利用“选择性搜索”方法产生候选框、卷积神经网络提取特征、支持向量机分类器进行分类和预测。虽然R-CNN算法具有一定的开创性,但生成的候选框大量重叠,存在计算冗余的问题。2014年提出的SPPNet算法利用空间金字塔池化层对不同尺度的特征图进行池化并生成固定长度的特征表示,减少反复缩放图像对检测结果造成的影响。然而,SPPNet的缺点是:模型的训练仍然是分多步的;SPPNet很难对SPP层之前的网络进行参数微调,导致效率降低。2015 年提出的Fast R-CNN算法,对R-CNN与SPPNet算法做出进一步改进,提出感兴趣区域池化层(ROI),使得检测的速度和精度大大提升。随后又出现的Faster R-CNN算法,实现了端到端地训练,用RPN网络代替选择性搜索,大大减少了训练和测试的时间。


        一阶段检测算法基于边界框的回归,是一个“一步到位”的过程。一阶段检测网络在产生候选框的同时进行分类和边界框回归,特点是速度快但精度稍逊。2016年YOLO算法提出,该算法将图像分割成 S×S 个网格,基于每个网格对应的包围框直接预测类别概率和回归位置信息。随后有出现了SSD 算法,该算法借鉴YOLO算法的思想,并利用多尺度特征图进行预测。



目标检测与识别技术的学习路径


        目前主流的深度学习目标检测方法可以主要分成Anchor-based和Anchor-free两种。要想理解这两种方法,我们首先需要理解Anchor的含义,其实也非常简单,Anchor可以理解为图一中圈住小猫的红框,当然我们在训练的过程中,在图像中会生成非常多的Anchor框,而Anchor-based的任务便是从这些框中找到圈选目标最好的一个,这种方法得到的结果一般为目标的类别和圈住目标的Anchor框的左上角坐标以及框的长宽。而Anchor-free采用了不一样的方法,她主要是通过预测关键点位置的方式进行目标的定位。说白了就是将anchor框用一些关键点来确定,比如上面的圈住小猫的红框,我们通过框左上角的坐标和框右下角的坐标便可以唯一确定。而框左上角和右下角这两个点便是需要获取的关键点。从时间的角度来看,Anchor-based是先出来的,然后才有了Anchor-free.相比较而言,Anchor-free相对来说比较简单一些,但精度上和Anchor-based一些方法还是有些差距,当然这个差距也在一点点的减少,有些工作甚至超过了Anchor-based的一些经典方法。



图 1 目标检测


        我们在学习技术的时候,有时候要把技术的发展当成故事来看待,就会变得非常的精彩,比如Anchor-based方法,应该说是一类方法。这里面的方法包罗万象。Anchor-based主要分成两大派,也就是我们上文介绍的两阶段(two-stage)检测和一阶段(one-stage)检测。两派相辅相成,又各有特色。而其中先开始进行目标检测的一派为Tow-stage。他的思想为粗定位和细分类,简单来说先从图像中找到可以存在目标的位置,然后再对这些位置进行分类。该派的发展具有非常好的传承性,基本的路线如下图2所示。依靠这个路线,Tow-stage不断完善自己的精度速度,甚至最后将目标检测升级到了实例分割,另一派one-stage以‘快’成名,他没有粗筛选的过程,直接就是定位和分类,因此也让他的速度使two-stage很难达到。而该派的主要代表工作便是yolo v1-v5以及SSD为代表的一众神作。 Anchor-based这类方法包含了无数的智慧结晶。也将目标检测的推到了一个很高的水平。而这时anchor-free便出来啦,他使用关键点检测的方式让目标检测走上了另一条路。他的主要的思路是用一些关键点去替代anchor框的作用,相对anchor-based的方法,anchor-free更加灵活,anchor-free出来之后,一系列的工作蜂拥而至,也极大推动了anchor-free的发展。他的主要的代表的算法为:CornerNet,CenterNet 和CornerNet-Lite等…



​图 2 Tow-stage基本路线