yolov8训练记录

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图片数据的模型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值