何国忠
(云南大学软件学院 云南昆明 650504)
计算机视觉的一个重要任务是目标检测。目标检测主要是对输入图像中的物体类别和位置进行判断,实质上是图像分类和目标定位的结合,是复杂或高级视觉任务的基础,如图像分割、目标跟踪、事件检测和活动识别[1]。广泛应用于人脸识别、无人驾驶等领域。目标检测算法主要分为传统检测算法和基于深度学习的检测算法。现如今,机器学习技术的发展渐渐成为主流,人们广泛关注于基于深度学习的目标检测算法,出现了很多结构简单、运行速度快、检测精度高的网络模型,使得这些算法能得到大规模应用[2]。
在深度学习算法发展起来之前,传统目标检测技术处理流程通常划分为三个阶段:首先是进行图像中目标物体的候选区域选择,接着使用Haar[3]、HOG[4]等特征提取算法提取得到图像目标特征,最后是运用支持向量机等常用分类器对候选区域提取到的特征进行目标类别的划分,传统目标检测技术处理流程如图1所示。
图1 传统目标检测算法处理流程
近年来,随着机器学习技术的大力发展,基于神经网络的深度学习检测方法得到了广泛应用,运用深度学习技术的目标检测算法通常根据对检测速度和精度的需求不同被划分为两类:一类是以R-CNN为代表的双阶段(two stage)目标检测算法;另一类是以YOLO、SSD为代表的单阶段(one stage)目标检测算法。
Girshick团队提出第一个基于深度学习的目标检测算法R-CNN,通过验证,在VOC07数据集上,mAP达到了66%的水平。该算法步骤为:1.使用选择性搜索(SS)算法,于一张检测图像中得到数个候选框(一般为两千个);2.每个候选区域框中把特征图缩放至同一尺度,使用卷积神经网络(CNN)提取特征;3.将提取出的特征信息送入SVM分类器,判断是否属某个特定类;4.使用回归器来继续改变图像待选区域框位置。
YOLO的网络结构延续了GoogleNet的核心思想,利用卷积层来提取图片特征,利用全连接层来得到最后的检测结果[5]。YOLO将输入图像分成SxS个网格,每个网格负责检测中心落在该网格的物体。在YOLO算法中虽然每个检测网格只预测1个边框,但其中包含了一组类别概率预测值。最后只选择IOU最高的检测边框作为输出结果。如果一个网格中包含多个物体,YOLO只能检测出其中一个物体。
SSD借鉴了Faster R-CNN中的anchor机制,在特征图上生成一系列不同大小和长宽比的默认框,同时采用困难样本挖掘方法对负样本进行采样使得训练过程中正负样本的比例维持在1∶3。SSD对每一个默认框输出相应的位置偏移以及类别置信度。SSD的检测速度比R-CNN快,检测精度相比较YOLO来说有提升,但是对小物体的检测效果仍然不够理想。
随着计算机技术的发展,运用深度学习技术来实现目标检测的算法开发获得了突飞猛进的进步[6-7]。从R-CNN、YOLO、SSD发展到现如今,基于深度学习技术的图像目标检测算法流程变得愈发简洁快速,同时检测准确度也在逐渐提高。