性能曲线
MSCOCO数据集的测试结果:
模型结构
yolov5引入了depth_multiple和width_multiple两个缩放系数来控制网络的层数和channel。
yolov5s:
depth_multiple: 0.33
width_multiple: 0.50
yolov5m:
depth_multiple: 0.67
width_multiple: 0.75
yolov5l:
depth_multiple: 1.0
width_multiple: 1.0
yolov5x:
depth_multiple: 1.33
width_multiple: 1.25
yolov5模型大小:
正负样本定义
yolov3/yolov4的正负样本定义:
1.保证每个GT有一个唯一的anchor进行对应,匹配规则为IOU最大(没有阈值),选取出来的即为正样本;
2.其余为负样本,但是得从其中选取IOU>0.5(设定阈值)的作为忽略样本,因为负样本中仍有大量IOU与GT很大但是质量不是很高,作为负样本也不合适;
3.正anchor用于分类和回归的学习,正负anchor用于置信度confidence的学习,忽略样本不考虑。
# 置信度loss
# 如果该位置本来有框,那么计算1与置信度的交叉熵
# 如果该位置本来没有框,而且满足best_iou<ignore_thresh,则被认定为负样本
# best_iou<ignore_thresh作为权重系数用于限制负样本数量(ignore_mask)
confidence_loss = object_mask * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True)+ \
(1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask
yolov3/yolov4的正负样本定义小细节:
GT需要利用max iou原则分配到不同的预测层yolo-head上去,然后在每个层上单独计算正负样本和忽略样本。不存在某个GT会分配到多个层进行预测的可能性,而是一定是某一层负责的。
yolov5的正负样本定义:
yolov5相比上一代增加了正样本anchor数目,这样可以显著加速收敛。
计算流程:
1.将每个boundingbox重复3份(每层有3个anchor),方便和每个位置的3个anchor单独匹配;
2.没有采用IOU最大的匹配方法,而是通过计算该boundingbox和当前层的anchor的宽高比,如果最大比例大于4(设定阈值),则比例过大,则说明匹配度不高,将该bbox过滤,在当前层认为是背景;
3.对于剩下的bbox,计算其落在哪个网格内,同时利用四舍五入规则,找出最近的两个网格,将这三个网格都认为是负责预测该bbox的,可以发现粗略估计正样本数相比前yolo系列,至少增加了三倍。
yolov5的正负样本定义小细节:
(1) 不同于yolov3和v4,其gt bbox可以跨层预测即有些bbox在多个预测层都算正样本
(2) 不同于yolov3和v4,其gt bbox的匹配数范围从3-9个,明显增加了很多正样本(3是因为多引入了两个邻居)
(3) 不同于yolov3和v4,有些gt bbox由于和anchor匹配度不高,而变成背景
iou-Loss
回归框loss的发展路线:Smooth L1 Loss—— IoU Loss(2016)——GIoU Loss(2019)——DIoU Loss(2020)——CIoU Loss(2020)