学习视频链接
yolov3的backbone更新
- 由darknet-19更新到了darknet-53,即有53层卷积层
- 更准:其和ResNet的最大区别是没有max pooling层,所有的下采样过程都是通过卷积层来实现的,可能是这个过程导致的检测效果提升
- 更快:和ResNet相比较,其卷积核的个数明显更少,因此运算量会更小
图片来源皆为视频链接up主制作
yolo v3 model structure
- 原论文中的bounding box priors是在标注好的数据集种通过聚类得到的9种不同大小的先验框,我的理解是数据集种框的大小种类可以大致分为九种,我们在这九种先验框的基础上去做预测会使得训练更加简单
-
在标注好的数据集中我们把所有框的尺度通过k-means聚类方法聚类成9种,将这九种预测框分配到三个不同尺度的预测层中,每个预测层恰好三种预测框
-
每个预测特征层的预测参数为N×N×[3 * (4+1+80)],因为每个尺度下需要预测三种不同大小的框,所以是3*
-
在预测输出1上预测较大目标,依次递减
目标边界框的预测
-
sigmoid函数使得预测框限制在当前的grid cell之内,不会全图乱跑
正负样本匹配
- 对于每个ground truth(标准答案,我们可以将其理解为人工标注的准确框)我们都会分配一个bounding box prior(先验框,由聚类得到的)
- 有几个GT就会分配几个正样本,我们将和GT的IOU值最大的bounding box prior作为正样本,将和GT的IOU值超过0.5但是不是最大的bounding box prior丢弃,剩下的则为负样本
-
如果bounding box prior没有被分配给GT,那么它既没有定位损失也没有类别损失,只有一个confidence score(置信度值)
-
在U版yolo中,为了增加正样本的个数,我们将iou大于设定值的预测框都视作正样本,这样可以降低网络训练难度
yolov3的损失计算
-
置信度损失:用逻辑回归的方法来进行计算,而逻辑回归方法一般都会用二值交叉熵进行计算
边界框的置信度 = 边界框中存在目标的概率 * 预测边界框与目标实际边界框的IOU
蓝色为bounding box prior(先验框),绿色为GTbox(即人工标注的正确边界框),将预测值应用到bounding box prior上即得到黄色的目标边界框(真正的预测框)
-
类别损失:同样使用二值交叉熵损失进行计算
-
定位损失
个人理解
- 置信度损失和定位损失都是针对预测框的损失,那么其具体区别是什么呢?
置信度损失主要是让网络选取更好的bounding box priors(先验框)来对GT进行匹配,而定位损失针对的则是使得先验框和GT的差距更小