文章目录
1. 介绍
本文将对YOLOv1框架进行详细的解读,将针对我看论文的一些疑问进行解读,仅作为个人笔记。
因为还没有读代码,因此只针对论文进行理解性解读,有错误的地方欢迎指出。
论文地址:https://arxiv.org/pdf/1506.02640.pdf
项目地址:https://pjreddie.com/darknet/yolo/
GitHub:https://github.com/AlexeyAB/darknet
参考博文1:https://zhuanlan.zhihu.com/p/24916786?utm_source=qq&utm_medium=social
参考博文2:https://blog.youkuaiyun.com/x_iunknown/article/details/83064787
2. 检测框架
相比于Fast-RCNN, Faster-RCNN 等,yolo系列秉承着一个流程,一个end-to-end的思想,没有分成两步进行(提取proposal+识别),而是采用如下流程,简洁明了。
将图片分成网格状 -> 每个网格预测若干个矩形框 -> 判断矩形框里是否有物体
2.1 图片划分成网格
将一幅图片划分成 7x7的网格,S=7.
2.2 网络设计
网络如下,借鉴了Googlenet的思想, 但没有用inception,转用1 x 1 卷积,3 x 3 卷积, 1 x 1卷积,这样有个好处,降维,减少计算量,比直接用3 x 3计算量小很多。
网络具体细节不解释了,看不懂图的话,请面壁思过。
预训练网络:输入224 x 224, 数据集imagenet
后面训练的网络:输入变成448 x 448, 数据集pacal voc
最后输出为 7x7x30:
【问题1】:为什么为30?
box1, box2, confidence1, confidence2 20个分类,其中box = (tx, ty, tw, th)。其实这边就体现出一个问题了,一个划分出的小格子里只能预测一个类,拿要是一个格子里有两个类呢?换句话说两个box都有效,但是yolov1只取一个类,因此可想而知,recall肯定不会太好,会漏掉很多物体。后面的yolo版本对这个问题会有改进。
2.3 训练
需要注意的几点
- 训练样本构造
- 448 x 448 输入(提高分辨率,增加小物体检出率)
- leaky 激活函数
- loss 函数设计
- 防止过拟合做的trick
2.3.1 训练样本构造
构造什么?就是最后那个30维向量。以如下图示为例
首先明确构造思想,中心点所在的网格对预测的对象负责。
蓝点对狗狗负责,黄点对自行车负责,红点对汽车负责。其他的点都不预测任何对象。
-
box 位置构造