前言
考虑到不用数据集对于评价指标的需求不同,当数据集mAP0.5过高,直逼1时,可考虑添加mAP0.75作为评价指标之一。
目前比较先进的Yolov5、Yolov7和Yolov8对于如何添加mAP0.75已经有了成熟的指导教程,这里也给出我尝试过较为成功的教程,供大家学习参考。
Yolov7添加mAP0.75教程链接:https://blog.csdn.net/qq_44177768/article/details/129894379
Yolov8添加mAP0.75教程链接:https://blog.csdn.net/qq_43471945/article/details/133643543
Yolov9代码官方版https://github.com/WongKinYiu/yolov9
注意,Yolov8添加的教程可以考虑加上该博客评论区第一个的大神读者评论的说的内容。
Yolov9添加mAP0.75详细教程
修改脚本1:找到Val_dual.py
PS:本文修改的代码为Yolov9官方版v0.1,版本更迭应该不会影响这些base代码。
step1
定位172-173行代码
将这两行代码修改为:
s = ('%22s' + '%11s' * 7) % ('Class', 'Images', 'Instances', 'P', 'R', 'mAP50', 'mAP75', 'mAP50-95')
tp, fp, p, r, f1, mp, mr, map50, map75, ap50, map = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
step2
定位262-263行代码
修改为
ap50, ap75, ap = ap[:, 0], ap[:, 5], ap.mean(1) # AP@0.5, AP@0.75, AP@0.5:0.95
mp, mr, map50, map75, map = p.mean(), r.mean(), ap50.mean(), ap75.mean(), ap.mean()
step3
定位268-277行代码
修改为
pf = '%22s' + '%11i' * 2 + '%11.3g' * 5 # print format
LOGGER.info(pf % ('all', seen, nt.sum(), mp, mr, map50, map75, map))
if nt.sum() == 0:
LOGGER.warning(f'WARNING ⚠️ no labels found in {task} set, can not compute metrics without labels')
# Print results per class
if (verbose or (nc < 50 and not training)) and nc > 1 and len(stats):
for i, c in enumerate(ap_class):
LOGGER.info(pf % (names[c], seen, nt[c], p[i], r[i], ap50[i], ap75[i], ap[i]))
step4
定位 eval\.summarize
修改为
eval.summarize()
map, map50, map75 = eval.stats[:3] # update results (mAP@0.5:0.95, mAP@0.5)
step5
定位 for i\, c in enumerate\(ap_class\)\:
修改为
for i, c in enumerate(ap_class):
maps[c] = ap[i]
return (mp, mr, map50, map75, map, *(loss.cpu() / len(dataloader)).tolist()), maps, t
修改脚本2:找到untils.loggers.__init__.py脚本
定位65行代码
修改为
self.keys = [
'train/box_loss',
'train/cls_loss',
'train/dfl_loss', # train loss
'metrics/precision',
'metrics/recall',
'metrics/mAP_0.5',
'metrics/mAP_0.75',
'metrics/mAP_0.5:0.95', # metrics
'val/box_loss',
'val/cls_loss',
'val/dfl_loss', # val loss
'x/lr0',
'x/lr1',
'x/lr2'] # params
至此完成全部修改
效果展示
运行Train_dual脚本,如下图所示,mAP0.75指标打印成功。
保存结果,如下图所示,runs/train/yolov9/results.txt中mAP0.75指标保存成功。
运行Val_dual.py脚本,如下图所示,mAP0.75指标打印成功。