One-Two-StageAlgorithm两阶段算法包括两个阶段:候选框选择和目标分类/位置修正。这两个阶段的不同处理方式构成了不同的算法方案。1.R-CNN算法2014年,R.Girshick等人。提出了R-CNN算法。R-CNN算法的思路很简单。首先基于SelectiveSearch的方法从原始图像中筛选出若干个候选框,然后将每个候选框内图像缩放的固定尺度送入卷积网络提取特征,最后通过支持向量机.(SVM)方法对特征进行分类,判断候选框中的图像是背景还是我们关心的物体类型。在VOC2007数据集上,R-CNN算法与之前的检测算法相比,性能有显着提升(从33.7%提升到58.5%),是检测算法的里程碑式突破。R-CNN虽然在算法性能上有了很大的进步,但它的缺点也非常明显,因为它需要从2000多个候选框中提取特征,所以效率很低,后来设计了各种算法来解决这个问题。提出了一系列改进方案。2.SPP-Net算法2014年何玉明等人提出了SPP-Net(SpatialPyramidPoolingNetworks,空间金字塔池化网络)算法。R-CNN算法要求输入到卷积网络提取特征的子图像大小是固定的。例如,Alex-Net要求输入图像大小固定为224像素×224像素,而SPP-Net算法则取消了这一限制。SPP-Net算法基于空间金字塔池化层(SPP层),无论输入子图像的大小如何,它将子图像采样为固定大小的图像。在使用SPP-Net进行检测的过程中,只需要对原图进行一次卷积网络计算。在得到整幅图像的特征图后,通过空间金字塔池化层将每个候选框区域(ROI)划分为三个区域。采样成相同大小的子图像,并将每个相同大小的子图像送入后续网络进行特征提取,提取的特征具有相同的维度,最后送入全连接层进行分类。SPP-Net不需要进行多次卷积网络计算。与R-CNN相比,在算法精度不变的情况下,算法速度大幅提升了20倍。3.FastR-CNN算法2015年,R.Girshick等人提出了FastR-CNN算法,本质上是在R-CNN和SPP-Net基础上的进一步改进。FastR-CNN可以同时预测目标在网络中的分类概率和位置偏移量。在VOC2007数据集上,FastR-CNN将mAP(平均平均精度)从58.5%提高到70.0%,算法速度比R-CNN快200倍。虽然FastR-CNN的性能和速度相比R-CNN和SPP-Net有了明显的提升,但是整体速度仍然受到候选框检测算法的制约。为了解决这个问题,FasterR-CNN算法诞生了。4.FasterR-CNN算法2015年,S.Ren等人。提出了FasterR-CNN算法。FasterR-CNN是第一个端到端算法,也是第一个接近实时深度学习的目标检测算法。使用ZF-Net网络骨架,在VOC2007数据集上,mAP达到73.2%,算法速度达到17fps。FasterR-CNN的主要贡献是使用卷积网络来检测候选框。检测候选框、预测目标类别、回归目标位置偏移、共享底层卷积特征,将整个算法过程集成到一个完整的端到端学习框架中。FasterR-CNN突破了候选框检测的速度瓶颈,是一种非常重要的两阶段算法。5.FPN算法2017年,Lin等人。在FasterR-CNN的基础上提出了FPN(FeaturePyramidNetworks,特征金字塔策略)算法。在FPN之前,大多数深度学习检测器都是基于卷积网络的最顶层特征图计算的。深层特征包含全局信息,但削弱了细节信息。使用深度特征在小目标检测中有很大的劣势,尤其是在精确定位方面。FPN采用自上而下的结构和侧边连接的方式融合深层特征和浅层特征,使特征既包含全局信息又包含细节信息。此外,检测计算也是基于特征金字塔的多层特征图,具有更强的多尺度适应性。基于FPN的FasterR-CNN算法在COCO数据集上取得了最好的性能。目前,FPN已成为构建检测算法的基本策略。两阶段算法一阶段算法与两阶段算法的主要区别是没有单独的候选框筛选阶段,而是直接返回目标的位置坐标和分类概率。常用的one-stage算法如下。1.YOLO算法2015年,R.Joseph等人提出了YOLO(YouLookOnlyOnce)算法,这是深度学习领域第一个单阶段算法。从名字就可以看出,YOLO并没有两阶段算法中提取候选框和验证分类这两个步骤。整个预测过程可以通过将图像送入神经网络来完成。YOLO算法的实现是先将原始图像划分为网格,然后基于网格的每个单元格回归目标的类别概率和位置坐标。作为一种单阶段算法,YOLO最大的优势之一就是它的速度。在VOC2007数据集上,mAP为63.4%,检测算法速度可达45fps;YOLO的加速版mAP为52.7%,速度甚至可以达到惊人的155fps。不过,YOLO也有不尽如人意的地方。目标位置的精度比两阶段算法要低,尤其是在一些小目标的检测上,效果明显更差。由于存在这些问题,后续版本的YOLO等one-stage算法致力于更好的解决上述问题。2.SSD算法2015年,W.Liu等人。提出了SSD(SingleShotMultiBoxDetector)算法,这是深度学习领域的第二个单阶段算法。与仅使用最顶层特征图进行预测的方法不同,SSD的主要贡献是引入了基于多尺度特征图的检测策略,显着提高了算法的性能,尤其是在小目标检测方面。与YOLO相比,它有明显的提升,在VOC2007数据集上,mAP达到了76.8%。3.Retina-Net算法Retina-Net算法的主要目的是解决正负样本不平衡的问题。传统的one-stage算法在提取训练样本的过程中,背景样本所占比例远大于目标样本。正负样本的极度不平衡会导致模型在训练过程中对目标样本的关注度较低,这也是一阶段算法准确率低于两阶段算法的主要原因。Retina-Net算法引入了损失函数,其核心思想是在训练过程中对传统的交叉熵损失进行加权,使得样本误分类造成的损失占最终损失的比例更大。损失函数的引入使得one-stage算法能够在保持速度优势的同时保证目标检测的准确性。4.FCOS算法2019年,沉春华团队提出了FCOS(FullyConvolutionalOne-Stage)算法。与SSD和其他单阶段算法不同,FCOS是一种“anchorfree”方法。它不需要预先设置锚点来返回目标位置。它在待检测目标的尺度和形状变化较大的场景中有重要的应用。此外,FCOS算法在具体实现过程中还采用了FPN策略,对多尺度目标具有较好的检测效果。作者简介:涂明,资深数据架构师、人工智能技术专家,目前就职于腾讯,曾就职于阿里。对大数据、自然语言处理、图像识别、Python、Java等相关技术有深入研究,积累了丰富的实践经验。金智勇,计算机视觉算法专家,在计算机视觉领域耕耘12年。目前就职于百度,曾任职于阿里、三星等知名高科技企业。业务领域涵盖增强现实、人脸识别、图像美化、智能交通、工业质检等方向,具有丰富的算法研究和实施经验。本文节选自《深度学习与目标检测:工具、原理与算法》,经发布者授权发布。(书号:9787111690344)
