news 2026/6/10 21:01:57

Apollo 占据网格感知模型:从训练到部署的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apollo 占据网格感知模型:从训练到部署的完整指南

Apollo 占据网格感知模型:从训练到部署的完整指南

    • 引言:什么是占据网格?
    • 第一部分:为什么需要这份指南?(背景与初衷)
    • 第二部分:核心概念与准备工作
      • 2.1 关键术语
      • 2.2 准备工作:驱动确认
    • 第三部分:训练阶段详解
      • 步骤 1: 获取训练环境与数据
      • 步骤 2: 创建并运行容器
      • 步骤 3: 进入容器并初始化
      • 启动SSH服务[可选]
      • 步骤 4: 数据预处理
      • 步骤 5: 模型评估(验证预训练权重)
      • 步骤 6: 模型微调
      • 步骤 7: 保存训练成果并清理
    • 第四部分:模型导出与部署
      • 步骤 1: 导出为ONNX格式
      • 步骤 2: 在Apollo系统中替换并测试模型
      • 模型文件结构说明
    • 总结

引言:什么是占据网格?

想象一下,自动驾驶汽车需要理解它周围的世界。传统方法像识别“那里有一辆车”或“这是一个行人”,但这还不够。自动驾驶汽车还需要知道那些没有被明确训练的物体(比如一个翻倒的纸箱、一个掉落的轮胎),以及空间是否可以被安全通过。

占据网格就是解决这个问题的关键技术。你可以把它理解成自动驾驶汽车的“上帝视角”或“三维思维导图”。它将车辆周围的环境划分成无数个细小的立方体网格(比如长宽各200米,高10米,每个网格0.5米见方),然后为每一个小立方体预测一个简单的状态:是否被占据(是/否)。通过这种方式,汽车能获得一个详尽、统一且不受预定义类别限制的3D环境表示。

本文介绍的camera_detection_occupancy是百度Apollo平台中的一个感知模型,它仅使用摄像头图像,就能生成这种强大的3D占据网格。下面,我们将一步步拆解如何训练、优化并最终将它部署到自动驾驶系统中。


第一部分:为什么需要这份指南?(背景与初衷)

  1. 原训练环境复杂:Apollo官方模型的训练环境依赖众多,配置步骤繁琐,容易出错。
  2. 简化流程:为此,我们将所有依赖打包成Docker镜像,并将测试所需的小型数据集(nuScenes v1.0-mini)也做成数据卷,实现开箱即用。
  3. 云端替代方案:虽然百度百舸AI平台提供了更便捷的BEV模型训练环境,但通常需要申请稀缺的GPU资源。本指南提供的本地Docker方案,让你在拥有NVIDIA GPU的机器上即可快速开始。

核心价值:本指南旨在提供一个一体化、可复现的解决方案,帮助开发者和研究者绕过环境配置的“坑”,直接聚焦于模型本身的训练、评估与部署。


第二部分:核心概念与准备工作

2.1 关键术语

  • Docker:一个容器化平台,可以将软件及其所有依赖打包在一个“容器”里,确保在任何地方运行的结果都一致。我们用它来封装训练环境。
  • nuScenes数据集:一个大型自动驾驶公开数据集,包含摄像头、激光雷达、雷达等多种传感器数据。我们使用其精简版v1.0-mini进行演示。
  • ONNX:一种开放的模型格式,允许你在不同框架(如PyTorch, TensorRT)之间转换和部署模型。
  • TensorRT:NVIDIA推出的高性能深度学习推理SDK,能极大优化模型在GPU上的运行速度。

2.2 准备工作:驱动确认

确保你的NVIDIA显卡驱动版本为580.95.05或兼容版本。

# 查看当前驱动版本nvidia-smi

如果版本不符,可从提供的链接下载安装。
驱动下载


第三部分:训练阶段详解

我们将整个过程分为两个容器:一个用于存放数据,一个用于运行训练代码。这样做的好处是数据可以独立存在,即使删除了训练容器,数据依然保留。

步骤 1: 获取训练环境与数据

下载我们预制的Docker镜像。

# 拉取训练环境镜像,并为其设置一个简短的标签dockerpull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:apollo_vision_netdockertag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:apollo_vision_net apollo_vision_net:v1dockerrmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:apollo_vision_net# 拉取数据卷镜像,它包含了nuScenes mini数据集dockerpull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:apollo_vision_net_datadockertag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:apollo_vision_net_data apollo_vision_net_datadockerrmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:apollo_vision_net_data

步骤 2: 创建并运行容器

# 首先,创建一个“数据容器”,它只是挂着数据,不运行任何程序dockerrun -d --name occ_data_container apollo_vision_net_datatail-f /dev/null# 然后,创建并运行“训练容器”。这里做了几件重要的事:# 1. `--gpus all`:将GPU透传给容器。# 2. `--shm-size=32g`:分配共享内存,大数据处理需要。# 3. `-v $PWD:/home`:将当前主机目录挂载到容器的`/home`,方便文件交换。# 4. `--volumes-from occ_data_container`:从数据容器挂载数据集。# 5. `--name ot_dev`:给容器起名为`ot_dev`。docker
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:39:47

stable_baseline3 强化学习算法开源库

stable_baselines3 简介 stable_baselines3 是一个基于 PyTorch 的强化学习库,提供了多种经典和现代强化学习算法的实现。该库的设计目标是让用户能够快速实现和测试强化学习模型,而无需深入算法细节。 主要特点 PyTorch 后端:所有算法均基…

作者头像 李华
网站建设 2026/6/10 15:05:25

OpenPLC Editor 集成(英译中)

OpenPLC Editor 集成 本文档描述 OpenPLC Editor 如何与 OpenPLC Runtime v4 通信。 概述 OpenPLC Runtime v4 是一个无头服务,设计为由 OpenPLC Editor 桌面应用程序控制。没有供最终用户使用的Web浏览器界面。所有与运行时的交互都是通过 OpenPLC Editor 在端口…

作者头像 李华
网站建设 2026/6/10 12:33:31

奇瑞控股集团 Android 应用开发工程师职位深度解析与技术面试全攻略

奇瑞控股集团有限公司 Android App应用开发工程师(J22345) 职位信息 工作职责: 1.负责Android客户端App、核心SDK的开发工作。 2.负责系统App的开发,与系统各个业务模块沟通需求并完成相关设计开发工作。 3.参与产品需求分析、技术方案设计与评审,编写开发文档。 4.负责性能调…

作者头像 李华
网站建设 2026/6/10 12:26:12

2026年PLM项目管理横评:8款工具从部署到核心模块一次看清

本文将深入对比8款PLM项目管理系统:PingCode、Worktile、Siemens Teamcenter、PTC Windchill、Dassault 3DEXPERIENCE ENOVIA、Aras Innovator、Autodesk Fusion Lifecycle、Jira Confluence。文章从定位、适用规模、部署方式、核心模块与合规要点出发,…

作者头像 李华
网站建设 2026/6/10 8:56:12

Flutter for OpenHarmony 电子合同签署App实战 - 主入口实现

在构建一个完整的Flutter应用时,主入口文件是整个应用的基础。它不仅负责应用的初始化,还要管理全局的导航结构、主题配置和状态管理。在这篇文章中,我们将深入探讨如何使用GetX框架和flutter_screenutil来构建一个支持鸿蒙系统的电子合同签署…

作者头像 李华
网站建设 2026/6/10 14:22:14

Linux命令-local(在函数内定义局部变量)

🧭说明 在Linux中,“local”这个词的用法有些微妙,主要需要根据上下文来理解。它可能指一个用于文件搜索的命令,也可能指Shell脚本中用于限制变量作用域的关键字。让我用一个表格来对比这两种常见的理解:特性理解一&am…

作者头像 李华