1. yolov1特点
- 将目标检测转化为回归问题,直接从图像像素到边界框坐标和类别概率, 是一个端到端目标检测模型,速度非常快。
- 网络使用整个图像的特征来预测每个边界框。它还可以同时预测图像中所有类的所有边界框。
- 将输入图像划分为一个S × S网格。如果一个对象的中心落在一个网格单元中,该网格单元负责检测该对象。
- 对于小物体检测效果不好。
2. 如何进行检测
- yolov1使用从整张图片提取的特征中去预测每个边界框。
- 可以同时预测所有类别的所有边界框。
- yolov1把图片分成 S × S S \times S S×S的网格,如果物体的中心落在其中的一个网格上,那么这个网格就负责预测这个物体。
- 每个网格预测 B B B个边界框,还有这些边界框的置信度得分,置信度反映了这个模型预测的边界框包含物体还有预测的的准确率。
- yolov1定义了置信度得分公式: P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object) *IOU_{pred} ^ {truth} Pr(Object)∗IOUpredtruth, 其中 P r ( O b j e c t ) Pr(Object) Pr(Object)表示是否预测框是否包含物体, I O U p r e d t r u t h IOU_{pred} ^ {truth} IOUpredtruth表示真实框和预测框的IOU。
- 每个边界框有5个预测值: x , y , w , h x, y, w, h x,y,w,h和置信度。 x , y x, y x,y表示的是中心坐标,是相对于每个单元格左上角的坐标的偏移量, w , h w, h w,h是预测框的宽高,是相对于整个图片而言的,因此 x , y , w , h x, y, w, h x,y,w,h 理论上的范围是[0, 1]之间的。
- 每个网络还要预测 C C C 个条件类别概率,即 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(Classi∣Object)。
- 在测试时,将条件类概率与边界框的置信度预测相乘,得到每个边界框的类别置信度得分,这些分数编码了该类出现在框中的概率以及预测框适合的程度。公式为: P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(Classi∣Object) * P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object) *IOU_{pred} ^ {truth} Pr(Object)∗IOUpredtruth = P r ( C l a s s i ) Pr(Class_i) Pr(Classi) * I O U p r e d t r u t h IOU_{pred} ^ {truth} IOUpredtruth
3. 网络的设计
yolov1采用卷积神经网络来进行特征提取,网络结构是受到GooleNet模型设计的。yolov1有24个卷积层,还有2个全连接层,yolov1使用了1 x 1卷积减少通道数 + 3x3 卷积的结构代替了GooleNet的Inception结构,其中激活函数采用的是Leaky ReLU。最后输出的是7 x 7 x (20 + 2 x (4 +1))的预测维度。其中7 x 7代表的是分成7 x 7的网格,20代表的是PASCAL VOC数据集有20个类别,2代表每个网络预测2个边界框,4代表 x , y , w , h x, y, w, h x,y,w,h 的四个值,1代表置信度得分。
4. 损失函数
因为yolov1采用的是均方差损失函数。
其中,
λ
c
o
o
r
d
=
5
\lambda_{coord}=5
λcoord=5,
λ
n
o
o
b
j
=
0.5
\lambda_{noobj}=0.5
λnoobj=0.5,边界框的损失中的
I
i
,
j
o
b
j
I^{obj}_{i, j}
Ii,jobj 指的是第
i
i
i 个单元格存在目标,且该单元格中的第
j
j
j 个边界框负责预测该目标,
I
i
,
j
n
o
o
b
j
I^{noobj}_{i, j}
Ii,jnoobj则表示不包含物体。
6. 代码演示
代码来自以下大神
网址:https://www.maskaravivek.com/post/yolov1/
7. 数据集下载
VOC2007数据集
链接:https://pan.baidu.com/s/1mhk3OItyGt5CuRcX8Nj3cw
提取码:a697