恭喜你进入本教程的核心章节!在前两章中,你已经学会了如何使用预训练模型。现在,我们将迈出最关键的一步:训练一个能够识别你指定物体的专属模型。本章将详细拆解从数据集准备到模型训练与分析的全过程。
3.1 数据集准备:AI的“食材”
模型的性能上限很大程度上取决于数据集的质量,正如“Garbage in, garbage out”(垃圾进,垃圾出)这句名言所说。一个高质量、多样化的数据集是成功训练模型的基石。
3.1.1 数据集来源
-
公共数据集: 对于学术研究或学习,可以使用COCO、Pascal VOC等标准数据集。
-
自己采集: 使用手机、相机等设备拍摄你想要检测的目标物体。关键在于多样性:尝试在不同背景、不同光照条件、不同角度、不同距离下拍摄,确保模型具有良好的泛化能力。
3.1.2 使用Roboflow平台管理数据集(推荐)
Roboflow 是一个强大的一站式计算机视觉平台,它极大地简化了数据集的管理、标注、增强和导出流程,对初学者非常友好。
-
创建项目: 在Roboflow官网注册并创建一个新项目,选择“Object Detection”作为项目类型。
-
上传数据: 将你采集的图片直接上传到项目中。
-
数据增强(Data Augmentation): Roboflow提供了丰富的数据增强选项(如翻转、旋转、亮度调整、增加噪点等)。数据增强可以在不增加实际图片数量的情况下,扩充数据集的多样性,有效防止模型过拟合。你可以选择平台预设的增强策略,一键生成多个增强版本的数据集。
-
导出数据集: 当数据集准备就绪后,选择“Export”并选择 “YOLOv8” 格式。Roboflow会自动为你生成符合YOLOv8训练要求的文件夹结构和
.yaml配置文件,你只需下载并解压即可使用,极大简化了后续步骤。
[图片:Roboflow平台的数据集管理界面截图]
3.2 数据标注:教AI认识世界
数据标注是告诉模型“你要找的东西长什么样,在图的哪个位置”的过程。对于目标检测任务,我们需要用边界框框出物体。
3.2.1 标注工具:LabelImg
LabelImg 是一款经典的、开源的图形化图像标注工具,专门用于目标检测。
-
安装:
# 在你的conda环境中安装 pip install labelimg -
启动:
labelimg -
使用流程:
-
打开目录 (Open Dir): 选择存放你所有待标注图片的文件夹。
-
创建矩形框 (Create RectBox): 按下快捷键
W,然后用鼠标拖拽,框选出你想要检测的物体。 -
输入标签 (Label): 在弹出的对话框中输入该物体的类别名称(例如
cat,dog)。 -
保存 (Save): 按下快捷键
Ctrl+S。LabelImg会在图片同目录下生成一个同名的.xml文件(VOC格式)。
-
3.2.2 YOLO标注格式详解
虽然LabelImg默认保存为.xml格式,但YOLOv8训练需要的是特定的.txt格式。你需要将.xml转换为.txt(Roboflow会自动完成这一步)。YOLO格式的.txt文件每一行代表一个物体,格式如下:
<class_id> <x_center> <y_center> <width> <height>
-
<class_id>: 类别索引,从0开始的整数。例如,如果你有两个类别cat和dog,你可以定义cat为0,dog为1。 -
<x_center><y_center>: 边界框中心点的x, y坐标。 -
<width><height>: 边界框的宽度和高度。
重点: 这四个坐标值都是归一化的,即它们的值都是相对于图片总宽度和总高度的比例(范围在0到1之间)。
[图片:一张图片及其对应的YOLO格式标注文件,并用图示解释归一化坐标的计算方法]
3.3 配置文件详解:编写data.yaml
data.yaml文件是数据集的“说明书”,它告诉YOLOv8训练脚本关于数据集的一切信息。
标准模板
创建一个名为data.yaml的文件,并按以下格式填写:
# 数据集根目录的路径
path: /path/to/your/dataset # 例如: /home/user/datasets/cats_dogs
# 训练集、验证集、测试集的图片文件夹路径 (相对于path)
train: images/train
val: images/val
test: images/test # 可选
# 类别信息
names:
0: cat
1: dog
参数详解
-
path: 数据集根目录的绝对路径。 -
train: 训练图片所在的文件夹路径,相对于path。YOLOv8会自动在该路径下寻找对应的labels文件夹。 -
val: 验证图片所在的文件夹路径。 -
test: (可选) 测试图片所在的文件夹路径。 -
names: 至关重要! 这是一个字典,定义了class_id和类别名称的映射关系。这里的顺序必须和你标注时使用的类别ID完全一致。
3.4 启动训练:一行命令的魔力
准备好数据集和配置文件后,就可以开始最激动人心的训练环节了。
核心训练命令
yolo train data=path/to/your/data.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0
关键参数详解
-
data: 指向你刚刚创建的data.yaml文件的路径。 -
model: 迁移学习的关键。这里我们使用yolov8n.pt,即一个在大型数据集(如COCO)上预训练好的模型。基于它进行训练,可以让模型更快地学习到你的新数据特征,而不是从零开始。 -
epochs: 训练轮次。一个epoch代表模型完整地学习了一遍训练集中的所有图片。通常,数据集越大越复杂,需要的epochs越多。初次尝试可以从100开始。 -
batch: 批大小。代表模型一次性“看”多少张图片。batch越大,梯度下降越稳定,但对显存(VRAM)的要求也越高。如果遇到显存不足(Out of Memory)的错误,应减小此值。默认值为16。 -
imgsz: 训练时输入的图片尺寸。640是常用的尺寸。更大的尺寸可以提高对小目标的检测精度,但会增加计算量和显存占用。 -
device: 指定训练设备。device=0表示使用第一块GPU。如果有多块GPU,可以是device=0,1。如果只能用CPU,则指定device=cpu(训练会非常慢)。
3.5 结果分析:解读模型的“成绩单”
训练完成后,所有结果都会保存在runs/detect/train/目录下(每次训练会新建一个trainX文件夹)。
3.5.1 关键文件
-
weights/文件夹:-
best.pt: 最重要的文件! 这是在验证集上取得最佳性能指标(通常是mAP50-95)的模型权重。后续进行预测和部署时,应该使用这个模型。 -
last.pt: 最后一个epoch训练完成后的模型权重。
-
-
results.csv: 一个CSV文件,记录了每个epoch的详细训练指标,如边界框损失(box_loss)、分类损失(cls_loss)以及验证集上的各项精度指标(metrics/mAP50-95等)。这是进行科学分析和论文撰写的基础数据。 -
confusion_matrix.png: 混淆矩阵。它直观地展示了模型对不同类别的分类情况。对角线上的值越高,说明模型对该类的识别越准确。非对角线上的值则表示模型将一个类错误地识别为了另一个类。 -
PR_curve.png: Precision-Recall(精确率-召回率)曲线。曲线下的面积(AUC)越大,说明模型性能越好。
通过分析这些结果文件,你不仅能知道模型“考了多少分”,还能深入了解它“错在了哪里”,从而为下一步的优化指明方向。

2714

被折叠的 条评论
为什么被折叠?



