前言🎆
上一章介绍了图像分类,这一章来学习一下目标检测上篇。简单来说,需要得到图像中感兴趣目标的类别信息和位置信息,相比于分类问题,难度有所提升,对图像的描述更加具体。在计算机视觉众多的技术领域中,目标检测(Object Detection)也是一项非常基础的任务,图像分割、物体追踪、关键点检测等通常都要依赖于目标检测。在目标检测时,由于每张图像中物体的数量、大小及姿态各有不同,也就是非结构化的输出,这是与图像分类非常不同的一点,并且物体时常会有遮挡截断,所以物体检测技术也极富挑战性,从诞生以来始终是研究学者最为关注的焦点领域之一。
一、目标检测是什么?
如何从图像中解析出可供计算机理解的信息,是机器视觉的中心问题。深度学习模型由于其强大的表示能力,加之数据量的积累和计算力的进步,成为机器视觉的热点研究方向。
计算机视觉的四大任务:目标分类,目标检测,语义分割,实例分割。难度逐渐递增,对图像特征的提取也更加精细。
- 分类(Classification):即是将图像结构化为某一类别的信息,用事先确定好的类别(string)或实例ID来描述图片。这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。
- 检测(Detection):分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而,检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。
- 分割(Segmentation):分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别(实例)意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。
二、目标检测的发展历程
目标检测发展的20年来,从传统的目标检测算法到基于深度学习的目标检测算法,目标检测的精度和速度不断提高,发展历程如下图所示:
- 传统方法 ❤️ :区域选取+特征提取+特征分类。在多尺度图像上应用多尺度窗口进行滑窗,每个roi位置提取出固定长度的特征向量,然后采用SVM进行学习判别。这在小数据上比较奏效;传统方法的工作主要聚焦于设计更好的特征描述子,将roi信息映射为embedding feature。本文不做介绍。
- Two-stage Detectors(两阶段目标检测器) 🧡 :诸如R-CNN,Fast R-CNN,Faster R-CNN到最新的Mask Scoring R-CNN等网络结构,都属于Two-stage检测方法。目标检测-上篇中介绍。
- One-stage Detectors(单阶段目标检测器) 💛 :从最早的OverFeat到现在的YOLO,SSD,RetinaNet,YOLOv2,CornerNet等都属于one stage目标检测方法。目标检测-下篇中介绍。
对比:双阶段精度高但速度慢,单精度速度快但精度稍逊。
三、区域卷积神经网络(R-CNN)系列
1.R-CNN
随着CNN网络的出现,目标检测进入了深度学习时代,目标检测技术越来越倾向于网络结构、损失函数和优化方法的设计,人们更加关注使用CNN网络自动提取出图像特征,代替了原来的手工设计特征。目标检测从“冷兵器”时代,过渡到“热兵器”时代,从