YOLOv3 精度复现的训练技巧
1. 目标检测中的评价指标mAP
目标检测中主要以mAP为评价指标,说到mAP,需提前了解TP、FP、FN、TN评价指标
TP:(实际为正样本,预测也为正样本)对ground-truth框正确的检测(分类正确 and 预测框体与GT框体的IOU大于预设的阈值(如果阈值是0.5,后面对应AP50))。
FP:(实际为负样本, 预测为正样本)对不存在的东西做了错的预测 or 预测框体与GT框体的IOU小于预设阈值。
FN:(实际为正样本,预测为负样本)漏检测。
TN:(实际为负样本,预测也为负样本)在目标检测里是不考虑TN的,因为他有无数个(一张图片可以画无数个框)。
AP值为 P - R 曲线的面积(横坐标为(召回率), 纵坐标为P(精确率))
举个例子,假设实际有真实标签有10个box,PR曲线为右图,曲线面积为AP值。
AP50 为 IOU预设的阈值为0.5 时的AP值,AP75 为 IOU预设的阈值为0.75AP值。
所以,可以得出AP50对应的TP值 要比 AP75对应的TP值要大, 所以同样条件下AP50的 P(精确率) 要比AP75的P(精确率) 大, 所以同样条件下,AP50一定大于AP75 。
mAP = (AP50 + AP55 + AP60 + AP65 + AP70 + AP75 + AP80 + AP85 + AP90 + AP95) / 10
以上的AP、mAP,均为单类AP,mAP,多类的精度指标为所有类别取平均。
2.复现精度所用的小trick。
(1)EMA测试
△w = - [d (loss) / d(w) * (1- momentum) + w* momentum )]* lr
w = w + △w
w_ema = w_ema * ema_decay + w * (1 – ema_decay)
多维护一个w_ema变量,计算loss用w计算,所以ema不影响训练。
self._config.moving_ave_decay = 0.9999
ema_decay值先小后大。 刚开始让w_ema多更新点。
(2) 最后一层初始化bias加负偏置
输出的85维 前四维box, 第五维 obj_conf 后80维 class_conf,目标检测真实框的数量有限,所以预测的置信度 应少数较高,其余地方均较低, bias加负偏置,配合这一点。
(3) 遇到分阶段训练时,如第一阶段只训练yolo_head, 第二阶段训练全部参数。
注意:两个阶段optimizer要用2个对象,否则第二阶段会继承第一阶段的维护的w_momentum变量,导致精度不达标。
(4)训练时loss极小概率出nan的情况, 大概率是分母没加epsilon, 计算iou那很大可能。
- 点赞
- 收藏
- 关注作者
评论(0)