YOLOv5获得大中小目标的AP和AR指标(自制数据集)

这篇具有很好参考价值的文章主要介绍了YOLOv5获得大中小目标的AP和AR指标(自制数据集)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本文简要介绍YOLOv5如何调用pycocotools得到大中小目标的AP和AR指标,评价自制数据集。

  • 代码版本-----YOLOv5_6.0版本。
  • 数据集----Seaships7000数据集,共包含6类7000张船舶图片,其中测试集1400张。
  • 模型-----自制模型。

一、运行示例

话不多说,运行示例:

(pytorch1.8) zmy@525:~/文档/A-YOLO$ python val.py
val: data=data/ship.yaml, weights=runs/train/exp28/weights/best.pt, batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, task=test, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=False
YOLOv5 🚀 2021-10-12 torch 1.8.0+cu111 CUDA:0 (NVIDIA GeForce RTX 3090, 24268.3125MB)

Fusing layers... 
Model Summary: 540 layers, 4933647 parameters, 0 gradients
test: Scanning '/home/zmy/文档/A-YOLO/data/labels/test_fog.cache' images and lab
               Class     Images     Labels          P          R     mAP@.5 mAP@
                 all       1400       1837      0.844      0.543       0.66      0.449
         ore carrier       1400        417       0.94      0.448      0.624      0.392
        fishing boat       1400        428      0.785      0.613      0.678      0.456
      passenger ship       1400         94      0.628      0.628      0.681      0.451
  general cargo ship       1400        312      0.865      0.599      0.724      0.509
  bulk cargo carrier       1400        392      0.845      0.569      0.682      0.474
      container ship       1400        194          1      0.401      0.569      0.415
Speed: 0.1ms pre-process, 1.6ms inference, 1.0ms NMS per image at shape (32, 3, 640, 640)

Evaluating pycocotools mAP... saving runs/val/exp1/best_predictions.json...
loading annotations into memory...
Done (t=0.01s)
creating index...
index created!
Loading and preparing results...
DONE (t=0.13s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=1.27s).
Accumulating evaluation results...
DONE (t=0.36s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.445
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.650
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.497
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.050
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.287
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.458
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.477
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.535
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.535
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.050
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.357
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.549
Results saved to runs/val/exp1

二、参考

主要参考了以下三个案例,并根据Seaships数据集特征修改了部分代码。

参考1:安装pycocotools
参考2:yolov5 调用cocotools 评价自己的模型和数据集
参考3:YOLO至COCO的格式转换器

三、方法

1.安装pycocotools库

pip install pycocotools

2.YOLOv5代码修改

只需修改val.py文件

   1.'--save-json' 添加 default=True parser.add_argument('--save-json', default=True, action='store_true', help='save a COCO-JSON results    file')
   
   2.'--task' 修改 default='test' parser.add_argument('--task', default='test', help='train, val, test, speed or study')
   
   3.注释下句    # opt.save_json |= opt.data.endswith('coco.yaml')
   
   4.为了生成的json文件是多行,方便自查格式
     改json.dump(jdict, f) 
     为json.dump(jdict, f, ensure_ascii=False, indent=1) 

修改后终端输入python val.py,如下所示:
会提示我们Evaluating pycocotools mAP… saving runs/val/exp1/best_predictions.json…
并报错[Errno 2] No such file or directory: ‘…/coco/annotations/instances_val2017.json’
这说明此模型需要测试的json文件已经保存在runs/val/exp1/best_predictions.json
但标准的json文件在此路径../coco/annotations/instances_val2017.json没有找到。
接下来制作Seaships数据集的json文件

test: Scanning '/home/zmy/文档/A-YOLO/data/labels/test_fog.cache' images and lab
               Class     Images     Labels          P          R     mAP@.5 mAP@
                 all       1400       1837      0.844      0.543       0.66      0.449
         ore carrier       1400        417       0.94      0.448      0.624      0.392
        fishing boat       1400        428      0.785      0.613      0.678      0.456
      passenger ship       1400         94      0.628      0.628      0.681      0.451
  general cargo ship       1400        312      0.865      0.599      0.724      0.509
  bulk cargo carrier       1400        392      0.845      0.569      0.682      0.474
      container ship       1400        194          1      0.401      0.569      0.415
Speed: 0.1ms pre-process, 1.7ms inference, 1.3ms NMS per image at shape (32, 3, 640, 640)

Evaluating pycocotools mAP... saving runs/val/exp1/best_predictions.json...
loading annotations into memory...
pycocotools unable to run: [Errno 2] No such file or directory: '../coco/annotations/instances_val2017.json'

3.制作.json文件

根据参考3的README文档将YOLO标签的txt格式转换为json格式
只需修改main.py文件

1、根据Seaships数据集修改类别列表
classes = [
    "ore carrier",
    "fishing boat",
    "passenger ship",
    "general cargo ship",
    "bulk cargo carrier",
    "container ship",]
    
2、把image_id定义为文件名并去除尾缀
 for file_path in file_paths:
        # Check how many items have progressed
        print("\rProcessing " + str(image_id) + " ...", end='')
        # ---------------------image_id定义为文件名--------------------------
        image_id = int(file_path.stem)
        # ------------------------------------------------------------------
        # Build image annotation, known the image's width and height
        w, h = imagesize.get(str(file_path))
        image_annotation = create_image_annotation(
            file_path=file_path, width=w, height=h, image_id=image_id)
        images_annotations.append(image_annotation)
        label_file_name = f"{file_path.stem}.txt"

3、把标签从1开始改为标签从0开始
        for line1 in label_read_line:
            label_line = line1
            category_id = (
                # int(label_line.split()[0]) + 1) # you start with annotation id with '1'
                int(label_line.split()[0]) + 0) # you start with annotation id with '0'

最后将生成的train.json文件,标签改为从0开始,并改名为instances_val2017.json,然后放到根目录的coco/annotations/文件夹中,没有则需要自己创建。

4.运行程序

终端输入python val.py,即大功告成!


附录

需要测试的best_predictions.json示例:

[
 {
  "image_id": 4724,
  "category_id": 3,
  "bbox": [
   838.916,
   158.716,
   1081.084,
   332.775
  ],
  "score": 0.94571
 },
 {
  "image_id": 4724,
  "category_id": 1,
  "bbox": [
   623.036,
   369.717,
   210.212,
   30.21
  ],
  "score": 0.00897
 },
 {
  "image_id": 4724,
  "category_id": 4,
  "bbox": [
   838.773,
   159.783,
   1081.227,
   334.143
  ],
  "score": 0.00734
 }, 
 ...此处省略其余标注

制作的标准的instances_val2017.json示例:

{
    "images": [
        {
            "file_name": "000013.jpg",
            "height": 1080,
            "width": 1920,
            "id": 13}
         ...此处省略其余1399个图片文件
            ]"categories": [
        {
            "supercategory": "Defect",
            "id": 0,
            "name": "ore carrier"
        },
        {
            "supercategory": "Defect",
            "id": 1,
            "name": "fishing boat"
        },
         ...此处省略其余4种类别
    ],
    "annotations": [
        {
            "id": 1,
            "image_id": 13,
            "bbox": [
                1640.0,
                544.0,
                280.0,
                30.0
            ],
            "area": 8400,
            "iscrowd": 0,
            "category_id": 0,
            "segmentation": []
        },
        ...此处省略其余标注

总结

调用pycocotools得到的指标略低于前者文章来源地址https://www.toymoban.com/news/detail-789572.html

到了这里,关于YOLOv5获得大中小目标的AP和AR指标(自制数据集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 目标检测笔记(十):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等

    COCO(Common Objects in Context)是一个被广泛使用的计算机视觉领域的数据集,其中包含了多个场景、多种对象以及不同光照和背景下的图像。COCO数据集中的每一张图片都标注了物体的类别、位置和大小等信息,这些信息可以用于训练和评估目标检测、语义分割等计算机视觉任务

    2024年02月04日
    浏览(37)
  • MS COCO数据集的评价标准以及不同指标的选择推荐(AP、mAP、MS COCO、AR、@、0.5、0.75、1、目标检测、评价指标)

    目标检测模型性能衡量指标、MS COCO 数据集的评价标准以及不同指标的选择推荐 目标检测模型通过 pycocotools 在验证集上会得到 COCO 的评价列表,具体参数的含义是什么呢? PASCAL VOC Microsoft COCO(MS COCO) 在 MS COCO 数据集出来之前,目标检测基本上用的是 PASCAL VOC 数据集,现在

    2024年02月08日
    浏览(45)
  • YOLOv5实现目标计数

    本文主要讲解如何使用YOLOv5实现目标计数。 在detect.py文件中这部分内容替换为下面代码: 原理比较简单,就是计算锚框数量,每打印一个框count计数+1(但是值得一提的是,这种方法是不区分类别的,后续我想办法按照类进行计数)。其中label变量记录需要展示的变量,原来

    2024年02月11日
    浏览(38)
  • YOLOv5目标检测实验

    最近在用YOLOv5跑一些目标检测的东西,这是自己日常学习的一些总结!后期会继续更新!有问题也欢迎批评指正!如果雷同请见谅! 创建数据集是在detect.py里面的create_dataloader,并在主函数里面调用 yolov5在计算资源的调用上采用了torch.nn.parallel.DistributedDataParallel(DDP,多张显卡

    2024年02月07日
    浏览(39)
  • YOLOv5实现目标检测

    YOLOv5 🚀 是COCO数据集上预处理的一系列对象检测架构和模型,代表Ultralytics对未来视觉人工智能方法的开源研究,融合了数千小时研究和开发过程中积累的经验教训和最佳实践。 本文用来记录第一次使用 YOLOv5实现: 视频目标检测 摄像头目标检测 博主所使用的环境是win10 +

    2024年02月09日
    浏览(38)
  • 【目标检测】yolov5模型详解

    yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不断进行升级迭代。 Yolov5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中,这几个模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。 yolov5主要分为以下几部分: Input:输入 Backbone:

    2024年02月07日
    浏览(47)
  • 【目标检测】yolov5代码实战

    YOLO 是 “You only look once” 缩写 , 是将图像划分为网格系统的对象检测算法,网格中的每个单元负责检测自身内的对象。 由于其速度和准确性,YOLO是最著名的目标检测算法之一。yolov5作为YOLO系列第五个迭代版本,它的一个特点就是权重文件非常之小,可以搭载在配置更低的移

    2024年02月07日
    浏览(43)
  • 【目标检测算法实现之yolov5】 一、YOLOv5环境配置,将yolov5部署到远程服务器上

    在官网:https://github.com/ultralytics/yolov5上下载yolov5源代码 下载成功如下: 在配置基础环境之前,提前压缩自己的代码文件,并通过winscp传输给linux端,传输之后,解压该文件。解压前,先创建一个文件夹,再解压。 winscp下载使用教程参考上一篇博客:使用WinSCP下载和文件传输

    2024年01月15日
    浏览(48)
  • 目标检测YOLOV5 添加计数功能

    YOLOV5预测完图片想显示个数怎么办呢? 一行代码轻松解决!!!! 原来的Detect 没有计数功能 只需在源码 上加上下面这一段代码即可: 这样就可以加上计数功能了!!!!  

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包