在 Ultralytics YOLOv26 中训练自定义数据集非常简便,框架自动处理了预训练权重的迁移和层结构的适配。以下是完整的操作指南:
1. 准备数据集
YOLOv26 支持标准的 YOLO 格式数据集。你需要构建如下目录结构:
text
dataset/
├── images/
│ ├── train/ # 训练集图片
│ └── val/ # 验证集图片
├── labels/
│ ├── train/ # 训练集标签 (.txt)
│ └── val/ # 验证集标签 (.txt)
└── data.yaml # 数据集配置文件
标签格式说明:
每个图片对应一个 .txt 文件,每行代表一个目标,格式为:
class_id x_center y_center width height
所有数值均为归一化值(0-1之间)。
class_id 从 0 开始索引。
2. 创建数据配置文件 (data.yaml)
在项目根目录下创建一个 YAML 文件(例如 custom.yaml),内容如下:
yaml
# 数据集路径 (可以是绝对路径或相对于此yaml文件的路径)
path: ./dataset # 数据集根目录
train: images/train # 训练集图片相对路径
val: images/val # 验证集图片相对路径
# 类别数量
nc: 5 # 替换为你实际的类别数量
# 类别名称列表
names:
0: cat
1: dog
2: bird
3: car
4: person
3. 开始训练
YOLOv26 会自动加载预训练权重(如 yolo26n.pt),并根据你的类别数量自动调整检测头(Detection Head)的形状,无需手动修改模型结构或编写迁移学习代码。
使用 Python 代码训练
python
from ultralytics import YOLO
# 加载预训练模型 (支持 n, s, m, l, x 等不同规模)
model = YOLO("yolo26n.pt")
# 开始训练
results = model.train(
data="custom.yaml", # 指向你的数据配置文件
epochs=100, # 训练轮数
imgsz=640, # 输入图像尺寸
batch=16, # 批次大小
device=0 # 使用GPU设备ID,cpu则设为'cpu'
)
使用命令行 (CLI) 训练
bash
yolo detect train data=custom.yaml model=yolo26n.pt epochs=100 imgsz=640 batch=16
4. 关键机制说明
自动权重迁移:当你加载预训练模型(如 yolo26n.pt)并调用 .train() 时,Ultralytics 会执行“形状感知权重转移”(Shape-aware weight transfer)。
Backbone 和 Neck:完全保留预训练权重,因为它们提取的通用视觉特征与类别数量无关。
Detection Head:分类输出层(如 cv3)会根据你设置的类别数量(nc)重新初始化。例如,从 COCO 的 80 类迁移到你的 5 类时,只有最后一层会被重置,其余部分继续利用预训练知识。
无需手动干预:不需要手动冻结层、修改网络架构或编写自定义的迁移学习逻辑。
5. 训练后验证与预测
训练完成后,模型权重默认保存在 runs/detect/train/weights/best.pt。
python
# 加载最佳模型进行验证
model = YOLO("runs/detect/train/weights/best.pt")
metrics = model.val() # 在验证集上评估性能
# 对新图片进行预测
results = model.predict("path/to/image.jpg", save=True)
常见问题建议
显存不足:如果报错 OOM (Out Of Memory),请减小 batch 大小(如改为 8 或 4),或减小 imgsz。
数据增强:YOLOv26 默认启用了多种数据增强(如 Mosaic, Mixup 等)。如果数据集较小,这些增强有助于防止过拟合;如果训练初期损失不下降,可检查数据标注是否正确。
预训练模型选择:
yolo26n.pt: 最快,精度最低,适合边缘设备。
yolo26s.pt / m.pt: 平衡速度与精度,推荐首选。
yolo26l.pt / x.pt: 精度最高,速度较慢,适合高性能服务器。