YOLOv3学习
效果逆天!(在当时2018年)发布了YOLOv3后,作者Redmon就再也不发了,他说因为目标检测效果好被用到了军事领域,不是他希望看到的。但是抵挡不住别人发,所以后面的很多很多版本都是其他作者发的。
相对于v2的改进
先验框改变
v1版本只有2个随机的先验框。v2版本用聚类生成了5个先验框,并没有管大小。
- v3版本的先验框选择了3中不同大小的尺度,每个尺度聚类了3中先验框比例,最终每个单元格生成9种先验框。
网络结构改变
-
特征融合
很像FCN(图像分割的开山之作)
-
网络最后一层(13 * 13)的特征图尺寸小,感受野更大,所以会更加擅长做大目标的检测。中间部分的特征图(26 * 26)的特征图尺寸中等,感受野也中等,擅长做中等目标检测。开始部分的特征图(52 * 52)的特征图尺寸大,感受野更小,擅长做小目标检测。
-
于是作者就采用了这三个尺度的特征图分别预测不同大小的目标。
-
但是前面的特征图的学习效果没有最后一层的好,所以作者提出将前面的特征图和后面的特征图进行融合。如下面的右图,将后面13 * 13的特征图进行上采样后和中间26 * 26的特征图进行融合,来预测中等目标。
-
-
残差连接块
ResNet是2015年提出的一个网络,主要就是解决网络越深(56层)效果越差的问题。比较深的网络加入残差块可能不会让网络变好,但一定不会变差,而只要有一点变好就算更深的网络层没有白加。现在几乎所有的网络模型都用了残差块。
- 将普通卷积块变成了残差卷积块
-
核心网络架构
- 没有池化层,用stride为2的卷积 来代替池化。(现在很多网络也这么用)
- 特征图融合部分的上采样用的是线性插值。
- 输入进来的图片会每个尺度都预测,那个尺度预测的好就选哪个。
一个物体多个标签
- 一个物体可以有多个标签,比如一张图片中的狗的标签有狗、哺乳动物、金毛等各种都是这只狗的标签。
- 作者使用的是每个标签都做一个二分类,是这个标签的概率是多少。然后设定一个阈值,只要是概率大于0.7是这个标签的,就作为这张图片中物体的标签。