Cam2BEV

Cam2BEV

深度学习实现多视角车载图像到语义分割鸟瞰图转换

该项目提出一种深度学习方法,将多个车载摄像头图像转换为语义分割鸟瞰图(BEV)。采用合成数据集训练,可良好泛化到真实场景。方法使用语义分割图像作为输入,缩小了仿真与真实数据的差距,无需手动标注。项目开源了代码、网络架构和数据集,适用于自动驾驶环境感知研究。相比传统逆透视映射,该方法在处理3D物体和遮挡区域时表现更佳。

Cam2BEV语义分割鸟瞰图深度学习自动驾驶Github开源项目

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/cb3f868a-da77-4296-9801-ebe2ed9c3d7c.png" width=50> Cam2BEV

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/d7e3d457-356b-4e80-a9dc-30d4e3f65d8d.gif" align="right" width=320 height=200>

本仓库包含了我们论文中提出的方法的官方实现,该方法用于根据多个车载摄像头的图像计算语义分割的鸟瞰图(BEV)图像:

基于Sim2Real深度学习的多车载摄像头图像到语义分割鸟瞰图的转换方法 (IEEE Xplore, arXiv)

Lennart Reiher, Bastian Lampe, 和 Lutz Eckstein
亚琛工业大学汽车工程研究所(ika)

[!重要]
本仓库由亚琛工业大学汽车工程研究所(ika)开源并维护。
基于深度学习的感知是我们车辆智能与自动驾驶领域的众多研究主题之一。
如果您想了解更多关于我们如何支持您的高级驾驶辅助和自动驾驶工作,欢迎与我们联系!
     Timo Woopen - 车辆智能与自动驾驶研究领域经理
     +49 241 80 23549
     timo.woopen@ika.rwth-aachen.de

Cam2BEV_video

摘要 — 准确的环境感知对自动驾驶至关重要。在使用单目摄像头时,环境中元素的距离估计是一个主要挑战。当摄像头视角转换为鸟瞰视角(BEV)时,可以更容易地估计距离。对于平面表面,逆透视映射(IPM)可以准确地将图像转换为BEV。但是,这种转换会扭曲车辆和弱势道路使用者等三维物体,使得难以估计它们相对于传感器的位置。本文描述了一种方法,可以根据多个车载摄像头的图像获得校正的360°BEV图像。校正后的BEV图像被分割成语义类,并包括对被遮挡区域的预测。这种神经网络方法不依赖于人工标注的数据,而是在合成数据集上训练,使其能够很好地泛化到真实世界的数据。通过使用语义分割图像作为输入,我们减小了模拟数据和真实世界数据之间的现实差距,并能够证明我们的方法可以成功应用于真实世界。在合成数据上进行的大量实验证明了我们的方法相比IPM的优越性。

我们希望我们的论文、数据和代码能够帮助您的研究。如果是这样,请引用:

@INPROCEEDINGS{ReiherLampe2020Cam2BEV,
  author={L. {Reiher} and B. {Lampe} and L. {Eckstein}},
  booktitle={2020 IEEE 23rd International Conference on Intelligent Transportation Systems (ITSC)}, 
  title={A Sim2Real Deep Learning Approach for the Transformation of Images from Multiple Vehicle-Mounted Cameras to a Semantically Segmented Image in Bird's Eye View}, 
  year={2020},
  doi={10.1109/ITSC45102.2020.9294462}}

内容

仓库结构

Cam2BEV
├── data                        # 默认情况下我们的合成数据集下载到此处  
├── model                       # 训练脚本和配置
│   ├── architecture                # 神经网络架构的TensorFlow实现
│   └── one_hot_conversion          # 定义语义分割图像的独热编码的文件
└── preprocessing               # 预处理脚本
    ├── camera_configs              # 定义我们数据集中使用的摄像头内参/外参的文件
    ├── homography_converter        # 用于将OpenCV单应性转换为uNetXST空间变换器使用的脚本
    ├── ipm                         # 通过IPM生成经典单应性图像的脚本
    └── occlusion                   # 向BEV图像引入遮挡类的脚本

安装

我们建议设置一个Python 3.7虚拟环境(例如使用_virtualenv_或_conda_)。在虚拟环境中,用户可以使用_pip_安装所有软件包依赖项。我们论文中的结果是使用_TensorFlow 2.1_(CUDA 10.1_用于GPU支持)实现的。该仓库现已在_TensorFlow 2.5_上进行了测试,但对更高版本的支持开始出现问题,因为_DeepLab_模型实现由于不可训练的lambda层而不支持_TensorFlow>2.5

pip install -r requirements.txt

数据

我们提供了两个可用于训练神经网络的合成数据集。这些数据集托管在Cam2BEV数据仓库中。这两个数据集都用于产生我们论文中呈现的结果:

  • 数据集1_FRLR: 来自四个车载摄像头的图像,以自车为中心的地面实况BEV图像
  • 数据集2_F: 来自一个前置车载摄像头的图像;与自车左对齐的地面实况BEV图像

有关数据的更多信息,请参阅仓库的README

可以通过运行提供的下载脚本轻松下载和提取这两个数据集:

./data/download.sh

注意: 下载大小约为3.7GB,两个数据集解压后的大小约为7.7GB。

预处理

我们的论文描述了两种预处理技术:
(1) 向标签图像引入_遮挡_类
(2) 生成单应性图像

1) 处理遮挡

交通参与者和静态障碍物可能会遮挡环境的部分区域,使得对BEV图像中这些区域的预测大多不可能。为了制定一个良好的问题,需要为摄像头视角中被遮挡的BEV区域向标签图像引入一个额外的语义类。为此,可以使用preprocessing/occlusion。下面是遮挡预处理的一个例子。 原图 遮挡图

运行以下命令处理_dataset 1_FRLR_的原始标签图像,并引入_occluded_类别。你需要提供无人机摄像头和所有车载摄像头的相机内参/外参(以yaml文件形式)。

注意: 在批处理模式下,此脚本利用多进程。处理整个数据集仍可能需要相当长的时间。因此,我们还提供了已预处理的数据。

cd preprocessing/occlusion
./occlusion.py \ --batch ../../data/1_FRLR/train/bev \ --output ../../data/1_FRLR/train/bev+occlusion \ ../camera_configs/1_FRLR/drone.yaml \ ../camera_configs/1_FRLR/front.yaml \ ../camera_configs/1_FRLR/rear.yaml \ ../camera_configs/1_FRLR/left.yaml \ ../camera_configs/1_FRLR/right.yaml

更多信息请参见preprocessing/occlusion/README.md

2) 投影预处理

作为将逆透视映射(IPM)技术纳入我们方法的一部分,需要计算单应性,即车载摄像头帧和BEV之间的投影变换。作为我们第一种方法变体(第III-C节)的预处理步骤,IPM应用于所有车载摄像头图像。变换设置为捕获与地面实况BEV图像相同的视场。为此,可以使用preprocessing/ipm。下面是从四个车载摄像头图像计算得出的单应性图像示例。

ipm

运行以下命令从_dataset 1_FRLR_的所有摄像头图像计算单应性BEV图像。你需要提供无人机摄像头和所有车载摄像头的相机内参/外参(以yaml文件形式)。

注意: 为节省时间,我们还提供了已预处理的数据。

cd preprocessing/ipm
./ipm.py --batch --cc \ --output ../../data/1_FRLR/train/homography \ --drone ../camera_configs/1_FRLR/drone.yaml \ ../camera_configs/1_FRLR/front.yaml \ ../../data/1_FRLR/train/front \ ../camera_configs/1_FRLR/rear.yaml \ ../../data/1_FRLR/train/rear \ ../camera_configs/1_FRLR/left.yaml \ ../../data/1_FRLR/train/left \ ../camera_configs/1_FRLR/right.yaml \ ../../data/1_FRLR/train/right

更多信息请参见preprocessing/ipm/README.md

训练

使用脚本model/train.pymodel/evaluate.pymodel/predict.py来训练模型、在验证数据上评估模型,并在测试数据集上进行预测。

输入目录、训练参数等可以通过CLI参数或配置文件设置。使用--help标志运行脚本或参考提供的示例配置文件之一。我们为每个网络和数据集提供配置文件:

以下命令将指导你在_dataset 1_FRLR_上训练_uNetXST_。

训练

通过传递提供的配置文件model/config.1_FRLR.unetxst.yml来开始训练_uNetXST_。如果验证数据集上的MIoU分数不再上升,训练将自动停止。

cd model/
./train.py -c config.1_FRLR.unetxst.yml

你可以通过将TensorBoard指向输出目录(默认为model/output)来可视化训练进度。训练指标也会打印到stdout

评估

在评估训练好的模型之前,将参数model-weights设置为指向其模型目录的Checkpoints文件夹中的best_weights.hdf5文件。然后运行评估以计算混淆矩阵和类IoU分数。

./evaluate.py -c config.1_FRLR.unetxst.yml --model-weights output/<YOUR-TIMESTAMP>/Checkpoints/best_weights.hdf5

评估结果将在评估结束时打印,并导出到模型目录的Evaluation文件夹中。

测试

要实际查看网络的预测结果,请在未见过的输入图像(如验证数据集)上尝试。预测的BEV图像将导出到参数output-dir-testing指定的目录。

./predict.py -c config.1_FRLR.unetxst.yml --model-weights output/<YOUR-TIMESTAMP>/Checkpoints/best_weights.hdf5 --prediction-dir output/<YOUR-TIMESTAMP>/Predictions

神经网络架构

我们在model/architecture中提供了_DeepLab_和_uNetXST_神经网络架构的实现。_DeepLab_有两种不同的骨干网络:MobileNetV2_或_Xception

DeepLab

_DeepLab_模型应该将逆透视映射(preprocessing/ipm)计算的单应性图像作为输入。

配置

  • model设置为architecture/deeplab_mobilenet.pyarchitecture/deeplab_xception.py
  • input-training和其他输入目录参数设置为包含单应性图像的文件夹
  • 在配置文件中注释掉unetxst-homographies,或者不通过CLI提供

uNetXST

_uNetXST_模型包含SpatialTransformer单元,它们在网络内部执行IPM。因此,在构建网络时,需要提供从每个摄像头变换图像的单应性。

配置

自定义

我想设置不同的训练超参数

使用--help标志运行训练脚本,或查看提供的示例配置文件之一,了解可以轻松设置哪些参数。

我希望网络处理更多/更少的语义类别

我们提供的图像数据集包含所有30个_CityScapes_类别颜色。如何将这些类别减少到例如10个类别是在model/one_hot_conversion中的独热编码转换文件中定义的。使用训练参数--one-hot-palette-input--one-hot-palette-label来选择其中一个文件。你可以轻松创建自己的独热编码转换文件,它们相当易于理解。

如果你调整了--one-hot-palette-label,你还需要修改--loss-weights。要么省略该参数以均匀加权所有输出类别,要么计算新的合适的损失权重。提供的配置文件中的权重是使用以下Python代码段(从model目录)计算得出的。

import numpy as np import utils palette = utils.parse_convert_xml("one_hot_conversion/convert_9+occl.xml") dist = utils.get_class_distribution("../data/1_FRLR/train/bev+occlusion", (256, 512), palette) weights = np.log(np.reciprocal(list(dist.values()))) print(weights)

我想使用自己的数据

你需要在自己的数据上运行预处理方法。以下是需要考虑的大致步骤:

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多