一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

YOLOv5使用教程詳解(單卡,多卡,多機訓練)

jf_pmFSk4VX ? 來源:GiantPandaCV ? 作者:GiantPandaCV ? 2022-11-21 15:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

代碼倉庫地址:https://github.com/Oneflow-Inc/one-yolov5歡迎star one-yolov5項目 獲取 最新的動態(tài)。如果你有問題,歡迎在倉庫給我們提出寶貴的意見。 如果對你有幫助,歡迎來給我Star呀~

聲明:Model Train(以coco數(shù)據(jù)集為例) 。本文涉及到了大量的超鏈接,但是在微信文章里面外鏈接會被吃掉,所以歡迎大家到這里查看本篇文章的完整版本:https://start.oneflow.org/oneflow-yolo-doc/tutorials/03_chapter/quick_start.html

項目結(jié)構(gòu)預覽

8e8b9c84-68d6-11ed-8abf-dac502259ad0.pngimage

安裝

gitclonehttps://github.com/Oneflow-Inc/one-yolov5#clone
cdone-yolov5
pipinstall-rrequirements.txt#install

訓練

兩種訓練方式

  1. 帶權(quán)重訓練
$pythonpath/to/train.py--datacoco.yaml--weightsyolov5s--img640
  1. 不帶權(quán)重訓練
$pythonpath/to/train.py--datacoco.yaml--weights''--cfgyolov5s.yaml--img640

GPU訓練

$pythontrain.py--datacoco.yaml--weightsyolov5s--device0

多GPU訓練

$python-moneflow.distributed.launch--nproc_per_node2train.py--batch64--datacoco.yaml--weightsyolov5s--device0,1

注意:

  • --nproc_per_node 指定要使用多少GPU。舉個例子:在上面 多GPU訓練指令中它是2。

  • --batch 是總批量大小。它將平均分配給每個GPU。在上面的示例中,每GPU是64/2=32。

  • --cfg : 指定一個包含所有評估參數(shù)的配置文件。

  • 上面的代碼默認使用GPU 0…(N-1)。使用特定的GPU?可以通過簡單在 --device 后跟指定GPU來實現(xiàn)?!赴咐梗谙旅娴拇a中,我們將使用GPU 2,3。

$python-moneflow.distributed.launch--nproc_per_node2train.py--batch64--datacoco.yaml--cfgyolov5s.yaml--weights''--device2,3

恢復訓練

如果你的訓練進程中斷了,你可以這樣恢復先前的訓練進程。

#多卡訓練.
python-moneflow.distributed.launch--nproc_per_node2train.py--resume

你也可以通過 --resume 參數(shù)指定要恢復的模型路徑

#記得把/path/to/your/checkpoint/path替換為你要恢復訓練的模型權(quán)重路徑
--resume/path/to/your/checkpoint/path

使用SyncBatchNorm

SyncBatchNorm可以提高多gpu訓練的準確性,但會顯著降低訓練速度。它僅適用于多GPU DistributedDataParallel 訓練。

建議最好在每個GPU上的樣本數(shù)量較?。?em style="font-style:italic;color:#000000;">樣本數(shù)量<=8)時使用。

要使用SyncBatchNorm,只需將添加 --sync-bn 參數(shù)選項,具體「案例」如下:

$python-moneflow.distributed.launch--nproc_per_node2train.py--batch64--datacoco.yaml--cfgyolov5s.yaml--weights''--sync-bn

評估

下面的命令是在COCO val2017數(shù)據(jù)集上以640像素的圖像大小測試 yolov5x 模型。yolov5x是可用小模型中最大且最精確的,其它可用選項是 yolov5n ,yolov5m,yolov5syolov5l ,以及他們的 P6 對應項比如 yolov5s6 ,或者你自定義的模型,即 runs/exp/weights/best 。有關(guān)可用模型的更多信息,請參閱我們的README-TABLE

$pythonval.py--weightsyolov5x--datacoco.yaml--img640

推理

首先,下載一個訓練好的模型權(quán)重文件,或選擇你自己訓練的模型;

然后,通過 detect.py文件進行推理。

pythonpath/to/detect.py--weightsyolov5s--source0#webcam
img.jpg#image
vid.mp4#video
path/#directory
path/*.jpg#glob
'https://youtu.be/Zgi9g1ksQHc'#YouTube
'rtsp://example.com/media.mp4'#RTSP,RTMP,HTTPstream

訓練結(jié)果

本地日志

默認情況下,所有結(jié)果都記錄為runs/train,并為每個新訓練創(chuàng)建一個新的訓練結(jié)果目錄,如runs/train/exp2、runs/train/exp3等。查看訓練和測試JPG以查看 mosaics, labels, predictions and augmentation 效果。注意:Mosaic Dataloader 用于訓練(如下所示),這是Ultralytics發(fā)表的新概念,首次出現(xiàn)在YOLOv4中。

train_batch0.jpg 顯示 batch 為 0 的 (mosaics and labels):

8ea4ce16-68d6-11ed-8abf-dac502259ad0.jpgimg

val_batch0_labels.jpg 展示測試 batch 為 0 的labels:

8ebcfad6-68d6-11ed-8abf-dac502259ad0.jpgimg

val_batch0_pred.jpg 展示測試 batch 為 0 predictions(預測):8ee1bcb8-68d6-11ed-8abf-dac502259ad0.jpg

訓練訓損失和性能的指標有記錄到Tensorboard和自定義結(jié)果中results.csv日志文件,訓練訓完成后作為結(jié)果繪制 results.png如下。在這里,我們展示了在COCO128上訓練的YOLOV5結(jié)果

  • 從零開始訓練 (藍色)。
  • 加載預訓練權(quán)重 --weights yolov5s (橙色)。
8f2203d6-68d6-11ed-8abf-dac502259ad0.pngimg

具體的指標分析詳見文章《模型精確度評估》

訓練技巧

聲明:大多數(shù)情況下,只要數(shù)據(jù)集足夠大且標記良好,就可以在不改變模型或訓練設置的情況下獲得良好的結(jié)果。如果一開始你沒有得到好的結(jié)果,你可以采取一些步驟來改進,但我們始終建議用戶在考慮任何更改之前先使用所有默認設置進行一次訓練。這有助于建立評估基準和發(fā)現(xiàn)需要改進的地方 。

模型選擇

類似于YOLOv5x和YOLOv5x6的大型模型在幾乎所有情況下都會產(chǎn)生更好的結(jié)果,但參數(shù)更多,需要更多的CUDA內(nèi)存進行訓練,運行速度較慢。

對于移動部署,我們推薦YOLOv5s/m,對于云部署,我們建議YOLOV5l/x。

有關(guān)所有模型的完整比較,請參閱詳細表

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FotYkHQk-1668949640644)( https://user-images.githubusercontent.com/35585791/201064824-f97c82d5-6bba-4421-86d9-194e47842e35.png)]

  • 從預先訓練的權(quán)重開始訓練。建議用于中小型數(shù)據(jù)集(即VOC、VisDrone、GlobalWheat)。將模型的名稱傳遞給--weights參數(shù)。模型自動從latest YOLOv5 releasse 下載 。
pythontrain.py--datacustom.yaml--weightsyolov5s
yolov5m
yolov5l
yolov5x
custom_pretrained#自定義的網(wǎng)絡結(jié)構(gòu)文件

  • 從頭開始訓練的話,推薦用大的數(shù)據(jù)集(即 COCO、Objects365、OIv6 )在 --cfg 選項后傳遞你感興趣的網(wǎng)絡結(jié)構(gòu)文件參數(shù) 以及空的 --weights '' 參數(shù):
pythontrain.py--datacustom.yaml--weights''--cfgyolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml

訓練配置

在修改任何內(nèi)容之前,首先使用默認設置進行訓練,以建立性能基線。訓練參數(shù)的完整列表,能夠在train.py文件中發(fā)現(xiàn)。

  • Epochs : 默認訓練300個epochs。如果早期過擬合,則可以減少訓練。如果在300個周期后未發(fā)生過擬合,則可以訓練更長,比如600、1200個epochs。

  • Image size: COCO以 --img 640,的分辨率進行訓練,但由于數(shù)據(jù)集中有大量的小對象,它可以從更高分辨率(如--img 1280)的訓練中訓練。如果有許多小對象,則自定義數(shù)據(jù)集將從更高分辨率的訓練中獲益。最好的推斷結(jié)果是在相同的--img 處獲得的 ,即如果在-img 1280處進行訓練,也應該在--img 1280處進行測試和檢測。

  • Batch Size: 使用更大的 --batch-size 。能夠有效緩解小樣本數(shù)產(chǎn)生的batchnorm統(tǒng)計的錯誤。

  • Hyperparameters:默認超參數(shù)在hyp.scratch-low.yaml文件中。我們建議你在考慮修改任何超參數(shù)之前,先使用默認超參數(shù)進行訓練。一般來說,增加增強超參數(shù)將減少和延遲過度擬合,允許更長的訓練和得到更高mAP值。減少損耗分量增益超參數(shù),如hyp['obj'],將有助于減少這些特定損耗分量中的過度擬合。有關(guān)優(yōu)化這些超參數(shù)的自動化方法,請參閱我們的 《超參數(shù)演化教程》。

  • ...更多訓練的超參數(shù)配置請查看本文的附錄。

拓展

使用多機訓練

這僅適用于多GPU分布式數(shù)據(jù)并行訓練。

在訓練之前,確保所有機器上的文件都相同,數(shù)據(jù)集、代碼庫等。之后,確保機器可以相互通信

你必須選擇一臺主機器(其他機器將與之對話)。記下它的地址(master_addr)并選擇一個端口(master-port)。對于下面的示例,將使用master_addr=192.168.1.1和master_ port=1234。

要使用它,可以執(zhí)行以下指令:

#Onmastermachine0
$python-moneflow.distributed.launch--nproc_per_nodeG--nnodesN--node_rank0--master_addr"192.168.1.1"--master_port1234train.py--batch64--datacoco.yaml--cfgyolov5s.yaml--weights''
#OnmachineR
$python-moneflow.distributed.launch--nproc_per_nodeG--nnodesN--node_rankR--master_addr"192.168.1.1"--master_port1234train.py--batch64--datacoco.yaml--cfgyolov5s.yaml--weights''

其中G是每臺機器的GPU數(shù)量,N是機器數(shù)量,R是從0到(N-1)的機器數(shù)量。

假設我有兩臺機器,每臺機器有兩個GPU,對于上面的情況,G=2,N=2,R=1。

在連接所有N臺機器之前,訓練不會開始。輸出將僅顯示在主機上!

注意

  • oneflow目前不支持windows平臺
  • --batch 必須是GPU數(shù)量的倍數(shù)。
  • GPU 0 將比其他GPU占用略多的內(nèi)存,因為它維護EMA并負責檢查點等。
  • 如果你得到 RuntimeError: Address already in use ,可能是因為你一次正在運行多個訓練程序。要解決這個問題,只需通過添加--master_port來使用不同的端口號,如下所示
$python-moneflow.distributed.launch--master_port1234--nproc_per_node2...

配置代碼

#prepare
t=https://github.com/Oneflow-Inc/one-yolov5:latest&&sudodockerpull$t&&sudodockerrun-it--ipc=host--gpusall-v"$(pwd)"/coco:/usr/src/coco$t
pipinstall--preoneflow-fhttps://staging.oneflow.info/branch/master/cu112
cd..&&rm-rfapp&&gitclonehttps://github.com/Oneflow-Inc/one-yolov5-bmasterapp&&cdapp
cpdata/coco.yamldata/coco_profile.yaml

#profile
pythontrain.py--batch-size16--datacoco_profile.yaml--weightsyolov5l--epochs1--device0
python-moneflow.distributed.launch--nproc_per_node2train.py--batch-size32--datacoco_profile.yaml--weightsyolov5l--epochs1--device0,1
python-moneflow.distributed.launch--nproc_per_node4train.py--batch-size64--datacoco_profile.yaml--weightsyolov5l--epochs1--device0,1,2,3
python-moneflow.distributed.launch--nproc_per_node8train.py--batch-size128--datacoco_profile.yaml--weightsyolov5l--epochs1--device0,1,2,3,4,5,6,7

附件

表3.1

表3.1 : train.py參數(shù)解析表

參數(shù) help 幫助
--weight initial weights path 加載的權(quán)重文件路徑
--cfg model.yaml path 模型配置文件,網(wǎng)絡結(jié)構(gòu) 路徑
--data dataset.yaml path 數(shù)據(jù)集配置文件,數(shù)據(jù)集路徑
--hyp hyperparameters path 超參數(shù)文件 路徑
--epochs Total training rounds 訓練總輪次
--batch-size total batch size for all GPUs, -1 for autobatch 一次訓練所選取的樣本數(shù)
--imgsz train, val image size (pixels) 輸入圖片分辨率大小
--rect rectangular training 是否采用矩形訓練,默認False
--resume resume most recent training 接著打斷訓練上次的結(jié)果接著訓練
--nosave only save final checkpoint 只保存最終的模型,默認False
--noautoanchor disable AutoAnchor 不自動調(diào)整anchor,默認False
--noplots save no plot files 不保存打印文件,默認False
--evolve evolve hyperparameters for x generations 是否進行超參數(shù)進化,默認False
--bucket gsutil bucket 谷歌云盤bucket,一般不會用到
--cache --cache images in "ram" (default) or "disk" 是否提前緩存圖片到內(nèi)存,以加快訓練速度,默認False
--device cuda device, i.e. 0 or 0,1,2,3 or cpu 訓練的設備,cpu;0(表示一個gpu設備cuda:0);0,1,2,3(多個gpu設備)
--multi-scale vary img-size +/- 50%% 是否進行多尺度訓練,默認False
--single-cls train multi-class data as single-class 數(shù)據(jù)集是否只有一個類別,默認False
--optimizer optimizer 優(yōu)化器
--sync-bn use SyncBatchNorm, only available in DDP mode 是否使用跨卡同步BN,在DDP模式使用
--workers max dataloader workers (per RANK in DDP mode) dataloader的最大worker數(shù)量
--project save to project path 保存到項目結(jié)果地址
--name save to project/name/ 保存到項目結(jié)果/名稱
--exist-ok existing project/name ok, do not increment 現(xiàn)有項目/名稱確定,不遞增,默認False
--quad quad dataloader 四元數(shù)據(jù)加載器 開啟之后在尺寸大于640的圖像上識別效果更好,但是有可能會使在640尺寸的圖片上效果更差
--cos-lr cosine LR scheduler 是否采用退火余弦學習率,默認False
--label-smoothing Label smoothing epsilon 標簽平滑
--patience EarlyStopping patience (epochs without improvement) 早停機制,默認False
--freez Freeze layers: backbone=10, first3=0 1 2 凍結(jié)層數(shù),默認不凍結(jié)
--save-period Save checkpoint every x epochs (disabled if < 1) 用于記錄訓練日志信息,int 型,默認 -1
--seed Global training seed 隨機數(shù)種子設置
--local_rank Automatic DDP Multi-GPU argument, do not modify 自動單機多卡訓練 一般不改動

Reference

  • https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data
  • https://docs.ultralytics.com/quick-start/


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4945

    瀏覽量

    131228
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1224

    瀏覽量

    25446

原文標題:《YOLOv5全面解析教程》六,YOLOv5使用教程詳解(單卡,多卡,多機訓練)

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    在K230上部署yolov5時 出現(xiàn)the array is too big的原因?

    重現(xiàn)步驟 1將yolov5的kmodel放入k230的data數(shù)據(jù) 2使用yolo大作戰(zhàn)里的視頻流推理代碼 3運行 期待結(jié)果和實際結(jié)果 期待的結(jié)果 將目標檢測的框圈起來 實際看到的結(jié)果
    發(fā)表于 05-28 07:47

    RV1126 yolov8訓練部署教程

    YOLOv8 是 ultralytics 公司在 2023 年 1月 10 號開源的基于YOLOV5進行更新的 下一個重大更新版本,目前支持圖像分類、物體檢測和實例分割任務,鑒于Yolov5的良好表現(xiàn),
    的頭像 發(fā)表于 04-16 14:53 ?489次閱讀
    RV1126 <b class='flag-5'>yolov</b>8<b class='flag-5'>訓練</b>部署教程

    OrinNano yolov11訓練部署教程

    ORinNano yolov11訓練部署教程
    的頭像 發(fā)表于 04-10 15:26 ?833次閱讀
    OrinNano  <b class='flag-5'>yolov</b>11<b class='flag-5'>訓練</b>部署教程

    請問如何在imx8mplus上部署和運行YOLOv5訓練的模型?

    我正在從事 imx8mplus yocto 項目。我已經(jīng)在自定義數(shù)據(jù)集上的 YOLOv5訓練了對象檢測模型。它在 ubuntu 電腦上運行良好。現(xiàn)在我想在我的 imx8mplus 板上運行該模型
    發(fā)表于 03-25 07:23

    YOLOv5類中rgb888p_size這個參數(shù)要與模型推理和訓練的尺寸一致嗎?一致會達到更好的效果?

    YOLOv5類中rgb888p_size這個參數(shù)要與模型推理和訓練的尺寸一致嗎,一致會達到更好的效果
    發(fā)表于 03-11 08:12

    yolov5轉(zhuǎn)onnx在cubeAI進行部署,部署失敗的原因?

    第一個我是轉(zhuǎn)onnx時 想把權(quán)重文件變小點 就用了半精度 --half,則說17版本不支持半精度 后面則是沒有縮小的單精度 但是顯示哪里溢出了···· 也不說是哪里、、。。。 到底能不能部署yolov5這種東西?。?? 也沒看見幾個部署在這上面......................
    發(fā)表于 03-07 11:38

    【米爾RK3576開發(fā)板評測】+項目名稱YOLOV5目標檢測

    /examples/yolov5/model ./download_model.sh 下載的是一個ONNX格式的神經(jīng)網(wǎng)絡模型,但發(fā)現(xiàn)它無法在瑞芯微系統(tǒng)中直接運行。為了解決這個問題,您計劃使用特定
    發(fā)表于 02-15 13:24

    【ELF 2學習板試用】ELF2開發(fā)板(飛凌嵌入式)部署yolov5s的自定義模型

    ://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt pip install onnx 下載預訓練權(quán)重(博主嘗試
    發(fā)表于 02-04 18:15

    在RK3568教學實驗箱上實現(xiàn)基于YOLOV5的算法物體識別案例詳解

    安裝了所有必要的依賴。這通常包括 torch、torchvision 和 opencv-python。 (2)下載預訓練模型 YOLOv5 提供了多個預訓練模型,可以從官方倉庫或相關(guān)資源中下載。 (3
    發(fā)表于 12-03 14:56

    詳解MySQL實例部署

    詳解MySQL實例部署
    的頭像 發(fā)表于 11-11 11:10 ?639次閱讀

    在樹莓派上部署YOLOv5進行動物目標檢測的完整流程

    卓越的性能。本文將詳細介紹如何在性能更強的計算機上訓練YOLOv5模型,并將訓練好的模型部署到樹莓派4B上,通過樹莓派的攝像頭進行實時動物目標檢測。 一、在電腦上訓練
    的頭像 發(fā)表于 11-11 10:38 ?3701次閱讀
    在樹莓派上部署<b class='flag-5'>YOLOv5</b>進行動物目標檢測的完整流程

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測

    : NPU幫助機器完成更高效的翻譯、文本分類和情感分析,推動了自然語言處理技術(shù)的發(fā)展。 實例分享:Yolov5分類檢測 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 10-24 10:13

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測-迅為電子

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測-迅為電子
    的頭像 發(fā)表于 08-23 14:58 ?1360次閱讀
    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)<b class='flag-5'>Yolov5</b>分類檢測-迅為電子

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測

    : NPU幫助機器完成更高效的翻譯、文本分類和情感分析,推動了自然語言處理技術(shù)的發(fā)展。 實例分享:Yolov5分類檢測 在RK3588處理器上,不僅可以基于Linux系統(tǒng)使用NPU,也可以
    發(fā)表于 08-20 11:13

    基于迅為RK3588【RKNPU2項目實戰(zhàn)1】:YOLOV5實時目標分類

    【RKNPU2項目實戰(zhàn)1】:YOLOV5實時目標分類 https://www.bilibili.com/video/BV1ZN411D7V8/?spm_id_from=333.999.0.0
    發(fā)表于 08-15 10:51