2594 字
13 分钟
YOLO26 项目实现本地图像识别
🎯 YOLO26 完整教程:从安装到训练到部署
✨ 本教程面向零基础初学者,手把手教你用 Ultralytics YOLO26 实现目标检测
📚 目录
🔹 1. YOLO26简介
什么是YOLO?
YOLO = You Only Look Once(你只看一次)
- 🔄 实时目标检测算法:单次前向传播即可完成检测
- ⚡ 速度快:适合视频流、移动端、边缘设备部署
- 🎯 精度高:持续迭代,在COCO等数据集上表现优秀
- 🔧 易用性强:Ultralytics提供统一API,Python/CLI均可操作
YOLO26 核心创新 ✨
| 特性 | 说明 | 优势 |
|---|---|---|
| 🔹 端到端无NMS | 移除后处理NMS步骤 | 推理更快,部署更简单 |
| 🔹 MuSGD优化器 | SGD + Muon混合优化器 | 训练更稳定,收敛更快 |
| 🔹 移除DFL模块 | 简化模型结构 | 边缘设备兼容性提升 |
| 🔹 CPU加速43% | 专为边缘优化 | 无GPU也能实时推理 |
🔹 2. 环境安装
2.1 基础要求
# Python版本Python >= 3.8
# PyTorch版本(根据你的CUDA选择)PyTorch >= 1.8CUDA 11.0+(GPU训练推荐)2.2 安装Ultralytics库
# ✅ 推荐:使用pip安装最新版pip install -U ultralytics
# 🔄 如果网络慢,使用国内镜像pip install -U ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
# 🔍 验证安装成功yolo checks2.3 可选:GPU加速配置
# 检查CUDA是否可用(Python中)import torchprint(torch.cuda.is_available()) # 应输出: Trueprint(torch.cuda.get_device_name(0)) # 显示GPU型号🔹 3. 快速开始:用预训练模型预测
3.1 命令行预测(最简单)
# 🔹 预测单张图片yolo predict model=yolo26n.pt source=your_image.jpg show=True
# 🔹 预测视频yolo predict model=yolo26n.pt source=your_video.mp4 save=True
# 🔹 实时摄像头检测yolo predict model=yolo26n.pt source=0 show=True3.2 Python代码预测(更灵活)
from ultralytics import YOLO
# 🔹 1. 加载预训练模型model = YOLO("yolo26n.pt") # n/s/m/l/x: 模型从小到大
# 🔹 2. 预测图片results = model.predict( source="your_image.jpg", conf=0.25, # 置信度阈值 iou=0.45, # NMS IoU阈值(YOLO26默认end2end=True时此参数无效) save=True, # 保存结果图 show=True, # 弹窗显示)
# 🔹 3. 获取检测结果for result in results: boxes = result.boxes for box in boxes: print(f"类别: {box.cls[0]}, 置信度: {box.conf[0]:.2f}") print(f"坐标: {box.xyxy[0]}") # [x1, y1, x2, y2]3.3 关键参数说明
| 参数 | 默认值 | 作用 |
|---|---|---|
model | yolo26n.pt | 模型权重文件,n最小最快,x最大最准 |
source | 必填 | 输入源:图片路径/视频/摄像头编号/URL |
conf | 0.25 | 置信度阈值,越低检测越多但误检也越多 |
save | False(Python)/True(CLI) | 是否保存结果图 |
show | False | 是否弹窗显示结果(Windows需注意窗口闪退) |
end2end | None(YOLO26默认True) | 是否启用端到端无NMS模式 |
🔹 4. 数据准备:标注你的数据集
4.1 数据集目录结构(标准格式)
my_dataset/├── images/│ ├── train/ # 训练图片│ │ ├── img1.jpg│ │ └── img2.jpg│ └── val/ # 验证图片│ ├── img3.jpg│ └── img4.jpg├── labels/ # ⚠️ 注意是labels不是label!│ ├── train/ # 训练标注(YOLO格式.txt)│ │ ├── img1.txt│ │ └── img2.txt│ └── val/ # 验证标注│ ├── img3.txt│ └── img4.txt└── dataset.yaml # 数据集配置文件 ⭐4.2 YOLO标注格式说明
# 每个txt文件对应一张图片,每行一个目标:# <class_id> <x_center> <y_center> <width> <height>
# 示例(检测"猫",类别ID=0):# 坐标归一化到[0,1],相对于图片宽高0 0.523 0.612 0.145 0.321 # 一只猫4.3 用LabelImg标注(新手友好)
# 1. 安装LabelImgpip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
# 2. 启动LabelImglabelimg
# 3. 关键:切换保存格式为YOLO# 方法A:菜单栏 View → 勾选 Auto Save mode → File → Change Save Format → YOLO# 方法B:快捷键 Ctrl+R → 选择 YOLO# ✅ 验证:窗口左下角显示 "YOLO"
# 4. 标注流程:# Open Dir → 选图片文件夹 → W画框 → 输入类别名(如cat) → Ctrl+S保存 → D下一张4.4 创建 dataset.yaml 配置文件
# 📄 my_dataset/dataset.yaml
# 数据集路径(推荐用相对路径避免拼接错误)path: . # 表示"当前目录"train: images/train # 训练集图片相对路径val: images/val # 验证集图片相对路径
# 类别信息(从0开始编号)names: 0: cat # 类别0叫"cat" 1: dog # 如果有第二个类别
# 可选:测试集(评估用)# test: images/test4.5 验证数据是否正确
from ultralytics.data.utils import check_det_dataset
# 检查数据集配置check_det_dataset("my_dataset/dataset.yaml")
# ✅ 成功标志:打印出图片数量、类别数等信息# ❌ 失败:报错"images not found"或"no labels found"🔹 5. 模型训练:训练专属检测器
5.1 命令行训练(推荐新手)
# 🔹 基础训练命令(先切换到数据集目录更安全)cd my_datasetyolo train model=yolo26n.pt data=dataset.yaml epochs=50 imgsz=640 batch=4 device=cpu
# 🔹 参数详解:# model=yolo26n.pt : 使用YOLO26最小预训练模型(迁移学习)# data=dataset.yaml : 数据集配置文件# epochs=50 : 训练50轮(小数据集50轮足够)# imgsz=640 : 输入图像尺寸(32的倍数)# batch=4 : 批次大小(CPU训练建议4~8)# device=cpu : 使用CPU训练(有GPU可改为device=0)5.2 Python代码训练(更灵活)
from ultralytics import YOLO
# 🔹 1. 加载预训练模型model = YOLO("yolo26n.pt")
# 🔹 2. 训练模型results = model.train( data="my_dataset/dataset.yaml", # 数据集配置 epochs=50, # 训练轮数 imgsz=640, # 输入图像尺寸 batch=4, # 批次大小 device="cpu", # 训练设备 workers=4, # 数据加载线程数 patience=20, # 早停耐心值 project="runs/detect", # 结果保存目录 name="my_cat_train", # 本次训练名称 exist_ok=True, # 允许覆盖同名实验)
# 🔹 3. 训练完成后自动保存最佳模型# 路径: runs/detect/my_cat_train/weights/best.pt5.3 断点续训(训练中断后继续)
# 🔹 命令行续训yolo train model=runs/detect/my_cat_train/weights/last.pt resume=True
# 🔹 Python续训model = YOLO("runs/detect/my_cat_train/weights/last.pt")results = model.train(resume=True)5.4 训练过程监控
训练时终端会输出:
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size1/50 0G 1.234 0.567 0.890 10 640...50/50 0G 0.123 0.045 0.067 10 640| 指标 | 含义 | 正常范围 |
|---|---|---|
box_loss | 边界框回归损失 | <1.0 较好 |
cls_loss | 分类损失 | <2.0 较好,越低越好 |
dfl_loss | 分布焦点损失 | <0.5 较好 |
Instances | 每批检测到的目标数 | >0 表示标注被正确加载 |
🔹 6. 验证与评估:看模型学得怎么样
6.1 命令行验证
yolo val model=runs/detect/my_cat_train/weights/best.pt \ data=my_dataset/dataset.yaml \ imgsz=640 \ save_json=True6.2 Python验证
from ultralytics import YOLO
# 加载训练好的模型model = YOLO("runs/detect/my_cat_train/weights/best.pt")
# 在验证集上评估metrics = model.val(data="my_dataset/dataset.yaml")
# 查看关键指标print(f"mAP50-95: {metrics.box.map}") # 主要指标print(f"mAP50: {metrics.box.map50}") # 宽松阈值print(f"Precision: {metrics.box.mp}") # 精确率print(f"Recall: {metrics.box.mr}") # 召回率6.3 关键指标解读
| 指标 | 含义 | 目标值 |
|---|---|---|
| mAP50-95 | 平均精度(IoU从0.5到0.95) | 🔥 核心指标,越高越好 |
| mAP50 | IoU=0.5时的平均精度 | >0.7 较好 |
| Precision | 精确率:预测为正的样本中真正为正的比例 | >80% 较好 |
| Recall | 召回率:真正为正的样本中被正确预测的比例 | >80% 较好 |
| F1-Score | Precision和Recall的调和平均 | 综合指标 |
🔹 7. 模型导出与部署
7.1 支持导出格式
# 🔹 导出为ONNX(通用格式,推荐)yolo export model=best.pt format=onnx imgsz=640
# 🔹 导出为TensorRT(NVIDIA GPU加速)yolo export model=best.pt format=engine imgsz=640 device=0
# 🔹 导出为OpenVINO(Intel CPU/VPU)yolo export model=best.pt format=openvino imgsz=640
# 🔹 导出为CoreML(Apple设备)yolo export model=best.pt format=coreml imgsz=640
# 🔹 导出为TFLite(移动端)yolo export model=best.pt format=tflite imgsz=6407.2 部署建议
| 平台 | 推荐格式 | 备注 |
|---|---|---|
| 🖥️ 服务器GPU | TensorRT / ONNX | 速度最快 |
| 💻 普通电脑 | ONNX / PyTorch | 兼容性好 |
| 📱 Android/iOS | TFLite / CoreML | 移动端优化 |
| 🤖 边缘设备 | OpenVINO / ONNX | RK3588等支持 |
🔹 8. 常见问题排查
❌ 问题1:FileNotFoundError: dataset.yaml does not exist
# ✅ 解决方案:# 1. 确认dataset.yaml文件存在dir my_dataset\dataset.yaml
# 2. 用相对路径避免拼接错误cd my_datasetyolo train model=yolo26n.pt data=dataset.yaml ...
# 3. 检查yaml内容path是否为"."(当前目录)❌ 问题2:WARNING no labels found in detect set
# ✅ 解决方案:# 1. 确认目录名是 labels(不是label)# 2. 确认.txt文件内容格式正确:0 0.5 0.6 0.1 0.2# 3. 确认类别ID与yaml中names对应(如0:cat → txt第一列必须是0)# 4. 用记事本打开一个.txt验证不是XML格式❌ 问题3:窗口一闪而过(show=True无效)
# ✅ 解决方案:用Python+cv2.waitKey控制显示from ultralytics import YOLOimport cv2
model = YOLO("best.pt")results = model.predict(source="test.jpg", show=True)cv2.waitKey(0) # 按任意键关闭窗口cv2.destroyAllWindows()❌ 问题4:训练太慢/显存不足
# ✅ 解决方案:# 1. 减小batch size: batch=2# 2. 减小imgsz: imgsz=416# 3. 使用更小模型: yolo26n.pt(n < s < m < l < x)# 4. CPU训练时增加workers: workers=2🔹 附录:关键参数速查
训练参数(train)
| 参数 | 默认值 | 说明 |
|---|---|---|
epochs | 100 | 训练总轮数 |
batch | 16 | 批次大小,可设-1自动适配显存 |
imgsz | 640 | 输入图像尺寸 |
device | None | 训练设备:0=GPU0, cpu=CPU, mps=Apple芯片 |
lr0 | 0.01 | 初始学习率 |
momentum | 0.937 | 优化器动量 |
weight_decay | 0.0005 | L2正则化系数 |
patience | 100 | 早停耐心值(验证指标不提升多少轮停止) |
save_period | -1 | 每多少轮保存一次checkpoint,-1=只存best/last |
预测参数(predict)
| 参数 | 默认值 | 说明 |
|---|---|---|
conf | 0.25 | 置信度阈值,过滤低分检测 |
iou | 0.7 | NMS IoU阈值(YOLO26 end2end=True时无效) |
max_det | 300 | 单图最大检测数量 |
augment | False | 启用测试时增强(慢但准) |
agnostic_nms | False | 类别无关NMS(同类目标重叠时用) |
classes | None | 只检测指定类别,如classes=[0]只检测cat |
stream | False | 流式处理视频,节省内存 |
数据增强参数(训练时自动应用)
| 参数 | 默认值 | 作用 |
|---|---|---|
hsv_h | 0.015 | 色调随机偏移(模拟不同光照) |
hsv_s | 0.7 | 饱和度随机变化 |
hsv_v | 0.4 | 亮度随机变化 |
fliplr | 0.5 | 50%概率水平翻转 |
mosaic | 1.0 | 100%概率使用马赛克增强(4图拼1图) |
degrees | 0.0 | 随机旋转角度(0=不旋转) |
translate | 0.1 | 随机平移10% |
🎁 附加资源
🔗 官方文档
🧪 快速测试代码(复制即用)
# quick_test.py - 5分钟验证环境from ultralytics import YOLO
# 1. 加载模型model = YOLO("yolo26n.pt")
# 2. 预测网络示例图results = model.predict( source="https://ultralytics.com/images/zidane.jpg", save=True, show=False)
# 3. 查看结果路径print(f"结果保存在: {results[0].save_dir}")💬 最后鼓励
🚀 记住:训练不是魔法,是”喂数据→调参数→看结果”的循环 🐱 从识别你家猫开始,你离做出爆款应用只差100小时练习 ✨ 遇到问题别慌:90%的报错都是路径/格式小问题,对照本教程一步步查
现在,去创造属于你的AI吧! 😺🔥
YOLO26 项目实现本地图像识别
https://fuwari.vercel.app/posts/yolo26/yolo/