github项目链接:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite
跑通训练代码:
我新建了一个python3.8的环境,然后安装torch,torchvision等包
torch 1.13.1
torchsummary 1.5.1
torchvision 0.14.1
然后安装ultralytics的包
pip install ultralytics
跑自带的训练集,该代码会自动下载预训练模型yolov8n.pt到工程的根目录下,以及检测的训练集coco128,放到与该工程根目录ultralytics平行的文件夹中,datasets/coco128,就可以开启训练了。
from ultralytics import YOLO
model = YOLO('yolov8n.yaml').load('yolov8n.pt')
model.train(data='coco128.yaml', epochs=100, imgsz=640)
跑自己的训练集:
制作数据集,格式和yolov5的一样,images文件夹下放图片,labels文件夹下放YOLO格式的.txt的标签文件。
新建一个.yaml放数据集的路径,和yolov5里面一样
train: /home/peng.sheng/****/detect/images
val: /home/peng.sheng/****/detect/images
nc: 1
names: ['solder joint']
ultralytics/ultralytics/cfg/default.yaml,该文件存放的是模型训练的一些配置参数
我在工程根目录下,新建一个文件夹data,然后复制了一份default.yaml的模型配置参数表,放到该目录下,以及数据集的路径定义配置文件,还有一些测试的图片
用python命令开启训练,验证,推理,以及onnx的导出:
from ultralytics import YOLO
import cv2
import os
# 模型训练
model=YOLO('yolov8n.yaml').load('yolov8n.pt')
model.train(cfg='data/cfg_jhx_det.yaml')
# 模型验证
model=YOLO('runs/train/jianhexian_det/weights/best.pt')
metrics = model.val()
# 图片推理1
weights_path='runs/train/jianhexian_det/weights/best.pt'
model=YOLO(weights_path)
source='data/jhx_images/0705_actual_013.jpg'
model.predict(source,save=True)
# 图片推理2
weights_path='runs/train/jianhexian_det/weights/best.pt'
model=YOLO(weights_path)
source='data/jhx_images/0705_actual_013.jpg'
results=model(source)
res_plotted=results[0].plot()
cv2.imwrite('res_plotted.jpg',res_plotted)
# 图片推理3-遍历文件夹推理画框
src_direct='data/jhx_images'
dst_direct='data/jhx_images_rlt'
weights_path='runs/train/jianhexian_det/weights/best.pt'
model=YOLO(weights_path)
imgnames=os.listdir(src_direct)
for imgname in imgnames:
imgpath=os.path.join(src_direct,imgname)
img=cv2.imread(imgpath)
res_plotted=img.copy()
results=model(img)
for result in results:
boxes=result.boxes.cpu().numpy()
for box in boxes:
rect=box.xyxy[0].astype(int)
name=result.names[int(box.cls[0])]
cv2.rectangle(res_plotted, rect[:2], rect[2:], (255, 0, 0), 2)
cv2.imwrite("res_plotted.jpg",res_plotted)
#模型导出
weights_path='runs/train/jianhexian_det/weights/best.pt'
model = YOLO(weights_path)
model.export(format='onnx',simplify=True)
在推理画框这一步,可以调用yolov8的接口,用自带的方式,存储画框的结果,也可以取出推理的结果,得到[x1,y1,x2,y2]用cv2.rectangle来画框存图。
默认训练的模型读入的是RGB的图像,若想用BGR的图片,进行训练
ultralytics/data/base.py 97行
BaseDataset(Dataset)的基类定义了transforms的函数
ultralytics/data/dataset.py 146行
YOLODataset(BaseDataset)在该子类中,给出了build_transforms具体的实现
ultralytics/data/augment.py/745行
Format的函数中,默认在处理图片的时候,会转成RGB,修改该行,即可训练出吃BGR图片数据的模型。