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
英文地址,請注明出處:http://en.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;…