YOLOv8如何输出COCO指标

1、先正常python train 一个模型

yolo task=detect mode=train model=/home//v8/v8-ori-x/yolov8x.pt data=/home/v8/v8-ori-x/ultralytics/cfg/datasets/111.yaml epochs=300 batch=16  device=6

2、再正常python val --各种参数 --save_json=True,这一步的作用是要生成自己模型预测的json文件

yolo task=detect mode=val model=/home/v8yolov8-main/runs/train/exp/weights/best.pt data=/home/v8/yolov8-main/dataset/pheno.yaml batch=1  device=6 save_txt save_conf split=test  save_json=True

3、将自己的YOLO格式数据集和标签转化为json格式,类别也需要改一下,下面只需要修改图片路径和你的标签路径就行,然后保存路径也可以改改

python yolo2coco.py

转化的代码:
yolo2coco.py:

import os
import cv2
import json
from tqdm import tqdm
from sklearn.model_selection import train_test_split
import argparseclasses = ['soil', 'crop', 'weed']# 这里改一下parser = argparse.ArgumentParser()
parser.add_argument('--image_path', default='/home/val/images',type=str, help="path of images")# 图片路径改一下
parser.add_argument('--label_path', default='/home/val/labels',type=str, help="path of labels .txt")#图片标签路径改一下
parser.add_argument('--save_path', type=str,default='/home/val.json', help="if not split the dataset, give a path to a json file")
arg = parser.parse_args()def yolo2coco(arg):print("Loading data from ", arg.image_path, arg.label_path)assert os.path.exists(arg.image_path)assert os.path.exists(arg.label_path)originImagesDir = arg.image_path                                   originLabelsDir = arg.label_path# images dir nameindexes = os.listdir(originImagesDir)dataset = {'categories': [], 'annotations': [], 'images': []}for i, cls in enumerate(classes, 0):dataset['categories'].append({'id': i, 'name': cls, 'supercategory': 'mark'})# 标注的idann_id_cnt = 0for k, index in enumerate(tqdm(indexes)):# 支持 png jpg 格式的图片.txtFile = f'{index[:index.rfind(".")]}.txt'stem = index[:index.rfind(".")]# 读取图像的宽和高try:im = cv2.imread(os.path.join(originImagesDir, index))height, width, _ = im.shapeexcept Exception as e:print(f'{os.path.join(originImagesDir, index)} read error.\nerror:{e}')# 添加图像的信息if not os.path.exists(os.path.join(originLabelsDir, txtFile)):# 如没标签,跳过,只保留图片信息.continuedataset['images'].append({'file_name': index,'id': stem,'width': width,'height': height})with open(os.path.join(originLabelsDir, txtFile), 'r') as fr:labelList = fr.readlines()for label in labelList:label = label.strip().split()x = float(label[1])y = float(label[2])w = float(label[3])h = float(label[4])# convert x,y,w,h to x1,y1,x2,y2H, W, _ = im.shapex1 = (x - w / 2) * Wy1 = (y - h / 2) * Hx2 = (x + w / 2) * Wy2 = (y + h / 2) * H# 标签序号从0开始计算, coco2017数据集标号混乱,不管它了。cls_id = int(label[0])   width = max(0, x2 - x1)height = max(0, y2 - y1)dataset['annotations'].append({'area': width * height,'bbox': [x1, y1, width, height],'category_id': cls_id,'id': ann_id_cnt,'image_id': stem,'iscrowd': 0,# mask, 矩形是从左上角点按顺时针的四个顶点'segmentation': [[x1, y1, x2, y1, x2, y2, x1, y2]]})ann_id_cnt += 1# 保存结果with open(arg.save_path, 'w') as f:json.dump(dataset, f)print('Save annotation to {}'.format(arg.save_path))if __name__ == "__main__":yolo2coco(arg)

4、修改你自己的数据集json文件和预测的json文件,就可以输出了

python get_COCO_metrice.py --pred_json /home/yolov8-main/runs/val/exp3/predictions.json

get_COCO_metrice.py:

import argparse
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOevaldef parse_opt():parser = argparse.ArgumentParser()parser.add_argument('--anno_json', type=str, default='/home/val.json', help='training model path')parser.add_argument('--pred_json', type=str, default='', help='data yaml path')return parser.parse_known_args()[0]if __name__ == '__main__':opt = parse_opt()anno_json = opt.anno_jsonpred_json = opt.pred_jsonanno = COCO(anno_json)  # init annotations apipred = anno.loadRes(pred_json)  # init predictions apieval = COCOeval(anno, pred, 'bbox')eval.evaluate()eval.accumulate()eval.summarize()

5、生成结果图,实测可行
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/239416.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区:先写一个.c文件如下: 我们执行一下这个程序时&…

主成分分析例题 (多元统计分析期末复习)

例一 给定X的协差阵,对其进行主成分分析, (1)求出每个主成分的贡献率; (2)求出每个原始变量的信息提取率; 解:对于主成分分析的题,一般来说,题目给定一个协方…

Verilog inout 端口使用和仿真

inout端口是Verilog中一种特殊的端口类型,它可以实现双向的数据传输,既可以作为输入,也可以作为输出。inout端口通常用于实现管脚复用、三态缓冲器、总线驱动等功能。inout端口的使用需要注意以下几个方面: inout端口必须声明为wi…

海云安谢朝海:开发安全领域大模型新实践 人工智能助力高效安全左移

2023年11月29日,2023中国(深圳)金融科技大会成功举行,该会议是深圳连续举办的第七届金融科技主题年度会议,也是2023深圳国际金融科技节重要活动之一。做好金融工作,需要兼顾创新与安全,当智能体…

系列十七、理解SpringBoot中的starter 自定义一个starter

一、概述 作为后端Java程序员,基本上公司的日常开发都是基于SpringBoot进行的,我们使用SpringBoot也是沉醉于它的各种各样的starter带给我们的便利,这些starter为我们带来了众多的自动化配置,通过这些自动化配置,我们可…

mysql中除了InnoDB以外的其它存储引擎

参考资料:https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html MyISAM存储引擎 https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html MyISAM 存储引擎是基于比较老的ISAM存储引擎(ISAM已经不再可用)&#xff…

[论文精读]利用大语言模型对扩散模型进行自我修正

本博客是一篇最新论文的精读,论文为UC伯克利大学相关研究者新近(2023.11.27)在arxiv上上传的《Self-correcting LLM-controlled Diffusion Models》 。 内容提要: 现有的基于扩散的文本到图像生成模型在生成与复杂提示精确对齐的图像时仍然存在困难,尤其是需要数值和…

前缀和 LeetCode1094 拼车

1094. 拼车 车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向) 给定整数 capacity 和一个数组 trips , trip[i] [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接…

SATA模块物理层OOB信号分析总结(三)

目录 一、简介二、总体解析2.1 OOB作用2.2 OOB信号的组成2.3 总体phy link过程2.4 整体PHY LINK Trace2.5 PHY LINK状态查询 三、其他相关链接1、SATA模块之HBA卡开发总结(一)2、SATA信息传输FIS结构总结(二)3、PCIe物理层总结-PC…

什么是CAS, 什么是AQS

文章目录 什么是CAS, 什么是AQSCASAQS 什么是CAS, 什么是AQS CAS AQS AQS 全称是AbstractQueuedSynchronizer, 是juc 下一个核心的抽象类,用于构建各种同步器和锁 比如我们熟悉的 ReentrantLock、ReadWriteLock、CountDownLatch等等是基于AQS. 首先在…

大数据技术之Oozie

大数据技术之Oozie 第1章 Oozie简介 Oozie英文翻译为:驯象人。一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。主要用于定时调度任…

北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(2)彩虹呼吸灯

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 二.管脚分配 三.实验效果 一.代…