yolov9從頭開始訓練
一、準備數據集
數據集相關文件存放布局如下
yolov9-datasets
├── train
│ ├── images
│ │ ├── image.jpg
│ │ ├── ······
│ └── labels
│ ├── image.txt
│ ├── ······
├── valid
│ ├── images
│ │ ├── image.jpg
│ │ ├── ······
│ └── labels
│ ├── image.txt
│ ├── ······
└── test
├── images
│ ├── image.jpg
│ ├── ······
└── labels
├── image.txt
├── ······
我們通常將數據集劃分為訓練集(train set)、驗證集(validation set)和測試集(test set),如上圖所示,但不一定三個集合都需要準備,根據你得需求來。
訓練集:
用于訓練模型的數據集。模型通過訓練集中的樣本進行學習和參數調整,以優化其性能,訓練集是必需的。
驗證集:
用于選擇模型的超參數和進行模型選擇的數據集。超參數是指在訓練過程中無法從數據中學習的參數,例如學習率、正則化項的權重等,通過在驗證集上評估不同超參數設置和模型架構的性能,可以選擇表現最好的模型并進行模型選擇。
因此,如果你是做實際應用,那么這個集合也必須加上,否則會造成過擬合。
測試集:
用于最終評估模型性能的數據集。測試集是模型最后才能接觸到的數據,用于模擬模型在實際應用中的性能。
在模型選擇和超參數調優完成后,使用測試集對模型進行最終評估,以了解模型的泛化能力和性能。這個集合并不是必須的,它只是最終評估模型的泛化性能用,并不像前兩個數據集合那樣會對訓練過程產生影響。
所以,如果不需要將泛化性能以具體數據顯現出來,那么這部分可以刪除。
二、環境準備
項目地址:WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (github.com)
首先將yolov9的整個項目文件夾下載下來,放在你喜歡的地方,然后使用命令行進入項目的目錄內,接著進行下面的步驟:
(1)虛擬環境
使用依次下列命令創建一個虛擬環境并激活,請確保你的系統已安裝好anaconda,可以使用conda命令
conda create -n yolov9 python=3.11 -y
conda activate yolov9
(2)GPU環境
首先使用【nvidia-smi
】命令查看GPU的CUDA版本,如下圖所示
Pytorch官網:Start Locally | PyTorch
打開pytorch官網,找到pytorch安裝命令,其中CUDA版本(一般)來說需要小于等于上圖中顯示的版本,二般情況我不管,如下圖所示:
安裝完成后,檢驗環境是否可用,依次運行以下命令
python
import torch
torch.cuda.is_available()
如果命令行返回了True
則表示可用,否則不可用,不可用則換pytorch版本,現在我默認可用了,如下所示,返回了True:
(yolov9) root@7l13t4gko7nqs-0:/17106# python
Python 3.11.8 (main, Feb 26 2024, 21:39:34) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
(3)項目環境
進入yolov9主目錄后,運行以下代碼,完成最后一個環境的安裝:
pip install -r requirements.txt
三、配置參數文件
(1)數據集配置文件
首先在【yolov9-main/data】目錄下,創建一個后綴名為yaml的文件,文件名取決于你,比如我使用的是YOLOv9-GELAN模型,因此我取名為【YOLOv9-GELAN.yaml】。
該文件內容如下,第1,2,3行分別是訓練集,驗證集和測試集的圖片所在文件夾的路徑,names下面是類別索引和類別名的映射。需要注意的是此處類別和序號的對應要與你標注數據集時,類別的順序一致,否則將引發錯誤。
train: /17106/Pengcaiping/datasets/recombination/train/images
val: /17106/Pengcaiping/datasets/recombination/valid/images
#test:
names:
0: paper
1: plastic
2: metal
3: clothing
4: other
(2)參數配置文件
首先在【yolov9-main/models/detect】目錄下(假設你也是做目標檢測),打開【gelan.yaml】進行編輯,該文件內容如下:
# YOLOv9# parameters
nc: 5 # number of classes
depth_multiple: 1.0 # model depth multiple
width_multiple: 1.0 # layer channel multiple
#activation: nn.LeakyReLU(0.1)
#activation: nn.ReLU()# anchors
anchors: 3# gelan backbone
backbone:
省略一千字
僅修改類別數量,即【nc】后面的數字,改成你的類別數量,比如我有5個類別,所以填了5。
(3)訓練文件修改
打開主目錄下【train.py】文件,調到下圖所示位置,然后進行參數修改:
①填我們之前配置好的參數文件的路徑
②填我們之前配置好的數據集配置文件的路徑
③由于yolov9剛發布這里需要修改為【data/hyps/hyp.scratch-high.yaml】才能運行,否則會報錯,如果后續修復了,讀者可提醒我修改此處。
④訓練輪次,根據你的硬件性能,數據集大小等來決定要設置為多少,一般來說不要太多,因為太多可能會過擬合。
⑤batch-size是一次同時處理的樣本數量,如果你GPU性能可以上天,顯存可以下地那么可以調大一下,目前我設置為64,輸入單樣本大小為 480 × 640 480\times640 480×640,消耗顯存45G;如果顯存小就調小點。
四、訓練
在配置好的環境中,運行以下代碼開始從0訓練
python train.py
五、最后的一點話
本數量,如果你GPU性能可以上天,顯存可以下地那么可以調大一下,目前我設置為64,輸入單樣本大小為 480 × 640 480\times640 480×640,消耗顯存45G;如果顯存小就調小點。
四、訓練
在配置好的環境中,運行以下代碼開始從0訓練
python train.py
五、最后的一點話
時過境遷,當讀者你看到此教程時,可能距離作者收筆此文相去已久,若未能解決你的問題,作者深感抱歉。若讀者發現某些地方已經不再適合當下,可以私聊或者評論區告知,我會及時進行修改!