跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

YOLOv8n 机器人场景目标检测实战:环境搭建与数据筛选

记录了基于 YOLOv8n 在机器人室内场景进行目标检测的实战过程。主要内容包括使用 Conda 搭建 Ultralytics 8.0+PyTorch 2.1 训练环境,从 COCO2017 数据集中筛选出行人、桌椅等 5 类障碍物构建自定义数据集,并完成格式转换与验证。最终跑通基础训练流程,小障碍物 mAP 达到 65% 以上,验证了模型在机器人端算力限制下的可行性。

心动瞬间发布于 2026/4/5更新于 2026/10/24105 浏览

项目概述

基于 Conda 搭建 Ultralytics 8.0+PyTorch 2.1 专属环境,完成 COCO2017 机器人场景子集筛选(8000 张,7000 训 +1000 验),跑通 YOLOv8n 基础训练(epoch=50),小障碍物 mAP≥65%,模型可正常输出推理结果。

环境说明:全程使用 Conda 进行包管理与环境隔离,无 pip 命令使用,规避版本兼容问题;模型选用 YOLOv8n(轻量化版本,适配机器人端算力限制),替代原计划 YOLOv9n,核心实操逻辑一致。

一、核心目标与执行思路

1. 核心目标

  1. 掌握 YOLO 系列核心创新与轻量化模型适配逻辑,聚焦机器人室内小场景(室内小障碍物/桌椅/行人/台阶)检测需求;
  2. 搭建稳定可复现的 Ultralytics+PyTorch 训练环境,规避版本冲突;
  3. 筛选并整理符合 YOLO 格式的机器人场景自定义数据集,完成基础标注与训练集/验证集划分;
  4. 跑通 YOLOv8n 基础训练流程,验证数据集与模型兼容性,获取基础精度、参数量、推理速度指标。

2. 执行思路

  • 理论侧:跳过基础 CNN 知识,聚焦 YOLO 特征融合、骨干网络、损失函数核心设计,对比 YOLOv8 与前版本的速度/精度优化点,结合机器人场景思考后续轻量化方向;
  • 实操侧:按「环境搭建→数据集处理→配置编写→模型训练→指标验证」分步执行,全程基于 Conda 环境,所有操作留痕可复现,重点保证数据集格式正确性与训练流程通畅性。

二、工作日实操:理论学习 + 环境搭建 + 数据集筛选

(一)理论学习(1h):YOLOv8 核心设计与机器人场景适配

1. 学习核心内容(对标 YOLOv9 原计划,适配 YOLOv8n)

跳过基础 CNN、目标检测基础概念,重点精读 YOLOv8 核心创新模块,梳理与 YOLOv5/v7 的差异,结合机器人小场景分析核心适配点,整理核心笔记如下:

核心模块YOLOv8n 设计亮点与前版本(YOLOv5n)优化点机器人场景适配性分析
C2f 骨干网络替代 C3 模块,采用双分支残差结构,特征提取更高效,计算量更低参数量减少约 12%,推理速度提升约 15%轻量化结构适配机器人端有限算力,残差设计保留小障碍物特征
PAN-FPN 特征融合保留 PAN-FPN 双向融合结构,强化低层级特征传递小目标检测 [email protected] 提升约 3%针对室内小障碍物(如瓶盖、小摆件),低层级特征强化可提升检测召回率
损失函数分类损失用 BCEWithLogitsLoss,回归损失用 CIoULoss,正负样本分配采用 Task-Aligned Assigner边界框回归精度提升,训练收敛速度更快机器人场景对检测框精度要求高(避免避障误判),CIoULoss 可提升框回归稳定性
检测头采用无锚框(Anchor-Free)设计,省去锚框聚类步骤适配不同尺度目标,减少人工调参成本机器人视角下目标尺度多变(如近处桌椅、远处行人),无锚框设计更灵活
2. 机器人场景后续优化方向初步梳理

结合理论学习,明确后续轻量化优化核心方向:骨干网络 C2f 层裁剪、特征融合分支精简(删除远距离融合,适配室内小场景)、注意力机制精简,为第二周轻量化优化铺垫。

(二)实操 1:基于 Conda 搭建 Ultralytics8.0+PyTorch2.1 环境(1.5h)

1. 环境前置检查
  • 系统:Ubuntu 20.04(机器人端常用系统,兼容性强)
  • 显卡:NVIDIA GTX 1660ti(CUDA 11.8,适配 PyTorch2.1)
  • Python 版本要求:3.8-3.10(避免 PyTorch2.1 兼容问题)
  • 核心要求:全程使用 Conda,创建独立环境,隔离项目依赖。
2. 分步搭建流程(全程 Conda 命令,无 pip)
# 1. 打开终端,创建 Conda 独立环境,命名 yolo_robot,指定 Python3.9
conda create -n yolo_robot python=3.9 -y
# 2. 激活环境(后续所有操作均在该环境下执行)
conda activate yolo_robot
# 3. 安装 PyTorch2.1+Torchvision+Torchaudio(适配 CUDA11.8,Conda 源安装,避免网络问题)
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=11.8 -c pytorch -c nvidia -y
# 4. 安装 Ultralytics8.0(指定版本,Conda 源安装)
conda install ultralytics==8.0.200 -c conda-forge -y
# 5. 安装配套依赖(opencv、pycocotools、pandas 等,数据集处理与可视化用)
conda install opencv-python pillow matplotlib pycocotools pandas -y
# 6. 验证环境是否安装成功
conda list | grep -E "pytorch|ultralytics|opencv-python"
3. 环境有效性验证

编写简单验证脚本 env_check.py,运行无报错即代表环境正常:

import torch
import ultralytics
import cv2

# 验证 PyTorch 版本与 CUDA 可用性
print(f"PyTorch 版本:{torch.__version__}")
print(f"CUDA 是否可用:{torch.cuda.is_available()}")
print(f"CUDA 设备数量:{torch.cuda.device_count()}")

# 验证 Ultralytics 版本
print(f"Ultralytics 版本:{ultralytics.__version__}")

# 验证 OpenCV
print(f"OpenCV 版本:{cv2.__version__}")

# 加载 YOLOv8n 官方模型,验证模型加载正常
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
print("YOLOv8n 模型加载成功,环境验证通过!")

运行结果:所有版本匹配要求,CUDA 可用,模型加载正常,环境搭建完成。

4. 官方模型推理测试(验证环境可正常推理)

用官方示例图片测试 YOLOv8n 推理,确保环境无运行问题:

from ultralytics import YOLO

# 加载 YOLOv8n 预训练模型
model = YOLO('yolov8n.pt')

# 对官方 bus.jpg 进行推理(无图片可自行上传任意图片)
results = model('bus.jpg', device=0)

# 可视化推理结果并保存
results[0].show()
results[0].save('inference_test.jpg')
print("推理完成,结果已保存为 inference_test.jpg")

测试结果:可正常显示检测框,保存推理结果图片,无报错,环境满足训练与推理要求。

(三)实操 2:COCO2017 机器人场景子集筛选与 YOLO 格式整理(1.5h)

1. 数据集下载与解压

从 COCO2017 官方镜像下载数据集(训练集 + 验证集 + 标注文件),解压后目录结构如下:

coco2017/
├── train2017/ # 训练图片(118k+ 张)
├── val2017/ # 验证图片(5k+ 张)
├── annotations/
│   ├── instances_train2017.json # 训练集标注
│   └── instances_val2017.json # 验证集标注
2. 筛选目标与类别映射

聚焦机器人室内小场景,筛选4 大类核心目标,对应 COCO2017 类别 ID,补充小障碍物细分类别,最终确定筛选类别及 YOLO 格式索引(从 0 开始):

YOLO 索引目标类别COCO2017 类别 ID筛选说明
0person1行人,机器人避障核心目标
1chair62椅子,室内常见障碍物
2dining table67餐桌,室内常见障碍物
3bench13长凳,替代台阶(COCO 台阶样本少,长凳场景相似)
4bottle44瓶子,作为室内小障碍物代表
3. 数据集筛选与 YOLO 格式转换(Python 脚本)

编写 coco2robot.py 脚本,实现COCO 格式→YOLO 格式转换,同时筛选出 8000 张样本(7000 训练 +1000 验证),YOLO 格式要求:

  • 图片:保持原 JPG 格式,按训练/验证划分至对应目录;
  • 标注:每张图片对应一个.txt 文件,每行格式为「类别索引 归一化 x_center 归一化 y_center 归一化 width 归一化 height」;
  • 目录结构:严格遵循 Ultralytics 要求,便于后续配置与训练。

核心脚本代码:

import json
import os
import shutil
import random

# 配置参数
COCO_ROOT = "./coco2017"  # COCO2017 解压根路径
OUTPUT_ROOT = "./robot_dataset"  # 机器人场景数据集输出路径
TARGET_CATS = {"person": 1, "chair": 62, "dining table": 67, "bench": 13, "bottle": 44}  # 筛选类别
TRAIN_NUM = 7000  # 训练集样本数
VAL_NUM = 1000  # 验证集样本数

# 创建 YOLO 格式数据集目录结构
os.makedirs(os.path.join(OUTPUT_ROOT, "images/train"), exist_ok=True)
os.makedirs(os.path.join(OUTPUT_ROOT, "images/val"), exist_ok=True)
os.makedirs(os.path.join(OUTPUT_ROOT, "labels/train"), exist_ok=True)
os.makedirs(os.path.join(OUTPUT_ROOT, "labels/val"), exist_ok=True)

def coco2yolo(anno_file, img_dir, output_img_dir, output_label_dir, target_cats, max_num):
    """
    COCO 格式转 YOLO 格式,同时筛选指定类别与样本数
    anno_file: COCO 标注文件路径
    img_dir: COCO 图片目录
    output_img_dir: 输出图片目录
    output_label_dir: 输出标注目录
    target_cats: 目标类别字典 {名称:COCO ID}
    max_num: 最大筛选样本数
    """
    # 加载 COCO 标注
    with open(anno_file, "r", encoding="utf-8") as f:
        coco_data = json.load(f)

    # 建立图片 ID→文件名/宽高映射
    img_id2info = {img["id"]: (img["file_name"], img["width"], img["height"]) for img in coco_data["images"]}

    # 建立类别 ID→YOLO 索引映射
    coco_id2yolo_idx = {v: k for k, v in enumerate(target_cats.values())}

    # 按图片分组标注
    img_anno = {}
    for ann in coco_data["annotations"]:
        coco_cat_id = ann["category_id"]
        if coco_cat_id not in coco_id2yolo_idx:
            continue  # 跳过非目标类别
        img_id = ann["image_id"]
        if img_id not in img_anno:
            img_anno[img_id] = []

        # COCO 标注为 [x, y, w, h](左上角坐标,宽高),转 YOLO 归一化 [x_center, y_center, w, h]
        x, y, w, h = ann["bbox"]
        img_name, img_w, img_h = img_id2info[img_id]

        # 归一化
        x_center = (x + w / 2) / img_w
        y_center = (y + h / 2) / img_h
        w_norm = w / img_w
        h_norm = h / img_h

        # 添加 YOLO 格式标注(类别索引 坐标)
        yolo_idx = coco_id2yolo_idx[coco_cat_id]
        img_anno[img_id].append(f"{yolo_idx} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}")

    # 随机筛选指定数量样本
    selected_img_ids = random.sample(list(img_anno.keys()), min(max_num, len(img_anno)))
    print(f"筛选出{len(selected_img_ids)}张样本")

    # 复制图片并生成 YOLO 标注文件
    for img_id in selected_img_ids:
        img_name, _, _ = img_id2info[img_id]
        # 复制图片
        shutil.copy(os.path.join(img_dir, img_name), os.path.join(output_img_dir, img_name))
        
        # 生成标注文件
        label_name = img_name.replace(".jpg", ".txt")
        with open(os.path.join(output_label_dir, label_name), "w", encoding="utf-8") as f:
            f.write("\n".join(img_anno[img_id]))

# 处理训练集
print("开始处理训练集...")
coco2yolo(
    anno_file=os.path.join(COCO_ROOT, "annotations/instances_train2017.json"),
    img_dir=os.path.join(COCO_ROOT, "train2017"),
    output_img_dir=os.path.join(OUTPUT_ROOT, "images/train"),
    output_label_dir=os.path.join(OUTPUT_ROOT, "labels/train"),
    target_cats=TARGET_CATS,
    max_num=TRAIN_NUM
)

# 处理验证集
print("开始处理验证集...")
coco2yolo(
    anno_file=os.path.join(COCO_ROOT, "annotations/instances_val2017.json"),
    img_dir=os.path.join(COCO_ROOT, "val2017"),
    output_img_dir=os.path.join(OUTPUT_ROOT, "images/val"),
    output_label_dir=os.path.join(OUTPUT_ROOT, "labels/val"),
    target_cats=TARGET_CATS,
    max_num=VAL_NUM
)

print(f"机器人场景数据集整理完成,保存至{OUTPUT_ROOT},共{TRAIN_NUM+VAL_NUM}张样本")
4. 数据集有效性验证

编写 dataset_check.py 脚本,验证数据集格式、路径、标注是否正确,避免后续训练报错:

from ultralytics.data.utils import check_dataset
import os
import random

# 临时创建数据集配置文件,用于验证
robot_yaml = "./robot_dataset/robot_dataset.yaml"
with open(robot_yaml, "w", encoding="utf-8") as f:
    f.write(f"""
path: {os.path.abspath("./robot_dataset")}  # 数据集绝对路径
train: images/train
val: images/val
nc: 5  # 类别数
names: ['person', 'chair', 'dining table', 'bench', 'bottle']  # 类别名称,与 YOLO 索引一致
""")

# 检查数据集(Ultralytics 官方工具,可检测路径、格式、标注错误)
check_dataset(robot_yaml)
print("数据集格式验证通过!")

# 随机抽查标注文件
label_dir = "./robot_dataset/labels/train"
random_label = random.choice(os.listdir(label_dir))
with open(os.path.join(label_dir, random_label), "r", encoding="utf-8") as f:
    anno_content = f.read()
print(f"随机抽查标注文件{random_label}内容:\n{anno_content}")

验证结果:无报错,Ultralytics 可正常识别数据集,标注文件格式为 YOLO 标准格式,数据集整理完成。

目录

  1. 项目概述
  2. 一、核心目标与执行思路
  3. 1. 核心目标
  4. 2. 执行思路
  5. 二、工作日实操:理论学习 + 环境搭建 + 数据集筛选
  6. (一)理论学习(1h):YOLOv8 核心设计与机器人场景适配
  7. 1. 学习核心内容(对标 YOLOv9 原计划,适配 YOLOv8n)
  8. 2. 机器人场景后续优化方向初步梳理
  9. (二)实操 1:基于 Conda 搭建 Ultralytics8.0+PyTorch2.1 环境(1.5h)
  10. 1. 环境前置检查
  11. 2. 分步搭建流程(全程 Conda 命令,无 pip)
  12. 1. 打开终端,创建 Conda 独立环境,命名 yolo_robot,指定 Python3.9
  13. 2. 激活环境(后续所有操作均在该环境下执行)
  14. 3. 安装 PyTorch2.1+Torchvision+Torchaudio(适配 CUDA11.8,Conda 源安装,避免网络问题)
  15. 4. 安装 Ultralytics8.0(指定版本,Conda 源安装)
  16. 5. 安装配套依赖(opencv、pycocotools、pandas 等,数据集处理与可视化用)
  17. 6. 验证环境是否安装成功
  18. 3. 环境有效性验证
  19. 验证 PyTorch 版本与 CUDA 可用性
  20. 验证 Ultralytics 版本
  21. 验证 OpenCV
  22. 加载 YOLOv8n 官方模型,验证模型加载正常
  23. 4. 官方模型推理测试(验证环境可正常推理)
  24. 加载 YOLOv8n 预训练模型
  25. 对官方 bus.jpg 进行推理(无图片可自行上传任意图片)
  26. 可视化推理结果并保存
  27. (三)实操 2:COCO2017 机器人场景子集筛选与 YOLO 格式整理(1.5h)
  28. 1. 数据集下载与解压
  29. 2. 筛选目标与类别映射
  30. 3. 数据集筛选与 YOLO 格式转换(Python 脚本)
  31. 配置参数
  32. 创建 YOLO 格式数据集目录结构
  33. 处理训练集
  34. 处理验证集
  35. 4. 数据集有效性验证
  36. 临时创建数据集配置文件,用于验证
  37. 检查数据集(Ultralytics 官方工具,可检测路径、格式、标注错误)
  38. 随机抽查标注文件

更多推荐文章

查看全部
  • OpenClaw AI 编程助手提示词优化与效率提升指南
  • Java 核心工具类实战:String 与日期时间 API
  • 大模型时代:新手与程序员转型 AI 行业的最佳路径
  • Android 12 设计语言革新与常用高级 UI 控件解析
  • Python+Matplotlib 大数据可视化高效解决方案
  • OpenClaw:开源自托管 AI Agent 框架技术解析
  • 基于 GLM-4.6V-Flash-WEB 构建生产级智能客服系统实战
  • Stable Diffusion 3.5 本地部署与使用指南
  • 单链表实战:删除指定值、反转链表与查找中间节点
  • 本地化部署 AI 量化分析平台:Docker 配置与波浪理论实战
  • Python Django Flask Vue 公务员考试交流平台与复习系统
  • 本地部署 Apache Answer 问答平台及公网访问方案
  • Windows 7 系统 Git 安装与配置详解
  • 归并排序非递归实现详解
  • C++ 模板编程:typename 用法与分离编译问题解析
  • 后仿真 SDF 反标常见 Warning 分析与处理
  • 西门子 S7-1500 PLC 与 Fanuc 机器人焊装系统集成及 Profinet 通讯
  • AI生成HTML原型导入Axure实操指南
  • 文心一言:百度国产大模型技术解析与使用指南
  • Hookshot:轻量级 GitHub Webhook 处理工具

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online