使用YOLOv9訓練和測試自己的數據集

任務:檢測舌頭上的裂紋和齒痕

已經有了labelme標注的數據集,并且轉為了coco格式

參考:

詳細!正確!COCO數據集(.json)訓練格式轉換成YOLO格式(.txt)_coco數據集的train.txt-CSDN博客

coco數據集轉yolo數據集(簡單易懂)_coco轉yolo-CSDN博客

【模型復現】自制數據集上復現剛發布的最新 yolov9 代碼_yolov9復現-CSDN博客

數據集轉換

首先將coco格式轉為YOLO格式

參考:coco數據集轉yolo數據集(簡單易懂)_coco轉yolo-CSDN博客

我自己備份一下

轉換代碼

#COCO 格式的數據集轉化為 YOLO 格式的數據集
#--json_path 輸入的json文件路徑
#--save_path 保存的文件夾名字,默認為當前目錄下的labels。import os
import json
from tqdm import tqdm
import argparseparser = argparse.ArgumentParser()
#這里根據自己的json文件位置,換成自己的就行
parser.add_argument('--json_path', default='D:/workSpace/pycharm/yolov5/MyTest/SAR_coco/annotations/instances_val2017.json',type=str, help="input: coco format(json)")
#這里設置.txt文件保存位置
parser.add_argument('--save_path', default='D:/workSpace/pycharm/yolov5/MyTest/SAR_coco/Lable/val2017', type=str, help="specify where to save the output dir of labels")
arg = parser.parse_args()def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = box[0] + box[2] / 2.0y = box[1] + box[3] / 2.0w = box[2]h = box[3]
#round函數確定(xmin, ymin, xmax, ymax)的小數位數x = round(x * dw, 6)w = round(w * dw, 6)y = round(y * dh, 6)h = round(h * dh, 6)return (x, y, w, h)if __name__ == '__main__':json_file =   arg.json_path # COCO Object Instance 類型的標注ana_txt_save_path = arg.save_path  # 保存的路徑data = json.load(open(json_file, 'r'))if not os.path.exists(ana_txt_save_path):os.makedirs(ana_txt_save_path)id_map = {} # coco數據集的id不連續!重新映射一下再輸出!with open(os.path.join(ana_txt_save_path, 'classes.txt'), 'w') as f:# 寫入classes.txtfor i, category in enumerate(data['categories']):f.write(f"{category['name']}\n")id_map[category['id']] = i# print(id_map)#這里需要根據自己的需要,更改寫入圖像相對路徑的文件位置。list_file = open(os.path.join(ana_txt_save_path, 'train2017.txt'), 'w')for img in tqdm(data['images']):filename = img["file_name"]img_width = img["width"]img_height = img["height"]img_id = img["id"]head, tail = os.path.splitext(filename)ana_txt_name = head + ".txt"  # 對應的txt名字,與jpg一致f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')for ann in data['annotations']:if ann['image_id'] == img_id:box = convert((img_width, img_height), ann["bbox"])f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))f_txt.close()#將圖片的相對路徑寫入train2017或val2017的路徑list_file.write('./images/train2017/%s.jpg\n' %(head))print("convert successful!")list_file.close()

?修改json和txt地址即可

轉換完成打開相關文件,檢查一下路徑、文件名之類的有沒有問題。

根目錄/my_datasets/
├─train.txt
├─val.txt
|─test.txt # 這個沒有也OK
├─images
│	├──train2017
│	│	├──xxx.jpg		
│	│	└──xxx.jpg		
│	└──val2017
│		├──xxx.jpg		
│		└──xxx.jpg
│	└──test2017
│		├──xxx.jpg		
│		└──xxx.jpg		
└──labels├──train2017│	├──xxx.txt	│	└──xxx.txt			|──val2017|	├──xxx.txt			|	└──xxx.txt			└──classes.txt

YOLOv9的復現

先下載代碼:GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information

下載預訓練文件:YOLOv9-C

?點這兒下載的是yolov9-c-converted.pt,點下面將yolov9-c.pt下載到根目錄即可。

?搭建虛擬環境

# 創建環境
conda create -n yolov9 python=3.8# 激活環境
conda activate yolov9 # torch 安裝
# 本機 CUDA 為 11.8,故安裝了符合要求的 pytorch==1.13,這里需要自行根據 CUDA 版本安裝適配的 torch 版本
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117pip install Pillow==9.5.0
# pip 包
cd yolov9
pip install -r requirements.txt

?修改數據文件

在 yolov9/data 路徑下新建 my_datasets.yaml 文件,以路徑下的 coco.yaml 為標準進行參數配置,
修改 path 為數據存儲路徑
修改 names 為對應的標簽名,編號名稱要對應path: ./datasets  # dataset root dir
train: train.txt  
val: val.txt  
test: test.txt  # optional# Classes
names:0: chihen1: liewen22: liewen1

?修改模型配置文件

./models/detect/yolov9-c.yaml

--nc? ? ? ? 類別數量改一下就行

?

?配置訓練的超參數

我們使用的是train_dual.py,val_dual.py,detect_dual.py都有_dual,使用train.py的話

修改train_dual.py,當然更妥當的方式應該是重寫這個py文件

--weights? ? ? ? yolov9-c.pt 預訓練權重文件的地址

--cfg? ? ? ?yolov9-c.yaml 文件的地址

--data? ? ? ??my_datasets.yaml文件的地址

--hyp????????data/hyps/hyp.scratch-high.yaml? ?這個文件夾里面應該只有一個high沒有low

--epochs

--batch-size

--imgsz

--dedvice? ? ? ? 看你有幾張卡,改一下

--optimizer????????

?開始訓練

終端輸入命令

單卡訓練指令python train_dual.py多卡訓練指令python -m torch.distributed.launch --nproc_per_node 8 train_dual.py

?看到下述界面,即成功開始訓練!!!

?訓練完

?exp里面會有訓練的一些數據,exp15為例

配置驗證超參數

修改val_dual.py

類似train_ dual.py,額外多一個

task:驗證數據集選擇,如val,test

開始驗證

單卡驗證指令python val_dual.py多卡驗證指令python -m torch.distributed.launch --nproc_per_node 8 val_dual.py

驗證成功

配置推理超參數

修改detect_dual.py

?開始推理

單卡推理指令python detect_dual.py多卡推理指令python -m torch.distributed.launch --nproc_per_node 8 detect.py

只要把需要推理的圖片放在./datasets/images/test2017文件夾中,運行推理命令即可

推理的結果保存在runs\detect\exp?

可以查看評估一下

一些問題

遇到問題首先去官方issues里面查查

? 我的問題都能在這里解決

Q1

Q2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17442.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器數據恢復—服務器raid常見故障表現原因解決方案

RAID(磁盤陣列)是一種將多塊物理硬盤整合成一個虛擬存儲的技術,raid模塊相當于一個存儲管理的中間層,上層接收并執行操作系統及文件系統的數據讀寫指令,下層管理數據在各個物理硬盤上的存儲及讀寫。相對于單獨的物理硬…

2023年全國青少年人工智能創新挑戰賽真題

為了大家備考2024年第七屆全國青少年人工智能創新挑戰賽,今天分享2023年第6屆全國青少年人工智能創新挑戰賽C信息學專項真題,圖形化編程及Python編程基本大同小異,參考6547網的Python及圖形化編程題庫。 一、單項選擇題(共 15 題,每題 2 分,共…

jpom linux發布前端 ruoyi

前置條件 輔助安裝 一鍵安裝maven curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一鍵安裝node curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 服務下載啟動 下載安裝 安裝服務 安裝服…

vscode中使用conda虛擬環境

每一次配置環境,真的巨煩,網上的資料一堆還得一個個嘗試,遂進行整理 1.準備安裝好Anaconda 附帶一篇測試教程,安裝anaconda 2.準備安裝vscode 安裝地址:Visual Studio Code 3.創建Conda環境 搜索框搜索Anaconda…

位運算符——原碼-反碼-補碼(重點 難點)【二進制在運算中的說明】

如果連二進制的知識還沒搞懂, 那么計算機最基礎的你都還沒明白, 所以2進制對我們程序員來說, 是必會, 必學的知識 二進制在運算中的說明: 一. 二進制是逢2進位的進位制, 0,1是基本算符 二. 現代的電子計算機技術全部采用的是二進制, 因為它只使用0, 1兩個數字符號,非常簡單…

Nginx添加訪問密碼

安裝密碼生成工具 yum -y install httpd-tools生成用戶和密碼文件 [rootlocalhost nginx]# htpasswd -c /usr/local/nginx/password web01 New password: 這里輸入密碼 Re-type new password: 再次輸入密碼 Adding password for user web01參數說明: web01 是自定…

文章解讀與仿真程序復現思路——電力自動化設備EI\CSCD\北大核心《計及液態空氣儲能與綜合需求響應的綜合能源系統低碳經濟調度》

本專欄欄目提供文章與程序復現思路,具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

HTML靜態網頁成品作業(HTML+CSS)——游戲陰陽師介紹網頁(4個頁面)

🎉不定期分享源碼,關注不丟失哦 文章目錄 一、作品介紹二、作品演示三、代碼目錄四、網站代碼HTML部分代碼 五、源碼獲取 一、作品介紹 🏷?本套采用HTMLCSS,未使用Javacsript代碼,共有4個頁面。 二、作品演示 三、代…

Android ANR簡介

ANR(App not respond)是Android定義的一種穩定性問題類型;系統發出關鍵消息,同時發出此消息的超時消息。處理邏輯有兩種情況: 關鍵消息被執行,超時消息被清除;ANR不會發生超時消息被執行&#x…

JAVASE2

封裝的步驟: 1、所有屬性私有化,使用private關鍵字進行修飾,private表示私有的,修飾的所有數據只能在本類中訪問 2、對外提供簡單入口:比如說被private修飾的成員變量,在其他類中只能通過getXxx/setXxx方法…

網絡風暴:揭秘DDoS攻擊的幕后黑手

在數字化時代的浪潮中,網絡攻擊已成為一種新型的戰爭手段。其中,分布式拒絕服務攻擊(DDoS)以其強大的破壞力和隱蔽性,成為網絡安全領域的一大挑戰。DDoS攻擊通過發動海量的惡意流量,如同狂風暴雨般席卷目標…

如何設置遠程桌面連接?

遠程桌面連接是一種方便快捷的遠程訪問工具,可以幫助用戶在不同地區間快速組建局域網,解決復雜網絡環境下的遠程連接問題。本文將針對使用遠程桌面連接的操作步驟進行詳細介紹,以幫助大家快速上手。 步驟一:下載并安裝遠程桌面連接…

芯片絲印反查

芯片絲印反查網 - IC芯片絲印,IC芯片代碼,IC芯片印字,IC芯片頂標,SMD code,marking code,top mark芯查查-電子信息產業數據引擎 ic/芯片絲印反查網-芯查查

各種情況下的線纜大小選擇

開口線鼻子和導線對應大小 開口銅鼻子對應線徑大小 變壓器容量對應高壓側電流大小 開關電流線纜功率對照表 家庭/工業最常用電線銅線電流承載功率 電工常用名詞對應符號 導線面積承載的安全載流量及允許負荷對照表 漏電保護器選擇參考表 電動機功率換算電流 電機功…

Python正則模塊re方法介紹

Python 的 re 模塊提供了多種方法來處理正則表達式。以下是一些常用的方法及其功能介紹: 1. re.match() 在字符串的開始位置進行匹配。 import repattern r\d string "123abc456"match re.match(pattern, string) if match:print(f"匹配的字符…

代碼隨想錄——最大二叉樹(Leetcode654)

題目鏈接 遞歸 二叉樹 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode rig…

.NET 輕量級、高效任務調度器:ScheduleTask

前言 至于任務調度這個基礎功能,重要性不言而喻,大多數業務系統都會用到,世面上有很多成熟的三方庫比如Quartz,Hangfire,Coravel 這里我們不討論三方的庫如何使用 而是從0開始自己制作一個簡易的任務調度,如果只是到分鐘級別的粒…

全能集成開發平臺Team·IDE

三甲醫院的床位太難等了。反正也是小手術,老蘇周五在附近找了家二甲醫院,幸運的是,門診迅速為我開具了入院證。周六早晨就接受了手術,周日掛了一天水,周一下午就出院了。準備在家先休息兩天。 2~4 周之后把支架取出來…

阿里云海外視頻安全的DRM加密

隨著科技的進步,視頻以直播或錄播的形式陸續開展海外市場,從而也衍生出內容安全的問題,阿里云在這方面提供了完善的內容安全保護機制,適用于不同的場景,如在視頻安全提供DRM加 由圖可以了解到阿里云保護直播安全的方法…

Java的 File類

Java的 File類 File類:相關方法:構造方法:創建文件/目錄:重命名:判斷:獲取:刪除: 路徑:相關操作:操作1:目錄存在:一層級的目錄不存在:…