训练yolov8n-2

yolov8训练细化

命令:yolo detect train model=yolov8n.pt data=coco128.yaml epochs=50 imgsz=640 device=0 batch=64 workers=8 name=rk3566_test

1.yolo detect train

  • 含义:告诉程序我要做 目标检测 (detect) 任务,并且模式是 训练 (train)
  • 注:如果你只是想看效果而不是训练,这里会变成 predict
  1. model=yolov8n.pt (关键点 🌟)
  • 含义:指定使用 YOLOv8 Nano (n) 版本的预训练权重作为起点。
  • 对 RK3566 的意义
    • YOLOv8 有 5 个版本:n (Nano), s (Small), m (Medium), l (Large), x (Extra Large)。
    • 你必须选 n。因为 RK3566 的算力只有 0.8 ~ 1.0 TOPS。
    • yolov8n 可以在 RK3566 上跑 20~30 FPS。
    • 如果你选了 yolov8s 或更大的,板子跑起来可能只有 5 FPS 甚至更低,卡成 PPT。
  1. data=coco128.yaml
  • 含义:指定数据集的配置文件。
  • 解释coco128.yaml 是官方自带的一个微型数据集(只有 128 张图),通常用来测试环境有没有配好。
  • 实际使用:当你训练自己的数据(比如识别“插座”、“拖鞋”)时,你需要把它换成你自己写的 my_dataset.yaml
  1. epochs=50
  • 含义:训练轮数。意思是把所有图片反复看 50 遍。
  • 调整建议:正式训练通常设为 100 到 300。轮数太少学不会,轮数太多会过拟合(死记硬背)。
  1. imgsz=640 (关键点 🌟)
  • 含义:训练时的图片输入分辨率是 640x640。
  • 对 RK3566 的意义
    • 这个数字必须和你的 C++ 代码 (#define INPUT_SIZE 640) 以及 RKNN 转换脚本 里的设置保持一致!
    • 如果你这里改成了 320,那么你的模型会变小,跑得更快(可能 50 FPS),但看小物体会看不清。640 是一个平衡点。
  1. device=0
  • 含义:使用第 0 号 GPU(显卡)进行训练。
  • 前提:你的电脑上必须装了 NVIDIA 显卡和 CUDA 环境。如果没有显卡,要写 device=cpu(但这会慢到让你怀疑人生)。
  1. batch=64
  • 含义:批大小。一次性塞 64 张图给显卡去算。
  • 硬件限制:这取决于你显卡的显存(VRAM)。
    • 如果你的显卡是 RTX 3090 (24G),可以开 batch=128
    • 如果是 GTX 1060 (6G),可能只能开 batch=1632。如果报错 “Out of Memory (OOM)”,就把这个数改小。
  1. workers=8
  • 含义:使用 8 个 CPU 线程来搬运数据。
  • 作用:加快读取图片的速度,防止显卡闲着等数据。通常设置为你 CPU 核心数的一半。
  1. name=rk3566_test
  • 含义:给这次训练起个名字。
  • 结果:训练完成后,结果会保存在 runs/detect/rk3566_test/ 目录下。你需要的 best.pt 就在那里。

数据集标注

标注工具:LabelImg

标注格式: 要选 YOLO 格式。生成的标注文件是 .txt,长这样: 0 0.45 0.55 0.1 0.2 (类别ID, 中心x, 中心y, 宽, 高)

目录结构(YOLO 必须严格遵守这个结构):

1
2
3
4
5
6
7
8
my_robot_data/
├── data.yaml <-- 配置文件(下面教你怎么写)
├── images/
│ ├── train/ <-- 也就是 80% 的图片放这里
│ └── val/ <-- 剩下 20% 的图片放这里(验证集)
└── labels/
├── train/ <-- 对应的 txt 标注文件
└── val/ <-- 对应的 txt 标注文件

data.yaml 这个文件告诉 YOLO 你的数据在哪里,有哪些类。

1
2
3
4
5
6
7
8
9
path: /绝对路径/my_robot_data  # 数据集根目录
train: images/train
val: images/val

# 类别数量
nc: 3

# 类别名称 (顺序必须和标注时的一致!)
names: ['wire', 'slipper', 'dock']

运行训练命令:

1
2
3
4
5
6
7
8
9
yolo detect train \
model=yolov8n.pt \ # 必须用 n (Nano) 版,为了板子跑得快
data=my_robot_data/data.yaml \ # 指向刚才写的配置
epochs=100 \ # 训练 100 轮
imgsz=640 \
rect=True \ # 必须固定 640,对应你板子上的代码
batch=16 \ # 显存够大就改 32 或 64
device=0 \ # 用显卡训练
name=robot_v1 # 任务名字

导出模型:

# 只有在导出这一步,才需要显式地写出 480,640 yolo export model=runs/detect/robot_rect_v1/weights/best.pt format=onnx imgsz=480,640