训练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。
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。
- YOLOv8 有 5 个版本:
data=coco128.yaml
- 含义:指定数据集的配置文件。
- 解释:
coco128.yaml是官方自带的一个微型数据集(只有 128 张图),通常用来测试环境有没有配好。 - 实际使用:当你训练自己的数据(比如识别“插座”、“拖鞋”)时,你需要把它换成你自己写的
my_dataset.yaml。
epochs=50
- 含义:训练轮数。意思是把所有图片反复看 50 遍。
- 调整建议:正式训练通常设为 100 到 300。轮数太少学不会,轮数太多会过拟合(死记硬背)。
imgsz=640(关键点 🌟)
- 含义:训练时的图片输入分辨率是 640x640。
- 对 RK3566 的意义:
- 这个数字必须和你的 C++ 代码 (
#define INPUT_SIZE 640) 以及 RKNN 转换脚本 里的设置保持一致! - 如果你这里改成了 320,那么你的模型会变小,跑得更快(可能 50 FPS),但看小物体会看不清。640 是一个平衡点。
- 这个数字必须和你的 C++ 代码 (
device=0
- 含义:使用第 0 号 GPU(显卡)进行训练。
- 前提:你的电脑上必须装了 NVIDIA 显卡和 CUDA 环境。如果没有显卡,要写
device=cpu(但这会慢到让你怀疑人生)。
batch=64
- 含义:批大小。一次性塞 64 张图给显卡去算。
- 硬件限制:这取决于你显卡的显存(VRAM)。
- 如果你的显卡是 RTX 3090 (24G),可以开
batch=128。 - 如果是 GTX 1060 (6G),可能只能开
batch=16或32。如果报错 “Out of Memory (OOM)”,就把这个数改小。
- 如果你的显卡是 RTX 3090 (24G),可以开
workers=8
- 含义:使用 8 个 CPU 线程来搬运数据。
- 作用:加快读取图片的速度,防止显卡闲着等数据。通常设置为你 CPU 核心数的一半。
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 | my_robot_data/ |
data.yaml: 这个文件告诉 YOLO 你的数据在哪里,有哪些类。
1 | path: /绝对路径/my_robot_data # 数据集根目录 |
运行训练命令:
1 | yolo detect train \ |
导出模型:
# 只有在导出这一步,才需要显式地写出 480,640 yolo export model=runs/detect/robot_rect_v1/weights/best.pt format=onnx imgsz=480,640