YOLO11保姆级教学从零开始训练自己的分类模型1. 引言为什么选择YOLO11做分类你可能听说过YOLOYou Only Look Once在目标检测领域的鼎鼎大名但你知道吗最新的YOLO11版本已经将能力扩展到了图像分类任务上。这意味着你现在可以用这个业界顶尖的框架来训练一个专门识别特定物体的分类模型。想象一下这样的场景你有一堆产品图片需要自动把它们分成不同的类别或者你收集了大量植物照片想让AI帮你识别品种。以前做这些需要复杂的代码和漫长的调试但现在有了YOLO11整个过程变得简单多了。这篇文章就是为你准备的——无论你是刚接触深度学习的小白还是想快速上手YOLO11分类功能的开发者。我会手把手带你完成从环境准备到模型训练的全过程让你在1小时内就能跑起自己的第一个分类模型。2. 环境准备一键启动YOLO11镜像2.1 镜像优势为什么选择这个预置环境在开始之前我们先聊聊为什么推荐使用这个YOLO11镜像。自己搭建深度学习环境是个挺头疼的事——要装Python、配CUDA、装各种依赖库一不小心就版本冲突半天时间就没了。这个镜像已经把一切都准备好了完整的YOLO11环境Ultralytics库、PyTorch、OpenCV等全部预装GPU支持已经配置好CUDA可以直接用GPU加速训练开发工具内置Jupyter Notebook和SSH方便你写代码和远程操作开箱即用不需要任何复杂的配置启动就能用2.2 两种使用方式Jupyter和SSH镜像提供了两种使用方式你可以根据习惯选择方式一Jupyter Notebook推荐给初学者如果你喜欢在网页里写代码、看结果Jupyter是最佳选择。启动后你会看到一个熟悉的界面可以直接在浏览器里创建Python笔记本边写代码边运行还能实时看到图片和图表。方式二SSH连接适合命令行高手如果你习惯在终端里操作可以通过SSH连接到镜像。这种方式更灵活适合批量处理任务或者使用自己的IDE比如VSCode进行开发。两种方式都能访问到完全相同的环境选择哪个全看你的个人偏好。3. 数据准备整理你的训练素材3.1 理解分类任务的数据结构在开始写代码之前我们需要先把数据整理好。YOLO11对数据格式有明确的要求但别担心格式很简单。假设我们要训练一个识别5种不同水果的模型苹果、香蕉、橙子、葡萄、草莓数据应该这样组织classs/ # 主文件夹 ├── train/ # 训练集 │ ├── apple/ # 苹果类别 │ │ ├── apple_001.jpg │ │ ├── apple_002.jpg │ │ └── ... │ ├── banana/ # 香蕉类别 │ ├── orange/ # 橙子类别 │ ├── grape/ # 葡萄类别 │ └── strawberry/ # 草莓类别 └── val/ # 验证集 ├── apple/ ├── banana/ ├── orange/ ├── grape/ └── strawberry/几个关键点每个类别一个单独的文件夹文件夹名字就是类别名图片放在对应类别的文件夹里需要分成训练集train和验证集val3.2 创建数据配置文件数据整理好后我们需要创建一个YAML文件告诉YOLO11数据在哪里。这个文件很简单只有几行# shuju.yaml train: /path/to/your/classs/train val: /path/to/your/classs/val nc: 5 names: [apple, banana, orange, grape, strawberry]参数说明train训练集图片的路径val验证集图片的路径nc类别数量number of classesnames类别名称列表顺序要固定路径小贴士在镜像环境里你可以把数据上传到/home目录下然后修改路径。比如你的数据在/home/data/classs那么路径就写成train: /home/data/classs/train val: /home/data/classs/val4. 模型选择下载合适的预训练权重4.1 了解YOLO11的分类模型YOLO11提供了多种尺寸的分类模型你可以根据需求选择YOLO11n-cls纳米版速度最快精度稍低YOLO11s-cls小尺寸版平衡速度和精度YOLO11m-cls中尺寸版精度更高YOLO11l-cls大尺寸版精度最高速度最慢YOLO11x-cls超大版专业级精度对于初学者我推荐从yolo11n-cls.pt开始。它训练速度快对硬件要求低适合学习和快速验证想法。4.2 下载模型文件你可以在Ultralytics的官方文档找到下载链接。下载后把.pt文件放到你的项目目录里。在镜像环境里建议放在/home目录下方便管理。如果你不想自己下载也可以直接在代码里指定模型名称YOLO11会自动下载model YOLO(yolo11n-cls.pt) # 自动下载但考虑到网络可能不稳定我还是建议先下载好文件。5. 训练脚本编写你的第一个训练程序5.1 创建train.py文件现在我们来写训练代码。创建一个新文件叫train.py然后把下面的代码复制进去from ultralytics import YOLO import yaml # 先检查一下数据配置文件是否正确 with open(/home/data/shuju.yaml, r) as f: data yaml.safe_load(f) print(数据配置内容) print(data) if __name__ __main__: # 加载预训练模型 model YOLO(/home/models/yolo11n-cls.pt) # 开始训练 results model.train( data/home/data/shuju.yaml, # 数据配置文件路径 imgsz224, # 输入图片大小 epochs100, # 训练轮数 batch16, # 批次大小 devicecuda, # 使用GPU训练 workers4, # 数据加载线程数 namemy_first_classification # 实验名称 ) print(训练完成)5.2 参数详解每个选项的作用让我解释一下这些参数是什么意思这样你以后可以自己调整data数据配置文件的路径。就是刚才我们创建的shuju.yaml文件。imgsz输入图片的大小。分类任务通常用224×224这是ImageNet的标准尺寸。如果你的图片细节很重要可以尝试更大的尺寸如384或512但训练速度会变慢。epochs训练轮数。一轮就是模型看过所有训练图片一次。100轮对于大多数分类任务足够了。如果发现模型还在持续改进可以增加到200或300。batch批次大小。一次训练多少张图片。这个值受你的GPU内存限制。如果出现内存不足的错误就减小这个值比如改成8或4。device训练设备。cuda表示用GPUcpu表示用CPU。GPU训练比CPU快几十倍所以一定要用GPU。workers数据加载的线程数。这个值影响数据读取速度一般设为CPU核心数的一半。name实验名称。训练结果会保存在runs/classify/目录下用这个名字创建子文件夹。6. 开始训练运行并监控进度6.1 进入项目目录并运行打开终端通过Jupyter或SSH按照以下步骤操作# 1. 进入ultralytics目录镜像里已经预装了 cd /home/ultralytics-8.3.9/ # 2. 运行训练脚本 python train.py如果一切正常你会看到类似这样的输出Ultralytics YOLOv8.3.9 Python-3.9.18 torch-2.3.0 CUDA:0 (NVIDIA GeForce RTX 4090, 24268MiB) YOLO11n-cls summary: 224 layers, 2705536 parameters, 0 gradients, 7.2 GFLOPs ... Epoch gpu_mem loss accuracy top1_acc top5_acc: 100%|██████████| 100/100 [02:1500:00, 1.35s/it]6.2 理解训练输出训练过程中你会看到很多信息主要关注这几个GPU内存使用gpu_mem显示GPU用了多少内存。如果接近100%考虑减小batch大小。损失值loss这个值应该随着训练逐渐下降。如果波动很大或者不下降可能是学习率不合适。准确率accuracy模型预测正确的比例。你会看到两个准确率top1_acc预测最可能的类别是否正确top5_acc预测的前5个类别中是否包含正确答案对于类别很多的任务有用进度条显示训练进度和预计剩余时间。6.3 训练过程中的常见问题问题1CUDA out of memoryRuntimeError: CUDA out of memory解决减小batch大小比如从16改成8或4。问题2找不到数据FileNotFoundError: [Errno 2] No such file or directory: /home/data/shuju.yaml解决检查文件路径是否正确确保YAML文件存在。问题3类别数量不匹配ValueError: nc5 but found 6 classes in data解决检查shuju.yaml中的nc值是否和实际类别数一致检查names列表是否正确。7. 评估与使用测试你的模型7.1 查看训练结果训练完成后所有结果都保存在runs/classify/my_first_classification/目录下如果你用了namemy_first_classification。里面有几个重要的文件weights/best.pt效果最好的模型权重results.csv详细的训练数据confusion_matrix.png混淆矩阵可视化results.png训练过程图表重点看results.png它会显示损失和准确率的变化曲线。理想的曲线应该是训练损失稳步下降验证损失也下降但可能有些波动准确率稳步上升如果验证损失开始上升而训练损失继续下降说明模型过拟合了在训练数据上表现太好但泛化能力差。7.2 用训练好的模型做预测训练完成后我们可以用最好的模型来预测新图片。创建一个新的Python文件predict.pyfrom ultralytics import YOLO from PIL import Image import matplotlib.pyplot as plt # 加载训练好的模型 model YOLO(runs/classify/my_first_classification/weights/best.pt) # 预测单张图片 results model(new_image.jpg) # 显示结果 for result in results: # 获取预测结果 probs result.probs # 概率分布 top1_idx probs.top1 # 最可能的类别索引 top1_conf probs.top1conf # 置信度 top5_idxs probs.top5 # 前5个类别索引 top5_confs probs.top5conf # 前5个置信度 print(f预测结果{result.names[top1_idx]}置信度{top1_conf:.2%}) print(前5个可能结果) for idx, conf in zip(top5_idxs, top5_confs): print(f {result.names[idx]}: {conf:.2%}) # 显示图片和预测结果 img Image.open(new_image.jpg) plt.imshow(img) plt.title(f预测{result.names[top1_idx]} ({top1_conf:.2%})) plt.axis(off) plt.show()7.3 批量预测如果你有很多图片需要分类可以用批量预测from ultralytics import YOLO import os model YOLO(runs/classify/my_first_classification/weights/best.pt) # 图片文件夹路径 image_folder /home/data/test_images/ results_folder /home/data/predictions/ # 创建结果文件夹 os.makedirs(results_folder, exist_okTrue) # 批量预测 results model(image_folder, saveTrue, save_dirresults_folder) print(f完成了{len(results)}张图片的分类)8. 进阶技巧提升模型效果8.1 数据增强让模型更鲁棒如果你的数据量不够大或者想让模型在各种条件下都能工作可以启用数据增强。修改train.pyresults model.train( data/home/data/shuju.yaml, imgsz224, epochs100, batch16, devicecuda, workers4, namemy_first_classification, # 数据增强参数 hsv_h0.015, # 色调增强 hsv_s0.7, # 饱和度增强 hsv_v0.4, # 明度增强 degrees15, # 旋转角度 translate0.1, # 平移 scale0.5, # 缩放 shear0.0, # 剪切 perspective0.0, # 透视变换 flipud0.0, # 上下翻转概率 fliplr0.5, # 左右翻转概率 mosaic1.0, # Mosaic数据增强概率 mixup0.0, # MixUp增强概率 )初学者建议刚开始不要用太强的增强可以从fliplr0.550%概率左右翻转开始效果不好再尝试其他增强。8.2 学习率调整找到最佳学习速度学习率是训练中最重要的超参数之一。太大容易震荡太小收敛慢。YOLO11有自动学习率调整但你也可以手动设置results model.train( # ... 其他参数不变 lr00.01, # 初始学习率 lrf0.01, # 最终学习率因子lr0 * lrf warmup_epochs3, # 学习率预热轮数 warmup_momentum0.8, # 预热期动量 warmup_bias_lr0.1, # 预热期偏置学习率 )经验值对于分类任务lr00.01是个不错的起点。如果训练不稳定损失值剧烈波动尝试减小到0.001。8.3 早停机制防止过拟合如果验证集上的准确率不再提升继续训练只会导致过拟合。可以启用早停results model.train( # ... 其他参数不变 patience50, # 如果50轮验证准确率没提升就停止训练 save_period10, # 每10轮保存一次检查点 )9. 总结你的第一个分类模型训练完成恭喜你现在你已经完成了YOLO11分类模型的完整训练流程。让我们回顾一下今天学到的关键步骤第一步准备环境- 使用预置的YOLO11镜像省去了繁琐的环境配置。第二步整理数据- 按照类别文件夹的方式组织图片创建简单的YAML配置文件。第三步选择模型- 根据需求选择合适的YOLO11分类模型从轻量级的n版本开始。第四步编写训练脚本- 用不到20行代码就能启动训练关键参数都有明确的作用。第五步监控训练- 观察损失和准确率的变化确保模型在学习而不是死记硬背。第六步评估使用- 用训练好的模型预测新图片验证实际效果。第七步优化提升- 通过数据增强、学习率调整等技巧让模型效果更好。9.1 下一步学习建议现在你已经掌握了基础可以尝试这些进阶方向尝试更大的模型用yolo11s-cls或yolo11m-cls替换n版本看看准确率能提升多少。调整超参数实验不同的学习率、批次大小、数据增强组合找到最适合你数据集的配置。处理不平衡数据如果你的某些类别图片很少可以尝试类别权重或过采样技术。迁移学习在更大的数据集如ImageNet上预训练然后在你的数据上微调。模型部署把训练好的模型转换成ONNX或TensorRT格式部署到生产环境。9.2 常见问题快速参考问题可能原因解决方法训练速度慢批次大小太小没有用GPU增大batch大小确保devicecuda准确率低数据量不足类别不平衡学习率不合适收集更多数据使用数据增强调整学习率过拟合训练轮数太多模型太复杂使用早停机制换更小的模型增加数据增强内存不足批次太大图片尺寸太大减小batch大小减小imgsz记住深度学习是一个迭代的过程。第一次训练可能效果不完美但每次调整参数、增加数据你都会离目标更近一步。最重要的是开始动手做在实践中学习和改进。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。