Yolov5_v6.2訓練資料集進行預測

冷月發表於2023-01-16

Yolov5_v6.2訓練資料集進行預測

學習筆記

記錄一下第一次進行Yolov5的部署,除錯,訓練,預測。
第一次釋出在了CSDN:連結:
https://blog.csdn.net/C_1Y1_T/article/details/127691617?spm=1001.2014.3001.5502
現在在部落格園也釋出一下

1.Yolov5環境部署

  • 我使用的環境是:Yolov5_v6.2 + Minconda + torch_v1.13.0(CPU版本)

1.1.Minconda安裝

  • 這裡不是重點,可以查詢專門的安裝配置教程。
  • 使用Anaconda是一樣的。
  • 在安裝後,建議設定國內映象源,否則後面下載會很慢。

1.2.Pytorch安裝

  • 在Yolov5的requirements.txt中,有設定下載Pytorch,但Pytorch相對於其他東西比較大,所以這裡選擇單獨安裝,避免出錯。

  • 在Pytorch官網https://pytorch.org選擇配置(有NVIDIA獨顯和沒獨顯不一樣)後,複製生成的程式碼,在conda中安裝

  • 例如我這裡沒有NVIDIA的獨立顯示卡,所以選擇CPU版本

    #我選擇的CPU版本,生成的下載連結
    conda install pytorch torchvision torchaudio cpuonly -c pytorch
    

    image

  • 安裝完成後,檢視torch版本

    #python 檢視torch版本
    >>> import torch
    >>> print(torch.__version__)
    
    #python 判斷cuda能否使用
    >>> import torch
    >>> torch.cuda.is_available()
    #True 有cuda  False沒有cuda,我沒有NVIDIA獨顯且安裝的CPU版本,所以為False
    

    image

1.3.下載Yolov5模型

  • Github下載地址:https://github.com/ultralytics/yolov5
  • 如果訪問慢,可以訪問國內的Gitee,同步更新Github上的原始碼:https://gitee.com/monkeycc/yolov5
  • 我下載的是yolov5_v6.2版本,下載後,開啟yolov5的目錄

image

  • 在conda終端(建議單獨創一個訓練Yolo的虛擬環境),例如,我這裡建立了一個名為Yolov5的虛擬環境,在這個環境下,安裝Yolov5的requirements.txt中的包
  • 前面已安裝好Pytorch,安裝requirements.txt中的包時會自動檢測,只要滿足Yolov5的配置需求,就不會再下載Pytorch了(當然,前面下載Pytorch時,也應該放在同一個虛擬環境)
# 安裝requirements.txt中的依賴檔案
pip install -r requirements.txt  # install

1.4.下載Yolov5的權重檔案

  • 下載地址:https://github.com/ultralytics/yolov5/releases
  • 訓練速度:n>s>m>l>x,速度快,意味著精度低,但一般使用s就行了
    image
  • 下載後的.pt權重檔案可以直接放在yolov5的根目錄下,也可以在yolov5的根目錄下新建一個weights資料夾,把權重檔案放到裡面

2.在Pycharm中初步除錯執行yolov5

2.1.Pycharm配置conda虛擬環境

  • 在Pycharm中開啟yolov5資料夾,並配置好你之前建立的用於yolov5的虛擬環境
    image
    image

2.2. 執行yolov5根目錄下的detect.py

  • 執行yolov5根目錄下的detect.py,看能否正常執行(這個就是預測/目標檢測,在官方下載的yolov5中,已經配置好了示例用的引數,配置好環境後,就可以直接執行)
    image

  • 這樣就是執行成功,結果儲存在run\detect\exp4目錄中,預測結果如下:
    image
    image

  • 也可以在終端中執行
    image

2.3.可能存在的問題

  • 拋異常:AttributeError: 'Detect' object has no attribute 'm'
  • 解決:參考部落格:https://blog.csdn.net/Joseph__Lagrange/article/details/108255992
  • 建議使用官網上的每個版本對應權重檔案

3.訓練自己的資料集

  • 由於我的電腦沒有獨立顯示卡,所以我就不在本地進行訓練了,後面介紹使用雲伺服器進行訓練
  • 但在訓練我們自己的資料集之前,我們需要對進行訓練的圖片進行類別標註
  • 如果你使用官網或其他人的已經標註好的資料集(例如:yolov5中已經配置好模型,引數的COCO128資料集),則可以直接配置引數後進行訓練,不需要自己標註訓練用的圖片

3.1.圖片類別標註

  • 標註工具有很多,這裡我使用Labellmg,方便操作,且可以直接儲存為適用於yolo的.txt格式,省去了格式轉換的麻煩

3.1.1.Labellmg安裝

  • 官網下載地址:https://github.com/heartexlabs/labelImg

  • 安裝方式,以官網給出的Windows + Anaconda方式為例

    • 下載labellmg的code壓縮包,或使用git方式克隆到本地
    • 使用Anaconda Prompt進入下載的labellmg資料夾
      image
    #安裝配置相關環境
    conda install pyqt=5
    conda install -c anaconda lxml
    pyrcc5 -o libs/resources.py resources.qrc
    
    #啟動labellmg
    python labelImg.py
    
    #指定引數啟動labellmg
    python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
    
  • 每次啟動都需要到你的Labellmg的目錄下啟動,例如我這裡放在D:\DeveloperTools\labelImg目錄,啟動介面如下
    image

  • 安裝可能遇到的問題

# (1).出現:‘pyrcc5‘ 不是內部或外部命令,也不是可執行的程式 或批處理檔案。
# 解決:直接使用Anaconda/Minconda的預設(base)環境安裝即可,不要用自己另外建立的虛擬環境

#(2).出現:EnvironmentNotWritableError: The current user does not have write permissions to the target environm  當前使用者沒有對目標環境的寫入許可權
#解決:以管理員身份執行cmd或Anaconda Prompt即可

3.1.2.Labellmg使用

  1. 使用前的一個注意點

    • labellmg\data目錄下,存在一個predefined_classes.txt檔案
      image

    • predefined_classes.txt檔案記憶體在一些預設的標註型別,有15個,索引從0開始,[0,14]
      image

    • 需要注意,如果你用不到這麼多型別,則因該啟動labellmg之前就因該把這些預設刪除,或替換為自己需要的標註型別名稱,這些名稱的順序 必須和 你自己訓練資料時的 xxx.yaml檔案中標註的型別一致,且順序一致,索引從0開始,如果不一致,可能存在問題

    • 例如,後面我這裡才發現我只需要兩個類別,但最開始是有15個類別的
      image

    • 主要的原因就是我的兩個類別的順序索引和labellmg生成的標籤順序索引不一致,現在只能手動修改.txt中的索引了,所以建議一開始就指明自己需要哪些標籤類別
      image

  2. Labellmg使用

    • Labellmg的特點是可以自己選擇標註的儲存型別,而labelme是沒有的。
      image
  3. 使用時的一些設定

    • 設定標註的標籤的儲存路徑(資料夾)
      image

    • 設定自動儲存
      image

    • 快捷鍵:A:上一張圖,B:下一張圖,W:建立區塊(手動標註)

    • 標註時是滑鼠選擇一個起點後點選,按住滑鼠左鍵拖動,畫一個矩形框。
      image

    • 最終結果:一張圖片對應一個txt檔案
      image

3.2.train.py和detect.py引數瞭解

  • 參考影片:https://www.bilibili.com/video/BV1tf4y1t7ru/?spm_id_from=333.999.0.0&vd_source=45352058e2e0900c3d75ba93406d8fdb
  • 以下是觀看影片時做的筆記,可能有失偏頗,僅供參考,詳細的可以去看原影片

3.2.1.detect.py檔案部分引數

image

點選檢視detect.py的各引數含義
"""
# default是預設,action是選擇。需要的話自己配置引數
#有default值的引數,你不設定值,就會使用作者給你配好的預設引數值

*******************************下面是有default值的引數*************************************
1.'--weight' 權重
		default 'yolo5s.pt'表示預設選擇'yolo5s.pt'檔案進行訓練,也可以改為其他的權重檔案。
		例如'yolo5l.pt','yolo5m.pt','yolo5x.pt'

2.'--source' 資料來源
		2.1.default 'data/images'存放目標檢測檔案的資料夾,在/images資料夾中可以存放圖片/影片(圖片推薦.jpg,影片推薦.mp4格式),同時建議只放同一類的檔案型別,比如只放圖片,或只放影片。
		2.2.手機下載ip攝像頭,路徑改為http://admin:admin@手機上開啟之後顯示的ip地址,就可以實時檢測
		電腦要和他在同一WiFi下,ip地址:後面的也寫

3.'--data'
		default 'data/coco128.yaml' 預設使用官方yaml檔案

4.'--imgsz' 圖片尺寸大小
		default=[640] 預設檢測時設定圖片尺寸為640,這個和圖片本身的尺寸不想關,並不是說會把目標圖片的大小或輸出的圖片大小改為設定的大小,而是在檢測圖片時,會等比例縮放為指定尺寸,這樣比較節約算力資源,如果按照圖片原本的尺寸去檢測,如果原本的圖片尺寸很大,則需要更多的算力與時間去檢測。但縮放圖片比例去檢測也意味著檢測精度的損失。

5.'--conf-thres' 檢測閾值
		default=0.25 預設為0.25  檢測閾值設定越低,則檢測到的物體越多,但檢測精度也越低。在檢測結果中,圖片上會標出檢測到的物體有多少的機率是什麼已知的物體。比如:閾值設定越低,則可能將"貓"檢測標識為"狗"。反之,閾值設定得越高,則檢測精度越高,但檢測到的物體可能就很少,有時可能檢測不到物體。

6.'--iou-thres' 一般預設(NMS IoU threshold(閾值))
		default=0.45,數值越大,則檢測結果中每個目標的標註會很多(原理就是值越大,就代表檢測的塊必須完全一致才算同一部份,否則就會算多個不同的部分),反之,數值越小,則檢測結果中每個目標標註就會較少,因為會把相似的部分當作同一個部分來標註。

7.'--max-det'

8.'--device'裝置
		預設為空,會自動檢測使用的裝置,比如CPU,cuda等


*******************************下面是沒有default值的引數*************************************
#沒有default值的引數,不是需要設定什麼,而是使用者自己選擇是否啟用,預設為false,關閉狀態。如果使用者要啟用這些功能,只需要在執行時新增對應的引數(即設定為true)即可,執行時,會自動檢測,檢測到對應的引數為true,就會啟用對應的功能。
#比如在命令列中執行'detect.py'且實時顯示結果:
> python detect.py --view-img

9.'--view-img'實時顯示結果
		執行過程中,會實時顯示檢測出的結果,如果是圖片,則每張每張的顯示結果(注:如果檢測很多張圖片,不要設定這個引數,否則會把每一張圖片都挨個顯示出來),如果是影片,則以影片形式實時播放檢測結果(如果電腦卡,那就是一幀一幀的播放,所以也不太建議設定這個引數)

10.'--save-txt'儲存檢測結果中的標註的座標
		儲存結果為'.txt'檔案型別,結果中會多一個'./labels/'資料夾,儲存了生成的'.txt'檔案

11.'--save-conf' 儲存置信度

12.'--save-crop' 儲存裁剪的預測框

13.'--nosave' 不儲存檢測結果的圖片/影片

14.'--classes'過濾(可用於只保留指定的型別)
		在檢測中的'.txt'檔案中,儲存了檢測目標的 類別(用不同的數字表示不同的類別),還有座標資訊(x,y,w,h)
		例如:--classes 0 只保留0這個類別的檔案
		 		 --classes 0 2 3 只保留0,2,3這三個類別的檔案
		例如:".txt"檔案中,人這個類別用'0'表示,如果設定引數--classes 0 ,則結果圖片中只會檢測人這個類別,即使圖片中有車,訊號,動物等,都不會檢測。

15.'--agnostic-nms' 增強nms效果

16.'--augment' 增強檢測(識別度可能會有提升,但也有翻車的(把狗識別為人),結果中標註框的顏色會加深一些)

17.'--visualize' 視覺化特徵

18.'--update' 最佳化
		設定之後,會將執行過程中沒用到的部分設定為None,只儲存用到的部分


*******************************下面是有default值的引數*************************************
19.'--project' 檢測結果儲存的路徑
		default=ROOT / 'runs/detect' 即預設儲存到專案下的'runs/detect/'資料夾

20.'--name' 檢測結果儲存到的資料夾的名稱
		default='exp' 所以每次執行後,儲存結果的資料夾都叫'exp...'


*******************************下面是沒有default值的引數*************************************
21.'--exist-ok' 對於已存在的資料夾是否覆蓋
		預設為false,即:如果已存在'--name'引數指定的資料夾'exp',則建立新的資料夾儲存結果,例如'exp2'。
		同理,如果'exp2'也存在,就繼續增加數字,例如'exp3',直到不存在同名的資料夾
		如果使用者設定了這個引數,則表示,始終把檢測結果儲存到'--name'引數指定的資料夾'exp'中,即使'exp'資料夾存在,裡面有檔案,也會儲存到這裡面。


*******************************下面是有default值的引數*************************************
22.'--line-thickness'  官方解釋:help='bounding box thickness (pixels)' 邊界框厚度(畫素)
		default=3

23.'--hide-labels'  官方解釋:help='hide labels' 隱藏標籤
		default=False

24.'--hide-conf' 官方解釋:help='hide confidences' 隱藏置信度


*******************************下面是沒有default值的引數*************************************
25.'--half' 官方解釋:help='use FP16 half-precision inference' 使用FP16半精確推理

26.'--dnn' 官方解釋:help='use OpenCV DNN for ONNX inference' 使用OpenCV DNN進行ONNX推理


*******************************下面是有default值的引數*************************************
27.'--vid-stride' 官方解釋:help='video frame-rate stride' 影片幀速率步幅
		default=1,即預設一幀一幀的處理
"""
  • Pycharm中設定執行detect.py時的引數

  • 在命令列中加入引數,就是加在python detect.py的後面,例如python detect.py --view-img
    image

  • 引數中設定外部圖片資料夾
    image

  • 設定外部影片檔案
    image
    image

3.2.2.train.py檔案部分引數

  • 主要引數如下
    image
    image
點選檢視train.py的各引數含義
"""
# default是預設,action是選擇。需要的話自己配置引數

*******************************下面是有default值的引數*************************************
#有default值的引數,你不設定值,就會使用作者給你配好的預設引數值

1.'--weights'
		default='yolov5s.pt' 預設使用'yolov5s.pt'權重檔案進行訓練。也可以改為其他的權重檔案。
		例如'yolo5l.pt','yolo5m.pt','yolo5x.pt',當然你也可以使用其他訓練好的權重檔案。
		如果是自己訓練資料集,則可以設定空參(即:default=''),讓程式來生成權重檔案。

2.'--cfg' 訓練用的模型檔案
		default='' 預設為空,可以自己新增,例如使用官方的模型,在專案的'/models/'資料夾下
		官方的有:'yolov5l.yaml','yolov5m.yaml','yolov5n.yaml','yolov5s.yaml','yolov5x.yaml'模型

3.'--data' 指定訓練用的資料集
		default='data/coco128.yaml' 預設使用官方的資料集圖片(coco128即coco資料集的前128張圖片,因為完整的coco資料集圖片很多),開啟'data/coco128.yaml'檔案,可以發現其中指定的內容:
		如果在本地專案中沒有找到coco128資料集,則會自動下載,但由於有些電腦可能自動下載失敗,可以複製給出的下載連結,手動去下載。download: https://ultralytics.com/assets/coco128.zip
		'coco128.yaml'中還指定了資料集的路徑:path,train(訓練集),val(驗證集),test(測試集)的路徑。
		其中 #Classes表示類別,names總共有80個,表示分了80個類別
		當然,也可以使用其他的資料集,例如'coco.yaml','VOC.yaml'等官方提供的,或是別人的。
		
4.'--hpy' 超引數,用於對專案進行微調
		default='data/hyps/hyp.scratch-low.yaml'  需要指定檔案路徑
		需要注意:官方的'data/hyps/'資料夾下的'.yaml'檔案並不適合每個資料集,例如'hyp.scratch-low.yaml'的開頭幾行就標明瞭:# Hyperparameters for low-augmentation COCO training from scratch #用於從無到有的低增強COCO訓練的超引數,即這個超引數檔案只適用於COCO資料集進行訓練

5.'--epochs' 訓練幾輪
		default=300,預設為訓練300輪

6.'--batch-size' 批次大小(一次訓練多少張圖片)(一次處理的資料量多少)
		default=16,跑多少的資料打包成一個batch送到網路中,低配電腦建議調小,否則可能會爆視訊記憶體
		建議default=4

7.'--imgsz' 設定訓練時影像的大小(不是把訓練的圖片的尺寸改為指定的尺寸)
		default=640


*******************************下面是沒有default值的引數*************************************

8.'--rect' 矩陣訓練
		以前,對於不是正方形的圖片,會自動填充圖片邊緣使其成為一個正方形圖片,現在用矩陣訓練,在滿足網路模型輸入要求的時候,就可以不必填充,原來是一個長方形圖片,還是按長方形算,減少不必要的冗餘資訊,提高處理效率。

9.'--resume' 從最近的(上一個)訓練模型中繼續訓練(斷點續訓)
		default=False
		如果要使用,除了啟用設定引數,還需要指定上一個訓練模型的路徑(.pt檔案的路徑)
		將default=False改為default='權重.pt檔案的路徑'
		斷點續訓,這個在epoch(訓練次數)太多,訓練容易卡死時可設定,這樣就可以接著上一次中斷的地方繼續訓練。
		例如:上一次訓練到第7輪時中斷了,則可以設定這個引數,這樣就可以從第7輪繼續訓練。
		但需要注意,不是指定了一個.pt檔案就可以了,還需要原來訓練時的所有相關聯的檔案。

10.'--nosave'   help='only save final checkpoint'只儲存最後一次訓練的權重檔案
		訓練過程中,每一輪都會生成一個.pt權重檔案,但訓練次數越多,權重檔案的精度越好。

11.'--noval'   help='only validate final epoch' 僅驗證最後一輪
		一般是每一輪都會驗證。有些版本的這個引數叫'--notest'

12.'--noautoanchor'  help='disable AutoAnchor' 禁用自動定位(禁用錨點)
		以前檢測影像,需要一個一個遍歷,有了錨點後,就能快速定位,減少資源佔用。所以預設是開啟錨點的

13.'--noplots'  help='save no plot files'不儲存列印檔案

14.'--evolve' help='evolve hyperparameters for x generations'
		調整超引數的一種方式,對引數進行遺傳演算法

15.'--bucket' help='gsutil bucket'

16.'--cache' 快取影像
		help='--cache images in "ram" (default) or "disk"' 在RAM或DISK(磁碟)中快取影像,以提供更快的速度
		預設關閉狀態

17.'--image-weights' help='use weighted image selection for training' 使用加權影像選擇進行訓練
		理解:在上一輪的測試中,對於某些效果不太好的圖片,在下一輪測試中加一些權重

18.'--device' 裝置
		預設為空,會自動檢測使用的裝置,比如CPU,cuda等

19.'--multi-scale' 對影像進行縮放比例變換

20.'--single-cls'  help='train multi-class data as single-class'訓練的資料集是單類別還是多類別
		資料集影像中,每一種物體定義為一個類別,例如:人、車、狗、貓......

21.'--optimizer'  help='optimizer' 最佳化器
		choices=['SGD', 'Adam', 'AdamW'], default='SGD' 官方提供了3種,預設為'SGD'

22.'--sync-bn' help='use SyncBatchNorm, only available in DDP mode'
		僅對於那些有很多張顯示卡的電腦/伺服器,可以適用DDP分散式訓練

23.'--workers'  help='max dataloader workers (per RANK in DDP mode)' 最大資料載入器工人數
		對於DDP模式的引數設定


*******************************下面是有default值的引數*************************************
24.'--project' 訓練資料集後的輸出路徑
		 default='runs/train'

25.'--name' 訓練結果儲存到的資料夾的名稱
		default='exp' 所以每次執行後,儲存結果的資料夾都叫'exp...'


*******************************下面是沒有default值的引數*************************************
26.'--exist-ok'  對於已存在的資料夾是否覆蓋
		預設為false,即:如果已存在'--name'引數指定的資料夾'exp',則建立新的資料夾儲存結果,例如'exp2'。
		同理,如果'exp2'也存在,就繼續增加數字,例如'exp3',直到不存在同名的資料夾
		如果使用者設定了這個引數,則表示,始終把檢測結果儲存到'--name'引數指定的資料夾'exp'中,即使'exp'資料夾存在,裡面有檔案,也會儲存到這裡面。

27.'--quad' help='quad dataloader' 四資料載入器
		實驗性功能,可能效果會更好,但也不確定,有時也更差

28.'--cos-lr' help='cosine LR scheduler' 餘弦排程
		如果開啟,適用餘弦方式進行處理(餘弦退火演算法),如果沒有開啟則使用線性處理


*******************************下面是有default值的引數*************************************
29.'--lable-smoothing' elp='Label smoothing epsilon' 標籤平滑
		避免在一些分類演算法中,一些過擬合的情況產生
		default=0.0

30.'--patience' help='EarlyStopping patience (epochs without improvement)'
		提前停止訓練(每一輪沒有變化)
		default=100

31.'--freeze' help='Freeze layers: backbone=10, first3=0 1 2' 凍結層:主幹=10,第一層=0 1 2
		default=[0]

32.'--save-preiod' help='Save checkpoint every x epochs (disabled if < 1)'
		每x輪儲存日誌,不過好像要裝WandB這個外掛(這個外掛好像沒什麼用),裝了之後才能設定
		default=-1,即禁用,裝了外掛後啟用,則將引數值改為>1的

33.'--seed' help='Global training seed' 全域性訓練傳遞
		default=0

34.'--local_rank'  help='Automatic DDP Multi-GPU argument, do not modify' 自動DDP多GPU引數,請勿修改
		default=-1

-------------# Logger arguments 記錄器引數------------------
35.'--entity'  help='Entity'實體
		default=None(好像這個功能還沒實現,具體實現程式碼作者還沒寫)

36.'--upload_dataset' 上傳資料集 help='Upload data, "val" option' 上傳資料,“val”選項
		default=False(好像這個功能還沒實現,具體實現程式碼作者還沒寫)

37.'--bbox_interval'  help='Set bounding-box image logging interval' 設定邊界框影像記錄間隔
		default=-1(好像這個功能還沒實現,具體實現程式碼作者還沒寫)

38.'--artifact_alias'  help='Version of dataset artifact to use' 要使用的資料集工件版本
		default='latest'(好像這個功能還沒實現,具體實現程式碼作者還沒寫)

"""

3.3.本地訓練

  • 由於我的電腦沒有獨立顯示卡,所以我就不在本地進行訓練了,下面介紹使用雲伺服器進行訓練

3.4.雲端訓練

  • 這裡我使用的是恆源雲(並非打廣告,畢竟也沒給錢ಥ_ಥ),也可使用阿里雲、騰訊雲等,隨意。

  • 恆源雲官網:https://www.gpushare.com

  • 訪問官網,開啟文件中心,可以自行學習如何操作
    image

  • 下面是我自己的操作,僅供參考

3.4.1.資料上傳

  • 第一步就可以先把自己的需要訓練的資料上傳,官方提供的OSS儲存(雲盤),好像是按時間收費的(不用的時候可以清空下空間)

  • 上傳個人資料時,資料量越大,上傳時間越久(也取決於個人的網速),如果不需要的檔案,可以不用上傳

  • 在使用者文件的資料上傳板塊,官方提供了三種上傳檔案的方式
    image

  • 這裡我選擇使用官方提供的OSS工具,上傳個人資料,OSS工具的下載安裝,可在官網的使用者文件中找到

  • 下載後就是一個oss.exe檔案,不用安裝,直接使用,建議直接複製到需要上傳資料的資料夾

  • 注意:OSS工具只能上傳壓縮包形式的檔案!,所以先把要上傳的資料壓縮為.zip檔案格式
    image

  • 雙擊執行oss.exe,啟動介面如下
    image

  • 輸入login,登入,接著輸入UsernamePassword,就是你註冊/登入時的賬號和密碼
    image

  • 輸入mkdir oss://MyData,就會在官網上的屬於你的OSS儲存中建立一個MyData資料夾(可選)
    image
    image

  • 上傳你的訓練資料到上面自己建立的資料夾中

  • 這裡以test.zip為例,輸入cp test.zip oss://MyData/即可上傳檔案到雲端目錄,上傳的快慢和檔案大小與自己的網速有關

  • 注意:在本地上傳資料期間,需要把網頁端開啟,可能是保持連線吧,否則可能會上傳失敗,但還好有斷點續傳
    image

  • 輸入ls -s -d oss://MyData/檢視自己上傳的個人資料(壓縮包)
    image

  • 也可以在雲端的控制檯檢視到自己上傳的檔案
    image

3.4.2.建立例項

  • 在控制檯,我的例項中,點選建立例項
    image

  • 購買例項,選擇自己需要的計費模式,機型,顯示卡
    image

  • 關於映象選擇

  • 可以選擇官方的映象
    image

  • 如果想圖個方便,直接去映象市場看看,有別人已經配置好的映象,可以直接用(推薦)

  • 關於映象費用,購買映象是不花錢,但購買了映象,就相當於你把別人的映象複製到了你的雲空間,使用雲空間是收費的,就是佔用你的OSS儲存空間,超過免費的5GB容量是另外收費的,不過也很便宜的。
    image

  • 也可以先在映象中找一下,是否有自己需要的映象
    image

  • 例如用於訓練Yolov5的映象,點選新增到我的映象,即新增進自己賬戶的OSS儲存空間(按小時收費,也很便宜)
    image

  • 使用官方送的代金卷購買例項
    image

  • 建立例項後的介面,開啟JupyterLab
    image

3.4.3.開啟雲端控制檯,資料下載

  • 選擇終端
    image

  • 使用前,先登入,輸入oss login進行登入
    image

  • oss ls -s -d oss://datasets/ 檢視之前上傳到雲端datasets資料夾的.zip檔案

  • oss cp oss://datasets/yolov5.zip /hy-tmp/ 下載壓縮檔案到/hy-tmp目錄下
    image

  • 進入到/hy-tmp目錄,並檢視當前目錄下存在的檔案為yolov5.zip

  • 使用unzip yolov5.zip命令,解壓檔案
    image

  • 解壓後再次檢視存在的檔案
    image

  • 當然也可以在左邊的樹形目錄中檢視
    image

3.4.4.調整引數開始訓練

  • 由於之前建立例項用的是已經配置好的Yolov5的環境映象,所以可以直接用

  • 這裡以訓練我自己標註的20張圖片為例,初始權重使用yolov5x.pt,訓練300輪

  • train.py引數設定,也可以自己設定其他的引數
    image

  • 其中/data/MyTrains_parameter.yaml的內容如下

    # parent
    # ├── yolov5
    # └── datasets
    #     └── MyTrains
    
    # parameter:引數配置
    path: ../datasets/MyTrains  # dataset root dir 資料集路徑
    train: images/train  # 訓練集
    val: images/train  # 驗證集(這裡把驗證集也使用訓練集,為了方便,讓訓練集和驗證集是一個,也沒啥大問題。)
    #test: images/test  # 測試集(可選)
    
    # Classes
    nc: 2 # number of classes 你標註的類別的數量
    names:
      0: car
      1: person
    
    
  • 其中/models/MyTrains_model.yaml的內容,就是複製的原始碼中的/models/yolov5x.yaml,然後將其中的nc類別數量改為 2(你自己標註有幾個類別就改為幾個類別)

  • 開始訓練
    image

  • 訓練完成
    image

3.4.5.預測

  • detect.py--weights引數設定自己訓練後生成的best.pt權重檔案

  • --source引數設定你用於預測的圖片

  • --data引數設定為訓練時的data/MyTrains_parameter.yaml

  • 其他引數可以自行設定
    image

  • 開始預測
    image

  • 部分預測結果
    image
    image
    image

  • 只有20張圖,預測結果還是不太準確

3.4.6.訓練後的資料下載到本地

  • 這裡我只把訓練結果runs/資料夾下載,因為其他都是本地上傳的,所以就全部下載了
  • 在yolov5目錄下,壓縮runs/資料夾
    zip -r -q xxx.zip runs/
    
    將目錄 run/ 下的所有檔案,打包成一個壓縮檔案,並檢視了打包後檔案的大小和型別。
    -r 參數列示遞迴打包包含子目錄的全部內容,
    -q 參數列示為安靜模式,即不向螢幕輸出資訊
    

image

  • 將壓縮後的檔案,上傳到OSS雲端儲存空間,輸入oss cp xxx.zip oss://MyData/

  • 這一步是後面加的,所以壓縮後的名字不同
    image

  • ls 在本地OSS中檢視OSS雲儲存空間中的檔案有哪些
    image

  • 將OSS雲端儲存空間中的壓縮檔案下載到本地

  • 例如:我這裡下載到桌面,輸入cp oss://MyData/test.zip D:\CYT\Desktop
    image



以上就是我第一次訓練Yolov5的一些筆記記錄。

相關文章