LabelImg 标注数据 + YOLOv8 训练全流程
在开始之前,请确保你已经安装了 Python 环境(建议 3.8+)。
·
一、准备工作
在开始之前,请确保你已经安装了 Python 环境(建议 3.8+)。我们需要用到以下工具:
- LabelImg:用于标注图像。
- Ultralytics YOLOv8:用于训练模型。
二、安装 LabelImg 并进行数据标注
1. 安装 LabelImg
打开终端或命令行,输入以下命令安装:
pip install labelImg
2. 启动 LabelImg
在终端输入:
labelImg
3. 标注设置(关键步骤)
打开软件后,务必进行以下设置:
- 修改保存格式:在左侧菜单栏点击 "Change Output Dir" 选择标签保存位置。
- 选择 YOLO 格式:点击顶部菜单的 "View" -> "Auto Save mode" 开启自动保存。
- 关键:点击顶部菜单 "Change Output Dir" 旁边的 "PascalVOC" 按钮,将其切换为 "YOLO"。
4. 开始标注
- 点击 "Open Dir" 打开你的图片文件夹。
- 点击 "Create RectBox" (或快捷键
W),在图上框选目标。 - 在弹出的对话框中输入类别名称(例如:
person,car)。 - 标注完成后按
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 的比例分别复制到 train 和 val 文件夹中。注意:图片和标签的名字必须一一对应(除了后缀名)。
四、配置数据集文件 (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 # 置信度阈值
)
七、常见问题与注意事项
-
报错 "No labels found":
- 检查
data.yaml中的路径是否正确。 - 检查图片名和 txt 文件名是否一致(例如
001.jpg对应001.txt)。 - 确保 LabelImg 导出时选择的是 YOLO 格式,而不是 PascalVOC。
- 检查
-
显存不足 (CUDA out of memory):
- 减小
train.py中的batch大小(例如从 16 改为 8 或 4)。 - 或者减小
imgsz(例如从 640 改为 416)。
- 减小
-
类别顺序:
data.yaml里的names顺序决定了 class_id。如果 LabelImg 里第一个标的是 'person',那么 yaml 里第一个也必须是 'person'。
更多推荐
所有评论(0)