Charmve / OccNet-Course

国内首个占据栅格网络全栈课程《从BEV到Occupancy Network,算法原理与工程实践》,包含端侧部署。Surrounding Semantic Occupancy Perception Course for Autonomous Driving (docs, ppt and source code) 在线课程主页:http://111.229.117.200:8100/ (作者独立搭建)
BSD 3-Clause "New" or "Revised" License
453 stars 49 forks source link
autonomous-driving autonomous-vehicles bev end-to-end occupancy occupancy-prediction self-driving-car tesla

💖 预计2024年4月会开源本课程的标准版部分内容,包含源代码和课件


## ✨ News! ✨ - 2023.11.20: 💻 OccNet-Course 在线学习网站上线 ! Occ-Course Website http://111.229.117.200:8100/ - 2023.9.10: 📝 课程提案 更多更新日志会同步到 [CHANGELOG](CHANGELOG.md),持续更新中,感谢大家的支持与喜欢!
More
不建议 fork 项目,本项目会持续更新,只 fork 看不到更新,建议 Star ⭐️ ~

源代码 开发环境 文档/课件PPT 视频 课后答疑

OccNet-Course

Surrounding Semantic Occupancy Perception Course for Autonomous Driving

课程目录

自动驾驶感知算法之占据网络专题

在线课程网站:http://111.229.117.200:7003/

课程章节
(点击标题展开章节详情🔎)
课程视频 课件PPT 节选
🔥 试看
一、BEV感知概述(3周) [课程目录 >](Chapter01-BEV感知概述) - 1.1 课程介绍和内容设计 - 1.2 BEV感知算法的基本介绍 - 1.3 相比于PV视角的差异性 - 1.4 BEV和OccNet的联系 - 1.5 主流的方法一览(前向预测和反向映射) - 1.5.1 LSS - 1.5.2 BEVDet - 1.5.3 BEVFormer - 1.5.4 DETR3D - 1.5.5 FUTR3D - 1.6 小结与课后习题
[📹 Video] | [Baidu Cloud百度网盘 4jja] PPT | [百度网盘]
🔥 试看
二、占据栅格网络概述(1.5周) [课程目录 >](Chapter02-占据栅格网络概述) - 2.1 3D语义场景补全(SSC)与3D场景预测 - 2.2 占据网络基本思路 - 2.3 纯视觉和多模态分类 - 2.3.1 纯视觉方案 - 2.3.2 点云方案 - 2.4 Occpuancy网络基本流程梳理 - 2.5 优势与挑战 - 2.6 小结与课后习题
[📹 Video] | [Baidu Cloud百度网盘wl1f] [PPT] | [百度网盘]
三、重要数据集和Benchmark介绍(1周) [课程目录 >](Chapter03-重要数据集和Benchmark介绍) - 3.1. 主流数据集介绍 - 3.1.1 nuScenes - 3.1.2 SemanticKITTI - 3.1.3 如何自制Occ数据集(SurroundOcc) - 3.2. Benchmark对比 - 3.2.1 指标介绍 - 3.2.2 [当前现状](Chapter03-重要数据集和Benchmark介绍) - 3.2.2.1 Occ3D - 3.2.2.2 OpenOccupancy - 3.3. 主要的竞赛Challenge介绍 - 3.4 小结与课后习题
[📹 Video] | [百度网盘] [PPT] | [百度网盘]
四、基于纯视觉的Occ算法(6周) [课程目录 >](Chapter04-基于纯视觉的Occ算法) - 4.1 纯视觉方法概括 - 4.2 多目相机方案(3周) - 4.2.1 方案概述 - 4.2.2 TPVFormer - 4.2.2.1 算法动机/开创性思想 - 4.2.2.2 主体结构 - 4.2.2.3 损失函数 - 4.2.2.4 实验方法和性能分析 - 4.2.3 OccFormer - 4.2.2.1 算法动机/开创性思想 - 4.2.2.2 主体结构 - 4.2.2.3 损失函数 - 4.2.2.4 实验方法和性能分析 - 4.2.4 OccDepth - 4.2.2.1 算法动机/开创性思想 - 4.2.2.2 主体结构 - 4.2.2.3 损失函数 - 4.2.2.4 实验方法和性能分析 - 4.2.5 VoxFormer - 4.2.6 Occ-BEV - 4.2.7 OccNeRF - 4.2.7.1 算法动机/开创性思想 - 4.2.7.2 主体结构 - 4.2.7.3 损失函数 - 4.2.7.4 实验方法和性能分析 - 4.2.8 SelfOcc - 4.2.8.1 算法动机/开创性思想 - 4.2.8.2 主体结构 - 4.2.8.3 损失函数 - 4.2.8.4 实验方法和性能分析 - 4.2.9 BEV-IO - 4.2.10 SurroundOcc - 4.2.11 方法对比 - 4.2.12 代码实战(复现SurroundOcc) - 4.2.12.1 数据处理 - 4.2.12.2 模型结构源代码分析 - 4.2.12.3 训练方法(真值监督与loss) - 4.2.12.4 训练与推理可视化 - 4.3 单目相机方案(2周) - 4.3.1 方法概述 - 4.3.2 单目相机3D检测 - 4.3.2.1 PGD - 4.3.2.2 SMOKE - 4.3.2.3 Monoflex - 4.3.2.4 FCOS3D - 4.3.3 单目相机Occ代表工作 - 4.3.3.1 MonoScene 原理 - 4.3.3.2 StereoScene 原理 - 4.3.4 方法对比 - 4.3.5 代码实战(复现MonoScene) - 4.4 小结与课后习题
[📹 Video] | [百度网盘] [PPT] | [百度网盘]
五、基于点云和多模态融合的Occ方案(4周) [课程目录 >](Chapter05-基于点云和多模态融合的Occ方案) - 5.1 多模态方式Occ概述 - 5.2 点云3D检测网络介绍(1.5周) - 5.2.1 VoxelNet - 5.2.2 PointPillar - 5.3 基于点云监督的Occ方案(2周) - 5.3.1 FastPillars - 5.3.2 SECOND - 5.3.3 OpenOccupancy - 5.3.4 OccFusion - 5.3.4 [PointOcc](https://github.com/wzzheng/PointOcc) - 5.3.5 [Occ4cast](https://github.com/ai4ce/Occ4cast) - 5.4 代码实战(复现PointOcc) - 5.4.1 数据处理 - 5.4.2 模型结构源代码分析 - 5.4.3 训练方法(真值监督与loss) - 5.4.4 训练与推理可视化 - 5.5 小结与课后习题
[📹 Video] | [百度网盘] [PPT] | [百度网盘]
六、占据网络部署小试(1.5周) [课程目录 >](Chapter06-占据网络部署小试:模型量化加速与部署) - 6.1 模型量化部署概述 - 6.1.1 PTQ (训练后量化、低比特量化) - 6.1.2 QAT 量化感知训练 - 6.2 英伟达芯片量化部署工具链 - 6.2.1 Cuda 基本概述 - 6.2.2 TensorRT 基本概述 - 6.2.3 模型转换(torch2onnx\onnx2trt) - 6.2.4 低比特量化PTQ - 6.2.5 BEVFusion 部署实战 - 6.2.6 BEVFormer 部署实战 - 6.3 地平线J5量化部署工具链 - 6.3.1 导引:MobileNet 低比特量化 - 6.3.2 ‘天工开物’量化部署基本流程 - 6.3.3 模型转换(torch2onnx\onnx2trt) - 6.3.4 低比特量化PTQ - 6.3.5 FlashOCC 部署实战 - 6.3.6 FastBEV 部署实战
[📹 Video] | [百度网盘]
七、课程展望与总结(1周) [课程目录 >](Chapter07-课程展望与总结) - 7.1 基本现状、发展趋势和挑战 - 7.2 Occ应用Nerf的一些思考 - 7.2.1 OccNerf、SelfOcc自监督训练方式 - 7.2.2 4D数据标注 - 7.2.3 3D gaussian-splatting 三维场景重建(训练、仿真) - 7.3 算法框架 - 短期: - 7.3.1 感知-预测联合模型 - 7.3.2 数据驱动的端到端 [UniAD](https://github.com/OpenDriveLab/UniAD) - 7.3.3 矢量地图在线建图:MapTR/MapTRv2、ScalableMap、VectorMapNet、HDMapNet、GeMap、MapEX、[HybriMap](https://mp.weixin.qq.com/s/DrerkRzdiIIz7OZMz_9p0g) - 7.3.4 BEV-OCC-Transformer: OccFormer、OccWorld、Occupancy-Flow - 长期: - 7.3.5 端到端大模型 [LMDrive](https://github.com/opendilab/LMDrive) [关于大模型和自动驾驶的几个迷思](关于大模型和自动驾驶的几个迷思.md) - 7.3.6 通用视觉大模型(世界模型)(常识推理、自监督/弱监督):Drive-WM、DriveDreamer - 7.3.7 模型稀疏化(我们其实不需要那么多数据量做训练?) - 7.3.8 训练加速&端侧大模型推理加速 - 7.4 数据 - 7.4.1 4D数据自动标注 - 7.4.2 数据合成 - DrivingDiffusion、[MagicDrive](https://zhuanlan.zhihu.com/p/675303127)、UrbanSyn - [CLIP2Scene](https://github.com/runnanchen/CLIP2Scene) - 7.5 端到端闭环仿真([NeuroNCAP](https://research.zenseact.com/publications/neuro-ncap/)、[NeuRAD](https://research.zenseact.com/publications/neurad/)、VAD、UniAD、UniSim) - 7.6 其他 - 7.6.1 舱驾一体 - 7.6.2 AI 编译器: MLIR、TVM、XLA、Triton - 7.6.3 模型剪枝、模型蒸馏、模型压缩、模型量化(PTQ、QAT) - 7.6.4 自动驾驶系统评测方案
[📹 Video] | [百度网盘]
八、大作业(实践内容)(2周) [课程目录 >](Chapter08-FinalProject) - 8.1 复现一个纯视觉方案: 走通数据标定、BEV视角坐标对齐,实现3D目标检测、3D语义场景补全补全完整流程。 - 8.2 参考答案
[📹 Video] | [百度网盘] [PPT] | [百度网盘]
🔥 试看
九、补充材料(1周) [课程目录 >](Chapter09-Appendix) - 9.1 Transformer in Vision - 9.2 BEV+Transformer - 9.3 E2E、LLM、Data-driven
[📹 Video] | [百度网盘]
🎉 课程彩蛋 这是一个彩蛋 🥚

课前预习材料

已建立微信交流群,微信 Yida_Zhang2

Quick-start

git clone https://github.com/Charmve/OccNet-Course --recursive ~/workspace/OccNet-Course
cd ~/workspace/OccNet-Course

./scripts/start_dev_docker.sh
./scripts/goto_dev_docker.sh

bash docker/run_after_start_docker.sh # inside docker

cd code/


背景介绍

在没有occupancy network之前,感知只有识别出障碍物是什么类型,规控才会响应,进行制动或避让的响应。如果感知识别不出来,不好意思,就是一堵墙挡在前面,车子也会“无脑”撞上去。 ![image](https://github.com/Charmve/OccNet-Course/assets/29084184/2491c935-fb08-4e0b-979c-cd1e2c9d2e22) > 没有occupancy network之前的特斯拉 就算识别出了目标,给出的空间也不一定准确。按照3m的跟停距离来说,这种场景也有一定剐蹭的风险。 ![image](https://github.com/Charmve/OccNet-Course/assets/29084184/502904e2-55aa-42f8-8635-36fc12757dc4) > 敢问阁下将如何应对 但有了occupancy network之后,感知就可以输出这部分的网格是被占用的,达到类似激光雷达点云的作用,从而给出位置和速度。规控就可以对这种被占用的位置做响应。 > occupancy networks 效果图 可以说occupancy network对感知来说是质的飞跃,干掉激光雷达成为了可能。有了occupancy network,撞墙、撞无法识别出类型的障碍物已经成为历史!无论是路边的电线杆、还是标志牌,无论挡在车前的是树枝、是牛都可以响应。 ![image](https://github.com/Charmve/OccNet-Course/assets/29084184/d03538f0-d5b2-446c-b007-f3b2800defec) Occupancy网络可以识别移动部分和非移动部分、未知障碍物等。 很多人提到Occ网络,会理解为对通用障碍物,尤其是白名单之外的异形障碍物的感知能力,这没有错。但很多人不知道,Occ网络对于遮挡,也能起到很好的脑补能力。3D空间的占据栅格可以很方便计算遮挡关系,就能帮助感知系统预见遮挡区域。


课程介绍

大家好!

欢迎来到《占据网络在自动驾驶中的应用》这门课程的学习,我是Charmve,大家也可以叫我察姆。目前任职于国内某自动驾驶独角兽公司,有多年自动驾驶量产经验。在本课程中,我们主要对今年国内外备受关注的Occupancy Network做一个专题学习分享,普遍认为它是解决自动驾驶感知长尾问题的关键技术。

特斯拉在去年AI DAY上,分享了他们在感知方面的一个重点技术:Occupancy Network (占据网络),自此引发业内网对占据网络的关注。研究机器人技术的同学肯定对occupancy grid不会陌生,occupancy表示空间中每个3D体素(voxel)是否被占据,可以是0/1二元表示,也可以是[0, 1]之间的一个概率值。

为什么估计occupancy对自动驾驶感知很重要呢?很核心的一个原因是:车辆在行驶中,除了常见障碍物如车辆、行人,我们可以通过3D物体检测的方式来估计他们的位置和大小,还有更多长尾的障碍物也会对行驶产生重要影响。例如:

  1. 可变形的障碍物,如两节的挂车,不适合用3D bounding box来表示;
  2. 异形障碍物,如翻倒的车辆,3D姿态估计会失效;
  3. 不在已知类别中的障碍物,如路上的石子、垃圾等,无法进行分类。

因此,我们希望能找到一种更好的表达来描述这些长尾障碍物,完整估计3D空间中每一个位置的占据情况(occupancy),甚至是语义(semantics)和运动情况(flow)。

特斯拉用下图的具体例子来展现Occupancy Network的强大。不同于3D的框,occupancy这种表征对物体没有过多的几何假设,因此可以建模任意形状的物体和任意形式的物体运动。图中展示了一个两节的公交车正在启动的场景,蓝色表示运动的体素,红色表示静止的体素,Occupancy Network精确地估计出了公交车的第一节已经开始运动,而第二节还处于静止状态。

legend
图1 Tesla Occupancy Network
▲对正在启动的两节公交车的occupancy估计,蓝色表示运动的体素,红色表示静止的体素

特斯拉的Occupancy Network 模型结构如下图所示。首先模型利用RegNet和BiFPN从多相机获取特征,然后模型通过带3D空间位置的spatial query对2D图像特征进行基于attention的多相机融合。如何实现3D spatial query和2D特征图之间的联系呢?具体融合的方式图中没有细讲,但最有可能采取的是两种方案: - 第一种,叫做3D-to-2D query,即根据每个相机的内外参将3D spatial query投影到2D特征图上,提取对应位置的特征。该方法在DETR3D[1]中提出,BEVFormer[2]和PolarFormer[3]也采取了该思想。 - 第二种,是利用positional embedding来进行隐式的映射,即将2D特征图的每个位置加上合理的positional embedding,如相机内外参、像素坐标等,然后让模型自己学习2D到3D特征的对应关系,该方法在论文PETR中提出[4]。再接下来模型进行时序融合,实现的方法是根据已知的自车位置和姿态变化,将3D特征空间进行拼接。 不光是上述提到的BEVFormer、PETR算法,我们在本课程中会详细的分析、总结和对比不同算法之间的来龙去脉,各自发展的过程,核心思想和优化点。 这一工作的分享,激发了大家对自动驾驶感知算法方向的探讨,普遍认为占据网络是未来感知算法的终极解决方案 。通过稠密的空间体素占用确定自动驾驶车辆的感知结果,为预测和规划提供更加准备的条件。更加有利于特征时序融合、做到自动驾驶端到端的解决方案,最终实现L4,直至L5完全无人驾驶。

demo legend
图2 空间占据预测示例(TPVFormer、OccFormer)

不知道怎么学习占据网络?学习难度大?

今年来,学术界和工业界都在视觉occupancy方面有了大量的工作,从纯视觉的方案到多传感器的方案、从前向预测到后向预测,再到最近提出的forward-backward联合方案。对于我们初学者,造成了极大的学习困难。一下子不知道如何下手,从哪开始。本课程的出发点就是为了解决这个痛点,应该算是国内外对于占据网络全面讲解的第一个课程或者专题内容。 在接下来的很长一段时间,我会从自动驾驶从业者的角度,跟大家一起学习和分享占据网络的发展及其算法原理,同时我们也提供了代码实践内容。以通俗的语言讲解从2D目标检测到BEV视角下的3D目标检测,再到3D空间占用算法的整个过程。并且尤其关注到算法原理本身,对比不同算法,详细分析其核心思想和各算法的优化点。更为特别的,在本课程中,我们会给出两个占据网络的复现和优化,让你快速复现,学以致用。尤其适合目前正在求职的朋友、对自动驾驶感知算法感兴趣的跨行就职者。每个章节都会有详细的课件和答疑群,欢迎大家一起交流!课程后,会有一个大作业,根据给出的条件和目标,思路提示,完成占据网络算法的优化,提升mIoU指标。

课件代码一应俱全

细致的讲解,不光要有理论,代码及实践也一定要讲透彻!通过全套的视频讲解,帮你在脑海中搭建模型的基本框架,彻底搞懂每一个知识点,从而提高写代码的效率和速度。


图4 课程源代码


图5 课件PPT
图5 课件PPT

[课程目录 >](#课程目录)

课程特色

✨ 系统性学习占据网络算法设计原理、多种方案对比分析,由浅入深。最重要的是,本课程是一个实践课程,亲自动手设计、训练和部署一个Occ网络,走完一个闭环。这对于进入求职者是十分有优势的一点,尤其对于现在想要进入自动驾驶算法岗位的同学,占据网络、BEV、Transformer和部署经验,都是十分有竞争力的一点。

由浅入深,通俗易懂

  • 作者根据多年的自动驾驶经验,从占据网络的发展过程详细的阐述从2D检测到BEV 3D检测再到占据网络,讲清楚为什么前一方法不适用,各自方法有什么局限性。占据网络的神力又在哪里?由浅入深,一个问题一个问题解答。
  • Occ算法全覆盖,高度提炼
  • 涵盖当前几乎所有的占据网络算法,融会贯通,总结和提炼各自算法的核心思想,引出新的思考。
  • 理论结合实战
  • 项目实战和理论结合,实战课程的课后配套实战代码和操作文档,随学随练、快速掌握。
  • [课程目录 >](#课程目录)

    讲师介绍

    我是 Charmve,在多家自动驾驶头部公司任职,主要关注在BEV视觉感知、3D场景重建,有多个自动驾驶量产项目经验。近年来,尤其关注在占据网络的研发上,根据个人所学所思和工作实践,跟大家一起分享这个主题内容。 [课程目录 >](#课程目录)

    课程学后收获

    1. 对占据网络有较为全面的认识,深入理解各种算法的核心思想和原理,尽可能做到融会贯通,结合实际工作,改善和提高系统感知能力; 2. 对自动驾驶系统的感知算法会有较深入的理解,掌握感知算法的设计痛点和难点; 3. 学完本课程,并理解本课程所讲解的内容,你将会是占据网络掌握的少数人! 4. 提高从业竞争力,卷过同级身边人,同时也能够结识许多行业从业人员与学习合作伙伴!

    [课程目录 >](#课程目录)

    适合人群

    1. 计算机视觉与自动驾驶感知相关研究方向的本科/硕士/博士; 2. CV与自动驾驶2D/3D感知相关算法工程人员; 3. 对占据网络算法感兴趣的朋友,要是有实际需求会更好; 4. 对计算机视觉有部分了解,具有一定的Python、Pytorch基础的小伙伴;

    [课程目录 >](#课程目录)

    开课时间与学习方式

    2023年11月份开始学习之路,历经两个月,离线视频授课。主讲老师在微信学习群内答疑,对课程中的算法、代码、环境配置等问题一一解惑! [课程目录 >](#课程目录)

    课程咨询与购买

    课程采用预售方式,本仓库star数超过1k,或预定人数超过100人后,将会上线全部课程和源代码,课程长期更新。

    VIP 专享8折优惠券

    扫码支付 微信支付 支付宝 Paypal

    扫码学习课程

    微信咨询:Yida_Zhang2

    (点击购买) 前20名 或 转发朋友圈 8折 ~~860~~ 688 元
      

    付完款,一定记得加我,加入课程答疑交流群 微信Yida_Zhang2

    [课程目录 >](#课程目录) ## 🔥 Stargazers Over Time [![Star History Chart](https://api.star-history.com/svg?repos=Charmve/OccNet-Course&type=Timeline)](https://star-history.com/#Charmve/OccNet-Course&Timeline) [课程目录 >](#课程目录) ## Closed-loop Simulator [课程展望与总结 >](Chapter07-课程展望与总结) [课程目录 >](#课程目录) ## Acknowledge Some benchmark result and soure code from: https://github.com/CVPR2023-3D-Occupancy-Prediction/CVPR2023-3D-Occupancy-Prediction @Maiwei.ai