news 2026/4/15 15:43:50

动手实操:用YOLO11镜像完成一次完整目标检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
动手实操:用YOLO11镜像完成一次完整目标检测

动手实操:用YOLO11镜像完成一次完整目标检测

本文将带你基于YOLO11 镜像,从环境准备到模型训练、推理全流程动手实践一次完整的目标检测任务。我们将使用预置的 YOLO11 深度学习开发环境,结合自定义数据集完成标注转换、模型训练与结果验证,帮助你快速掌握工业级目标检测项目的落地流程。


1. 环境准备与镜像使用

1.1 镜像简介

YOLO11是一个集成 Ultralytics YOLO11 完整算法栈的深度学习镜像,内置以下核心组件:

  • Python 3.9 + PyTorch 1.13.1 + CUDA 支持
  • Ultralytics 8.3.9 官方代码库
  • Jupyter Notebook 开发环境
  • SSH 远程连接支持
  • 常用 CV 工具包(OpenCV、Labelme、Pillow 等)

该镜像免去了繁琐的依赖安装和版本兼容问题,开箱即用,非常适合快速实验和部署。

1.2 访问方式

Jupyter 使用方式

启动实例后,可通过浏览器访问 Jupyter Lab 界面进行交互式开发:

  1. 获取实例公网 IP 和端口(默认8888
  2. 在浏览器中输入:http://<IP>:8888
  3. 输入 token 或密码登录
  4. 导航至项目目录ultralytics-8.3.9/开始操作

SSH 使用方式

对于命令行重度用户,推荐使用 SSH 登录进行高效操作:

ssh username@<instance_ip> -p <port>

登录后可直接运行 Python 脚本、监控 GPU 资源、调试代码等。


2. 数据准备与标注处理

2.1 数据标注工具选择

我们采用Labelme进行图像标注,其优点包括:

  • 支持矩形框、多边形、点等多种标注类型
  • 输出 JSON 格式清晰易解析
  • 可视化强,适合小规模数据集构建

安装命令:

pip install labelme

启动标注工具:

labelme

操作流程: 1. 点击“打开目录”加载图片文件夹 2. 选择“创建矩形”对目标物体画框 3. 输入类别标签(如car,bus) 4. 保存生成同名.json文件

2.2 Labelme JSON 转 YOLO TXT 格式

YOLO 系列模型要求标签为.txt文件,每行格式如下:

<class_id> <x_center> <y_center> <width> <height>

所有坐标均归一化到[0,1]区间。

转换脚本实现
import json import os # 类别映射表(根据实际数据修改) label_map = { "car": 0, "bus": 1, "person": 2 } def convert_labelme_to_yolo(json_path, output_dir): with open(json_path, 'r') as f: data = json.load(f) img_w = data['imageWidth'] img_h = data['imageHeight'] annotations = [] for shape in data['shapes']: label_name = shape['label'] if label_name not in label_map: continue class_id = label_map[label_name] points = shape['points'] if shape['shape_type'] == 'rectangle': (x1, y1), (x2, y2) = points elif shape['shape_type'] == 'polygon': x1 = min(p[0] for p in points) y1 = min(p[1] for p in points) x2 = max(p[0] for p in points) y2 = max(p[1] for p in points) else: continue # 归一化计算 xc = ((x1 + x2) / 2) / img_w yc = ((y1 + y2) / 2) / img_h w = (x2 - x1) / img_w h = (y2 - y1) / img_h annotations.append(f"{class_id} {xc:.4f} {yc:.4f} {w:.4f} {h:.4f}") # 写入 txt 文件 base_name = os.path.splitext(os.path.basename(json_path))[0] output_file = os.path.join(output_dir, base_name + '.txt') with open(output_file, 'w') as f: f.write('\n'.join(annotations)) def process_folder(input_folder, output_folder): os.makedirs(output_folder, exist_ok=True) for file in os.listdir(input_folder): if file.endswith('.json'): json_path = os.path.join(input_folder, file) convert_labelme_to_yolo(json_path, output_folder) # 执行转换 input_folder = "/mnt/data/json_labels" output_folder = "/mnt/data/yolo11_txt_labels" process_folder(input_folder, output_folder)

执行完成后,将在yolo11_txt_labels目录下生成对应.txt标签文件。


3. 项目结构配置与代码组织

进入镜像中的项目主目录:

cd ultralytics-8.3.9/

建议建立如下工程结构:

ultralytics-8.3.9/ ├── datasets/ # 数据集 │ └── det_auto_parts_20241020/ │ ├── train/images/ │ ├── train/labels/ │ ├── val/images/ │ └── val/labels/ ├── weights/ # 预训练权重 │ └── yolo11m.pt ├── runs/ # 训练输出 ├── cfg/ │ └── datasets/ # 自定义数据集配置 │ └── auto-parts-det.yaml │ └── models/ │ └── yolo11.yaml ├── train.py # 训练脚本 └── infer.py # 推理脚本

4. 数据集与模型配置文件编写

4.1 数据集 YAML 配置文件

cfg/datasets/auto-parts-det.yaml中定义数据路径和类别:

path: ./datasets/det_auto_parts_20241020 train: train/images val: val/images names: 0: car 1: bus 2: person

⚠️ 注意:path必须是相对或绝对真实路径,确保程序能正确读取图像。

4.2 模型结构配置文件

YOLO11 的模型结构定义在cfg/models/11/yolo11.yaml,关键参数说明:

  • nc: 类别数量(需与数据集一致)
  • scales: 不同尺寸模型缩放系数(n/s/m/l/x)
  • backbone: 主干网络结构(C3k2、SPPF 等模块)
  • head: 检测头结构(上采样 + Concat + C3k2)

若要训练中型模型(YOLO11-m),应调用yolo11m.yaml

model = YOLO("yolo11m.yaml")

5. 模型训练流程实现

5.1 编写训练脚本train.py

from ultralytics import YOLO # 加载模型结构并加载预训练权重 model = YOLO("yolo11m.yaml").load("weights/yolo11m.pt") # 训练参数配置 train_params = { 'data': 'auto-parts-det.yaml', # 数据集配置 'epochs': 100, # 训练轮数 'imgsz': 640, # 输入尺寸 'batch': 8, # 批次大小 'device': 0, # 使用 GPU 0 'workers': 8, # 数据加载线程 'optimizer': 'AdamW', # 优化器 'lr0': 0.001, # 初始学习率 'weight_decay': 0.0005, 'warmup_epochs': 3, 'box': 7.5, 'cls': 0.5, 'dfl': 1.5, 'verbose': True, 'save': True, 'project': 'runs/train', 'name': 'exp_auto_parts', 'exist_ok': False, 'amp': True, # 启用混合精度 'cache': False, 'close_mosaic': 10, 'seed': 42, 'plots': True } # 开始训练 results = model.train(**train_params)

5.2 启动训练

python train.py

训练过程中会自动记录损失曲线、mAP 指标,并在runs/train/exp_auto_parts/下保存最佳权重best.pt和最终权重last.pt

典型输出:

Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 1/100 4.68G 2.238 1.691 2.426 80 640 ... 100/100 4.49G 1.171 0.7135 1.319 41 640

最终评估指标如 mAP50 达到 0.89 以上即为良好表现。


6. 模型推理与结果可视化

6.1 编写推理脚本infer.py

from ultralytics import YOLO # 加载训练好的模型 model = YOLO("runs/train/exp_auto_parts/weights/best.pt") # 执行推理 results = model.predict( source="datasets/det_auto_parts_20241020/val/images/", conf=0.45, iou=0.6, imgsz=640, device=0, save=True, save_txt=True, show_labels=True, show_conf=True, project="runs/predict", name="val_results" )

6.2 推理结果分析

推理完成后,在runs/predict/val_results/目录中将生成:

  • 带检测框的图像(含类别标签和置信度)
  • 对应的.txt检测结果文件(可用于后续分析)

你可以查看简单场景和复杂遮挡场景下的检测效果,重点关注:

  • 是否漏检(Recall)
  • 是否误检(Precision)
  • 检测框是否精准贴合目标

7. 实践经验总结与优化建议

7.1 关键避坑指南

问题解决方案
标签未对齐确保names顺序与label_map一致
显存不足减小batch或使用yolo11n小模型
训练震荡调整lr0至 0.001~0.01,启用warmup
检测框漂移检查标签是否归一化,图像尺寸是否统一

7.2 最佳实践建议

  1. 数据质量优先:保证标注准确性和多样性,避免单一背景。
  2. 分阶段训练:先用大模型(如 yolo11l)训练少量 epoch,再蒸馏到小模型。
  3. 启用自动增强:设置auto_augment='randaugment'提升泛化能力。
  4. 定期验证:每 10 个 epoch 手动抽查预测结果,及时发现问题。

8. 总结

本文通过YOLO11 镜像完成了从环境搭建、数据标注、格式转换、模型训练到推理验证的全链路目标检测实践。我们重点实现了:

  • 使用 Labelme 进行高质量人工标注
  • 编写自动化脚本将 JSON 转为 YOLO 格式 TXT
  • 配置自定义数据集 YAML 和模型结构文件
  • 完整训练一个 YOLO11-m 模型并获得高精度检测结果
  • 实现批量图像推理并可视化输出

得益于 YOLO11 镜像的一站式环境支持,整个过程无需关注底层依赖安装,极大提升了研发效率。

下一步你可以尝试: - 将模型导出为 ONNX 格式用于边缘设备部署 - 结合 TensorRT 加速推理性能 - 构建自动标注流水线提升数据生产效率


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 18:39:54

Qwen3-1.7B GraphQL接口:灵活查询语法支持实现

Qwen3-1.7B GraphQL接口&#xff1a;灵活查询语法支持实现 1. 技术背景与场景引入 随着大语言模型在企业级应用中的广泛落地&#xff0c;对模型服务接口的灵活性、可扩展性和高效性提出了更高要求。传统的RESTful API 在面对复杂查询需求时&#xff0c;往往存在过度获取或数据…

作者头像 李华
网站建设 2026/4/4 15:23:25

Fun-ASR嵌入式设备适配前景:树莓派等低功耗平台可行性分析

Fun-ASR嵌入式设备适配前景&#xff1a;树莓派等低功耗平台可行性分析 1. 技术背景与研究动机 随着边缘计算和物联网技术的快速发展&#xff0c;语音识别系统正逐步从云端向本地化、轻量化部署演进。传统ASR&#xff08;自动语音识别&#xff09;系统依赖高性能服务器和稳定网…

作者头像 李华
网站建设 2026/4/10 14:48:14

Keil调试过程中断响应监测:完整指南实时行为追踪

Keil调试实战&#xff1a;如何精准追踪Cortex-M中断响应行为在嵌入式开发中&#xff0c;你是否遇到过这样的问题&#xff1f;系统偶尔丢帧&#xff0c;但日志里毫无痕迹&#xff1b;PWM波形突然抖动&#xff0c;却找不到源头&#xff1b;ISR执行时间忽长忽短&#xff0c;像“幽…

作者头像 李华
网站建设 2026/4/10 16:53:06

AI数字人避坑指南:5种常见翻车现场及云端解决方案

AI数字人避坑指南&#xff1a;5种常见翻车现场及云端解决方案 你是不是也经历过这样的尴尬时刻&#xff1f;精心写好的脚本&#xff0c;配上自认为完美的AI数字人形象&#xff0c;结果一播放——嘴一张一合完全对不上音&#xff0c;声音还在讲上一句&#xff0c;画面已经跳到下…

作者头像 李华
网站建设 2026/3/27 19:33:54

手把手教你用MinerU解析PDF转Markdown

手把手教你用MinerU解析PDF转Markdown 1. 引言&#xff1a;为什么需要智能文档解析&#xff1f; 在当今信息爆炸的时代&#xff0c;PDF 已成为学术论文、企业报告、财务报表和法律合同等专业文档的标准格式。然而&#xff0c;尽管 PDF 在视觉呈现上高度统一&#xff0c;其内容…

作者头像 李华
网站建设 2026/4/10 5:21:44

Qwen1.5-0.5B-Chat工具推荐:ModelScope镜像开箱即用测评

Qwen1.5-0.5B-Chat工具推荐&#xff1a;ModelScope镜像开箱即用测评 1. 背景与技术选型动机 随着大模型在实际业务场景中的广泛应用&#xff0c;轻量级、低资源消耗的推理方案逐渐成为边缘设备和低成本部署环境的重要选择。尽管千亿参数级别的模型在性能上表现出色&#xff0…

作者头像 李华