RTDETRv2 pytorch 官方版自己数据集训练遇到的问题解决

rtdetrv2 训练问题遇到的问题。

pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2  --index-url https://download.pytorch.org/whl/cu117

1

Please make sure torchvision version >= 0.15.2

发现自己实际装的是 torchvison==0.15.2+cu117

修改_misc.py中修改为实际版本

if importlib.metadata.version('torchvision') == '0.15.2+cu117':

2

Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"

报错很多行。

标注的coco序号不对,自己的数据集,分类需要id从0开始,

coco像这种格式。“info”字段也要有,不然也会报错。

{"info": {"description": "COCO Dataset"},"licenses": [{"name": ""}],"images": [{"id": 1,"file_name": "00002.png","height": 1080,"width": 1920},{"id": 2,"file_name": "00009.png","height": 1080,"width": 1920}],"annotations": [{"id": 1,"image_id": 1,"category_id": 0,"segmentation": [[642.6923076923077,234.23076923076925,1377.3076923076924,234.23076923076925,1377.3076923076924,782.3076923076923,642.6923076923077,782.3076923076923]],"area": 402625.7396449703,"bbox": [642.6923076923077,234.23076923076925,734.6153846153846,548.076923076923],"iscrowd": 0},{"id": 2,"image_id": 2,"category_id": 1,"segmentation": [[490.76923076923083,222.6923076923077,1252.3076923076924,222.6923076923077,1252.3076923076924,784.2307692307692,490.76923076923083,784.2307692307692]],"area": 427633.1360946745,"bbox": [490.76923076923083,222.6923076923077,761.5384615384615,561.5384615384614],"iscrowd": 0}],"categories": [{"id": 0,"name": "ng","supercategory": ""},{"id": 1,"name": "ok","supercategory": ""}]
}

完整转换脚本,从xml转为coco。

import os
import json
import xml.etree.ElementTree as ET
from collections import defaultdict
from tqdm import tqdm
import argparse
import shutil
import cv2
import numpy as npdef parse_args():parser = argparse.ArgumentParser(description='Convert Pascal VOC XML annotations to COCO format')parser.add_argument('--xml_dir', type=str, required=True, help='Directory containing XML annotation files')parser.add_argument('--img_dir', type=str, required=True,help='Directory containing corresponding images')parser.add_argument('--output_json', type=str, required=True,help='Output COCO format JSON file path')parser.add_argument('--copy_images', action='store_true',help='Copy images to a new directory structure')parser.add_argument('--output_img_dir', type=str, default='coco_dataset',help='Output directory for images if copying is enabled')return parser.parse_args()def get_image_size(image_path):"""获取图像尺寸"""try:img = cv2.imread(image_path)if img is None:raise IOError(f"无法读取图像: {image_path}")return img.shape[1], img.shape[0]  # 宽度, 高度except Exception as e:print(f"错误: {e}")return 0, 0def convert_xml_to_coco(xml_dir, img_dir, output_json, copy_images=False, output_img_dir=None):# 创建COCO数据结构coco_data = {"info": {"description": "COCO Dataset converted from Pascal VOC XML","version": "1.0","year": 2023,"contributor": "XML to COCO Converter","date_created": "2023-01-01"},"licenses": [{"url": "https://creativecommons.org/licenses/by/4.0/","id": 1,"name": "CC BY 4.0"}],"images": [],"annotations": [],"categories": []}# 处理类别category_dict = {}next_category_id = 0# 处理图像和标注image_dict = {}next_image_id = 1next_ann_id = 1# 收集所有XML文件xml_files = [f for f in os.listdir(xml_dir) if f.endswith('.xml')]# 创建输出图像目录(如果需要)if copy_images and output_img_dir:os.makedirs(output_img_dir, exist_ok=True)print(f"找到 {len(xml_files)} 个XML文件,开始转换...")# 处理每个XML文件for xml_file in tqdm(xml_files):xml_path = os.path.join(xml_dir, xml_file)try:# 解析XMLtree = ET.parse(xml_path)root = tree.getroot()# 获取图像文件名filename = root.find('filename').textimg_path = os.path.join(img_dir, filename)# 如果图像不存在,跳过if not os.path.exists(img_path):print(f"警告: 图像文件不存在 - {img_path}")continue# 获取图像尺寸size = root.find('size')if size is not None:width = int(size.find('width').text)height = int(size.find('height').text)else:# 如果XML中没有尺寸信息,从图像读取width, height = get_image_size(img_path)if width == 0 or height == 0:print(f"警告: 无法获取图像尺寸 - {img_path}")continue# 如果复制图像if copy_images and output_img_dir:new_img_path = os.path.join(output_img_dir, filename)shutil.copy2(img_path, new_img_path)# 创建图像条目if filename not in image_dict:image_entry = {"id": next_image_id,"file_name": filename,"width": width,"height": height,"license": 1,"date_captured": "2023-01-01"}coco_data["images"].append(image_entry)image_dict[filename] = next_image_idnext_image_id += 1image_id = image_dict[filename]# 处理每个对象for obj in root.findall('object'):# 类别处理name = obj.find('name').textif name not in category_dict:category_entry = {"id": next_category_id,"name": name,"supercategory": "object"}coco_data["categories"].append(category_entry)category_dict[name] = next_category_idnext_category_id += 1category_id = category_dict[name]# 边界框处理bbox = obj.find('bndbox')if bbox is None:continuexmin = float(bbox.find('xmin').text)ymin = float(bbox.find('ymin').text)xmax = float(bbox.find('xmax').text)ymax = float(bbox.find('ymax').text)# 转换为COCO格式 [x, y, width, height]bbox_width = xmax - xminbbox_height = ymax - ymin# 创建标注条目ann_entry = {"id": next_ann_id,"image_id": image_id,"category_id": category_id,"bbox": [xmin, ymin, bbox_width, bbox_height],"area": bbox_width * bbox_height,"segmentation": [],"iscrowd": 0}coco_data["annotations"].append(ann_entry)next_ann_id += 1except Exception as e:print(f"处理文件 {xml_file} 时出错: {str(e)}")# 保存为JSON文件with open(output_json, 'w') as f:json.dump(coco_data, f, indent=2)print(f"转换完成!")print(f"共处理 {len(coco_data['images'])} 张图像")print(f"共处理 {len(coco_data['annotations'])} 个标注")print(f"共发现 {len(coco_data['categories'])} 个类别")print(f"结果已保存到: {output_json}")# 保存类别映射文件category_map_path = os.path.join(os.path.dirname(output_json), 'category_mapping.txt')with open(category_map_path, 'w') as f:for name, cid in category_dict.items():f.write(f"{name}: {cid}\n")print(f"类别映射已保存到: {category_map_path}")return coco_dataif __name__ == "__main__":args = parse_args()# 运行转换coco_data = convert_xml_to_coco(args.xml_dir,args.img_dir,args.output_json,args.copy_images,args.output_img_dir)

调用:生成coco的json

python xml_to_coco.py    --xml_dir  train2017   --img_dir  train2017   --output_json  annotations/instances_train2017.json

python xml_to_coco.py    --xml_dir  val2017   --img_dir  val2017   --output_json  annotations/instances_val2017.json

数据集结构图:

然后训练:

python tools/train.py  --config=configs/rtdetrv2/rtdetrv2_r18vd_120e_coco.yml   --use-amp --seed=0

转换onnx

python tools/export_onnx.py -c=configs/rtdetrv2/rtdetrv2_r18vd_120e_coco.yml -r last.pth --check

转换trt,python 版本

python tools/export_trt.py -i model.onnx

或者装了tensorrt 的用直接命令行。

tensorrt 版本要大于8.5.2,不然有的算子不支持,会报错。

trtexec --onnx=model.onnx --saveEngine=model.trt

上面python 文件夹whl可以直接pip install tensorrt-8.6.0-cp39-none-win_amd64.whl

安装tensorrt python版本。针对直接装python装不上的情况。

生成的权重还是挺大的,个人感觉没有yolo好用。

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

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

相关文章

Linux系统移植⑤:uboot启动流程详解-board_init_f执行过程

Linux系统移植⑤&#xff1a;uboot启动流程详解-board_init_f执行过程 _main 中会调用 board_init_f 函数。 board_init_f 函数主要有两个工作&#xff1a; ①初始化一系列外设&#xff0c;比如串口、定时器&#xff0c;或者打印一些消息等。 ②初始化 gd 的各个成员变量&am…

Git命令与代码仓库管理

步骤一、完成Gitee码云上账号注册并新建代码仓库。 1.1 新建代码仓库 1.2 填写信息并创建 1.3 获取仓库地址 https://gitee.com/dog-kidney/2022082206.git 步骤二、建立本地代码仓库&#xff0c;并连接到远程代码仓库。 2.1初始化 git init 2.2添加仓库 git remote add o…

资源占用多,Linux 系统中如何降低 CPU 资源消耗并提升利用率?

在 Linux 系统中降低 CPU 资源消耗并提升利用率,需从系统服务优化、进程管理、资源调度及内核参数调整等多维度入手。以下是适用于各类 Linux 发行版的通用优化方案,涵盖基础操作与进阶策略: 一、服务与进程优化:减少无效资源占用 1. 关闭冗余系统服务 查看运行中的服务 …

技术与情感交织的一生 (八)

目录 融合 东西厂公 接风宴 头痛 “巴巴罗萨” 突击 推进 助攻 96小时 寒冬 食堂 反攻 消耗 Delphi 西厂 内困 外患 “敦刻尔克” 多线作战 大撤退 资源 融合 东西厂公 初次来到纸箱厂&#xff0c;是主厂区&#xff0c;感觉很大&#xff0c;相对西面正在…

webuploader分片上传示例,服务端上传文件到腾讯云CDN Teo 应用示例

本文环境&#xff1a;php7.3.4 CI3.0框架 一、大概步骤&#xff1a; &#xff08;1&#xff09;利用百度的webuploader插件&#xff0c;将大文件分片上传的自己的服务器 &#xff08;2&#xff09;利用腾讯云接口从本服务器上传到腾讯云 二、详细代码&#xff1a; 1、进入…

LeetCode 632.最小区间

你有 k 个 非递减排列 的整数列表。找到一个 最小 区间&#xff0c;使得 k 个列表中的每个列表至少有一个数包含在其中。 我们定义如果 b-a < d-c 或者在 b-a d-c 时 a < c&#xff0c;则区间 [a,b] 比 [c,d] 小。 示例 1&#xff1a; 输入&#xff1a;nums [[4,10,…

篇章五 系统性能优化——资源优化——CPU优化(2)

目录 1.高级并发模式 1.1 工作窃取&#xff08;Work Stealing&#xff09; 1.工作窃取模式 2.ForkJoinPool实现 3.具体例子 1.2 结构化并发&#xff08;Structured Concurrency&#xff09; 1.结构化并发模式 2.Java 19 的 StructuredTaskScope 3.具体例子 1.3 对比与…

《中国电信运营商骨干网:历史、现状与未来演进》系列 第四篇:后发先至——中国移动CMNET的快速扩张与IP专网布局

摘要&#xff1a; 本文深入探讨中国移动骨干网CMNET (AS9808) 的发展历程、网络架构及其与中国电信扁平化策略的差异。同时&#xff0c;解析其为承载高价值业务而构建的IP专用承载网的定位、结构与技术特点。最后&#xff0c;展望中国移动在5G、云计算和算力网络时代&#xff0…

R情感分析:解码文本中的情感

基于之前关于文本聚类和文本模型的博客&#xff0c;我们现在可以深入探讨一个经典主题 - 情感分析。情感分析通过计算方式识别和分类文本中的情感&#xff0c;帮助理解公众意见或消费者反馈。 什么是情感分析&#xff1f; 情感分析确定文本背后的情感基调&#xff0c;将其分类…

云徙渠道订货系统:赋能企业渠道管理的数字化引擎

在当今商业竞争日益激烈的环境下&#xff0c;企业如何高效管理和优化渠道成为关键问题。云徙渠道订货系统凭借其强大的数字化能力&#xff0c;为企业提供了全新的渠道管理解决方案&#xff0c;助力企业在复杂多变的市场环境中保持竞争力。 从渠道管理的痛点出发 传统渠道管理方…

Nacos基础使用(二):nacos作为配置中心

一、Nacos 配置中心核心属性 在学习nacos 作为配置中心的使用之前&#xff0c;先看下Nacos 作为配置中心时的三个属性&#xff0c;即&#xff1a; 命名空间、配置分组、配置集ID&#xff08;习惯称为配置文件ID&#xff09;&#xff1b;在使用Nacos 作为配置中心 的过程中可以通…

SpringBoot 插件化架构的4种实现方案

在复杂业务场景下&#xff0c;传统的单体应用架构往往面临着功能扩展困难、代码耦合严重、迭代效率低下等问题。 插件化架构作为一种模块化设计思想的延伸&#xff0c;能够使系统具备更好的扩展性和灵活性&#xff0c;实现"热插拔"式的功能扩展。 本文将介绍Spring…

VGG-19(Visual Geometry Group)模型

VGG-19 是由牛津大学视觉几何组和 Google DeepMind 的研究人员在 2014 年提出的一个非常经典的深度卷积神经网络模型。 一 核心结构 &#xff08;1&#xff09;深度&#xff1a; 模型名称中的 "19" 指的是模型拥有 19 层带有权重的层&#xff08;通常指&#xff1a;…

Windows11 鼠标卡死任务栏卡死 假死解决方法

最近很多朋友都有一个问题&#xff0c;就是Windows11电脑 在编辑文档或者是切换窗口的时候出现任务栏假死&#xff0c;鼠标左右键失灵等现象&#xff0c;想了几天解决方案今天吧最直接的方法教给大家 首发玖毅论坛 玖毅论坛https://www.webbbs.cn/ 第一步&#xff1a; 第一种…

BeikeShop - 一个开源、用户友好的跨境电子商务平台

BeikeShop - 一个开源、用户友好的跨境电子商务平台 BeikeShop 是全球领先的基于 Laravel 框架的开源电子商务平台&#xff0c;专为国际贸易和跨境电子商务行业设计。 该系统是 100% 开源的&#xff01;它支持多语言、多币种、支付、物流、会员管理等广泛的实用功能&#xff0…

基于大模型的胆囊结石全周期诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与创新点 二、大模型预测胆囊结石的原理与技术基础 2.1 大模型概述 2.2 用于胆囊结石预测的数据来源 2.3 模型构建与训练 2.4 模型评估指标 三、术前风险预测与手术方案制定 3.1 术前评估指标与数…

[论文阅读] 人工智能 | Gen-n-Val:利用代理技术革新计算机视觉数据生成

Gen-n-Val&#xff1a;利用代理技术革新计算机视觉数据生成 论文信息 article{huang2025gennval,title{Gen-n-Val: Agentic Image Data Generation and Validation},author{Huang, Jing-En and Fang, I-Sheng and Huang, Tzuhsuan and Wang, Chih-Yu and Chen, Jun-Cheng},jo…

【AI论文】ReasonMed:一个370K的多智能体生成数据集,用于推进医疗推理

摘要&#xff1a;尽管基于推理的大型语言模型&#xff08;LLM&#xff09;在数学和编程方面表现出色&#xff0c;但它们在知识密集型医疗问题回答方面的能力仍未得到充分探索。为解决这一问题&#xff0c;我们推出了ReasonMed&#xff0c;这是最大的医疗推理数据集&#xff0c;…

singlefligt使用方法和源码解读

singlefligt使用方法和源码解读 介绍 sync.once保证其整个生命周期内只调用一次&#xff1b;而singleflight则可以保证在一定范围内其只调用一次。 背景|使用场景 应对缓存击穿&#xff1a;加锁可以解决这个问题&#xff0c;但是加锁不太灵活&#xff08;不能控制访问频率之…

HTTP 协议的基本概念(请求/响应流程、状态码、Header、方法)问题解决方案大全

HTTP 协议的基本概念&#xff08;请求/响应流程、状态码、Header、方法&#xff09;问题解决方案大全 一. 摘要 HTTP 协议是 Web 开发的基石&#xff0c;但初学者往往只停留在 GET、POST 的层面&#xff0c;对重定向机制、缓存控制、请求体解析等概念缺乏深入理解&#xff0c;…