Page 85 - 软件工程与项目管理
P. 85
第三章 计算机视觉与大数据
据集上取得了最优的性能。当前,FPN 已经成为构建检测算法的基础策略。
(二)一阶段算法
一阶段算法和两阶段算法最主要的区别,就是没有单独的候选框筛选阶段,
而是直接回归目标的位置坐标和分类概率。常用的一阶段算法如下。
1. YOLO 算法
2015 年,R.Joseph 等人提出了 YOLO(You Look Only Once)算法,这是首个
深度学习领域的一阶段算法。从名字就可以看出,YOLO 没有两阶段算法中提取
候选框和验证分类两个步骤,图像送入一个神经网络就能完成整个预测过程。
YOLO 算法的实现方案是,先把原始图像划分成网格,然后基于网格的每个单
元格回归目标的类别概率和位置坐标。作为一阶段算法,YOLO 的一个最大优
点就是速度快,在 VOC2007 数据集上,mAP 为 63.4%,检测算法速度可以达到
45fps;YOLO 的加速版本 mAP 为 52.7%,速度甚至可以达到惊人的 155fps。不过,
YOLO 也有不尽如人意的地方,在目标位置的精度上比两阶段算法有所降低,尤
其是在对一些小目标的检测方面,效果明显变差。正因为存在这些问题,后续
YOLO 的版本以及其他一阶段算法,都致力于更好地解决上述问题。
2. SSD 算法
2015 年,W.Liu 等人提出了 SSD(Single Shot Multi Box Detector)算法,这是
深度学习领域的第二个一阶段算法。与仅使用最顶层特征图进行预测的方法不同,
SSD 最主要的贡献是引入了基于多尺度特征图的检测策略,显著提升了算法的性
能,尤其是在小目标检测方面,相比YOLO有了明显的改善,在VOC2007数据集上,
mAP 达到了 76.8%。
3. Retina-Net 算法
Retina-Net 算法的主要目的是解决正负样本不平衡的问题。常规的一阶段算
法在提取训练样本的过程中,背景样本的比例远大于目标样本的比例。正负样本
的极度不平衡会导致训练过程中模型较少关注目标样本,这也是一阶段算法的精
度低于两阶段算法的主要原因。Retina-Net 算法引入了损失函数,其核心思想是
在训练过程中,对传统的交叉熵损失加上权重,使得错分的样本产生的损失在最
终损失中占有更大的比例。引入损失函数,使得一阶段算法在保持速度优势的前
提下,保证了目标检测的精度。
75
75

