基于yolo的自定义模型训练

YOLOv8自定义模型训练全流程指南,包含数据准备、标注、训练的详细步骤和可视化说明

一、数据准备流程图

graph TD
    A[拍摄商品照片] --> B[数据标注]
    B --> C[划分数据集]
    C --> D[配置YAML文件]
    D --> E[开始训练]

二、详细步骤说明

  • 步骤1:采集商品图片
    硬件需求:
    智能手机(建议使用后置摄像头)
    简易摄影棚(可用白色纸箱+LED灯代替)
    拍摄要点:
    每个商品至少拍摄 50张 不同角度照片
    包含以下场景:
    商品单独摆放
    多个商品堆叠
    手部拿取状态
    不同光照条件(自然光/灯光)
    示例结构:

     			my_dataset/
     			├── images/
     			│   ├── cola_001.jpg
     			│   ├── chips_001.jpg
     			│   └── ...
     			└── labels/
     			    ├── cola_001.txt
     			    ├── chips_001.txt
     			    └── ...
    
  • 步骤2:安装标注工具

     推荐使用 LabelImg(新手友好型):
     			pip install labelImg
     			labelImg
    
  • 步骤3:标注数据

    标注界面操作:
    LabelImg界面

    快捷键说明:

     W:创建边界框
    
     Ctrl+S:保存标注
    
     →:下一张图片
    

    标注规范:

     边界框紧贴商品边缘
    
     同类商品使用相同标签名(如"cola")
    
     保存格式选择 YOLO(自动生成.txt文件)
    

    标签文件示例:

    			cola_001.txt 内容
    			0 0.486 0.612 0.124 0.245
    
     各数值含义:[类别ID] [中心x] [中心y] [宽度] [高度](归一化到0-1)
    
  • 步骤4:组织数据集结构

    		my_dataset/
    		├── train/
    		│   ├── images/  # 训练集图片
    		│   └── labels/  # 训练集标签
    		├── val/
    		│   ├── images/  # 验证集图片
    		│   └── labels/  # 验证集标签
    		└── data.yaml     # 配置文件
    

    data.yaml 示例:

    # 商品类别定义
    names:
      0: cola
      1: chips
      2: chocolate
    
    # 数据集路径
    train: ../my_dataset/train/images
    val: ../my_dataset/val/images
    
    # 类别数量
    nc: 3
    
  • 步骤5:训练模型

    from ultralytics import YOLO
    
    # 加载预训练模型(轻量版)
    model = YOLO('yolov8n.pt')  
    
    # 开始训练(关键参数说明)
    results = model.train(
        data='my_dataset/data.yaml',  # 配置文件路径
        epochs=50,           # 训练轮次(建议50-100)
        batch=8,             # 每批处理图片数(根据内存调整)
        imgsz=640,           # 输入图片尺寸
        device='cpu',        # 使用CPU训练(有GPU改为0)
        name='my_custom_model'  # 训练结果保存名称
    )
    
  • 步骤6:验证模型

    # 加载训练好的最佳模型
    best_model = YOLO('runs/detect/my_custom_model/weights/best.pt')  
    
    # 测试单张图片
    results = best_model.predict('test_image.jpg', save=True)
    
    # 验证集评估
    metrics = best_model.val()  
    print(f"[email protected]: {metrics.box.map50}")  # 关键指标
    

三、训练参数优化建议

参数 推荐值(CPU) 说明
epochs 50-100 小数据集不宜训练过久
batch 4-8 根据内存容量调整
imgsz 320-640 尺寸越小速度越快,精度越低
optimizer SGD CPU训练推荐,节省内存
lr0 0.01 初始学习率(太大容易震荡)

四、常见问题解答

Q1:需要多少张图片才能训练?
最低要求:每类 50张
推荐标准:每类 200张(包含各种场景)

Q2:训练报错 CUDA out of memory 怎么办?
降低 batch 值(如从16改为4)
减小 imgsz(如从640改为320)
添加 workers=0 参数

Q3:如何提高检测精度?
增加数据多样性(更多角度/光照)
调整锚框尺寸(使用autoanchor功能)
增加数据增强参数:

model.train(
    ...
    hsv_h=0.5,  # 色相增强强度
    hsv_s=0.5,  # 饱和度增强
    flipud=0.2, # 上下翻转概率
    mosaic=1.0  # 马赛克增强启用
)

五、训练过程监控

# 安装可视化工具
pip install tensorboard

# 查看训练日志
tensorboard --logdir runs/detect

打开浏览器访问 http://localhost:6006 可查看实时训练曲线

六、模型使用示例

from ultralytics import YOLO
import cv2

# 加载自定义模型
model = YOLO('yolov8n_custom.pt')

# 实时摄像头检测
cap = cv2.VideoCapture(0)
while cap.isOpened():
    ret, frame = cap.read()
    results = model.predict(frame, conf=0.6)
    annotated_frame = results[0].plot()
    cv2.imshow('Detection', annotated_frame)
    
    if cv2.waitKey(1) == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

通过以上步骤,即可完成自定义商品检测模型的训练。建议首次训练时使用少量数据(如3类×50张图片)快速验证流程,之后再逐步扩充数据集。训练完成后,将生成的 best.pt 重命名为 yolov8n_custom.pt 即可用于API系统。

你可能感兴趣的:(图像处理,机器学习,YOLO,计算机视觉,目标检测,视觉检测)