【語義分割】記錄2:yolo系列

圖像分割筆記

  • 1、源碼下載
  • 2、數據獲取
  • 3、環境配置
  • 4、模型訓練
  • 5、模型推理
  • 6、模型部署
    • 6.1 yolov5_flask學習
  • 7、版本上傳

1、源碼下載

git clone https://github.com/ultralytics/ultralytics.git

git回到對應版本:

方式一:使用 git checkout(臨時查看舊版本)

git checkout <commit-hash>
git checkout v8.3.170

方式二:使用 git reset(永久回退當前分支)

git reset --hard <commit-hash>

查看距離哪個標簽最近

# 查看某個提交的最近標簽
git describe abc1234# 只顯示標簽名(忽略距離)
git describe --tags --abbrev=0 abc1234# 查看當前提交的最近標簽
git describe

2、數據獲取

1、yolo官方分割數據集: https://docs.ultralytics.com/zh/datasets/segment/#ultralytics-yolo-format
https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip
2、 自己標注數據集
通過網盤分享的文件:馬
鏈接: https://pan.baidu.com/s/1vX9WokV8Nx-MzHXZt8Ppnw?pwd=4xca 提取碼: 4xca
3、參考鏈接
(1)基于YOLOv11的語義分割模型訓練自己的數據集:
https://blog.csdn.net/qq_51828120/article/details/147215779
(2)基于yolo11-seg的水果桃子語義分割:
https://mp.weixin.qq.com/s/a2Ln_zGvO07lep5oJqhZ4w?login=from_csdn

2、人工標注數據集后轉yolo
2.1 文件夾劃分
datadir_preprocess.py

import os
import shutil# 原始文件夾路徑
source_folder = r"D:\songlin\data\8.圖像分割相關\馬"# 創建目標文件夾
json_folder = os.path.join(source_folder, "json")
image_folder = os.path.join(source_folder, "image")# 如果目標文件夾不存在,則創建
os.makedirs(json_folder, exist_ok=True)
os.makedirs(image_folder, exist_ok=True)# 遍歷文件夾中的所有文件
for filename in os.listdir(source_folder):file_path = os.path.join(source_folder, filename)# 如果是JSON文件,移動到json_files文件夾if filename.endswith(".json"):shutil.move(file_path, os.path.join(json_folder, filename))# 如果是圖片文件(常見格式),移動到image_files文件夾elif filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):shutil.move(file_path, os.path.join(image_folder, filename))print("文件分類完成!")

2.2 數據集格式處理
json2yolo_seg.py

import os
import json# 指定JSON文件夾路徑和YOLO保存文件夾路徑
json_folder = r"D:\songlin\data\8.圖像分割相關\馬\json"  # 替換為實際的JSON文件夾路徑
yolo_save_folder = r"D:\songlin\data\8.圖像分割相關\馬\yolo_txt"  # 替換為實際保存YOLO txt文件的文件夾name = ["horse"] #標簽名
# 如果保存文件夾不存在,創建它
if not os.path.exists(yolo_save_folder):os.makedirs(yolo_save_folder)# 將實例分割數據轉換為YOLO格式
def convert_to_yolo_format(json_data, image_width, image_height):yolo_data = []shapes = json_data['shapes']for shape in shapes:label = shape['label']points = shape['points']# 獲取分割邊界框的x和y的最大最小值x_coords = [p[0] for p in points]y_coords = [p[1] for p in points]x_min = min(x_coords)x_max = max(x_coords)y_min = min(y_coords)y_max = max(y_coords)# 計算中心點,寬度和高度(歸一化到[0, 1]范圍)x_center = (x_min + x_max) / 2 / image_widthy_center = (y_min + y_max) / 2 / image_heightbbox_width = (x_max - x_min) / image_widthbbox_height = (y_max - y_min) / image_height# 歸一化分割點normalized_points = [(x / image_width, y / image_height) for x, y in points]# 創建YOLO格式的字符串 (格式: class_id x_center y_center width height seg_points)if label not in name:name.append(label)class_id = name.index(label)yolo_format = f"{class_id} {x_center} {y_center} {bbox_width} {bbox_height} "# 添加分割坐標點yolo_format += " ".join([f"{x} {y}" for x, y in normalized_points])yolo_data.append(yolo_format)return yolo_data# 遍歷文件夾中的所有JSON文件
for filename in os.listdir(json_folder):if filename.endswith(".json"):json_path = os.path.join(json_folder, filename)with open(json_path, 'r', encoding='utf-8') as f:json_data = json.load(f)# 獲取圖像大小image_width = json_data['imageWidth']image_height = json_data['imageHeight']# 轉換為YOLO格式yolo_data = convert_to_yolo_format(json_data, image_width, image_height)# 保存為txt文件txt_filename = os.path.splitext(filename)[0] + ".txt"txt_save_path = os.path.join(yolo_save_folder, txt_filename)with open(txt_save_path, 'w', encoding='utf-8') as f:for line in yolo_data:f.write(line + "\n")print("轉換完成并保存為YOLO格式!")

3、 數據集劃分

import os
import shutil# 原始文件夾路徑
source_folder = r"D:\songlin\data\8.圖像分割相關\馬"# 創建目標文件夾
json_folder = os.path.join(source_folder, "json")
image_folder = os.path.join(source_folder, "image")# 如果目標文件夾不存在,則創建
os.makedirs(json_folder, exist_ok=True)
os.makedirs(image_folder, exist_ok=True)# 遍歷文件夾中的所有文件
for filename in os.listdir(source_folder):file_path = os.path.join(source_folder, filename)# 如果是JSON文件,移動到json_files文件夾if filename.endswith(".json"):shutil.move(file_path, os.path.join(json_folder, filename))# 如果是圖片文件(常見格式),移動到image_files文件夾elif filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):shutil.move(file_path, os.path.join(image_folder, filename))print("文件分類完成!")

參考鏈接:
1、https://blog.csdn.net/zqq19980906_/article/details/143092674

3、環境配置

conda create -n yolov11 python==3.8.10 -y
conda activate yolov11
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu118
conda install cudatoolkit==11.8.0
# 找到cudnn地址,解壓進對應環境里的library文件夾下,將解壓后的cudnn文件夾直接復制進去替換
E:\software_install\miniconda\envs\yolov11\Library
pip install opencv-python tqdm pyyaml requests matplotlib pandas scipy

4、模型訓練

train.py

from ultralytics import YOLOif __name__ == '__main__':# model = YOLO(r'ultralytics/cfg/models/11/yolo11-seg.yaml')model = YOLO(r'yolo11n-seg.pt')model.train(data=r'data.yaml',imgsz=640,epochs=100,single_cls=True,batch=16,workers=10,device='0',)

5、模型推理

predict.py

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('runs/segment/train/weights/best.pt')model.predict(source=r'D:\songlin\data\8.圖像分割相關\馬\dataset\val\images\19302950_164550132000_2.jpg',imgsz=640,device='0',save=True,conf=0.25,line_width=4,box=True,show_labels=True,show_conf=True,retina_masks=True,show=True  # 新增,實時顯示預測結果窗口)

6、模型部署

6.1 yolov5_flask學習

1、 環境配置

 conda create -n yolov5_flask python=3.8 -ypip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu118pip install flask opencv-python pyyaml matplotlib scipy tqdm

下載yolov5_v3.0版本,這個不需要操作,yolov5版本不能setup.py安裝
在這里插入圖片描述
代碼存儲鏈接:https://gitee.com/songyulining/yolov5_flask_vue

2、npm前端環境配置
安裝Node.js
https://nodejs.org/zh-cn
安裝依賴

npm install

7、版本上傳

git remote set-url origin https://gitee.com/songyulining/yolov11_seg_run.git
git push origin HEAD:refs/heads/v8.3.170

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

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

相關文章

ubuntu22.04系統 算力4090服務器 病毒防護 查殺等 運維入門(三)clamAV工具離線查殺

以下有免費的4090云主機提供ubuntu22.04系統的其他入門實踐操作 地址&#xff1a;星宇科技 | GPU服務器 高性能云主機 云服務器-登錄 相關兌換碼星宇社區---4090算力卡免費體驗、共享開發社區-CSDN博客 兌換碼要是過期了&#xff0c;可以私信我獲取最新兌換碼&#xff01;&a…

微信小程序文件下載與預覽功能實現詳解

在微信小程序開發中&#xff0c;文件處理是常見需求&#xff0c;尤其是涉及合同、文檔等場景。本文將通過一個實際案例&#xff0c;詳細講解如何實現文件的下載、解壓、列表展示及預覽功能。 功能概述 該頁面主要實現了以下核心功能&#xff1a; 列表展示可下載的文件信息支持 …

postgresql執行創建和刪除時遇到的問題

刪除數據庫的時候出現的問題 有連接在占用 postgres=# DROP DATABASE "subgraph-dev"; ERROR: database "subgraph-dev" is being accessed by other users DETAIL: There is 1 other session using the database.強制斷開在用的連接 -- 替換 subgraph…

linux 應用層直接操作GPIO的方法

了解&#xff01;你使用的是 Rockchip RK3588S 平臺&#xff0c;需要操作 GPIO3_D5_d 這個引腳&#xff08;即 MCU_JTAG_TMS_M1/.../GPIO3_D5_d&#xff09;。以下是基于你提供的系統信息的具體操作步驟&#xff1a;&#x1f50d; 第一步&#xff1a;確認 GPIO 系統編號 在 RK3…

JavaScript核心概念全解析

目錄 1. 作用域 (1) 局部作用域 (2) 全局作用域 2. 垃圾回收 (1) 引用計數法 (2) 標記清除法 3. 閉包 (1) 作用 (2) 風險 4. 變量提升 (1) var (2) let 和 const (3) const 5. 函數提升 (1) 函數聲明 (2) 函數表達式 6. 函數參數 (1) 動態參數 (2) 剩余參數…

力扣刷題(第一百天)

靈感來源 - 保持更新&#xff0c;努力學習- python腳本學習提莫攻擊解題思路初始化總中毒時間 total。遍歷每次攻擊的時間點&#xff08;從第二個開始&#xff09;&#xff1a;計算當前攻擊與前一次攻擊的時間間隔 gap。若 gap < duration&#xff0c;則本次中毒時間為 gap&…

JMeter 性能測試實戰筆記

JMeter 性能測試實戰筆記 本文檔是一份詳細的 JMeter 指南&#xff0c;涵蓋了從創建測試計劃、執行測試到解讀性能結果的全過程。 一、創建測試計劃 一個完整的測試計劃是執行性能測試的基礎。下面將分步介紹如何創建一個針對文件上傳接口的測試場景。 第一步&#xff1a;添加線…

圖像處理:第二篇 —— 選擇鏡頭的基礎知識及對圖像處理的影響

一、圖像傳感器的典型應用圖像處理過程大致可分為如下四步&#xff1a;1.拍 攝 按下快門&#xff0c;拍攝圖像2.傳 送 將圖像數據由照相機傳送到控制器。3.處 理 前處理 : 對于圖像數據進行加工&#xff0c;使其特征更加明顯。測算處理 : 根據圖像數據對于損…

Linux 系統文件夾結構及用途說明

Linux 系統采用樹形文件結構&#xff0c;每個目錄都有明確的功能定位&#xff0c;遵循 FHS&#xff08;Filesystem Hierarchy Standard&#xff09; 標準。以下是新安裝系統后主要文件夾的用途&#xff1a;一、根目錄&#xff08;/&#xff09;核心文件夾1. /bin&#xff1a;基…

[spring6: HttpSecurity]-全新寫法

HttpSecurity HttpSecurity 是 Spring Security 中用于配置基于 HTTP 請求的安全策略的核心構建器&#xff0c;支持細粒度控制請求授權、認證、登錄、登出、CSRF、CORS、會話管理等安全功能。 package xyz.idoly.demo;import org.springframework.context.annotation.Bean; imp…

MIPI DSI 轉 1LVDS ,分辨率1920*1080.

一款橋接芯片&#xff0c;它接收 MP DSI 輸入并發送 LVDS 輸出。MlPI DSI 支持至多 4 條通道&#xff0c;每條通道的最大傳輸速率為 1Gbps&#xff0c;總的最大輸入帶寬為 4Gbps&#xff0c;并且還支持 MlPI 定義的 ULPS&#xff08;超低功耗狀態&#xff09;。LVDS 輸出采用 V…

墨者:SQL手工注入漏洞測試(MySQL數據庫)

一、SQL手工注入漏洞測試(MySQL數據庫) 本文以墨者學院靶場為例&#xff0c;演示MySQL數據庫的手工SQL注入全過程。靶場以自己的地址為準&#xff1a;http://124.70.64.48:47777/new_list.php?id1 二、注入原理與流程&#xff08;如下指令去掉了id之前的內容&#xff09; M…

idea打開后project窗口未顯示項目名稱的解決方案

前言 今天上班后&#xff0c;打開了idea發現之前project窗口中的項目都不見了&#xff0c;啥也沒有&#xff0c;見下圖原因 一般為配置文件*.iml 出錯了。 解決方案1 方法1&#xff1a;若知道出錯的具體位置與原因&#xff0c;用文本編輯器打開*.iml文件&#xff0c;找到出錯位…

不一樣的Mysql安裝方式

文章目錄MySQL介紹與安裝MySQL介紹基本安裝下載打開網址點擊點擊選擇LTSwindows選擇zip壓縮包格式&#xff0c;mac OS選擇dmg格式。不需要注冊登陸網站&#xff0c;直接謝謝&#xff0c;繼續下載即可。解壓復制bin路徑配置環境變量搜索點擊環境變量點擊用戶變量的Path 或 系統變…

MyBatis高級應用實戰指南

MyBatis高級應用實例 以下是MyBatis高級應用實例,涵蓋復雜查詢、動態SQL、插件開發、緩存優化等場景,幫助深入掌握MyBatis核心技術。 動態SQL構建 Example 1: 多條件動態查詢 使用<if>和<where>標簽實現條件組合: <select id="findUsers" resu…

Xilinx-FPGA-PCIe-XDMA 驅動內核兼容性問題修復方案

問題1&#xff1a;implicit declaration of function "mmiowb()"解決方法&#xff1a;在 libxdma.c 和 cdev_xvc.c 文件中注釋掉所有 mmiowb () 函數調用問題2&#xff1a; "macro"access_ok"passed 3 arguments, but takes just 2"解決方法&…

ThreadLocal--ThreadLocal介紹

&#x1f9e0; 一、什么是 ThreadLocal&#xff1f; ThreadLocal 是 Java 提供的一種 線程本地變量機制&#xff1b; 每個線程都維護一份自己的副本&#xff1b; 它不用于多個線程共享變量&#xff0c;而是用于每個線程獨立維護自己的變量副本&#xff1b; 常用于&#xff1…

AWS云S3+Glue+EMRonEC2+ReadShift

Amazon S3&#xff08;Amazon Simple Storage Service&#xff09;即亞馬遜簡單存儲服務&#xff0c;是 AWS&#xff08;Amazon Web Services&#xff09;提供的一種對象存儲服務&#xff0c;在大數據領域被廣泛使用。以下是關于它的詳細介紹&#xff1a;基本概念Amazon S3 主要…

OpenLayers 綜合案例-軌跡回放

看過的知識不等于學會。唯有用心總結、系統記錄&#xff0c;并通過溫故知新反復實踐&#xff0c;才能真正掌握一二 作為一名摸爬滾打三年的前端開發&#xff0c;開源社區給了我飯碗&#xff0c;我也將所學的知識體系回饋給大家&#xff0c;助你少走彎路&#xff01; OpenLayers…

語音自動生成PPT、思維導圖、會議紀要、筆記、大綱、導讀等

一、需要用到錄音工具&#xff0c;手機端工具&#xff1a;訊飛聽見二、需要用到的工具通義&#xff1a;https://www.tongyi.com/discover上傳錄音&#xff0c;描述一下&#xff0c;讓直接給生成PPT就行&#xff0c;點生成就可以生成ppt&#xff0c;對PPT進行導出就行 三、除了生…