參考鏈接
- ??yolov5 繼續(xù)訓練
- ??yolov5ds:Yolov5同時進行目標檢測和分割分割(yolov5ds作者的博客介紹)
- github地址:??yolov5ds
- 訓練yolov5ds案例:用YOLOv5ds訓練自己的數(shù)據(jù)集——同時檢測和分割
兩種情況:
- 訓練過程中中斷了,繼續(xù)訓練
- 訓練完了,但是未收斂,在這個基礎上,還想用這個權(quán)重、學習率等參數(shù)繼續(xù)訓練多一些批次
不再需要斷點訓練后,就一定要記得把以下修改全部都恢復成原狀!?。?/font>
1. 訓練過程中中斷了,繼續(xù)訓練
斷電、或者什么原因中斷了,比如設定epoch為200,但是在90這里中斷了,想從斷點這里繼續(xù)訓練到 200個epoch
直接在trainds.py
設置參數(shù)--resume
的defualt=True
即可(在代碼 517行附近)
parser.add_argument('--resume', nargs='?', const=True, default=True, help='resume most recent training')
或者參考這個芒果大佬的方式:直接調(diào)用命令行開始resume,他還變了加載的權(quán)重(我沒有變,但是也能行,保險起見還是參照大佬的方式吧,我是從這篇博文里面摘錄過來的:手把手調(diào)參最新 YOLOv7 模型 訓練部分 - 最新版本(二))
python train.py --resume D:\Pycharm_Projects\yolov7\runs\train\exp19\weights\last.pt
如果覺得數(shù)值差不多穩(wěn)定了,但是距離最終設置的epoch還很遠,所以想要停止訓練但是又得到y(tǒng)olov5在運行完指定最大epoch后生成的一系列map、混淆矩陣等圖
- (雖然yolov5默認有早停機制,但是是要再多訓練100輪如果結(jié)果還是沒改善才會自動停止)
- 先終止訓練
- 找到
run/train/exp
(注意找對文件夾,exp
是本輪訓練時生成的文件夾)中的opt.yaml
文件,修改其中的epochs
為最近的一個比較大的數(shù)值,比如現(xiàn)在我訓練到了169輪,我就先終止訓練,然后將這個epochs改成了170,再將resume的default值改為True繼續(xù)訓練 - 如上,直接在
trainds.py
設置參數(shù)--resume
的defualt=True
即可(在代碼 517行附近)
2. 訓練完原有epoch,但還繼續(xù)訓練(與參考鏈接操作不同)
訓練完原有epoch后,但還繼續(xù)訓練,比如設置epoch為200,已經(jīng)訓練完了,但是沒有收斂等原因想使用訓練了200 epoch的權(quán)重繼續(xù)訓練100個epoch, 總共就是300個epoch
- 不是直接在train.py設置weight參數(shù)為訓練好的權(quán)重(last.pt),然后設置epoch為100,這樣不行,因為學習率等超參數(shù)啟動時還是按照默認的。。。(自己把一些超參數(shù)設置好也可以,但感覺有點煩)
- 在train.py代碼里面設置就可以使用原有200 epoch的權(quán)重后繼續(xù)訓練到300epoch
????????????????????????????
以訓練了5個epoch后,想繼續(xù)訓練到15個epoch為例:
step1:
(同1.)先將--resume
的defualt
改為True
,再將--epochs
設為想要繼續(xù)訓練到的epochs,即defualt=300
(在trainds.py代碼的513行附近)
parser.add_argument('--epochs', type=int, default=15)
step2:
在trainds.py
文件中,按下Ctrl+F
搜索Epochs
定位到大概200行的位置,做以下兩處修改:
- 添加一行代碼:
ckpt['epoch'] = 5
- 修改代碼:
start_epoch = ckpt['epoch']
(后面不加1)
注意:這兩處修改是為了斷點訓練,如果不再需要斷點訓練,請將這兩處修改都還原。
step3:
可以直接簡化為下面的操作:
找到
run/train/exp
(注意找對文件夾,exp
是本輪訓練時生成的文件夾)中的opt.yaml
文件,修改其中的epochs
為你想要改為的最大的epoch值
#--------------------------------這個編輯代碼的步驟可以省略了---------------------------------------------#
在trainds.py
文件中,按下Ctrl+F
搜索replace
定位到大概565行的位置,做以下兩處修改:
- 如圖添加一行代碼:
init_epochs = opt.epochs
(記錄最開始由epochs參數(shù)設定的數(shù)值15,因為replace這行代碼,將epochs替換成了原始的epochs數(shù)值5) - 修改代碼:如圖進行添加,reinstate恢復成設定的epochs
#-----------------------------------------------------------------------------------------------------------------#
???????????????????????????????????????????????????
做完以上3個修改,訓練就會從第5個epoch的基礎上進行繼續(xù)訓練到15個epoch,和直接設置epoch為15一樣
老師讓我測試了一下:這個繼續(xù)訓練對數(shù)據(jù)集發(fā)生變化的有效沒有?
老師的解釋:理論上應該是沒有影響,雖然數(shù)據(jù)集變化,但訓練只是沿用前面的權(quán)重表就可以,比如增加了訓練數(shù)據(jù)應該沒有問題
- 前5個epoch的數(shù)據(jù)集情況:總數(shù)為708張,按9:1劃分得到 -> 訓練集637張,驗證集71張
- 繼續(xù)訓練到15個epoch的新數(shù)據(jù)集情況:總數(shù)為100張,按9:1劃分得到 -> 訓練集90張,驗證集10張
??經(jīng)測試,是有效的,能夠繼續(xù)訓練且正確,可參看以下3張圖片:
文章來源:http://www.zghlxwxcb.cn/news/detail-812492.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-812492.html
到了這里,關(guān)于yolov5ds-斷點訓練、繼續(xù)訓練、先終止訓練并調(diào)整最終epoch(yolov5同樣適用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!