单阶段目标检测
不需要产生区域建议框的就是单阶段目标检测算法,对于需要产生区域建议框的就是双阶段目标检测算法(two-stage)。
产生背景
之前 two-stage 方法如 R-CNN 把检测问题分成两部分,先生成候选区域(region proposal),再用分类器对区域分类,多阶段训练导致不易优化。
核心思想
之前 two-stage 方法如 R-CNN 把检测问题分成两部分,先生成候选区域(region proposal),再用分类器对区域分类,多阶段训练导致不易优化。
每个网格要预测B个bounding box(不是预先设置好的,而是运算出来的,不同于Faster RCNN所采用的Anchor,,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。
其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU(交并比)值。
每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。
加入是在Pascal数据集上训练的话:在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
训练过程
和R-CNN差不多
首先 ImageNet 1000类 竞赛数据集上对卷积层进行预训练
然后再把网络根据检测任务微调
检测流程
- 输入一幅多目标图像
- 将图像划分成多个网格
- 通过网格得到每个网格的分类概率,以及各网路预测的框+置信度
- 针对每个框,将概率与置信分数相乘,作为每个框特定于每个类的置信分数
- 输出位置和类别信息
总结优缺点
优点
- 首先,快!因为回归问题没有复杂的流程(pipeline)
- 可以基于整幅图像预测(看全貌而不是只看部分),与基于滑动窗口和区域建议不同,YOLO在训练和测试期间可以看到整个图像,因此它隐式地编码有关类及其外观的上下文信息。因为能看到图像全貌,与 Fast R-CNN 相比,YOLO 预测背景出错的次数少了一半。
- 学习到物体的通用表示(generalizable representations),泛化能力好。因此,当训练集和测试集类型不同时,YOLO 的表现比 DPM 和 R-CNN 好得多,应用于新领域也很少出现崩溃的情况。
缺点
- 空间限制:一个单元格只能预测两个框和一个类别,这种空间约束必然会限制预测的数量;
- 网络损失不具体:无论边界框的大小都用损失函数近似为检测性能,物体 IOU 误差和小物体 IOU 误差对网络训练中 loss 贡献值接近,但对于大边界框来说,小损失影响不大,对于小边界框,小错误对 IOU 影响较大,从而降低了物体检测的定位准确性。