windows系統(tǒng)下YoLov8改進(jìn)模型訓(xùn)練自己的數(shù)據(jù)集
yolov8 github下載
1、此時(shí)確保自己的數(shù)據(jù)集格式是yolo 格式的(不會(huì)的去搜教程轉(zhuǎn)下格式)。
你的自制數(shù)據(jù)集文件夾擺放
主目錄文件夾擺放
自制數(shù)據(jù)集data.yaml文件路徑模板
path: ../datasets/VOCdevkit
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
test: # test images (optional)
names:
0: name1
1: name2
.....
2、把data.yaml放在yolov8–>ultralytics->datasets文件夾下面
3、然后模型配置改進(jìn)yaml文件在主目錄新建文件夾v8_cfg存放
模型改進(jìn)修改與yolov5 類似,只是修改的文件名稱與文件地址變化了
1.首先在yolov8–>ultralytics–>nn–>model.py添加你自己的新模型
2.然后在yolov8–>ultralytics–>nn–>task.py–>parse_model解析文件里面導(dǎo)入并添加你的模塊
3.修改yolov8n.yaml文件
4、權(quán)重.pt文件直接下載到主目錄下面
5、然后在主目錄下新建推理v8_train.py
from ultralytics import YOLO
if __name__ == '__main__':
# 加載模型
model = YOLO("./v8_cfg/yolov8n-test.yaml") # build a new model from scratch
results =model.train(data="data.yaml" ,epochs=500, model="yolov8n-test.yaml",imgsz=640,batch=30,workers = 2)
此時(shí)運(yùn)行改進(jìn)模型發(fā)現(xiàn)不會(huì)載入預(yù)訓(xùn)練權(quán)重,原因是因?yàn)閥olov8 model只能載入pt或者yaml,二者只能其一,我們改進(jìn)模型肯定要 選擇mode = yaml
(1)參考魔傀面具大佬的blibli將下面這段代碼插入yolov8–>ultralytics–>yolo–>engine–>model.py–>def _new,可以載入預(yù)訓(xùn)練權(quán)重進(jìn)行遷移學(xué)習(xí)(如果不想用預(yù)訓(xùn)練權(quán)重想從0開(kāi)始,則注釋就行)
""" 添加代碼bug """
ckpt = torch.load('yolov8n.pt')
csd = ckpt['model'].float().state_dict()
csd = intersect_dicts(csd,self.model.state_dict())
self.model.load_state_dict(csd,strict = False)
print(f'Transferred {len(csd)}/{len(self.model.state_dict())} items')
""" 添加代碼bug """
具體插入位置如下圖所示
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-458788.html
(2)yolov8 train的時(shí)候會(huì)重新載入一次模型,用yolo測(cè)試模型yaml文件一次,后面又會(huì)覆蓋一次 所以這里需要修改代碼 文件路徑y(tǒng)olov8–>ultralytics–>yolo–>engine–>model.py–>def train
self.trainer = TASK_MAP[self.task][1](overrides=overrides)
# if not overrides.get('resume'): # manually set model only if not resuming
# self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
# self.model = self.trainer.model
self.trainer.model = self.model
插入具體位置如下圖所示
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-458788.html
6、然后在主目錄下新建推理文件v8_predict.py,將best.pt移動(dòng)到主目錄下 新建v8_images文件夾存放你需要推理的圖片
from ultralytics import YOLO
if __name__ == '__main__':
# Load a model
model = YOLO("best.pt")
# Predict with the model
results = model(source="v8_images",save=True,device= "cuda:0") # predict on an image
7、2023.10.6更新,由于作者yolov8框架的更新,現(xiàn)在載入預(yù)訓(xùn)練模型可以使用作者的api接口 model.load(‘yolov8n.pt’)來(lái)使用,只要權(quán)重路徑是對(duì)的,也不用使用更改源碼的方式了。
from ultralytics import YOLO
if __name__ == '__main__':
# 直接使用預(yù)訓(xùn)練模型創(chuàng)建模型.
# model = YOLO('yolov8n.pt')
# model.train(**{'cfg':'ultralytics/cfg/exp1.yaml', 'data':'dataset/data.yaml'})
# 使用yaml配置文件來(lái)創(chuàng)建模型,并導(dǎo)入預(yù)訓(xùn)練權(quán)重.
model = YOLO('ultralytics/cfg/models/v8/yolov8n.yaml')
model.load('yolov8n.pt')
model.train(**{'cfg':'ultralytics/cfg/PCB.yaml', 'data':'datasets/VOCPCB.yaml'})
# 模型驗(yàn)證
# model = YOLO('runs/detect/train11/weights/best.pt')
# model.val(**{'cfg':'ultralytics/cfg/PCB.yaml', 'data':'datasets/VOCPCB.yaml'})
# 模型推理
# model = YOLO('runs/detect/yolov8n_exp/best.pt')
# model.predict(source='dataset/images/test', **{'save':True})
# 模型導(dǎo)出
# model = YOLO("Weight/yolov8n.pt") # load an official model
# model.export(format="onnx")
到了這里,關(guān)于Yolov8改進(jìn)模型后使用預(yù)訓(xùn)練權(quán)重遷移學(xué)習(xí)訓(xùn)練自己的數(shù)據(jù)集的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!