经过一系列的折腾,终于可以开始训练模型了,好在官网上提供了多种情况下的训练代码,直接使用即可。
官网提供的代码如下:
点击查看代码
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.yaml") # 从YAML中创建一个新的模型
model = YOLO("yolov8n.pt") # 使用一个预训练模型 (训练推荐)
model = YOLO("yolov8n.yaml").load("yolov8n.pt") # 从YAML中建立模型并传递权重
# 训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
在一开始的训练过程中,我选择加载模型中的第一句和第三局,将训练模型模块中的数据参数替换为自己的YAML文件,按照网上的教程将yolov8n.yaml中的nc数量改为你的项目需要训练的数量,我照着做了,但是在后来我发现之前的一个运行版本中我并没有更改,但是模型依旧可以训练。
模型训练完成后,对模型的检测效果进行测试,大概有500+图片,进行了300轮训练,测试了一下检测到效果,检测的类别的效果很好,基本上没有出过错。但由于项目的需求是,将被框出的区域截取出来进行进一步处理,于是我参考官方提供的检测框查看代码获取检测框参数,对图片进行截取。截取出来发现,为什么和想的不一样。思考了一下:要么是预测框的精度有所缺失,要么是图片的尺寸有一点不对,毕竟训练的时候是要将图片的尺寸进行修改,而我的使用与裁剪的图片是原图。
基于上述两点,我将模型进行了重新的训练,使用加载模型中的第二句。接着,对要裁剪的图片进行尺寸的转化,确保裁剪图片尺寸与训练图片尺寸一致。图片的呈现效果稍微好了一点,但还是没有办法达到精度的要求。后来,我发现了问题的所在,是我截图的代码有问题,正确的截取代码为:cropped_img = img[int(y1):int(y2), int(x1):int(x2)]
。
图片能正确显示,接下来测试OCR,遇到了报错Initializing libiomp5md.dll, but found libiomp5md.dll already initialized
,报错的原因是libiomp5md.dll初始化过程中发现已经初始化了,这里冲突的地方应该是YOLOV8和paddlepaddle,但两个都要用咋整,使用以下代码:
点击查看代码
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"