【保姆級目標檢測教程】Ubuntu 20.04 部署 YOLOv13 全流程(附訓練/推理代碼)

前言

YOLOv13 是 YOLO 系列的全新一代實時目標檢測框架,在保持極高推理速度的同時顯著提升了檢測精度,廣泛適用于嵌入式部署、工業質檢、智能安防等多種場景。該版本提供了 NanoSmallLargeX-Large 四種模型規格,用戶可以根據計算資源和具體任務需求靈活選擇最適合的模型。

YOLOv13 在結構設計上引入了多項關鍵創新:HyperACE 模塊(Hypergraph-based Adaptive Cross-scale Encoding) 通過將多尺度特征圖的像素視為超圖節點,使用可學習超邊構建自適應建模多尺度特征之間的高階語義關聯,并借助線性消息傳遞提高復雜環境下的特征融合與感知能力。FullPAD 機制(Full-pipeline Aggregation and Distribution) 基于 HyperACE 模塊,將增強后的跨尺度特征依次傳遞至骨干網絡、特征融合層(neck)以及檢測頭(head),實現網絡中信息的全路徑聚合與分發,從而顯著提升梯度傳導效率和多層特征協同表現。此外,為提升推理效率并減輕模型體積,YOLOv13 引入了一系列輕量化結構設計,使用 深度可分離卷積(Depthwise Separable Convolution, DSConv)替代大核普通卷積,有效減少參數量與計算開銷,同時保持或提升檢出準確率。

在這里插入圖片描述

本教程以 Ubuntu 20.04 操作系統 為基礎,面向個人開發者與工程實踐需求,詳細介紹 YOLOv13 的安裝配置、數據集準備、模型訓練與推理部署等完整流程,幫助讀者從零完成模型構建與應用。
在開始操作之前,請確保系統已正確安裝 AnacondaMiniconda,以便創建和管理 Python 虛擬環境;同時已安裝官方版本的 NVIDIA 顯卡驅動,以確保 GPU 能夠被正常識別并用于訓練或推理。可使用以下命令驗證 GPU 狀態,并記錄輸出中的 CUDA Version,后續安裝 PyTorch 時將作為參考:

nvidia-smi

nvidia-smi 示例輸出


一、下載 YOLOv13 源碼

YOLOv13 目前未歸屬于 Ultralytics 官方分支,通常采用開源社區維護版本。您可以選擇以下任一方式獲取源碼:

方式一:通過網頁手動下載

  1. 訪問 YOLOv13 項目主頁

  2. 點擊 Code > Download ZIP

    在這里插入圖片描述

  3. 下載后解壓至本地任意目錄。

方式二:通過 Git 克隆

git clone https://github.com/iMoonLab/yolov13.git
cd yolov13

二、配置運行環境

2.1 創建并激活 Conda 虛擬環境

conda create -n yolov13 python=3.11 -y
conda activate yolov13

建議使用 Python 3.11 版本以確保與依賴項(如 FlashAttention)兼容。

2.2 安裝依賴項

  1. requirements.txt 文件內容替換為以下:

    # torch==2.2.2 
    # torchvision==0.17.2
    # flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
    timm==1.0.14
    albumentations==2.0.4
    onnx==1.14.0
    onnxruntime==1.15.1
    pycocotools==2.0.7
    PyYAML==6.0.1
    scipy==1.13.0
    onnxslim==0.1.31
    onnxruntime-gpu==1.18.0
    gradio==4.44.1
    opencv-python==4.9.0.80
    psutil==5.9.8
    py-cpuinfo==9.0.0
    huggingface-hub==0.23.2
    safetensors==0.4.3
    numpy==1.26.4
    supervision==0.22.0
    thop
    seaborn
    
  2. 使用國內源安裝依賴

    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    

2.3 配置 PyTorch 環境

  1. 訪問 PyTorch 官網歷史版本頁

  2. 選擇 Pytorch Version >= 2.4.0 Conda/Wheel 安裝命令(CUDA 版本應不高于本機 nvidia-smi 輸出結果)

    在這里插入圖片描述
    3. 終端運行安裝命令

    pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121
    

2.4 安裝 FlashAttention(可選)

  1. 打開 FlashAttention Releases (Linux) 頁面

  2. 下載適配當前系統架構和 CUDA 版本的 .whl 文件(推薦 v2.7.3)至 yolov13 目錄下

    在這里插入圖片描述

  3. 執行安裝命令

    pip install ./flash_attn-2.7.3+cu12torch2.4cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
    

三、準備數據集

3.1 構建數據集目錄結構

  1. yolov13 目錄下新建 data 文件夾

  2. yolov13/data/ 目錄下建立以下文件夾:

    data/
    ├── Annotations/     # 存放 .xml 標注文件
    ├── images/          # 存放原始圖像(.jpg)
    ├── ImageSets/       # 數據集劃分列表
    └── labels/          # 轉換后的 YOLO 格式標簽
    

    建議使用 labelimg 工具對圖像進行 VOC 格式標注,標注結果保存為 .xml 文件置于 Annotations/ 文件夾

3.2 數據集劃分

在項目根目錄下創建 split_train_val.py 腳本,運行后將在 ImageSets/ 生成 train.txtval.txttest.txt 等文件

import os
import randomtrainval_percent = 0.9
train_percent = 0.9
xmlfilepath = 'data/Annotations'
txtsavepath = 'data/ImageSets'
total_xml = os.listdir(xmlfilepath)num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)ftrainval = open('data/ImageSets/trainval.txt', 'w')
ftest = open('data/ImageSets/test.txt', 'w')
ftrain = open('data/ImageSets/train.txt', 'w')
fval = open('data/ImageSets/val.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

3.3 轉換數據格式

使用 voc_label.py 將 VOC 標注轉為 YOLO 格式,并生成 labels/*.txttrain.txt 等路徑列表(請注意將 classes 列表修改為你的目標類別)

import xml.etree.ElementTree as ET
import os
from os import getcwdsets = ['train', 'val', 'test']
classes = ['填寫自己的類別']
abs_path = os.getcwd()
print(abs_path)def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(image_id):in_file = open('data/Annotations/%s.xml' % (image_id), encoding='UTF-8')out_file = open('data/labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):# difficult = obj.find('difficult').textdifficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 標注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()
for image_set in sets:if not os.path.exists('data/labels/'):os.makedirs('data/labels/')image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()list_file = open('data/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write(abs_path + '/data/images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

3.4 編寫數據集配置文件

yolov13/data目錄下創建 data.yaml,內容如下:

# 路徑請根據實際情況填寫,需為 train/val/test 圖片路徑列表的絕對路徑
train: /home/your_username/yolov13/data/train.txt
val: /home/your_username/yolov13/data/val.txt
test: /home/your_username/yolov13/data/test.txt# 修改為你的類別總數
nc: 5# 類別名稱列表,應與 voc_label.py 中填寫的類別順序完全一致
names: ['填寫自己的類別']

3.5 下載預訓練權重

  1. yolov13目錄下創建 weights 文件夾

  2. 打開 YOLOv13 項目主頁

  3. 下滑找到 YOLOv13-N YOLOv13-S ...,點擊并下載至 yolov13/weights 文件夾

    在這里插入圖片描述


四、模型訓練

在項目根目錄下創建 train.py,內容如下(根據需要修改對應參數):

from ultralytics import YOLOif __name__ == '__main__':# 初始化模型,加載預訓練權重model = YOLO('weights/yolov13n.pt')  # 可替換為 yolov13s.pt、yolov13m.pt 等其他版本# 啟動模型訓練results = model.train(data='/home/your_username/yolov13/data/data.yaml',  # 修改為您的數據集配置文件的絕對路徑epochs=180,      # 總訓練輪數,視數據集規模與性能要求調整batch=4,         # 每輪訓練的批量大小,取決于顯存大小(如 8GB 顯存建議 batch=4~8)workers=2,       # 數據加載線程數,推薦設為 CPU 核心數的一半左右imgsz=640,       # 輸入圖像尺寸,訓練時將圖像縮放至該大小(YOLO 通常為 640×640)mosaic=1.0,      # Mosaic 數據增強概率,范圍為 0.0~1.0(適當提高可增強魯棒性)mixup=0.0,       # MixUp 數據增強權重,適用于多目標融合背景,適當使用可緩解過擬合copy_paste=0.1,  # Copy-Paste 增強比例,常用于分割任務,對檢測任務影響較小device=0         # 訓練所使用的設備編號,0 表示第 1 塊 GPU;如無 GPU 請設置為 'cpu')

運行訓練命令:

python train.py

訓練過程中將自動保存模型權重與日志,默認輸出路徑為 runs/detect/ 目錄。


五、模型推理

  1. 靜態圖像或視頻文件推理:在項目根目錄下創建 inference.py 文件,用于實現對圖像或視頻文件的目標檢測功能,示例代碼如下:

    from ultralytics import YOLO
    import cv2if __name__ == '__main__':# 加載訓練好的模型model = YOLO('runs/detect/train/weights/best.pt')  # 修改為實際路徑,或替換為 yolov13n.pt 等預訓練權重# 指定輸入源,可為圖像路徑、視頻路徑results = model.predict(source='data/images/test.jpg',  # 輸入圖像路徑save=True,                      # 是否保存帶有預測框的輸出圖像conf=0.25,                      # 置信度閾值(過濾低置信度目標)iou=0.45,                       # NMS 閾值,用于消除重疊框device=0                        # 推理設備,0 表示使用 GPU,'cpu' 表示使用 CPU)
    

    默認預測結果將保存至 runs/detect/predict/ 目錄下

  2. 攝像頭畫面實時推理:在項目根目錄下創建 detect.py 文件,實現對來自本地攝像頭的視頻流進行實時目標檢測,示例代碼如下:

    import cv2
    from ultralytics import YOLOif __name__ == '__main__':# 加載模型model = YOLO('runs/detect/exp/weights/best.pt')  # 替換為你的權重路徑# 打開攝像頭cap = cv2.VideoCapture(0)if not cap.isOpened():print("無法打開攝像頭")exit()while True:ret, frame = cap.read()if not ret:print("無法讀取視頻幀")break# 推理results = model.predict(frame, conf=0.25, iou=0.45, device=0, verbose=False)# 可視化結果(Ultralytics 返回的是帶坐標的圖像)annotated_frame = results[0].plot()# 顯示圖像cv2.imshow('YOLOv13 Camera Detection', annotated_frame)# 按下 q 退出if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()
    

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

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

相關文章

【大模型】到底什么是Function Calling和MCP,以及和ReAct推理的關系是什么?

文章目錄背景:什么是Agent?背景:為什么需要Function Calling或者MCP?Function Calling和MCP在用戶請求中的整體流程Function Calling(函數/工具調用)MCP (Model Context Protocol)ReAct (Reasoning and Act…

CANDENCE 17.4 進行元器件緩存更新

在我從立創商城導入CANDENCE元器件后,在ORCAD放置元器件時出現了下面的錯誤解決辦法:1、在左邊找到 Design Cache文件夾,在文件夾上鼠標右擊選擇 Cleanup Cache2、再放置該元器件,不管這個,點擊確定3、這時候成功放上…

深入理解Kafka冪等性:原理、邊界與最佳實踐

一、什么是真正的消息冪等性? 消息系統的冪等性經常被誤解,我們需要明確其精確含義和能力邊界: 1. 正確定義 Kafka冪等性保證的是:在消息傳輸過程中,無論因網絡重試、生產者重啟等故障導致的消息重復發送,B…

【RTSP從零實踐】8、多播傳輸H264碼流的RTSP服務器——最簡單的實現例子(附帶源碼)

😁博客主頁😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客內容🤑:🍭嵌入式開發、Linux、C語言、C、數據結構、音視頻🍭 🤣本文內容🤣&a…

【Linux】基礎開發工具(3)

1. 版本控制器Git1.1 Git的簡史Git 的歷史可以追溯到 2005 年1。當時 Linux 內核項目的開發團隊一直使用 BitKeeper 進行版本管理,但由于一位 Linux 開發成員寫了一個連接 BitKeeper 倉庫的外掛,BitMover 公司決定中止 Linux 免費使用 BitKeeper 的授權1…

synchronized 的使用和特性

synchronized 鎖對象 普通方法 synchronized 鎖普通方法時,其鎖的對象是調用該方法的實例 public synchronized void method() { // 方法體 } 靜態方法 靜態方法的鎖對象是所屬的 class,全局只有一個。 public static synchronized void staticMetho…

Gin Web 層集成 Viper 配置文件和 Zap 日志文件指南(下)

在微服務架構中,Gin 常被用作 Web 層框架,而 Viper 用于管理配置文件,Zap 則提供高性能的日志記錄功能。下面將詳細介紹如何在 Gin Web 層集成 Viper 配置文件和 Zap 日志文件。 1. 項目概述 假設我們有一個基于 Go 語言的微服務項目&#…

IoTDB:專為物聯網場景設計的高性能時序數據庫

什么是IoTDB?IoTDB(Internet of Things Database)是一款開源的時序數據庫管理系統,專為物聯網(IoT)場景設計,由清華大學軟件學院團隊自研,天謀科技團隊負責維護。它針對物聯網數據的…

[netty5: MessageAggregator HttpObjectAggregator]-源碼解析

在閱讀這篇文章前,推薦先閱讀 [netty5: ByteToMessageCodec & MessageToByteEncoder & ByteToMessageDecoder]-源碼分析[netty5: HttpObject]-源碼解析 100-continue 100-continue 是 HTTP/1.1 協議中的一種機制,用于客戶端在發送大體積請求體…

前端學習1--行內元素 vs 塊級元素(基礎概念+案例實操)

一、內外邊距學習:(1)簡單理解:padding為內邊距。padding不會影響元素的位置,只會調整元素的內容(文字)與邊框之間的間距。margin為外邊距。margin會影響元素在流式布局中的位置,改變…

Express + mysql2 + jwt 實現簡單的登錄鑒權

目前項目中使用Express 實現簡單API功能,需要提供一套登錄鑒權方案。這邊是API側實現 相關路由的登錄鑒權。大體思路:就是,登錄接口中通過jwt加密 token返回前端,前端其他接口把加密好的放入請求頭Authorization中。中間件通過請求…

ReAct (Reason and Act) OR 強化學習(Reinforcement Learning, RL)

這個問題觸及了現代AI智能體(Agent)構建的兩種核心思想。 簡單來說,ReAct 是一種“調用專家”的模式,而強化學習 (RL) 是一種“從零試錯”的模式。 為了讓你更清晰地理解,我們從一個生動的比喻開始,然后進行…

iTwinjs 4.10-4.11 更新

撤銷更改 目前,撤銷一個有缺陷的變更集的唯一方法是從 iModel Hub 中移除它,這可能會導致許多副作用(無法撤銷)。一個更好的方法是在時間線中撤銷變更集,并將其作為新的變更集引入。盡管這種方法仍然具有侵入性&#…

【CSS-15】深入理解CSS transition-duration:掌握過渡動畫的時長控制

在現代網頁設計中,平滑的過渡效果是提升用戶體驗的關鍵因素之一。CSS transitions 為我們提供了一種簡單而強大的方式來實現元素在不同狀態之間的平滑過渡,而 transition-duration 屬性則是控制這些過渡效果時長的核心工具。本文將全面探討 transition-d…

mysql-筆記

1. 安裝mysql # 使用brew安裝 brew install mysql# 查看是否安裝成功 mysql -V 相關文檔: mac:macOS下MySQL 8.0 安裝與配置教程 - KenTalk - 博客園 Linux安裝:linux安裝mysql客戶端_linux mysql 客戶端-CSDN博客 2. 啟動mysql 每次使…

Spring Boot啟動優化7板斧(延遲初始化、組件掃描精準打擊、JVM參數調優):砍掉70%啟動時間的魔鬼實踐

Spring Boot啟動優化7板斧:砍掉70%啟動時間的魔鬼實踐1. 延遲初始化:按需加載的智慧2. 組件掃描精準打擊:告別無差別掃描3. JVM參數調優:啟動加速的隱藏開關4. 自動配置瘦身:砍掉Spring Boot的"贅肉"5. 類加…

從0開始學習計算機視覺--Day08--卷積神經網絡

之前我們提到,神經網絡是通過全連接層對輸入做降維處理,將輸入的向量通過矩陣和激活函數進行降維,在神經元上輸出激活值。而卷積神經網絡中,用卷積層代替了全連接層。 不同的是,這里的輸入不再需要降維,而…

解決阿里云ubuntu內存溢出導致vps死機無法訪問 - 永久性增加ubuntu的swap空間 - 阿里云Linux實例內存溢出(OOM)問題修復方案

效果圖報錯通過對實例當前截屏的分析發現,實例因 Linux實例內存空間不足,導致操作系統出現內存溢出(OOM) 無法正常啟動。請您根據 Code:1684829582,在文檔中查詢該問題對應的修復方案,并通過VNC…

Serverless JManus: 企業生產級通用智能體運行時

作者:叢霄、陸龜 概述:本文介紹如何使用 JManus 框架構建通用智能體應用,部署并運行在 Serverless 運行時,構建企業級高可用智能體應用的實踐經驗。基于阿里云 Serverless 應用引擎SAE 運行穩定高可用的智能體應用, 基…

MySQL的數據目錄

導讀:根據前面的所學知識,我們知道了InnoDB存儲引擎存儲數據的數據結構、存儲過程,而被組織好的數據則被存儲在操作系統的磁盤上,當我們在對表數據進行增刪改查時,其實就是InnoDB存儲引擎與磁盤的交互。此外&#xff0…