YOLOv2的缺点:1. 对单个目标不能预测多标签的目标; 2. 对小目标检测仍然性能不佳。
YOLOv3对此做出了较多的改进,具体如下:
- 网络将单标签多分类的softmax层换成用于多标签多分类的逻辑回归层: 逻辑回归层主要用到sigmoid函数,该函数可以将输入约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类。
- 采用多个scale融合的方式做预测:为了进一步提升对小目标的检测性能,yolov3采用了类似于Faster-RNN的FPN做法,引入了三种尺寸的feature map,分别是13x13,26x26,52x52。每种尺寸的feature map对应3种规格的anchor。每个gridcell预测tensor尺寸为3x(5 + 80),COCO数据中有80类,5的组成继续是表示bbox的4个数值和1个confidence score。
- 网络结构(Darknet-53):采用是全卷积的网络结构,同时引入了residual结构。
- 损失函数:损失函数也做了一定的修改,如下所示
仍然是三类损失,包括bbox带来的损失、object带来的损失、分类带来的损失。在论文中,对于后两者的损失采用了BCE的loss形式,实际上在代码中,仍然使用了L2loss。因为,对于分类而言,二者的导数实际上是一致的。