1. 基礎(chǔ)解讀
????????detect/train.py中有DetectionTrainer類,繼承自BaseTrainer類,并實現(xiàn)了諸如get_dataloader, get_model等接口。
????????setup_model接口用于準備模型,首先會檢查self.model是否是torch.nn.Module,即已經(jīng)是導(dǎo)入的模型。如果不是,檢查當前從配置文件導(dǎo)入的模型是pt模型還是yaml模型。之后,會調(diào)用get_model接口進行模型的創(chuàng)建(包含load checkpoint)。
2. 配置
????????配置文件位于./ultralytics/yolo/cfg/default.yaml
(1)訓(xùn)練配置
????????在Train settings部分,配置model, data, model_save_dir,enable_log
和log_dir路徑。分別表示訓(xùn)練的算法網(wǎng)絡(luò)、數(shù)據(jù)路徑、模型存儲路徑、是否開啟日志和日志存儲路徑。
(2)推理、測試配置
????????在Prediction settings部分,配置
predict_model, source, result_dir,此外在Val/Test settings部分配置conf, iou等。
3. 運行記錄
運行如下指令訓(xùn)練:
python3 ultralytics/yolo/v8/detect/train.py
(1)錯誤1
????????No module named 'ultralytics'
????????解決:
????????事實上,YOLOv8源代碼中已經(jīng)包含了ultralytics的一些東西,無需再安裝,因此這個時候可以在ultralytics/yolo/v8/detect/train.py文件的起始位置加上如下代碼即可。
????????import?os
????????import?sys
????????sys.path.append("/2T/001_AI/1003_YOLOv8/001_AL/001_YOLOv8")
(2)錯誤2:
????????遇到錯誤:No module named 'git'
????????解決:
????????pip3 install gitpython
(3)錯誤3:
????????No module named 'thop'
????????解決:
????????pip3 install thop
4. 按照示例代碼運行
????????如果想使用官方代碼直接運行,在解決完成上述問題后,直接運行如下代碼即可。
python3 ultralytics/yolo/v8/detect/train.py
????????此時,終端打印如下:
5. 訓(xùn)練自己的數(shù)據(jù)
訓(xùn)練自己的數(shù)據(jù)時,需要根據(jù)自己的數(shù)據(jù)標注格式修改部分代碼,主要是ultralytics/yolo/data/datasets/路徑下的yaml文件,如添加VOC_Power48.xml。
在配置數(shù)據(jù)yaml文件之前,需要通過幾個步驟預(yù)處理,獲取train、val、test數(shù)據(jù)集。本處以VOC數(shù)據(jù)標注轉(zhuǎn)coco數(shù)據(jù)格式進行舉例說明。
(1)VOC轉(zhuǎn)YOLO格式數(shù)據(jù)集
YOLO格式僅是一種叫法,形式如下,不必深究。
[class_id, Xcenter, Ycenter, Width, Height]
VOC數(shù)據(jù)集普遍以LabelImg軟件進行標注,獲取一份與圖像數(shù)據(jù)同名的標注文件。如000000.jpg對應(yīng)000000.xml。為了便于YOLO系列使用,普遍會將VOC數(shù)據(jù)標注轉(zhuǎn)換為YOLO標注形式,即000000.jpg對應(yīng)000000.txt標注文件。
運行轉(zhuǎn)換腳本:step_1_voc2yolo_convert.py
(2)劃分train、val、test
在上一步制作完成YOLO格式的標注文件后,需要將數(shù)據(jù)集按照一定的比例劃分為訓(xùn)練集(train.txt)、評估集(val.txt)和測試集(test.txt)。
劃分數(shù)據(jù)集運行腳本:step_3_split_train_val_test.py
有兩點需要注意:
a. 為了盡量增多訓(xùn)練和評估樣本數(shù)量,測試集可使用未標注的文件;
b. 經(jīng)過當前腳本生成的是txt文件,內(nèi)容為路徑列表,如圖1所示。訓(xùn)練時在VOC_Power48.xml導(dǎo)入該txt文件路徑即可(如圖2)。
圖1 訓(xùn)練數(shù)據(jù)集(train.txt)樣例
圖2 數(shù)據(jù)文件配置
(3)測試數(shù)據(jù)
經(jīng)過第一步的轉(zhuǎn)換(step_1_voc2yolo_convert.py)以后,可通過腳本step_2_optional_draw_for_validate.py指定文件名(.jpg)和標注文件(.txt)進行數(shù)據(jù)的測試
6. Finetune
執(zhí)行finetune的時候,只需要將default.py中的model替換成已有的pt模型即可。
7. 訓(xùn)練策略
訓(xùn)練的數(shù)據(jù)增強部分最后10 epoch關(guān)閉Mosaic增強更有利于模型收斂的穩(wěn)定,同時訓(xùn)練epoch數(shù)從300增大到500使得模型訓(xùn)練更充分。
從上面可以看出,YOLOv8集合了之前提出的諸如YOLOX、YOLOv6、YOLOv7和PPYOLOE等算法的相關(guān)設(shè)計,尤其是Head標簽分配和Loss部分以及PP-YOLOE非常相似。YOLOv8集百家所長達到了實時檢測界的一個新高度。
8. 繼續(xù)訓(xùn)練與恢復(fù)訓(xùn)練
繼續(xù)訓(xùn)練是指使用已保存的ckpt中的weights、optimizer和其他等參數(shù),從頭開始訓(xùn)練,一般情況下epoch從0開始。
恢復(fù)訓(xùn)練是指使用已保存的ckpt中的weights、optimizer和epoch等參數(shù)作為(pretrained weights)繼續(xù)訓(xùn)練,一般情況下epoch>0。
工程中,在resume_training階段做了修改,當執(zhí)行resume訓(xùn)練時,start_epoch接上次,當Finetune訓(xùn)練時,start_epoch從0開始。
配置文件中(default.yaml, 或由DEFAULT_CFG_PATH指定的其他配置文件)有以下幾個可選的配置:
(1)model為yaml文件(resume==False)
執(zhí)行Training from scratch。
(2)model為pt模型文件(resume==False)
執(zhí)行Finetune training。
(3)resume為指定的pt模型文件(忽略model指定內(nèi)容)
當resume為指定的pt時,執(zhí)行resume訓(xùn)練。
特別說明:文章來源:http://www.zghlxwxcb.cn/news/detail-697545.html
代碼初始運行時會有check_amp操作,此時會自動下載yolov8n.pt用于檢查。文章來源地址http://www.zghlxwxcb.cn/news/detail-697545.html
到了這里,關(guān)于YOLOv8:官方項目訓(xùn)練的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!