当前位置:
首页 >
论文笔记:YOLO
发布时间:2025/3/21
48
豆豆
原文:You Only Look Once: Unified, Real-Time Object Detection
YOLO
1、四个问题
要解决什么问题?
- 对于目标检测任务来说,速度较快的算法性能较弱,然而性能较强的算法(如:R-CNN系列)耗时则更多,很难达到实时性的要求。
- 大多数像RCNN这类的算法流程是,第一步先获取候选区域(region proposal),接着进行后处理(消除重复框,对候选框进行分类等等)。这样的操作往往很慢也很难优化,因为每个独立的模块都要单独训练,实时性要求也达不到。
用了什么方法解决?
- 将目标检测直接转换为一个回归问题,直接使用一个神经网络来预测候选框和物体类别。
效果如何?
-
YOLO网络的速度有很大提高。
-
基本的YOLO网络可以做到45FPS。
-
对于较小的Fast YOLO模型,帧数可以达到155FPS,且相比于其他实时检测模型效果更好。
-
对背景的分类错误少了很多。
还存在什么问题?
- YOLO在准确率上还比不过state-of-the-art的模型。
- 与R-CNN系列相比,候选框的预测有较大误差,且对新数据的泛化能力较弱。
- 对于数量较多的小物体,如一群小鸟,识别效果不好。
2、论文概述
2.1、总体框架
2.2、统一检测(Unified Detection)
- 将输入图像划分为S×SS \times SS×S个单元格(grid cell)。如果某个物体的中心在某个单元格内,那么那个单元格就负责检测那个物体。
- 每个单元格(grid cell)要预测BBB个bounding box,每个bounding box除了要预测框的位置外,还要预测一个置信率(confidence)。具体来说,每个bounding box包含5个预测值:xxx、yyy、www、hhh和置信率(confidence)。
- (x,y)(x, y)(x,y)表示的是预测的bounding box的中心点坐标。
- www、hhh表示的是bounding box的宽和高。
- confidence包含了两重信息:
- 有多确信这个单元格(grid cell)内有物体?
- 预测的bounding box有多精确?
- 计算公式:Pr(object)∗IOUpredtruthPr(object) * IOU_{pred}^{truth}Pr(object)∗IOUpredtruth。
- 如果这个单元格内有物体,则Pr(object)Pr(object)Pr(object)取1,否则取0。
- IOUpredtruthIOU_{pred}^{truth}IOUpredtruth表示的是预测的bounding box与ground truth之间的重叠比例,它这里用的是intersection over union (IOU) 这个指标。
2.3、网络结构
- 网络结构如下:
2.4、训练
- 先在ImageNet上对前20个卷积层接上一个平均池化层和全连接层进行预训练。
- 随后保留那20个卷积层,再加上4个新的卷积层和2个全连接层,新加的层使用随机权重初始化。
- 由于还需要对细粒度视觉信息进行分类,故将输入图片的分辨率调整为448×448448 \times 448448×448(原始分辨率为224×224224 \times 224224×224)。
- bounding box预测的中心点坐标xxx和yyy用对应网格的偏移归一化到0-1之间;bounding box预测的宽高w和h用整幅图像的宽高归一化到0-1之间。
- 网络中使用leaky ReLU替代ReLU。
- 在计算loss时,作者最初全部采用了平方和误差 (sum-squared loss)。
- 采用平方和误差的原因是,它很容易优化。
- 然而,也存在几个问题:
- 将分类误差和定位误差看做同等重要显然是不靠谱的。
- 另外在一幅图像中,大多数网格不含有任何对象。这会将这些单元格的置信率(confidence)推为0,由于数量众多,很可能会掩盖掉含有目标的单元格反向传播回来的梯度。结果就是导致模型不稳定,甚至发散。
- 如下图所示,可以看出,在y=xy=\sqrt{x}y=x上取两个邻近的点做差值。如果值比较小,y=xy=\sqrt{x}y=x在较小的地方变化率相对更大,那么这个差值也会更大一些。这样子反应到loss上,就是在较小的box上小偏差会造成更大的loss,而较大的box上小偏差得到的loss则没那么大。
- loss函数完整形式:
- 1iobj\mathbb{1}_{i}^{obj}1iobj表示目标是否出现在网格单元iii中 ,1ijobj\mathbb{1}_{ij}^{obj}1ijobj表示网格单元iii中的第jjj个边界框预测器“负责”该预测。
- 这个loss中,只有当某个单元格中有对象的时候才会计入分类错误,即对分类错误进行惩罚。
- 只有当某个 box predictor 对某个 ground truth box 负责的时候,才会对 box 的 coordinate error 进行惩罚,而对哪个 ground truth box 负责就看其预测值和 ground truth box 的 IoU 是不是在那个 cell 的所有 box 中最大的。
2.5、推断(测试)
- 对于每张图片,使用如下评分公式获取每个bounding box对应不同类的confidence结果,即class-specific confidence scores :
Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruthPr(Class_i | Object) * Pr(Object) * IOU_{pred}^{truth} = Pr(Class_i) * IOU_{pred}^{truth}Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth
- Pr(Object)∗IOUpredtruthPr(Object) * IOU_{pred}^{truth}Pr(Object)∗IOUpredtruth就是每个bounding box的confidence。
- Pr(Classi∣Object)Pr(Class_i | Object)Pr(Classi∣Object)为分类结果。
- 基于class-specific confidence scores设置阈值筛选bounding box,最后再使用非极大抑制(NMS)去除重叠的框。
2.6、资料推荐
总结
- 上一篇: 论文笔记:PointSIFT
- 下一篇: 论文笔记:Inception v1