日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YoLoV5学习(5)-- Train.py 程序文件与yolov5s模型文件讲解

發布時間:2024/3/24 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YoLoV5学习(5)-- Train.py 程序文件与yolov5s模型文件讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇博客主要是對于train文件以及yolov5s.yaml文件進行講解,yolov5代碼雖然一直有在更新但整體的框架基本相似。

1.Usage

該部分是作者的一個說明。
第一行表示我們傳入的data數據集是coco128數據集,權重模型是yolov5s模型,–img表示圖片大小640,第二行與第一行的主要區別在于,第一行是在加載yolov5s的權重基礎上進行訓練,而第二行是在配置yolov5s網絡結構后,從零開始搭建一個模型,然后從頭開始訓練。

2.導包、導庫操作

前面都是一些導包導庫操作,train文件在如下圖部分出現三個參數,這三個參數主要用于分布式訓練,對于我們初學者而言,一般都是默認參數。

3.解析參數

將參數進行傳遞然后解析。主要包含四大部分。

3.1首先是校驗函數

3.2main函數

首先是代碼的校驗工作,緊接著會根據是否在命令行傳入Resume來判斷執行不同的操作,第三部分會判斷你是否采用DDP這種訓練方法,第四部分開始正式進行訓練。

首先它會根據rank變量來判斷是否執行下面的三行代碼,這塊rank的這個值在開頭也已經說過,如果不進行分布式訓練的話,默認是-1,因此它會去執行下面的三行代碼,第一行是負責打印文件所用到的參數信息,這個參數包括命令行傳入進去的參數以及默認參數,第二行是檢查yolov5的github倉庫是否更新,如果更新的話,會有一個提示。第三行用來檢查requirements中要求的安裝包有沒有正確安裝成功,沒有成功的話會給予一定的提示。

首先它會判斷你有沒有在命令行中傳入resume這個參數,resume參數表示在中斷中恢復,例如我們因電腦斷電等情況下,導致訓練尚未完成而停止,那我們就可以利用這個參數將我們之前的訓練給恢復過來。因為我們使用的是yolov5s.pt這個訓練模型,因此并沒有必要傳入這個參數,所以它會執行else中的代碼內容。
在else代碼中首先它會去檢查這幾個文件的路徑,包括數據集data,cfg以及權重、project等,這里我們沒有用到cfg,因此它傳入為空,緊接著判斷cfg與weights是否都為空,如果為空的話,會進行報錯。
接下來會進行是否輸入evolve判斷,決定保存在那個文件夾下面,那這里我們沒有輸入evolve。接著是保存文件的名稱。

這部分它會選擇你是使用cpu還是gpu,假如你采用的是分布式訓練的話,它就會額外執行下面的一些操作,我們這里一般不會用到分布式,所以也就沒有執行什么東西。

在模型訓練這部分,如果輸入evolve會執行else下面這些代碼,因為我們沒有輸入evolve并且不是分布式訓練,因此會執行train函數。因此,其實我們只需要關注一下train函數就可以啦。evolve呢是作者給出的一種凈化超參數的方法,一般情況下,我們采用默認的參數配合部分手動調參,就已經足夠優秀啦。

3.3train函數

然后是最關鍵的train函數,首先是一些參數的傳入,然后定義了訓練權重文件的文件路徑保存,緊接著是一些訓練過程中需要使用的超參數,將一些超參數加載,并打印出來。

隨后進行運行配置過程的保存操作,會保存在你訓練目錄下的hyp.yaml文件中,并且會保存你執行過程中使用的參數在opt.yaml文件中。

在日志文件中,基于wandb與tensorboard這兩個庫來完成訓練過程中的可視化操作。在這個文件中完成對于程序訓練日志的記錄過程。

Config文件中,首先基于plots的true或者false反饋是否將訓練過程及結果給畫出來,緊接著判斷電腦是否支持cuda,第三行是為了保證我們的訓練是否是可復現的,第四行是與分布式訓練相關的,如果不進行分布式訓練則不執行。第五行會進行數據集檢查讀取操作,第六行會取出數據集的訓練路徑以及驗證路徑,第七行取出你的類名,第八行會進行類的種數以及類的名稱是否相同的判斷,不相同會進行報錯處理,最后一行會進行是否是coco數據集進行判斷,如果是的話會進行一些額外的操作,本次不是,回復false。

然后呢是模型加載部分,首先會去檢測傳進來的權重參數后綴名是否以.pt結尾,如果本地沒有就回去會嘗試去yolov5官方倉庫去下載權重文件,加載權重文件,緊接著會根據你的權重文件中會帶著一個yolov5s.yaml文件,代碼根據yolov5s.yaml進行模型的訓練。這塊的主要意思通俗的理解就是我們預訓練模型是yolov5s.pt,我們的新模型是基于我們自己的識別檢測需求在yolov5s的基礎上完成的。

Freeze是一個凍結過程,跟我們的傳遞參數有關,默認不凍結,在opt中我們傳入10即表示我們凍結了backbone部分,也就是說我們訓練過程中只用了head部分。通過Freeze這部分代碼,你可以手動去控制你想凍結哪些層。

這部分代碼主要是用于檢查輸入圖片的尺寸滿不滿足32的倍數,如果不滿足的話它會幫你自動補成32的倍數。

Batchsize部分一般不會去執行,除非我們手動輸入-1,默認是16。


接下來是創建深度學習的優化器,隨機衰減策略以及指數移動平均的方法。

#DP mode會判斷是不是用了多張顯卡,#SyncBatchNorm是跟分布式訓練相關的,然后是加載訓練數據操作,加載驗證集數據操作。


緊接著是開始訓練工作,在這個工程中,“compute_loss=ComputeLoss(model)”定義損失函數,等到訓練結束,這個時候會挑選出 best.weight對驗證集進行驗證測試,并把這個結果給打印出來。

4.YoloV5S.yaml


nc表示yolov5s所能預測出來的種類數,這里是80種。anchors就是提前定義好的一些矩形框,利用這些矩形框完成檢測。三層anchors分別對應不同的特征層級,在每一層anchors上又定義了3個不同的anchors。depth_multiple深度倍數表示的含義體現為backbone中number的參數乘以depth_multiple即為實際參數,width_multiple表示通道參數,args中的特征通道參數乘以width_multiple即為實際參數。實際對比yolov5s、5l、5m、5n、以及5x就可以發現,.yaml文件中只有depth_multiple深度倍數以及width_multiple通道參數是不一樣的。因此,這兩個參數可以通俗的理解為調整網絡規模。

backbone表示yolov5模型結構中的backbone結構,這一行行表示yolov5每一層的結構信息,不同的層結構都定義在common.py文件中,這里的Conv、C3、Concat等,args表示參數,是根據前面module的形式確定相應的參數。

head表示yolov5的head部分,yolov5中沒有neck,相似結構被作者并在head里。
本次就先到這,學習交流,互相進步~

總結

以上是生活随笔為你收集整理的YoLoV5学习(5)-- Train.py 程序文件与yolov5s模型文件讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。