yolov3详细讲解
YOLO v3总结了自己在YOLO v2的基础上做的一些尝试性改进,有的尝试取得了成功,而有的尝试并没有提升模型性能。其中有两个值得一提的亮点,一个是使用残差模型,进一步加深了网络结构;另一个是使用FPN架构的实现多尺度检测。
YOLO v3的创新点有哪些?
- 全新的网络结构:DarkNet-53
- 融合了FPN
- 用逻辑回归替代softmax作为分类器
主干网络改进–Darknet-53
YOLOV3在YOLOV2的基础上引入了残差模块,并进一步加深了网络,改进后的网络有53个卷积层,取名为Darknet-53
FPN
YOLOV3借鉴了FPN的思想,从不同尺度提取特征。相比YOLOV2,YOLOV3提取最后3层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出9种尺度的anchor box,将9种尺度的anchor box均匀的分配给3种尺度的特征图。
YOLOv3损失函数改进
YOLOv3对类别预测的代价函数进行了修改,并且没有用softmax。用了逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输入约束在0~1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类,这样一个框就可以预测多个类别,代价函数用的是sigmoid的交叉熵。
yolov3中loss由三个部分组成:
1.box loss:也就预测框x, y, w, h的误差,yolov3原版用MSE loss计算。
2.obj loss:预测框置信度误差,用BCE loss计算。
3.class loss:预测框类别误差,用BCE loss对每个类别进行计算,这里有的小伙伴会有疑问,为什么不用softmax loss呢,这是因为yolov3的作者考虑到多标签分类问题,如果用softmax就只能预测1类了。