YOLOv10最詳細全面講解1- 目標檢測-準備自己的數據集(YOLOv5,YOLOv8均適用)

YOLOv10沒想到出來的如此之快,作為一名YOLO的愛好者,以YOLOv5和YOLOv8的經驗,打算出一套從數據集裝備->環境配置->訓練->驗證->目標追蹤全系列教程。請大家多多點贊和收藏!!!YOLOv5和YOLOv8親測全都適用
廢話不多說,直接開搞!!!

1.準備圖片文件

這里也沒什么好說的,關鍵要提一點就是,將所有圖片文件先放入到一個目錄文件夾中,便于后續劃分訓練集,測試集和驗證集,同時不能有重復文件名,每一張圖片最好取一個合適的名字,例如下圖,我的每個圖片前綴fish1表示來自fish1視頻,后綴000001表示第一幀畫面。圖片文件jpg、png都可以,我這里是.jpg
在這里插入圖片描述

2.準備labels標簽文件

這里很關鍵,很多同學可能之前用的另外的模型訓練,用的labels是coco格式或者其他格式,但是這里需要統一轉成YOLO格式的labels。
準備一個目錄,準備存放所有的labels標簽文件。如下圖,我的文件夾中已經準備好了所有的標簽文件,可以看到,文件名與上述的圖片文件名是一一對應的,只是這里都是.txt文件。
在這里插入圖片描述
我們再來看每個txt文件里面到底是什么?下面是我的fish1_000001.txt文件內容:

0 0.441753 0.815461 0.061021 0.042763
0 0.395895 0.759868 0.066198 0.046053
0 0.497781 0.744737 0.060651 0.039474
0 0.575629 0.787171 0.059541 0.042763
0 0.566568 0.727303 0.059911 0.059868
0 0.561206 0.691447 0.058802 0.096053
0 0.523669 0.681908 0.054734 0.042763
0 0.549741 0.648355 0.061760 0.038816
0 0.622411 0.646382 0.051775 0.069079
0 0.700999 0.786184 0.056583 0.080263
0 0.688425 0.724671 0.041050 0.091447
0 0.679734 0.651974 0.062870 0.040789
0 0.669009 0.602632 0.044379 0.053947
0 0.614645 0.605263 0.049556 0.040789
0 0.568047 0.573355 0.049556 0.051974
0 0.529216 0.597697 0.052515 0.057237
0 0.470969 0.637171 0.057322 0.061184
0 0.452663 0.610197 0.063609 0.050658
0 0.396820 0.694408 0.054734 0.055921
0 0.340843 0.636322 0.053254 0.044737
0 0.280325 0.584211 0.051775 0.046053
0 0.346339 0.583553 0.057322 0.048684
0 0.711169 0.438158 0.024408 0.080263
0 0.681583 0.399342 0.023669 0.063158
0 0.367973 0.515132 0.036243 0.076316
0 0.353365 0.551645 0.042530 0.050658
0 0.296783 0.542763 0.029956 0.082895
0 0.249815 0.515461 0.024038 0.075658
0 0.286612 0.434868 0.035503 0.075000
0 0.286428 0.404276 0.019601 0.059868
0 0.375899 0.377303 0.040680 0.059868
0 0.560466 0.312171 0.030695 0.053289
0 0.538092 0.280592 0.011095 0.034868
0 0.543454 0.226316 0.028476 0.040789
0 0.357618 0.301974 0.017751 0.061842
0 0.386280 0.271711 0.037352 0.032895
0 0.397374 0.195395 0.040311 0.030263
0 0.280695 0.127632 0.035503 0.044737
0 0.338203 0.103289 0.041050 0.032895
0 0.405141 0.130263 0.043269 0.028947
0 0.429364 0.150987 0.043639 0.032237
0 0.429179 0.469079 0.038831 0.077632
0 0.427885 0.563158 0.048077 0.061842
0 0.482618 0.563487 0.064349 0.037500
0 0.551960 0.517105 0.051405 0.061842
0 0.549001 0.501316 0.040311 0.035526
0 0.718565 0.525329 0.028107 0.083553
0 0.655695 0.468750 0.023669 0.082237
0 0.697115 0.466776 0.025148 0.078289
0 0.526759 0.414306 0.034834 0.074178
0 0.533284 0.438158 0.039941 0.088158
0 0.506102 0.464145 0.029956 0.086184
0 0.477905 0.518336 0.045632 0.035868
0 0.387759 0.472039 0.049186 0.050658
0 0.381074 0.085451 0.036084 0.032638
0 0.394362 0.080737 0.032274 0.035539
0 0.323364 0.128533 0.037740 0.021592
0 0.435300 0.400431 0.040496 0.046112
0 0.372879 0.218283 0.038384 0.046645
0 0.337794 0.199641 0.031705 0.033257
0 0.291575 0.334826 0.022722 0.063849
0 0.245625 0.194227 0.015614 0.058296
0 0.644136 0.353197 0.014138 0.071395
0 0.589170 0.371263 0.016498 0.079026
0 0.627219 0.565461 0.063609 0.044079
0 0.626233 0.482260 0.031350 0.051836
0 0.630899 0.382102 0.019793 0.078401
0 0.561601 0.367086 0.024320 0.070987
0 0.585442 0.457530 0.034834 0.066480
0 0.255194 0.422036 0.016150 0.083941
0 0.314734 0.420063 0.017419 0.091270
0 0.268748 0.304063 0.033887 0.059151
0 0.266533 0.270260 0.033251 0.067046
0 0.326387 0.277299 0.022485 0.063099
0 0.318628 0.231951 0.022167 0.060283
0 0.258423 0.212891 0.034530 0.047336
0 0.274588 0.165941 0.032992 0.045776
0 0.358741 0.198010 0.014479 0.047928
0 0.367082 0.158563 0.041420 0.032928
0 0.601516 0.529605 0.061021 0.040789
0 0.301596 0.261954 0.022874 0.055553
0 0.312095 0.159832 0.032837 0.040757
0 0.334209 0.162372 0.036901 0.040559
0 0.367411 0.122694 0.033750 0.026086
0 0.411428 0.278618 0.014423 0.037500
0 0.389238 0.328289 0.026257 0.056579

可以看到里面是一行一行的數據組成,那么每行數據的每個數據分別表示什么意思呢?
以第一行數據0 0.441753 0.815461 0.061021 0.042763為例,第一個0表示目標框框住物體的類別,我的數據集中只有魚一個類別,因此都是每一行的第一個數據都是0,如果你自己的數據集有四類,假設有貓,狗,人,魚,那么你可以將0-貓,1-狗,2-人,3-魚。
再看后面幾個小數, 0.441753 0.815461表示的目標框的中心點,0.061021 0.042763表示的是目標框的長和寬。這里又有同學要問了,為什么中心點和長寬都是小數?這就和YOLO創始人定義的labels格式有關了,這是人家定義的規則,我們照著做就行。那么具體是什么規則呢?
解釋如下:
在這里插入圖片描述
因此請各位自己根據自己標注的目標框轉換成對應的YOLO目標框格式數據。上述我的該label文件中有87行數據,表示的是這一張圖片中有87個目標框,每個目標框對應的類別都是0-魚。如果有不知道如何轉數據的同學,點贊收藏該博客然后關注我私聊,單獨一對一教學

3.按比例劃分數據集

在各位同學按照前三步準備好了圖片和labels標簽的前提下,按照YOLO系列的官方推薦比例訓練集:驗證集:測試集=7:2:1劃分。
首先提前定義好存放訓練集、驗證集和測試集的空文件夾:
文件夾目錄如下:
在這里插入圖片描述
train、valid和test目錄中都是如下結構:
在這里插入圖片描述

提供以下腳本:

import os
import random
import shutil# 設置目錄路徑
image_dir = 'D:/ModelsDatas/test/allimgs'  # 改成你自己的原圖片目錄
label_dir = 'D:/ModelsDatas/test/alllables'  # 改成你自己的原標簽目錄# 獲取圖片和txt文件列表
images = os.listdir(image_dir)
labels = os.listdir(label_dir)# 隨機打亂圖片列表
random.shuffle(images)# 計算訓練集、驗證集和測試集的數量
total_images = len(images)
train_count = int(total_images * 0.7)
val_count = int(total_images * 0.2)
test_count = total_images - train_count - val_count# 分配文件到訓練集、驗證集和測試集
train_images = images[:train_count]
val_images = images[train_count:train_count + val_count]
test_images = images[train_count + val_count:]# 移動文件到對應的目錄
for image in train_images:# 移動圖片和標簽到訓練集目錄shutil.move(os.path.join(image_dir, image), 'D:/ModelsDatas/YOLO_datasets/train/images') # 請改成你自己的訓練集存放圖片的文件夾目錄shutil.move(os.path.join(label_dir, image[:-4]+'.txt'), 'D:/ModelsDatas/YOLO_datasets/train/labels')# 請改成你自己的訓練集存放標簽的文件夾目錄for image in val_images:# 移動圖片和標簽到驗證集目錄shutil.move(os.path.join(image_dir, image), 'D:/ModelsDatas/YOLO_datasets/valid/images')# 請改成你自己的驗證集存放圖片的文件夾目錄shutil.move(os.path.join(label_dir, image[:-4] + '.txt'), 'D:/ModelsDatas/YOLO_datasets/valid/labels')# 請改成你自己的驗證集存放標簽的文件夾目錄for image in test_images:# 移動圖片和標簽到測試集目錄shutil.move(os.path.join(image_dir, image), 'D:/ModelsDatas/YOLO_datasets/test/images')# 請改成你自己的測試集存放圖片的文件夾目錄shutil.move(os.path.join(label_dir, image[:-4] + '.txt'), 'D:/ModelsDatas/YOLO_datasets/test/labels')# 請改成你自己的測試集存放標簽的文件夾目錄

4.準備yaml文件,用于后續訓練

文件命名為data.yaml,建議先放在與train、test和valid同級目錄下,如下所示:
在這里插入圖片描述
data.yaml中文件內容和說明如下:

names: # class names- 0:fish # 類別號: 類別名稱 (需要改成自己的)#-1:cat #如果還有其他類別,以此往下加就行了,類別號請認真和自己當時目標框labels文件中的一一對應#-2:dog
nc: 1 # number of classes 數據集中一共有幾個類別,參考上面說的
path: ultralytics/datasets/det/fish2 # 數據集路徑(需要改成自己的,也就是train、test和valid目錄的上級目錄)
train: train/images # 訓練集路徑(相對于數據集路徑)
val: valid/images # 驗證集路徑(相對于數據集路徑)
test: test/images # 測試集路徑(相對于數據集路徑)

如上,YOLO需要的自己數據集就構建完成了,接下來就是訓練啦!!!還請各位同學多多點贊收藏,你們的認可是我繼續更新更好文章的最大動力!!!

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

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

相關文章

dubbo復習:(13)把服務劃分為不同的group 和version,只有服務端和客戶端group和version匹配才能通信

一、接口定義 package cn.edu.tju.service;public interface DevelopService {String invoke(String param); }二、兩個版本的實現: package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboService;DubboService(group "group1"…

bert模型數據集加載方式

數據集構造 無論是機器學習還是深度學習對于數據集的構造都是十分重要。 現記錄一下PyTorch 的 torch.utils.data.Dataset 類的子類。Dataset 類是PyTorch框架中用于處理數據的基本組件,它允許用戶定義自己的數據集類,以滿足特定任務的需求。 Dataset…

重學英語:輸出的重要性

精通一門外語的四要素:聽,說,讀,寫 輸入:聽,讀 輸出:寫,說 因為輸入是我們可以單獨完成,不需要有人互動,所以我們做得最多 輸出練習做得很少,…

Redis中的數據結構與內部編碼

本篇文章主要是對 Redis 常見的數據結構進行講解,同時還對其所對應的不同的內部編碼進行講解。希望本篇文章會對你有所幫助。 文章目錄 一、五大數據結構 二、數據結構對應的編碼方式 String hash list set zset 🙋?♂? 作者:Ggggggtm &…

js 面試題學習筆記一

1、什么是防抖和節流?有什么區別?如何實現? 防抖:觸發高頻事件后N秒內函數只會執行一次,如果N秒高頻事件再次被觸發,則重新計算時間。(a時間觸發,5秒內執行一次,但是第4…

10G UDP協議棧 (9)UDP模塊

目錄 一、UDP協議簡單介紹 二、UDP功能實現 三、仿真 一、UDP協議簡單介紹 UDP協議和TCP協議同位于傳輸層,介于網絡層(IP)和應用層之間:UDP數據部分為應用層報文,而UDP報文在IP中承載。 UDP 報文格式相對于簡單&am…

電腦出現:excel詞典(xllex.dll)文件丟失或損壞的錯誤提示怎么辦?有效的將丟失的xllex.dll修復

當遇到 Excel 提示“詞典 (xllex.dll) 文件丟失或損壞”的問題時,通常意味著該動態鏈接庫文件(Dynamic Link Library,DLL),它與拼寫檢查功能相關聯的,無法被正確找到或者合適地使用。那么有什么辦法可以解決…

LLVM技術在GaussDB等數據庫中的應用

目錄 LLVM和數據庫 LLVM適用場景 LLVM對所有類型的SQL都會有收益嗎? LLVM在OLTP中就一定沒有收益嗎? GaussDB中的LLVM 1. LLVM在華為應用于數據庫的時間線 2. GaussDB LLVM實現簡析 3. GaussDB LLVM支持加速的場景 支持LLVM的表達式&#xff1a…

vue項目出現多次ElMessage

問題: 解決方法: let message null if (message null) { message ElMessage.error(“登錄過期,請重新登錄”); } 最終效果:只出現一個彈框

Orange AIpro Color triangle幀率測試

OpenGL概述 OpenGL ES是KHRNOS Group推出的嵌入式加速3D圖像標準,它是嵌入式平臺上的專業圖形程序接口,它是OpenGL的一個子集,旨在提供高效、輕量級的圖形渲染功能。現推出的最新版本是OpenGL ES 3.2。OpenGL和OpenCV OpenCL不同,…

實操專區-第15周-課堂練習專區-漏斗圖與金字塔圖

實操專區-第15周-課堂練習專區-漏斗圖 下載安裝ECharts,完成如下樣式圖形。 代碼和截圖上傳 基本要求:下圖3選1,完成代碼和截圖 完成 3.1.3.16 漏斗圖中的任務點 基本要求:2個選一個完成,多做1個加2分。 請用班級學號姓…

銀行對公貸款軟件業務流程詳解

對公貸款業務是指商業銀行向企事業單位提供資金支持,用于資本擴充、生產經營、項目建設等方面的融資。其目的在于支持企事業單位的發展,推動經濟增長。通過提供資金支持,企事業單位可以獲得必要的資金來擴大生產規模、提高生產能力、研發新產…

第8周 分布式事務與數據一致性主流解決方案落地

第8周 分布式事務與數據一致性主流解決方案落地 1. 最終一致性原理與解析2. 微服務的解耦3. 本地消息存儲4. 自定義事務管理器5. 本地消息刪除********************************************************************************** 本周拓展數據的一致性落地,采用弱…

【Java EE】網絡原理——HTTP請求

目錄 1.認識URL 2.認識“方法(method)” 2.1GET方法 2.1.1使用Fiddler觀察GET請求 2.1.2 GET請求的特點 2.2 POST方法 2.2.1 使用FIddler觀察POST方法 2.2.2 POST請求的特點 3.認識請求“報頭”(header) 3.1 Host 3.2 C…

Spring MVC 工作流程源碼分析

前言: 我們知道 Spring MVC 的核心是前端控制器 DispatcherServlet,客戶端所有的請求都會交給 DispatcherServlet 來處理,本篇我我們來分析 Spring MVC 處理客戶端請求的流程,也就是工作流程。 Sping MVC 只是儲備傳送門&#x…

Java整合EasyExcel實戰——3(上下列相同合并單元格策略)

參考&#xff1a;https://juejin.cn/post/7322156759443095561?searchId202405262043517631094B7CCB463FDA06https://juejin.cn/post/7322156759443095561?searchId202405262043517631094B7CCB463FDA06 準備條件 依賴 <dependency><groupId>com.alibaba</gr…

鄰接矩陣廣度優先遍歷

關于圖的遍歷實際上就兩種 廣度優先和深度優先&#xff0c;一般關于圖的遍歷都是基于鄰接矩陣的&#xff0c;考試這些&#xff0c;用的也是鄰接矩陣。 本篇文章先介紹廣度優先遍歷的原理&#xff0c;和代碼實現 什么是圖的廣度優先遍歷&#xff1f; 這其實和二叉樹的層序遍…

新人學習筆記之(數組1)

一、數組的概念 1.數組&#xff08;Array&#xff09;可以把一組相關的數據一起存放&#xff0c;并提供方便的訪問&#xff08;獲取&#xff09;方式 2.數組是指一組數據的集合&#xff0c;其中的每個數據被稱作元素&#xff0c;在數組中可以存放任意類型的元素&#xff0c;數組…

數據結構——二叉樹的基本應用

在此之前我們已經初步了解了二叉樹&#xff0c;在介紹堆的基本應用時&#xff0c;我們已經具體介紹了完全二叉樹的基本應用&#xff0c;本章我們介紹二叉樹的基本應用&#xff0c;這個不止指的是完全二叉樹&#xff0c;而是指泛型的二叉樹。 二叉樹的基本應用&#xff0c;由于…

代碼隨想錄算法訓練營第54天|● 392.判斷子序列 ● 115.不同的子序列

392. 判斷子序列 這個微軟面試的時候考過 雙指針就行 編輯距離入門題&#xff1a; 思路是一樣的 相同字符1 否則從前面順下來 class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp[[0]*(len(t)1) for _ in range(len(s)1)]for i in range(1,len(s)1):f…