YOLOv5分割訓練,從數據集標注到訓練一條龍解決

最近進行了分割標注,感覺非常好玩,也遇到了很多坑,來跟大家分享一下,老樣子有問題評論區留言,我會的就會回答你。

第一步:準備數據集

1、安裝標注軟件labelme如果要在計算機視覺領域深入的同學,最好先下載好conda,主要作用是可以創建虛擬環境,在虛擬環境中配置python運行的包,避免不同軟件運行所需環境相互影響出現未知bug。具體安裝congda過程可以在CSDN搜索。conda安裝完成后,打開conda創建虛擬環境,name為虛擬環境名稱,3.8為要安裝的python版本,這里推薦對各個包適配更好的3.8版本。
conda create --name=labelme python=3.8

安裝完成后,使用conda activate labelme 進入創建好的虛擬環境,在安裝labelme之前先切換pip下載源到國內下載源,我這里使用的清華源。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安裝labelme

pip install labelme

安裝完成后,輸入labelme即可打開程序,如下圖即為成功
labelme界面
點擊上面OpenDir打開存放要標注的圖片的文件夾,點擊上面CreatePolygons即可進入標注,點擊一下便是一個點,把你要進行分割的東西圈起來,就會彈出下面的框,輸入你標注的名稱。
labelme標注
標注完成后,將json文件和圖片保存在一個文件夾內,使用下面腳本。

import json
import glob
import osimport cv2
import numpy as npjson_path = r"D:"; #此處填寫存放json文件的地址
labels = ['1','2']#此處填寫你標注的標簽名稱
json_files = glob.glob(json_path + "/*.json")for json_file in json_files:print(json_file)f = open(json_file)json_info = json.load(f)# print(json_info.keys())img = cv2.imread(os.path.join(json_path, json_info["imagePath"]))height, width, _ = img.shapenp_w_h = np.array([[width, height]], np.int32)txt_file = json_file.replace(".json", ".txt")f = open(txt_file, "a")for point_json in json_info["shapes"]:txt_content = ""np_points = np.array(point_json["points"], np.int32)norm_points = np_points / np_w_hnorm_points_list = norm_points.tolist()print()if point_json['label'] == labels[0]:txt_content += "0 " + " ".join([" ".join([str(cell[0]), str(cell[1])]) for cell in norm_points_list]) + "\n"elif point_json['label'] == labels[1]:txt_content += "1 " + " ".join([" ".join([str(cell[0]), str(cell[1])]) for cell in norm_points_list]) + "\n"f.write(txt_content)

使用上面腳本即可將json文件格式轉為YOLO訓練的txt格式,將圖片和txt文件分別放入img文件夾和txt文件夾,使用以下腳本進行劃分訓練、測試集。

import os
import random
import shutilrootpath = r'D:\a/'#此處為img和txt文件夾存放位置,地址后面要有/結尾set1 = ['images','labels']
set2 = ['train','val']
for s1 in set1:if not os.path.exists(rootpath+s1):os.mkdir(rootpath+s1)for s2 in set2:if not os.path.exists(rootpath+s1+'/'+s2):os.mkdir(rootpath+s1+'/'+s2)# 這是原始圖片路徑
img_path = rootpath+'img'
# 這是生成的txt路徑
txt_path = rootpath+'txt'
file_names = os.listdir(img_path)
l = 0.8
n = len(file_names)
train_files = random.sample(file_names, int(n*l))
for file in file_names:print(file)if not os.path.exists(txt_path+'/'+file[:-3]+'txt'):os.remove(img_path+'/'+file)print(file[:-3]+'txt,不存在')continueif file in train_files:shutil.copy(img_path+'/'+file,rootpath+'images/train/'+file)shutil.copy(txt_path+'/'+file[:-3]+'txt',rootpath+'labels/train/'+file[:-3]+'txt')else:shutil.copy(img_path+'/'+file,rootpath+'images/val/'+file)shutil.copy(txt_path+'/'+file[:-3]+'txt',rootpath+'labels/val/'+file[:-3]+'txt')
print('ok!!')
print(len(train_files))

劃分好數據集后會出現下面兩個文件夾。
訓練文件夾
在YOLOv5文件夾的data文件夾內創建s-seg.yaml文件,將下面內容復制進去。

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:\a  # dataset root dir 
train : D:\a\images\train #此處填寫上面劃分好數據集的images文件夾下train
val: D:\a\images\val #此處填寫上面劃分好數據集的images文件夾下val# Classes
names : #此處為標簽序號和標簽名0: 11: 2

完成以上步驟即可進行第二步訓練。

第二步:訓練模型

打開YOLOv5文件夾內的segment文件夾中的train.py文件,從網上下載yolov5s-seg.pt文件放入該文件夾內,–data改為:

    parser.add_argument('--data', type=str, default=ROOT / 'data/s-seg.yaml', help='dataset.yaml path')

運行即可,訓練出的模型在runs文件夾下train-seg文件夾下。

第三步:測試模型

打開YOLOv5文件夾內的segment文件夾中的predict.py文件,更改第243行附近的以下內容。
–weights是剛訓練好的模型位置,是絕對路徑
–source是要進行測試的圖片位置,是絕對路徑

    parser.add_argument('--weights', nargs='+', type=str, default=ROOT / r'd:\yolov5-master\runs\train-seg\exp\weights\best.pt', help='model path(s)')parser.add_argument('--source', type=str, default=ROOT / r'D:\test\tudi', help='file/dir/URL/glob/screen/0(webcam)')

測試完成的結果保存在runs文件夾內的predict-seg文件夾內,打開可以查看。

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

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

相關文章

TC397 EB MCAL開發從0開始系列 之 [15.2] Fee配置 - QsBlock demo

一、Fee配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 Fls_17_Dmu配置3.2.4 Fee配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試4.1 工程編譯4.2 測試結果4.3 測例源碼->

基于STC12C5A60S2系列1T 8051單片讀寫掉電保存數據IIC總線器件24C02一字節并顯示在液晶顯示器LCD1602上應用

基于STC12C5A60S2系列1T 8051單片讀寫掉電保存數據IIC總線器件24C02一字節并顯示在液晶顯示器LCD1602上應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹IIC通信簡單…

致遠M3 反序列化RCE漏洞復現(XVE-2023-24878)

0x01 產品簡介 M3移動辦公是致遠互聯打造的一站式智能工作平臺,提供全方位的企業移動業務管理,致力于構建以人為中心的智能化移動應用場景,促進人員工作積極性和創造力,提升企業效率和效能,是為企業量身定制的移動智慧…

15.Python 異常處理和程序調試

1. 異常處理 異常就是在程序執行過程中發生的超出預期的事件。一般情況下,當程序無法正常執行時,都會拋出異常。 在開發過程中,由于疏忽或考慮不周,出現的設計錯誤。因此,在后期程序調試中應該根據錯誤信息&#xff…

系統高可用設計-有感

文章目錄 系統設計原則是 冗余 取舍系統運維的原則是規避線上異常 高可用設計通常從 系統設計和 系統運維 2 個層面來著手突破。 系統設計原則是 冗余 取舍 冗余:指集群部署 故障轉移取舍:常見手段包括:超時控制、降級、限流 系統運維…

音視頻項目—基于FFmpeg和SDL的音視頻播放器解析(二十)

介紹 在本系列,我打算花大篇幅講解我的 gitee 項目音視頻播放器,在這個項目,您可以學到音視頻解封裝,解碼,SDL渲染相關的知識。您對源代碼感興趣的話,請查看基于FFmpeg和SDL的音視頻播放器 如果您不理解本…

springboot(ssm災害應急救援平臺 應急管理平臺Java(codeLW)

springboot(ssm災害應急救援平臺 應急管理平臺Java(code&LW) 開發語言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服務器:tomcat 數據庫:mysql 5.7(或8.0&#x…

AOP(面向切面編程)

AOP是針對面向對象編程的一種補充,有時使用面向對象不能很好完成一些額外的功能業務時,可以采用AOP來進行補充。切面編程的目的就是為了將業務目標進行而外的增強或者擴展。Spring中的AOP是基于JDK動態代理和CGLIB動態代理實現的。 應用場景 日志操作&…

【數據結構(四)】前綴、中綴、后綴表達式(逆波蘭表達式)和逆波蘭計算器的代碼實現(2)

文章目錄 1. 前綴表達式(波蘭表達式)1.1. 前綴表達式的計算機求值 2. 中綴表達式3. 后綴表達式(逆波蘭表達式)3.1. 后綴表達式的計算機求值3.2. 逆波蘭計算器的實現 4. 中綴表達式 轉 后綴表達式4.1. 思路分析4.2. 代碼實現 5. 逆波蘭計算器的完整版 1. 前綴表達式(波蘭表達式)…

手寫數字可視化_Python數據分析與可視化

手寫數字可視化 手寫數字流形學習 手寫數字 手寫數字無論是在數據可視化還是深度學習都是一個比較實用的案例。 數據在sklearn中,包含近2000份8 x 8的手寫數字縮略圖。 首先需要先下載數據,然后使用plt.imshow()對一些圖形進行可視化: 打開c…

Mysql 鎖機制分析

整體業務代碼精簡邏輯如下: Transaction public void service(Integer id) {delete(id);insert(id); }數據庫實例監控: 當時通過分析上游問題流量限流解決后,后續找時間又重新分析了下問題發生的根本原因,現將其總結如下&#xf…

XDR 網絡安全:技術和最佳實踐

擴展檢測和響應(XDR)是一種安全方法,它將多種保護工具集成到一個統一的集成解決方案中。它為組織提供了跨網絡、端點、云工作負載和用戶的廣泛可見性,從而實現更快的威脅檢測和響應。 XDR的目標是提高威脅檢測的速度和準確性&…

Arduino驅動防水型SHT20溫濕傳感器(溫濕度傳感器)

目錄 1、傳感器特性 2、控制器和傳感器連線圖 3、驅動程序 SHT20防水型溫濕傳感器,采用新一代Sensirion濕度和溫度傳感器,配有4代CMOSens芯片。除了配有電容式相對濕度傳感器和能隙溫度傳感器外,該芯片還包含一個放大器、A/D轉換器、OTP內存和數字處理單元,可精確測量周…

Linux系統介紹及文件類型和權限

終端:CtrlAltT 或者桌面/文件夾右鍵,打開終端 切換為管理員:sudo su 退出:exit 查看內核版本號:uname -a 內核版本號含義:5 代表主版本號;13代表次版本號;0代表修訂版本號;30代表修訂版本的第幾次微調;數字越大表示內核越新. 目錄結構 /bin:存放常用命令(即二進制可執行程序…

C/C++內存管理(2):`new`和`delete`的實現原理

new和delete操作自定義類型 class Stack { public:Stack(int capacity 3):_top(0), _capacity(capacity){cout << "Stack(int capacity 3)" << endl;_a new int[capacity];}~Stack(){cout << "~Stack()" << endl;delete _a;_to…

openssl+ RSA + linux 簽名開發實例(C++)

文章目錄 一、opensslRSA理論基礎二、openssl RSA 簽名開發實例 一、opensslRSA理論基礎 RSA簽名是一種非對稱加密算法&#xff0c;用于在信息傳輸過程中驗證消息的完整性和真實性。以下是RSA簽名的理論基礎的主要知識點&#xff1a; RSA密鑰對&#xff1a; RSA使用一對公鑰和…

pcie-2-rj45速度優化

背景: 目前用iperf3打流傳輸速率達不到要求,千兆實際要求跑到800M以上: 優化方案: 1.優化defconfig: 首先編譯user版本驗證看是否正常 debug版本關閉CONFIG_SLUB_DEBUG_ON宏控。 2.找FAE ,通過更換驅動,或者更新驅動來優化 3.綁定大核: 以8125網卡為例,udp…

【Unity】IBeginDragHandler、IDragHandler 和 IEndDragHandler 介紹

IBeginDragHandler、IDragHandler 和 IEndDragHandler 介紹 IBeginDragHandler、IDragHandler 和 IEndDragHandler 是 Unity 引擎中的三個接口&#xff0c;用于處理 UI 元素的拖放事件。這些接口通常結合使用&#xff0c;構成了 Unity 引擎的拖放事件系統。 IBeginDragHandler…

java--權限修飾符

1.什么是權限修飾符 就是是用來限制類中的成員(成員變量、成員方法、構造器、代碼塊...)能夠被訪問的范圍。 2.權限修飾符有幾種&#xff1f;各自的作用是什么&#xff1f; private<缺省<protected<public(范圍由小到大)

什么年代了,還不會 CI/CD 么?

目錄 什么是 CI/CD&#xff1f; CI/CD 對業務有哪些好處&#xff1f; 一&#xff1a;確保卓越的代碼質量 二&#xff1a;更快的發布速度 → 更快的交付 三&#xff1a;自動化降低成本 四&#xff1a;故障隔離 五&#xff1a;簡化回滾 六&#xff1a;持續反饋 七&#…