一、准备工作

在开始之前,请确保你已经安装了 Python 环境(建议 3.8+)。我们需要用到以下工具:

  1. LabelImg:用于标注图像。
  2. Ultralytics YOLOv8:用于训练模型。

二、安装 LabelImg 并进行数据标注

1. 安装 LabelImg

打开终端或命令行,输入以下命令安装:

pip install labelImg

2. 启动 LabelImg

在终端输入:

labelImg

3. 标注设置(关键步骤)

打开软件后,务必进行以下设置:

  1. 修改保存格式:在左侧菜单栏点击 "Change Output Dir" 选择标签保存位置。
  2. 选择 YOLO 格式:点击顶部菜单的 "View" -> "Auto Save mode" 开启自动保存。
  3. 关键:点击顶部菜单 "Change Output Dir" 旁边的 "PascalVOC" 按钮,将其切换为 "YOLO"

4. 开始标注

  1. 点击 "Open Dir" 打开你的图片文件夹。
  2. 点击 "Create RectBox" (或快捷键 W),在图上框选目标。
  3. 在弹出的对话框中输入类别名称(例如:person, car)。
  4. 标注完成后按 Ctrl+S 保存(因为开了自动保存,通常切图会自动保存),然后按 D 切换到下一张图。

标注结果说明:你会发现保存的标签是 .txt 文件,每一行对应一个目标,格式为:class_id x_center y_center width height(注意:坐标是归一化后的 0-1 之间的数值)


三、准备 YOLOv8 训练的数据集结构

为了让 YOLOv8 能顺利读取数据,我们需要将文件整理成以下目录结构。

1. 创建目录结构

在你的项目根目录下,手动创建文件夹,结构如下:

datasets/
├── images/
│   ├── train/      # 存放 80% 的训练图片
│   └── val/        # 存放 20% 的验证图片
└── labels/
    ├── train/      # 存放对应 train 图片的 txt 标签
    └── val/        # 存放对应 val 图片的 txt 标签

2. 划分数据集

将你之前标注好的图片和 txt 文件,按大约 8:2 的比例分别复制到 trainval 文件夹中。注意:图片和标签的名字必须一一对应(除了后缀名)。


四、配置数据集文件 (data.yaml)

datasets 文件夹的同级目录下(或者你喜欢的位置),创建一个名为 data.yaml 的文件。

这是一个配置文件,告诉 YOLOv8 数据在哪里、有多少类、类别叫什么。

data.yaml 内容示例:

# 数据集根目录(这里使用相对路径,也可以用绝对路径)
path: ./datasets  

# 训练图像文件夹 (相对于 path)
train: images/train  
# 验证图像文件夹 (相对于 path)
val: images/val  

# 类别数量
nc: 2  

# 类别名称
names: ['person', 'car'] 

注意:nc 的数字要和 names 列表里的数量一致。


五、安装 YOLOv8 并开始训练

1. 安装 Ultralytics 库

打开终端,运行:

pip install ultralytics

2. 编写训练代码 (train.py)

在项目根目录创建一个 Python 脚本 train.py,内容如下:

from ultralytics import YOLO

# 1. 加载模型
# 你可以选择 yolov8n.pt (nano, 速度快), yolov8s.pt (small), yolov8m.pt (medium) 等
# 如果没有预训练权重,它会自动下载
model = YOLO('yolov8n.pt') 

# 2. 开始训练
results = model.train(
    data='data.yaml',    # 指向我们刚才写的配置文件
    epochs=100,          # 训练轮数,建议先设 50-100 看效果
    imgsz=640,           # 输入图片大小,通常 640
    batch=16,            # 批次大小,根据显存调整,显存小就改小 (例如 8)
    device='0',          # 使用 GPU,如果你没有 GPU,改成 'cpu' (但会非常慢)
    project='runs/train',# 结果保存的文件夹
    name='my_experiment' # 实验名称
)

print("训练完成!")

3. 运行训练

在终端执行:

python train.py

训练过程中你会看到:

  • 终端会打印损失函数 (loss)、精度 (mAP) 等信息。
  • 训练好的权重文件会保存在 runs/train/my_experiment/weights/ 目录下,其中 best.pt 是效果最好的模型。

六、验证与推理 (可选)

训练完后,你可以写个简单的脚本测试一下模型效果:

创建 predict.py

from ultralytics import YOLO
import cv2

# 加载你训练好的模型
model = YOLO('runs/train/my_experiment/weights/best.pt')

# 进行预测 (source可以是图片路径、视频路径或 0 调用摄像头)
results = model.predict(
    source='datasets/images/val/your_test_image.jpg', 
    save=True,  # 保存预测结果图片
    conf=0.25   # 置信度阈值
)

七、常见问题与注意事项

  1. 报错 "No labels found"

    • 检查 data.yaml 中的路径是否正确。
    • 检查图片名和 txt 文件名是否一致(例如 001.jpg 对应 001.txt)。
    • 确保 LabelImg 导出时选择的是 YOLO 格式,而不是 PascalVOC。
  2. 显存不足 (CUDA out of memory)

    • 减小 train.py 中的 batch 大小(例如从 16 改为 8 或 4)。
    • 或者减小 imgsz(例如从 640 改为 416)。
  3. 类别顺序

    • data.yaml 里的 names 顺序决定了 class_id。如果 LabelImg 里第一个标的是 'person',那么 yaml 里第一个也必须是 'person'。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐