YOLO输出大中小目标的AP值

在进行实验的过程中,博主一直使用的是COCO数据集,其评价指标如下所示,包含大中小目标的AP值与AR值。博主选用了yolov5与yolov7进行实验,其中yolov5成功,yolov7却出现了问题。

YOLO输出大中小目标的AP值_第1张图片

随后博主在进行对比实验时使用了YOLO模型,其默认是不输出大中小目标的AP值的,为了能够获取这个评价指标值,我们需要对val.py文件进行修改。

下载依赖

首先是我们所需的依赖包:pycocotools

pip install pycocotools

数据集测试

yolov5要执行val.py。yolov7中是test.py,需要加载我们的训练完成的模型文件,其参数与训练时大致相同。

修改文件

首先是将--save-json加上default="True"

parser.add_argument('--save-json', action='store_true', help='save a cocoapi-compatible JSON results file')

其次将下面这句代码注释掉:

opt.save_json |= opt.data.endswith('coco.yaml')

报错处理

报错1:

File "/home/ubuntu/anaconda3/envs/python/lib/python3.8/site-packages/torch/serialization.py", line 1033, in _legacy_load
    magic_number = pickle_module.load(f, **pickle_load_args)
_pickle.UnpicklingError: STACK_GLOBAL requires str

将数据集中的cache文件删除即可,然后重新运行。

YOLO输出大中小目标的AP值_第2张图片

运行结果如下,说明该程序已经没有问题了。

YOLO输出大中小目标的AP值_第3张图片

报错2:

可以看到下面报错,这是由于我们的COCO数据集验证时需要json格式的标注文件,而这个文件要放在./coco/annotations/文件夹下,那么我们将instances_val2017.json文件复制一份到yolov7根目录的./coco/annotations即可

Speed: 9.4/1.1/10.4 ms inference/NMS/total per 640x640 image at batch-size 4
Evaluating pycocotools mAP... saving runs/test/exp7/best_predictions.json...
loading annotations into memory...
pycocotools unable to run: [Errno 2] No such file or directory: './coco/annotations/instances_val2017.json'

需要注意的是yolov5在这里的报错与yolov7是有些许不同的:
这里他要存放json的地址为../datasets/coco/annotations/instances_val2017.json

loading annotations into memory...
pycocotools unable to run: [Errno 2] No such file or directory: '../datasets/coco/annotations/instances_val2017.json'
Results saved to runs/val/exp3

报错3

然而yolov7却出现下面问题:

YOLO输出大中小目标的AP值_第4张图片

起初我是先做的yolov7的,开始以为是数据集出现了问题,然而在yolov5中却是正常的,那么就只能是yolov7的修改方式与yolov5不同所导致的。
看到有人说test.py文件要将is_coco手动设置为True,不知道为什么这里结果是False,手动设置为True的话会执行下面coco80->91的函数,因为coco标签文件是到91的,如果不转评估结果都是0。但博主实验后发现不行。

随后在查阅资料时误打误撞,将下面这句代码修改,说实话真不知道为啥这样改,但结果就是成功了。
原本代码

'category_id': coco91class[int(p[5])] if is_coco else int(p[5]),

修改后代码:

'category_id':  int(p[5])

YOLO输出大中小目标的AP值_第5张图片

再次运行就OK了。

yolov7运行结果

YOLO输出大中小目标的AP值_第6张图片

yolov5运行结果

yolov5的运行效果如下图所示,但却发现yolo的评价结果值要比coco的值高了一点,不过倒也无伤大雅。

YOLO输出大中小目标的AP值_第7张图片

你可能感兴趣的:(YOLO系列,经验积累,YOLO,python,开发语言)