基于YOLO系列的模型检测性能评估工具TIDE

本文介绍了如何使用YOLO系列模型时,准备COCO格式的数据集标注文件,以及如何利用TIDE库进行模型性能评估,包括数据转换和评估指标计算的过程。
摘要由CSDN通过智能技术生成

介绍

所使用到的开源库dbolya作者的tide
这个开源库能很好的评估YOLO系列模型的性能,其评估指标很多,有空可以阅读评价目标检测的方法map 新方法 TIDE

如何使用

流程分为两步,顺序可以颠倒
1.准备coco版的数据集标注json文件
2.YOLO系列中val后保存结构格式为json

准备coco版的数据集标注json文件

前提是数据集得是YOLO系列可训练数据集格式

import os
import json
from PIL import Image

# 配置路径
images_dir = r'images/val' #这是图片文件夹路径
labels_dir = r'labels/val' #这是数据集标注文件文件夹路径
output_json_path = 'annotations.json' #这是转换后保存json文件路径已经名字

# 类别信息,根据实际情况进行修改
categories = [{'id': 1, 'name': 'category1'}, {'id': 2, 'name': 'category2'}] # 示例

# 初始化COCO数据集字典结构
coco_data = {
    "images": [],
    "annotations": [],
    "categories": categories
}

def yolo_to_coco(images_dir, labels_dir, output_path):
    anno_id = 1  # 初始化注释ID

    for label_file in os.listdir(labels_dir):
        # 分割文件名和扩展名,获取图像ID
        image_id, _ = os.path.splitext(label_file)
        
        # 构建图像路径,获取图像尺寸
        image_path = os.path.join(images_dir, f"{image_id}.jpg")
        with Image.open(image_path) as img:
            width, height = img.size
        
        # 添加图像信息到COCO数据集
        coco_data["images"].append({
            "file_name": f"{image_id}.jpg",
            "height": height,
            "width": width,
            "id": str(image_id)
        })

        # 打开相应的标注文件
        with open(os.path.join(labels_dir, label_file), 'r') as file:
            for line in file:
                category_id, x_center, y_center, bbox_width, bbox_height = map(float, line.strip().split())

                # 将YOLO坐标转换成COCO坐标
                x_min = (x_center - bbox_width / 2) * width
                y_min = (y_center - bbox_height / 2) * height
                width_bbox = bbox_width * width
                height_bbox = bbox_height * height

                # 添加注释信息到COCO数据集
                coco_data["annotations"].append({
                    "id": anno_id,
                    "image_id": str(image_id),
                    "category_id": int(category_id) ,  # 假设YOLO类别索引从0开始
                    "bbox": [x_min, y_min, width_bbox, height_bbox],
                    "area": width_bbox * height_bbox,
                    "iscrowd": 0,
                    "segmentation":[]
                })
                anno_id += 1

    # 写入COCO格式的JSON文件
    with open(output_path, 'w') as json_file:
        json.dump(coco_data, json_file, indent=4)

yolo_to_coco(images_dir, labels_dir, output_json_path)

根据自己设备环境情况修改

images_dir = r'...' #这是图片文件夹路径
labels_dir = r'...' #这是数据集标注文件文件夹路径
output_json_path = '...' #这是转换后保存json文件路径已经名字
然后将代码修改为py文件使用python命令运行,无报错后就能进行下一步了。

YOLO系列中val后保存结构格式为json

这里拿YOLOv5举例,V7,V8等自行举一反三。
在GitHub上下拉YOLOV5项目,进入项目文件夹后,找到val.py,打开。
在这里插入图片描述
分别将红框中的参数根据自己环境已经模型和数据集所在位置进行调整。
注意:

  1. –conf-thres最好为0.01,因为该文章就是为了评估模型性能而创作的。
  2. –save-json一定要打开。

然后运行val.py,根据提升在文件夹中
得到类似"best_predictions.json"文件,这个就是val结果json文件。
在这里插入图片描述

使用TIDE来对模型性能进行评估

安装TIDE

pip install tidecv

安装完毕后,创建一个新的py文件

from tidecv import TIDE
import tidecv.datasets 

# json文件
annFile = 'annotations.json'  # 数据集标注json文件路径
resFile = 'val\\exp\\best_predictions.json'  # yolo系列val保存的json结果文件路径
gt = datasets.COCO(annFile)
bbox_results = datasets.COCOResult(resFile)
tide = TIDE()
# 注意mode参数,TIDE.BOX是边界框评估,TIDE.MASK是segmentation所使用.
# name参数为字符串,是画图图片标题,以及在控制台评估内容第一行呈现的
tide.evaluate_range(gt, bbox_results, mode=TIDE.BOX, name='123')
# 打印在控制台中运行的评估
tide.summarize()
# 图像的形式呈现出来
tide.plot()

根据自己设备环境修改
annFile = '....' # 数据集标注json文件路径
resFile = '....' # yolo系列val保存的json结果文件路径

注意:
如果你的YOLO模型只是边界框检测,不是语义分割模型或者关键点模型。
以下修改对你很重要
在你的python环境中找到tidecv.datasets,datasets.py文件部分内容需要修改,或者在PyCharm中使用快捷键快速打开该文件,否者下列代码无法运行成功!!!
在这里插入图片描述
找到上图中mask变量位置,将102行注释掉修改为104行这样,125行也是同理!

然后运行该新的py文件会得到以下评估信息
在这里插入图片描述

在这里插入图片描述
由于版本原因运行到tide.plot()行会出现警告,目前不影响使用就不解决了,如何会解决该警告的可以在评论区进行解答!

结束!!!!!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值