(6)機器學習小白入門 YOLOv:圖片的數據預處理

(1)機器學習小白入門YOLOv :從概念到實踐
(2)機器學習小白入門 YOLOv:從模塊優化到工程部署
(3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能
(4)機器學習小白入門YOLOv :圖片標注實操手冊
(5)機器學習小白入門 YOLOv:數據需求與圖像不足應對策略
(6)機器學習小白入門 YOLOv:圖片的數據預處理
(7)機器學習小白入門 YOLOv:模型訓練詳解

在使用 YOLOv 模型進行目標檢測前,圖片的數據預處理是非常重要的一環,它決定了你訓練出來的模型效果好不好、能不能泛化到實際場景中。下面我為你詳細介紹 YOLOv 的數據預處理技術與步驟,幫助你更好地準備用于訓練的數據。


一、YOLO 數據集結構要求

1. 常見文件夾結構(如使用 darknet 格式):

yolov_dataset/
│
├── images/             # 放置圖片
│   ├── train/
│   └── val/
│
└── labels/              # 對應的標簽文件,即 label.txt 文件├── train/└── val/

2. 圖片命名要求:

  • 所有圖片以 .jpg 或者 .png 格式存儲;
  • train/val 中的圖像名稱要一致,如:
    images/train/1.jpg
    labels/train/1.txtimages/train/2.jpg
    labels/train/2.txt
    

3. label.txt 文件格式:

每張圖片對應的 label.txt 包含若干行(對應圖像中有多少個目標),每一行為如下結構:

class_id x_center y_center width height
  • x_center, y_center, width, height:歸一化的坐標,范圍 0~1。
  • class_id:目標類別在類列表中的索引編號(從 0 開始)。

🛠? 二、YOLO 數據預處理技術與步驟

1. 圖像標準化(Normalize Image)

將圖片尺寸統一到模型訓練時使用的大小,例如:

from PIL import Imagedef resize_image(img, target_size=(640, 640)): # YOLOv5 常用輸入分辨率return img.resize(target_size)

2. 圖像歸一化(Normalize Pixel)

YOLO 訓練過程中,一般使用以下方式進行圖像歸一:

import numpy as npdef normalize(img):# 將圖片轉換為 np.arrayimg_array = np.array(img) / 255.0  # 歸一到 [0,1] 區間return img_array

3. 標簽標準化處理(Label Normalization)

將標注文件中的 x_center, y_center, width, height 按圖像尺寸進行歸一化,例如:

def normalize_label(label_path, image_width, image_height):labels = []with open(label_path, 'r') as f:lines = f.readlines()for line in lines:parts = line.strip().split()class_id, x_center, y_center, width, height = map(float, parts)# 歸一化到 0~1x_center_norm = x_center / image_widthy_center_norm = y_center / image_heightwidth_norm = width / image_widthheight_norm = height / image_heightlabels.append(f"{int(class_id)} {x_center_norm:.6f} {y_center_norm:.6f} {width_norm:.6f} {height_norm:.6f}")return labels

4. 圖像增強(Image Augmentation)(可選,但推薦使用)

圖像增強是提高模型泛化能力的利器。你可以采用以下方式進行增強:

使用 albumentations 進行數據增強:
import albumentations as Atransform = A.Compose([A.HorizontalFlip(p=0.5),A.RandomBrightnessContrast(p=0.2),A.Rotate(limit=15, p=0.5),A.Cutout(num_holes=4, max_height=8, max_width=8, fill_value=0, p=0.3)
])def augment_image(img):return transform(image=np.array(img))['image']

5. 分割數據集(Train/Val/Test)

使用 sklearn 或自定義方式劃分訓練集與驗證集:

from sklearn.model_selection import train_test_split# 假設 images_list 是你的圖像文件名列表
train_files, val_files = train_test_split(images_list, test_size=0.2, random_state=42)

三、使用 LabelImg 等工具生成標簽(可選)

你還可以編寫腳本將 .xml 轉換為 YOLO 可讀的 label.txt 文件:

import xml.etree.ElementTree as ETdef convert_xml_to_yolo(xml_path, img_w, img_h):tree = ET.parse(xml_path)root = tree.getroot()labels = []for obj in root.findall('object'):class_name = obj.find('name').textclass_id = 0  # 根據你自己的類定義填寫 class_idbox = obj.find('bndbox')x_min = int(box.find('xmin').text)y_min = int(box.find('ymin').text)x_max = int(box.find('xmax').text)y_max = int(box.find('ymax').text)width = x_max - x_minheight = y_max - y_minxc = (x_min + x_max) / 2 / img_wyc = (y_min + y_max) / 2 / img_hw = width / img_wh = height / img_hlabels.append(f"{class_id} {xc:.6f} {yc:.6f} {w:.6f} {h:.6f}")return labels

四、預處理完整流程圖(可選)

你可以使用如下結構進行訓練數據的預處理:

圖片文件夾
圖像歸一化 & 標簽標準化
增強處理
劃分 Train/Val 集合
YOLO 數據集輸出格式

五、小結

步驟內容說明
圖像標準化調整圖片大小為統一尺寸
標簽處理將 label.txt 中的坐標歸一化到 [0,1]
數據增強(可選)通過旋轉、翻轉、亮度變換等方式增強多樣性
分割訓練/驗證集提升模型泛化能力和評估性能

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

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

相關文章

康謀新聞 | 康謀加入ASAM組織,全球首個ASIL-D認證自動駕駛仿真平臺aiSim引領安全新標桿

康謀新聞康謀科技正式加入全球汽車標準化組織 ASAM(Association for Standardization of Automation and Measuring Systems),成為其正式會員單位!ASAM作為國際汽車行業標準化領域的權威機構,致力于推動仿真、測試及數…

《PyQt6-3D:開啟Python 3D開發新世界》

一、引言 在 Python 的廣袤開發世界中,3D 開發領域正以驚人的速度蓬勃發展,為眾多領域帶來了前所未有的創新與變革。從沉浸式的游戲體驗到逼真的虛擬現實場景,從精準的工業設計模擬到生動的影視動畫制作,3D 技術的身影無處不在&am…

第一屆OpenHarmonyCTF--Crypto--WriteUp

第一屆OpenHarmonyCTF–Crypto–WriteUp Ea5y_rsa題目附件解壓后尋找有用的源代碼: // RsaUtil import { cryptoFramework } from kit.CryptoArchitectureKit; import { buffer } from kit.ArkTS;class RsaUtil{private keyPair: cryptoFramework.KeyPair | null n…

Copilot 在 VS Code 中的免費替代方案

## 引言隨著 GitHub Copilot 推出付費 Pro 版,許多開發者開始尋找免費替代方案。本文精選 7 款 2025 年主流免費 AI 編程工具,涵蓋不同使用場景和編程語言需求。## 主流替代方案對比| 工具名稱 | 核心優勢 | 支持語…

視頻能轉成gif動圖嗎?怎么弄?

在一些社交平臺中,分享短小有趣的片段。GIF自動循環播放,無需用戶點擊。兼容性高,幾乎所有平臺都支持直接預覽。例子:將電影/綜藝的搞笑片段轉為GIF傳播。游戲精彩操作截取為GIF分享。這就需要我們掌握把視頻轉換成gif動圖的技術&…

【Pyhton】Json.dump 語法說明

目錄json.dump() 的語法參數說明1. obj2. fp3. skipkeys4. ensure_ascii5. check_circular6. allow_nan7. cls8. indent9. separators10. default11. sort_keys**示例代碼****基本用法**使用 indent 和 separators使用 default 參數總結json.dump() 是 Python 中 json 模塊用于…

LangGraph-2-interrupt 流程中斷

interrupt 是 LangGraph 中一個強大的流程控制機制,允許在狀態機執行過程中根據特定條件中斷當前流程并跳轉到其他節點。這種機制特別適用于處理異常情況、用戶中斷或特定業務規則的觸發。在 LangGraph 中,interrupt_before 和 interrupt_after 是兩個強…

前綴和|差分

題目:MT2047距離平方和你有𝑛n個點,請編寫一個程序,求這𝑛n個點的距離的平方和。格式輸入格式:第一行:一個整數𝑛(0≤𝑛≤100000)n(0≤…

x86架構CPU市場格局

x86架構的CPU市場是全球處理器市場的核心,涵蓋PC(桌面端與移動端)、服務器和超算等領域,主要玩家為英特爾(Intel)和AMD。以下基于最新數據分析市場格局及各領域份額,輔以國產廠商動態。 1. 總體…

【Swift開發】屏蔽NSSecureCoding頻繁警告

解決 iOS 開發中 NSSecureCoding 警告的最佳實踐 問題背景 在開發 Mac 應用時,我遇到了一個令人困擾的問題:Xcode 控制臺不斷輸出 NSSecureCoding allowed classes list contains [NSObject class] 相關的警告信息。這些警告雖然不影響應用功能&#xff…

SpringBoot實現MCP

前言 之前的文章都是各種使用MCP,自從有了MCP我們立馬感受到大模型真的可以幫我們干活了,實際上當我們想把企業內部的業務向AI方向轉型的話主要就是實現MCP,另外加上多Agent在流程上的控制和自有的知識庫這就可以滿足企業80%的需求了,剩下的2…

windows對\和/敏感嗎?

在Windows系統中,路徑分隔符\和/的敏感性需要分情況來看: 1. 文件系統層面 Windows文件系統(如NTFS、FAT32)不區分\和/。 例如,以下路徑是等效的: C:\Users\Documents\file.txt C:/Users/Documents/file.tx…

緩存穿透與擊穿多方案對比與實踐指南

緩存穿透與擊穿多方案對比與實踐指南 問題背景介紹 在高并發的分布式系統中,緩存是提升讀寫性能的重要組件。但在實際生產環境中,經常會遇到兩類問題: 緩存穿透:客戶端頻繁請求不存在的數據,導致請求直達數據庫&#x…

【音視頻】HTTP協議介紹

參考博客:https://cloud.tencent.com/developer/article/2183902 一、HTTP協議概述 HTTP(HyperText Transfer Protocol) 即 超文本傳輸協議,它是一種用于分布式、協作式和超媒體信息系統的應用層協議。HTTP 是萬維網&#xff08…

神經網絡基礎及API使用詳解

一、神經網絡概述神經網絡是一種模仿生物神經網絡結構和功能的計算模型,它由大量的人工神經元相互連接構成,能夠通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。1.1 神經網絡的基本組成輸入層:接收原始數據隱藏…

分桶表的介紹和作用

一、分桶表的基本介紹1、什么是分桶表?分桶表主要是用于分文件的,在建表的時候,指定按照那些字段執行分桶操作,并可以設置需要分多少個桶,當插入數據的時候,執行MR的分區的操作,將數據分散各個分…

HighReport報表工具開始支持BS報表設計器

HighReport報表工具同時支持c/s報表設計器和b/s報表設計器,大部分情況下使用c/s報表設計器,在某些業務場景或者用戶自己簡單修改報表模板,可以用b/s報表設計器。b/s報表設計器和c/s報表設計器操作一樣b/s報表設計器免費下載免費使用(c/s報表設…

數據結構--堆的實現

目錄 一、堆的概念及結構 二、小根堆的實現 2.1 堆的數據結構 2.2 堆的初始化HeapInit 2.3 堆的銷毀HeapDestory 2.4 堆的插入HeapPush ?2.4.1 插入代碼HeapPush 2.4.2 向上調整代碼AdjustUp 2.4.3 交換數據代碼Swap 2.5 堆的刪除HeapPop 2.5.1 刪除代碼HeapPop 2…

evo軌跡評估工具

文章目錄evo參數設置evo_traj指標度量evo_apeevo_rpe結果比較evo工具主要有如下六個常用命令: evo_ape - 用于評估絕對位姿誤差;evo_rpe- 用于評估相對位姿誤差;evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能&#xf…

Django+DRF 實戰:自定義異常處理流程

文章目錄一、DRF 異常處理流程DRF 默認異常處理流程源碼二、實戰DRF 自定義異常處理流程應用自定義異常處理流程一、DRF 異常處理流程 DRF 默認異常處理流程 DRF默認的異常處理流程如下: 當異常發生時,會自動調用rest_framework.views.exception_hand…