1 问题概况
1.1 定义
目标检测的任务是对画面中的目标进行定位和分类。定位是指回归目标的矩形框,分类是指对目标框进行类别区分。
1.2 主要问题
目标检测任务主要解决以下几个问题:目标的种类和数量、目标的尺寸、外界的干扰因素、特定场景任务等;
2 方法概况
目标检测算法可以分为传统目标检测算法和基于深度学习的目标检测算法。其中传统的目标检测算法的主要工作集中在手工设计中低层面的特征提取算法,如SIFT、HOG特征等;基于深度学习的目标检测算法的主要功能是通过网络的设计,结合数据和loss的使用,使特征提取这个工作智能化,并将整个目标检测任务简单化。近些年随着计算领域的突破和深度学习算法架构的突破,基于深度学习的算法性能大大优于传统的方法,传统的算法已经渐渐退出历史舞台了。不过很多深度学习的方法也是基于传统算法的思路去做实现的,接下来文章会给大家介绍传统算法和深度学习算法的发展过程,让大家对目标检测算法有个大致的概念。
2.1 传统目标检测算法
传统目标检测算法流程示意图如下所示:
候选框提取:通过滑动窗口算法、SS算法等选取目标候选框;
特征提取:手工设计算法提取特征,如VJ、HOG特征等算法,传统方法的主要工作都集中在底层和中层特征提取的算法设计上;
分类器:通过SVM等算法对每一个候选框进行分类;
NMS非极大值抑制:
- 将所有的候选框使用分类器按类别划分,并剔除背景类,因为背景类无需NMS;
- 对每个物体类中的边界框(B_BOX),按照分类置信度降序排列;
- 在某一类中,选择置信度最高的边界框B_BOX1,将B_BOX1从输入列表中去除,并加入输出列表;
- 逐个计算B_BOX1与其余B_BOX2的交并比IoU,若IoU(B_BOX1,B_BOX2) > 阈值TH,则在输入去除B_BOX2;
- 重复上述3、4两个步骤,直到输入列表为空,完成一个物体类的遍历;
- 重复上述1、2、3、4四个步骤,直到所有物体类的NMS处理完成;
2.2 基于深度学习的目标检测算法
目前基于深度学习的目标算法技术方向可以分为基于anchor base和基于anchor free的方法。anchor base和anchor free 的区别在于,有没有使用anchor来提取候选框。目标检测领域的发展从anchor free到anchor base,现在又有回到anchor-free的趋势,学术界技术的迭代更新也引导着工业界的变革。其中基于anchor base的技术路线中又可以分为two-stage和one-stage的方法。
Anchor
Anchor也叫做锚,其实是一组预设的边界框用于在训练时学习真实的边框位置相对于预设边框的偏移。通俗点说就是预先设置目标可能存在的大概位置,然后再在这些预设边框的基础上进行精细化的调整。而它的本质就是为了解决标签分配的问题。
锚作为一系列先验框信息,其生成涉及以下几个部分:
- 用网络提取特征图的点来定位边框的位置;
- 用锚的尺寸来设定边框的大小;
- 用锚的长宽比来设定边框的形状;
通过设置不同尺度,不同大小的先验框,就有更高的概率出现对于目标物体有良好匹配度的先验框约束。
anchor(也被称为anchor box)是在训练之前,在训练集上利用k-means等方法聚类出来的一组矩形框,代表数据集中目标主要分布的长宽尺度。
Anchor Base
代表算法:CornerNet、ExtremeNet、CenterNet、FCOS等;
Anchor-Base即有先验锚框,先通过一定量的数据做聚类等方法得到一些锚框尺度与大小,然后结合先验锚框与预测偏移量得到预测锚框。
基于Anchor-Free的目标检测算法有两种方式:
- 关键点检测方法,通过定位目标物体的几个关键点来限定它的搜索空间;
- 通过目标物体的中心点来定位,然后预测中心到边界的距离。
最直接的好处就是不用在训练之前对当前训练数据聚类出多个宽高的anchor参数了。
Faster R-CNN-设置了3种尺度3种宽高ratio一共9个anchor提取候选框
Anchor Free
代表算法:Faster R-CNN、SSD、Yolo(2、3、4、5)等;
Anchor-Free即无先验锚框,直接通过预测具体的点得到锚框。
前几年目标检测领域一直被基于锚的检测器所统治,此类算法的流程可以分为三步:
- 在图像或者点云空间预设大量的anchor(2D/3D);
- 回归目标相对于anchor的四个偏移量;
- 用对应的anchor和回归的偏移量修正精确的目标位置;
CornerNet直接预测每个点是左上、右下角点的概率,通过左上右下角点配对提取目标框。
Two-Stage(两阶段算法)
RCNN系列
RCNN系列网络是two-stage网络的经典之作,其中RCNN网络首次将CNN网络引入目标检测领域,是CNN在目标检测领域的开山之作。
下图是RCNN系列迭代示意图: