人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

YOLOv5全面解析教程⑥:模型訓(xùn)練流程詳解

來源:CSDN博客 | 2023-03-14 15:00:01 |

作者?|?Fengwen、BBuf

歡迎Star、試用One-YOLOv5:


(資料圖)

https://github.com/Oneflow-Inc/one-yolov5

1

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

2

安裝

git?clone?https://github.com/Oneflow-Inc/one-yolov5??#?clonecd?one-yolov5pip?install?-r?requirements.txt??#?install

3

訓(xùn)練

兩種訓(xùn)練方式

帶權(quán)重訓(xùn)練?

$?python?path/to/train.py?--data?coco.yaml?--weights?yolov5s?--img?640

2. 不帶權(quán)重訓(xùn)練?

$?python?path/to/train.py?--data?coco.yaml?--weights?""?--cfg?yolov5s.yaml?--img?640

單GPU訓(xùn)練

$?python?train.py??--data?coco.yaml?--weights?yolov5s?--device?0

多GPU訓(xùn)練

$?python?-m?oneflow.distributed.launch?--nproc_per_node?2?train.py?--batch?64?--data?coco.yaml?--weights?yolov5s?--device?0,1

注意: ?

--nproc_per_node ?指定要使用多少GPU。舉個例子:在上面多GPU訓(xùn)練指令中它是2。

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

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

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

$?python?-m?oneflow.distributed.launch?--nproc_per_node?2?train.py?--batch?64?--data?coco.yaml?--cfg?yolov5s.yaml?--weights?""?--device?2,3

恢復(fù)訓(xùn)練

如果你的訓(xùn)練進(jìn)程中斷了,你可以這樣恢復(fù)先前的訓(xùn)練進(jìn)程。

#?多卡訓(xùn)練.python?-m?oneflow.distributed.launch?--nproc_per_node?2?train.py?--resume

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

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

使用SyncBatchNorm

SyncBatchNorm可以提高多gpu訓(xùn)練的準(zhǔn)確性,但會顯著降低訓(xùn)練速度。它僅適用于多GPU DistributedDataParallel 訓(xùn)練。建議最好在每個GPU上的樣本數(shù)量較小(樣本數(shù)量<=8)時使用。

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

$?python?-m?oneflow.distributed.launch?--nproc_per_node?2?train.py?--batch?64?--data?coco.yaml?--cfg?yolov5s.yaml?--weights?""?--sync-bn

4

評估

下面的命令是在COCO val2017數(shù)據(jù)集上以640像素的圖像大小測試 yolov5x 模型。yolov5x是可用小模型中最大且最精確的,其它可用選項是 yolov5n ,yolov5m,yolov5s,yolov5l ,以及他們的 P6 對應(yīng)項比如 yolov5s6 ,或者你自定義的模型,即 runs/exp/weights/best 。

$?python?val.py?--weights?yolov5x?--data?coco.yaml?--img?640

5

推理

首先,下載一個訓(xùn)練好的模型權(quán)重文件,或選擇你自己訓(xùn)練的模型;然后,通過 detect.py文件進(jìn)行推理。

python?path/to/detect.py?--weights?yolov5s?--source?0??????????????#?webcam????????????????????????????????????????????????????img.jpg????????#?image????????????????????????????????????????????????????vid.mp4????????#?video????????????????????????????????????????????????????path/??????????#?directory????????????????????????????????????????????????????path/*.jpg?????#?glob????????????????????????????????????????????????????"https://youtu.be/Zgi9g1ksQHc"??#?YouTube????????????????????????????????????????????????????"rtsp://example.com/media.mp4"??#?RTSP,?RTMP,?HTTP?stream

6

訓(xùn)練結(jié)果

本地日志

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

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

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

val_batch0_pred.jpg 展示測試 batch 為 0 predictions(預(yù)測):

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

從零開始訓(xùn)練 (藍(lán)色)。

加載預(yù)訓(xùn)練權(quán)重 --weights yolov5s (橙色)。

具體的指標(biāo)分析詳見文章《模型精確度評估

7

訓(xùn)練技巧

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

模型選擇

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

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

(有關(guān)所有模型的完整比較)

從預(yù)先訓(xùn)練的權(quán)重開始訓(xùn)練。建議用于中小型數(shù)據(jù)集(即VOC、VisDrone、GlobalWheat)。將模型的名稱傳遞給--weights參數(shù)。模型自動從latest YOLOv5 releasse 下載 。

python?train.py?--data?custom.yaml?--weights?yolov5s??????????????????????????????????????????????yolov5m??????????????????????????????????????????????yolov5l??????????????????????????????????????????????yolov5x??????????????????????????????????????????????custom_pretrained?#?自定義的網(wǎng)絡(luò)結(jié)構(gòu)文件

從頭開始訓(xùn)練的話,推薦用大的數(shù)據(jù)集(即 COCO、Objects365、OIv6 )在 --cfg 選項后傳遞你感興趣的網(wǎng)絡(luò)結(jié)構(gòu)文件參數(shù) 以及空的?--weights ""?參數(shù):

python?train.py?--data?custom.yaml?--weights?""?--cfg?yolov5s.yaml??????????????????????????????????????????????????????yolov5m.yaml??????????????????????????????????????????????????????yolov5l.yaml??????????????????????????????????????????????????????yolov5x.yaml

訓(xùn)練配置

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

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

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

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

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

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

8

拓展

使用多機(jī)訓(xùn)練

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

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

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

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

#?On?master?machine?0$?python?-m?oneflow.distributed.launch?--nproc_per_node?G?--nnodes?N?--node_rank?0?--master_addr?"192.168.1.1"?--master_port?1234?train.py?--batch?64?--data?coco.yaml?--cfg?yolov5s.yaml?--weights?""

#?On?machine?R$?python?-m?oneflow.distributed.launch?--nproc_per_node?G?--nnodes?N?--node_rank?R?--master_addr?"192.168.1.1"?--master_port?1234?train.py?--batch?64?--data?coco.yaml?--cfg?yolov5s.yaml?--weights?""

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

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

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

?

注意:

oneflow目前不支持windows平臺

--batch 必須是GPU數(shù)量的倍數(shù)。

GPU 0 將比其他GPU占用略多的內(nèi)存,因為它維護(hù)EMA并負(fù)責(zé)檢查點等。

如果你得到 RuntimeError: Address already in use ,可能是因為你一次正在運(yùn)行多個訓(xùn)練程序。要解決這個問題,只需通過添加--master_port來使用不同的端口號,如下所示

$?python?-m?oneflow.distributed.launch?--master_port?1234?--nproc_per_node?2?...

配置代碼

#?preparet=https://github.com/Oneflow-Inc/one-yolov5:latest?&&?sudo?docker?pull?$t?&&?sudo?docker?run?-it?--ipc=host?--gpus?all?-v?"$(pwd)"/coco:/usr/src/coco?$tpip?install?--pre?oneflow?-f?https://staging.oneflow.info/branch/master/cu112cd?..?&&?rm?-rf?app?&&?git?clone?https://github.com/Oneflow-Inc/one-yolov5?-b?master?app?&&?cd?appcp?data/coco.yaml?data/coco_profile.yaml#?profilepython?train.py?--batch-size?16?--data?coco_profile.yaml?--weights?yolov5l??--epochs?1?--device?0?python?-m?oneflow.distributed.launch?--nproc_per_node?2?train.py?--batch-size?32?--data?coco_profile.yaml?--weights?yolov5l??--epochs?1?--device?0,1???python?-m?oneflow.distributed.launch?--nproc_per_node?4?train.py?--batch-size?64?--data?coco_profile.yaml?--weights?yolov5l??--epochs?1?--device?0,1,2,3??python?-m?oneflow.distributed.launch?--nproc_per_node?8?train.py?--batch-size?128?--data?coco_profile.yaml?--weights?yolov5l??--epochs?1?--device?0,1,2,3,4,5,6,7

附件

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

參數(shù)help幫助
--weightinitial weights path加載的權(quán)重文件路徑
--cfgmodel.yaml path模型配置文件,網(wǎng)絡(luò)結(jié)構(gòu) 路徑
--datadataset.yaml path數(shù)據(jù)集配置文件,數(shù)據(jù)集路徑
--hyphyperparameters path超參數(shù)文件 路徑
--epochsTotal training rounds訓(xùn)練總輪次
--batch-sizetotal batch size for all GPUs, -1 for autobatch一次訓(xùn)練所選取的樣本數(shù)
--imgsztrain, val image size (pixels)輸入圖片分辨率大小
--rectrectangular training是否采用矩形訓(xùn)練,默認(rèn)False
--resumeresume most recent training接著打斷訓(xùn)練上次的結(jié)果接著訓(xùn)練
--nosaveonly save final checkpoint只保存最終的模型,默認(rèn)False
--noautoanchordisable AutoAnchor不自動調(diào)整anchor,默認(rèn)False
--noplotssave no plot files不保存打印文件,默認(rèn)False
--evolveevolve hyperparameters for x generations是否進(jìn)行超參數(shù)進(jìn)化,默認(rèn)False
--bucketgsutil bucket谷歌云盤bucket,一般不會用到
--cache--cache images in "ram" (default) or "disk"是否提前緩存圖片到內(nèi)存,以加快訓(xùn)練速度,默認(rèn)False
--devicecuda device, i.e. 0 or 0,1,2,3 or cpu訓(xùn)練的設(shè)備,cpu;0(表示一個gpu設(shè)備cuda:0);0,1,2,3(多個gpu設(shè)備)
--multi-scalevary img-size +/- 50%%是否進(jìn)行多尺度訓(xùn)練,默認(rèn)False
--single-clstrain multi-class data as single-class數(shù)據(jù)集是否只有一個類別,默認(rèn)False
--optimizeroptimizer優(yōu)化器
--sync-bnuse SyncBatchNorm, only available in DDP mode是否使用跨卡同步BN,在DDP模式使用
--workersmax dataloader workers (per RANK in DDP mode)dataloader的最大worker數(shù)量
--projectsave to project path保存到項目結(jié)果地址
--namesave to project/name/保存到項目結(jié)果/名稱
--exist-okexisting project/name ok, do not increment現(xiàn)有項目/名稱確定,不遞增,默認(rèn)False
--quadquad dataloader四元數(shù)據(jù)加載器 開啟之后在尺寸大于640的圖像上識別效果更好,但是有可能會使在640尺寸的圖片上效果更差
--cos-lrcosine LR scheduler是否采用退火余弦學(xué)習(xí)率,默認(rèn)False
--label-smoothingLabel smoothing epsilon標(biāo)簽平滑
--patienceEarlyStopping patience (epochs without improvement)早停機(jī)制,默認(rèn)False
--freezFreeze layers: backbone=10, first3=0 1 2凍結(jié)層數(shù),默認(rèn)不凍結(jié)
--save-periodSave checkpoint every x epochs (disabled if < 1)用于記錄訓(xùn)練日志信息,int 型,默認(rèn) -1
--seedGlobal training seed隨機(jī)數(shù)種子設(shè)置
--local_rankAutomatic DDP Multi-GPU argument, do not modify自動單機(jī)多卡訓(xùn)練 一般不改動

Reference

https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data

https://docs.ultralytics.com/quick-start/

其他人都在看

GPT-3/ChatGPT復(fù)現(xiàn)的經(jīng)驗教訓(xùn)

超越ChatGPT:大模型的智能極限

YOLOv5解析教程:計算mAP用到的Numpy函數(shù)

ChatGPT作者Schulman:我們成功的秘密武器

比快更快,開源Stable Diffusion刷新作圖速度

OneEmbedding:單卡訓(xùn)練TB級推薦模型不是夢

GLM訓(xùn)練加速:性能最高提升3倍,顯存節(jié)省1/3

歡迎Star、試用OneFlow新版本:GitHub - Oneflow-Inc/oneflow: OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient.OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient. - GitHub - Oneflow-Inc/oneflow: OneFlow is a deep learning framework designed to be user-friendly, scalable and efficient.https://github.com/Oneflow-Inc/oneflow/

關(guān)鍵詞: