第一篇 目标检测与分割
“人不过是肉做的机器,而钢铁做的机器有一天也会思考。”
——Marvin Lee Minsky
目标检测是计算机视觉领域的一个重要方向,分为单阶段检测和双阶段检测。单阶段检测是一种直接从图像中提取目标位置和类别的目标检测方法,包括YOLO和SSD等。双阶段检测是一种将目标检测分为两个阶段的方法,包括Faster R-CNN和Mask R-CNN等,第一阶段是提取图像特征,第二阶段是在图像特征上进行目标检测。总的来说,在对速度要求较高的场景下,单阶段检测可能更合适;在对准确度要求较高的场景下,双阶段检测可能更适合。特征融合策略是目标检测的一个特别重要的研究方向,其对于解决分类和检测对特征深浅需求不同的问题、提升小目标的检测效果是非常有帮助的。特征融合是在特征金字塔网络(feature pyramid network,FPN)中提出的,FPN采用的是一个自顶向下的融合策略,即将深层小分辨率的特征图不断上采样,然后和浅层的特征图组合到一起。路径聚合网络(path aggregation network,PANet)是加强版的FPN,它通过在FPN的基础上增加一条自底向上的路径,进一步增强骨干网络的表征能力。基于神经架构搜索(neural architecture search,NAS)的特征金字塔网络(NAS-FPN)则使用强化学习技术对特征融合的策略进行搜索,得出一个异常复杂的融合结构,它不仅包含PANet的自顶向下和自底向上这两条路径,还包含一条捷径(shortcut)连接。EfficientDet提出的双向特征金字塔网络(bidirectional feature pyramid network,BiFPN)是更为清晰的包含自顶向下、自底向上和捷径连接的特征融合网络,该网络还可以对网络的宽度、深度和图像分辨率之间的缩放关系进行搜索。
目标检测的另一个研究方向是损失函数。损失函数分为两条线路,一条是Ln类损失函数,另一条是交并比(intersection over union,IoU)损失函数。在Ln类损失函数中,最开始使用的是均方误差(mean square error,MSE)损失函数,而Fast R-CNN使用的Smooth L1损失函数使得训练过程中梯度爆炸的现象显著减少。Focal Loss对正负样本的不均衡和难易样本的不均衡起到了显著的改善作用。IoU损失函数是以更能反映实际检测效果的IoU为基础设计的一系列损失函数。首先,UnitBox中提出的IoU损失直接使用了IoU作为损失函数,IoU具有尺度不变性,可提升对小尺寸目标的检测效果。GIoU(generalized-IoU,广义交并比)损失解决了IoU损失在检测框和真值框没有重合区域的时候值均为1的问题。因为GIoU使用了闭包作为惩罚项,它存在通过增加预测框的面积来减小损失值这一“走弯路”问题,所以DIoU(distance-IoU,距离交并比)损失和CIoU(complete-IoU,完全交并比)损失直接使用预测框和目标框的欧氏距离作为惩罚项,实现了比GIoU损失收敛更快的效果。Focal-EIoU损失借鉴了Focal Loss的思想,并将其与设计的EIoU(efficient-IoU,高效交并比)损失进行了整合,它的核心是由EIoU损失和Focal Loss共同作为损失函数,EIoU损失解决了CIoU损失中宽和高不能同增同减的问题,Focal L1损失则解决了高、低质量检测框的回归不平衡问题。
在计算机视觉领域,分割任务是仅次于分类任务和检测任务的第三重要的任务,但它的难度远高于前两者。完成分割任务需要为图像中的每像素分配一个类别标签,根据类别标签的情况分割任务可分为3类,按照难度从小到大排列,它们依次是语义分割、实例分割和全景分割,如图6.1所示。其中,图6.1(b)所示是语义分割(semantic segmentation)的效果,根据图中物体的类别为其设置标签,同一类别的不同物体的类别标签是相同的;图6.1(c)所示是实例分割(instance segmentation)或者叫作目标分割的效果,根据检测到的实例进行分割掩码的预测,每一个实例都拥有一个不同类别的分割掩码,但是,对于非实例我们统一为其标注背景掩码,我们在1.6节介绍的Mask R-CNN的分割分支便是实例分割;图6.1(d)所示是全景分割(panoptic segmentation)的效果,它是语义分割和实例分割的结合体,它不仅要区分每一个实例,还要为图像中的每一像素设置标签。