一 一定要卸载安装在虚拟环境中安装包(否则不论怎么修改项目代码,都只会调用虚拟环境中安装的包而不是修改过后的项目代码)
pip uninstall ultralytics
二 然后安装项目中的库
python setup.py install
三 修改yolov8源码
由于修改代码后,需要载入模型,而不是直接载入原来的pt文件,要更改文件载入方式,
打开ultralytics/yolo/engine/model.py,文件导入包
import torch
from ultralytics.yolo.utils.torch_utils import intersect_dicts
找到yolo类下的_new加入代码
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')
在train函数中将
append_filename=True改为False
将导入原有模型代码注释掉(225-227行)
在注释下一行加入导入模型带代码
self.trainer.model=self.model
四 新建main.py运行代码
注意一定要导入配置文件,不能导入pt文件
from ultralytics import YOLO
import PyQt5
model=YOLO("/home/lin/zy/yolov8/ultralytics/models/v8/yolov8n_MHSA.yaml").train(**{'cfg':'/home/lin/zy/yolov8/ultralytics/yolo/cfg/default.yaml'})
# model=YOLO("/home/lin/zy/yolov8/runs/detect/train59/weights/best.pt").val()
五 验证
在main.py中将训练代码注释,将权重导入
在ultralytics/yolo/engine/validator.py中的call函数中122行修改额为如下所示(这里我认为是一个bug官方验证用的val,但是这个val和训练中的val是一个数据,我在这里删掉了val,留下了test):