ChatSim
可编辑的自动驾驶场景模拟通过LLM-Agent协作
新闻
[2024年6月12日] 🔥🔥🔥 背景渲染速度加快!3D高斯散射已集成为背景渲染引擎,在30秒内渲染50帧。
[2024年6月12日] 🔥🔥🔥 前景渲染速度加快!并行多进程用于Blender渲染!在5分钟内渲染50帧。
要求
- Ubuntu版本 >= 20.04(使用Blender 3.+)
- Python >= 3.8
- Pytorch >= 1.13
- CUDA >= 11.6
- COLMAP或Metashape软件(不必要,我们提供重新校准的姿势)
- OpenAI API密钥(你也可以使用NVIDIA AI的其他模型API免费试用)
安装
首先递归克隆此仓库。
git clone https://github.com/yifanlu0227/ChatSim.git --recursive
第一步:设置环境
conda create -n chatsim python=3.9 git-lfs
conda activate chatsim
第二步:安装背景渲染引擎
我们提供两种背景渲染方法,一种是我们论文中的McNeRF
,另一种是3D高斯散射
。McNeRF
编码曝光时间,并实现一致的亮度渲染。3D高斯散射
渲染速度快得多(约50倍)并且在训练视图中具有更高的PSNR。然而,强烈的视角转变会导致明显的伪影。
McNeRF
https://github.com/yifanlu0227/ChatSim/assets/45688237/6e7e4411-31e5-46e3-9ca2-be0d6e813a60
3D高斯散射
https://github.com/yifanlu0227/ChatSim/assets/45688237/e7ac487c-5615-455d-bb38-026aaaabce70
安装任意一个即可!如果你想要更快的渲染速度并且不在意亮度不一致,选择3D高斯散射
。
安装McNeRF(论文中的官方实现)
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
pip install -r requirements.txt
imageio_download_bin freeimage
安装与F2-NeRF相同。请按以下步骤操作。
cd chatsim/background/mcnerf/
# mcnerf使用相同的数据目录。
ln -s ../../../data .
第2.1步:安装依赖项
对于基于Debian的Linux发行版:
sudo apt install zlib1g-dev
对于基于Arch的Linux发行版:
sudo pacman -S zlib
第2.2步:下载预编译LibTorch
以torch-1.13.1+cu117
为例。
cd chatsim/background/mcnerf
cd External
#如果你使用不同版本的pytorch,请修改版本。
wget https://download.pytorch.org/libtorch/cu117/libtorch-cxx11-abi-shared-with-deps-1.13.1%2Bcu117.zip
unzip ./libtorch-cxx11-abi-shared-with-deps-1.13.1+cu117.zip
rm ./libtorch-cxx11-abi-shared-with-deps-1.13.1+cu117.zip
第2.3步:编译
最低的g++版本为7.5.0。
cd ..
cmake . -B build
cmake --build build --target main --config RelWithDebInfo -j
如果修改了mcnerf代码,最后两行应始终执行。
安装3D高斯散射
3DGS具有更快的推理速度和更高的渲染质量。但在这种情况下,HDR天空未启用。
安装3DGS要求你的CUDA NVCC版本与pytorch CUDA版本一致。
# 确保CUDA (nvcc) 版本与pytorch CUDA版本一致。
# 首先检查你的CUDA (nvcc) 版本
nvcc -V # 例如:Build cuda_11.8.r11.8
# 前往https://pytorch.org/get-started/previous-versions/寻找对应版本。pytorch本身的版本应 >= 1.13。
# 我们列出了一些快速设置的选项。
# CUDA 11.6
pip install torch==1.13.0+cu116 torchvision==0.14.0+cu116 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu116
# CUDA 11.7
pip install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117
# CUDA 11.8
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia
# CUDA 12.1
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=12.1 -c pytorch -c nvidia
pip install -r requirements.txt
imageio_download_bin freeimage
cd chatsim/background/gaussian-splatting/
pip install submodules/simple-knn
第三步:安装修补工具
第3.1步:设置视频修补
cd ../inpainting/Inpaint-Anything/
python -m pip install -e segment_anything
gdown https://drive.google.com/drive/folders/1wpY-upCo4GIW4wVPnlMh_ym779lLIG2A -O pretrained_models --folder
gdown https://drive.google.com/drive/folders/1SERTIfS7JYyOOmXWujAva4CDQf-W7fjv -O pytracking/pretrain --folder
第3.2步:设置图像修补
cd ../latent-diffusion
pip install -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
pip install -e git+https://github.com/openai/CLIP.git@main#egg=clip
pip install -e .
# 下载预训练的ldm
wget -O models/ldm/inpainting_big/last.ckpt https://heibox.uni-heidelberg.de/f/4d9ac7ea40c64582b7c9/?dl=1
第四步:安装Blender软件和我们的Blender工具
我们在Blender 3.5.1上进行过测试。需要注意的是,Blender 3+要求Ubuntu版本 >= 20.04。
第4.1步:安装Blender软件
cd ../../Blender
wget https://download.blender.org/release/Blender3.5/blender-3.5.1-linux-x64.tar.xz
tar -xvf blender-3.5.1-linux-x64.tar.xz
rm blender-3.5.1-linux-x64.tar.xz
第4.2步:为Blender的Python安装Blender工具
定位Blender的内部Python,例如,blender-3.5.1-linux-x64/3.5/python/bin/python3.10
export blender_py=$PWD/blender-3.5.1-linux-x64/3.5/python/bin/python3.10
cd utils
# 安装依赖项(如果你在中国大陆,使用-i https://pypi.tuna.tsinghua.edu.cn/simple)
$blender_py -m pip install -r requirements.txt
$blender_py -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
$blender_py setup.py develop
第五步:安装轨迹跟踪模块(可选)
如果你想获得更平滑和更真实的轨迹,可以安装轨迹模块并在.yaml文件中将参数motion_agent-motion_tracking
设置为True。对于安装(包括代码和预训练模型),你可以在终端中运行以下命令。这需要Pytorch >= 1.13。
pip install frozendict gym==0.26.2 stable-baselines3[extra] protobuf==3.20.1
cd chatsim/foreground
git clone --recursive git@github.com:MARMOTatZJU/drl-based-trajectory-tracking.git -b v1.0.0
cd drl-based-trajectory-tracking
source setup-minimum.sh
然后当参数motion_agent-motion_tracking
设置为True时,每条轨迹将通过此模块进行跟踪,以使其更平滑和更真实。
第六步:安装McLight(可选)
如果你想训练天穹模型,请按照chatsim/foreground/mclight/skydome_lighting/readme.md
中的README进行操作。你可以在下一节下载我们提供的天穹HDRI并开始模拟。
用法
数据准备
下载和提取 Waymo 数据
mkdir data
mkdir data/waymo_tfrecords
mkdir data/waymo_tfrecords/1.4.2
下载 waymo perception dataset v1.4.2 到 data/waymo_tfrecords/1.4.2
文件夹。在谷歌云控制台中,正确的文件路径为 waymo_open_dataset_v_1_4_2/individual_files/training
或 waymo_open_dataset_v_1_4_2/individual_files/validation
。我们使用的一些静态场景列在这里。使用 Filter
进行快速查找,或者使用 gcloud 批量下载。
Ubuntu 18.04+ 上 gcloud CLI 的安装(需要 sudo)
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates gnupg curl
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
sudo apt-get update && sudo apt-get install google-cloud-cli # 对于 clash proxy 用户,你可能需要 https://blog.csdn.net/m0_53694308/article/details/134874757
训练集中的静态 waymo 场景
segment-11379226583756500423_6230_810_6250_810_with_camera_labels segment-12879640240483815315_5852_605_5872_605_with_camera_labels segment-13196796799137805454_3036_940_3056_940_with_camera_labels segment-14333744981238305769_5658_260_5678_260_with_camera_labels segment-14424804287031718399_1281_030_1301_030_with_camera_labels segment-16470190748368943792_4369_490_4389_490_with_camera_labels segment-17761959194352517553_5448_420_5468_420_with_camera_labels segment-4058410353286511411_3980_000_4000_000_with_camera_labels segment-10676267326664322837_311_180_331_180_with_camera_labels segment-1172406780360799916_1660_000_1680_000_with_camera_labels segment-13085453465864374565_2040_000_2060_000_with_camera_labels segment-13142190313715360621_3888_090_3908_090_with_camera_labels segment-13238419657658219864_4630_850_4650_850_with_camera_labels segment-13469905891836363794_4429_660_4449_660_with_camera_labels segment-14004546003548947884_2331_861_2351_861_with_camera_labels segment-14348136031422182645_3360_000_3380_000_with_camera_labels segment-14869732972903148657_2420_000_2440_000_with_camera_labels segment-15221704733958986648_1400_000_1420_000_with_camera_labels segment-15270638100874320175_2720_000_2740_000_with_camera_labels segment-15349503153813328111_2160_000_2180_000_with_camera_labels segment-15365821471737026848_1160_000_1180_000_with_camera_labels segment-15868625208244306149_4340_000_4360_000_with_camera_labels segment-16345319168590318167_1420_000_1440_000_with_camera_labels segment-16608525782988721413_100_000_120_000_with_camera_labels segment-16646360389507147817_3320_000_3340_000_with_camera_labels (已废弃) segment-3425716115468765803_977_756_997_756_with_camera_labels segment-3988957004231180266_5566_500_5586_500_with_camera_labels segment-8811210064692949185_3066_770_3086_770_with_camera_labels segment-9385013624094020582_2547_650_2567_650_with_camera_labels
验证集中的静态 waymo 场景
segment-10247954040621004675_2180_000_2200_000_with_camera_labels segment-10061305430875486848_1080_000_1100_000_with_camera_labels segment-10275144660749673822_5755_561_5775_561_with_camera_labels
如果你已经安装了 gcloud
,你可以通过以下命令下载上述 tfrecord 文件:
bash data_utils/download_waymo.sh data_utils/waymo_static_32.lst data/waymo_tfrecords/1.4.2
下载 tfrecord 文件后,你应该会看到如下的文件结构。如果你通过控制台下载 tfrecord 文件,你还会有前缀如 individual_files_training_
或 individual_files_validation_
。
data
|-- ...
|-- ...
`-- waymo_tfrecords
`-- 1.4.2
|-- segment-10247954040621004675_2180_000_2200_000_with_camera_labels.tfrecord
|-- segment-11379226583756500423_6230_810_6250_810_with_camera_labels.tfrecord
|-- ...
`-- segment-1172406780360799916_1660_000_1680_000_with_camera_labels.tfrecord
我们使用 data_utils/process_waymo_script.py
从 tfrecord 文件中提取图像、相机姿态、LiDAR 文件等:
cd data_utils
python process_waymo_script.py --waymo_data_dir=../data/waymo_tfrecords/1.4.2 --nerf_data_dir=../data/waymo_multi_view
这将生成数据文件夹 data/waymo_multi_view
。
重新校准 Waymo 数据
下载我们的重新校准文件
cd ../data
# 使用 metashape 的校准文件
# 你也可以手动下载 https://drive.google.com/file/d/1ms4yhjH5pEDMhyf_CfzNEYq5kj4HILki/view?usp=sharing
gdown 1ms4yhjH5pEDMhyf_CfzNEYq5kj4HILki
unzip recalibrated_poses.zip
rsync -av recalibrated_poses/ waymo_multi_view/
rm -r recalibrated_poses*
# 如果你使用3D高斯点积,还需要下载以下文件
# 使用 colmap 的校准文件,另外用于3DGS训练的点云
# 你也可以手动下载 https://huggingface.co/datasets/yifanlu/waymo_recalibrated_poses_colmap/tree/main
git lfs install
git clone https://huggingface.co/datasets/yifanlu/waymo_recalibrated_poses_colmap
git lfs pull # ~ 2GB
tar xvf waymo_recalibrated_poses_colmap.tar
cd ..
rsync -av waymo_recalibrated_poses_colmap/waymo_multi_view/ waymo_multi_view/
rm -rf waymo_recalibrated_poses_colmap
或自行重新校准
如果你想自行重新校准,需要使用 COLMAP 或 Metashape 校准 data/waymo_multi_view/{SCENE_NAME}/images
文件夹中的图像,并将它们转换回 Waymo 世界坐标。请按照 data_utils/README.md
中的教程进行操作。最终的相机外参和内参存储为 cam_meta.npy
(metashape 案例)或 colmap/sparse_undistorted/cam_meta.npy
(colmap 案例,3dgs 训练所需)。
最终的数据文件夹结构如下:
data
`-- waymo_multi_view
|-- ...
`-- segment-1172406780360799916_1660_000_1680_000_with_camera_labels
|-- 3d_boxes.npy # 第一帧的3d边界框
|-- images # chatsim 使用的 waymo 图像片段(通常为40帧)
|-- images_all # 完整的 waymo 图像(通常为198帧)
|-- map.pkl # 该场景的地图数据
|-- point_cloud # 第一帧的点云文件
|-- cams_meta.npy # 通过 metashape 校准并转换到 Waymo 坐标系的相机内外参数。
|-- cams_meta_metashape.npy # 通过 metashape 校准的相机内外参数(中间文件,比例相对,不用于仿真推理)
|-- cams_meta_colmap.npy # 通过 colmap 校准的相机内外参数(中间文件,比例相对,不用于仿真推理)
|-- cams_meta_waymo.npy # 来自原始 waymo 数据集的相机内外参数(中间文件,不用于仿真推理)
|-- shutters # 标准化曝光时间(均值=0,标准差=1)
|-- tracking_info.pkl # 跟踪数据
|-- vehi2veh0.npy # 从第i帧的车辆坐标到第一帧的车辆坐标的变换矩阵
|-- camera.xml # 来自 Metashape 的校准文件(中间文件,不用于仿真推理)
`-- colmap/sparse_undistorted/[images/cams_meta.npy/points3D_waymo.ply] # 来自 COLMAP 的校准文件(中间文件,仅在使用 3dgs 渲染时需要)
坐标系约定
point_cloud/000_xxx.pcd
中的点位于自车坐标系。camera.xml
中的相机姿态采用RDF约定(x-右,y-下,z-前)。cams_meta.npy
中的相机姿态采用RUB约定(x-右,y-上,z-后)。vehi2veh0.npy
车辆坐标转换,车辆坐标采用FLU约定(x-前,y-左,z-上),如Waymo论文所示。
cams_meta.npy
说明
cams_meta.shape = (N, 27)
cams_meta[:, 0:12]: 扁平化的相机姿态采用RUB,世界坐标是起始帧的车辆坐标。
cams_meta[:, 12:21]: 扁平化的相机内参
cams_meta[:, 21:25]: 畸变参数 [k1, k2, p1, p2]
cams_meta[:, 25:27]: 限界 [z_near, z_far](未使用)
下载Blender 3D资源
- Blender 资源。用以下命令下载并确保它们位于
data/blender_assets
。
# 假设你在ChatSim/data目录下
git lfs install
git clone https://huggingface.co/datasets/yifanlu/Blender_3D_assets
cd Blender_3D_assets
git lfs pull # 大约1GB,你可能会在完成 `git lfs pull` 时遇到 `Error updating the Git index: (1/1), 1.0 GB | 7.4 MB/s` 错误,这无关紧要,请继续。
cd ..
mv Blender_3D_assets/assets.zip ./
unzip assets.zip
rm assets.zip
rm -rf Blender_3D_assets
mv assets blender_assets
我们的3D模型收集自互联网。我们尽最大努力联系模型的作者并确保妥善处理版权问题(我们的开源项目不以盈利为目的)。如果你是模型的作者并认为我们的行为侵犯了你的版权,请立即联系我们,我们会删除该模型。
下载Skydome HDRI
- Skydome HDRI。用以下命令下载并确保它们位于
data/waymo_skydome
。
# 假设你在ChatSim/data目录下
git lfs install
git clone https://huggingface.co/datasets/yifanlu/Skydome_HDRI
mv Skydome_HDRI/waymo_skydome ./
rm -rf Skydome_HDRI
你也可以自己训练skydome估计网络。请到 chatsim/foreground/mclight/skydome_lighting
并按照 chatsim/foreground/mclight/skydome_lighting/readme.md
进行训练。
训练和模拟
根据安装情况选择训练 McNeRF
或 3D Gaussian Splatting
。
训练 McNeRF
cd chatsim/background/mcnerf
确保你有连接到 ../../../data
的 data
文件夹。如果没有,运行 ln -s ../../../data data
。
然后用以下命令训练你的模型
python scripts/run.py --config-name=wanjinyou_big \
dataset_name=waymo_multi_view case_name=${CASE_NAME} \
exp_name=${EXP_NAME} dataset.shutter_coefficient=0.15 mode=train_hdr_shutter +work_dir=$(pwd)
其中 ${CASE_NAME}
例如 segment-11379226583756500423_6230_810_6250_810_with_camera_labels
,${EXP_NAME}
可以是 exp_coeff_0.15
之类的任何名称。dataset.shutter_coefficient = 0.15
或 dataset.shutter_coefficient = 0.3
表现良好。
你可以简单地运行 bash train-1137.sh
脚本进行训练,以及 bash render_novel_view-1137.sh
进行测试。
训练 3D Gaussian Splatting
cd chatsim/background/gaussian-splatting
确保你有连接到 ../../../data
的 data
文件夹。如果没有,运行 ln -s ../../../data data
。
然后用以下命令训练你的模型
# 示例
SCENE_NAME=segment-11379226583756500423_6230_810_6250_810_with_camera_labels
python train.py --config configs/chatsim/original.yaml source_path=data/waymo_multi_view/${SCENE_NAME}/colmap/sparse_undistorted model_path=output/${SCENE_NAME}
# 渲染
python render.py -m output/${SCENE_NAME}
你可以简单地运行 bash train-1137.sh
脚本进行训练。
启动模拟
将API设置为环境变量。如果你有网络问题(特别是在中国大陆),还需要设置 OPENAI_API_BASE
。
export OPENAI_API_KEY=<你的API密钥>
现在你可以用以下命令启动模拟
python main.py -y ${CONFIG YAML} \
-p ${PROMPT} \
[-s ${SIMULATION NAME}]
-
${CONFIG YAML}
指定场景信息,yamls存储在config
文件夹中。例如config/waymo-1137.yaml
。 -
${PROMPT}
是你的输入提示,应放在引号中。例如add a straight driving car in the scene
。 -
${SIMULATION NAME}
决定保存结果时的文件夹名称,默认是demo
。
你可以试试
# 如果你训练了nerf
python main.py -y config/waymo-1137.yaml -p "Add a Benz G in front of me, driving away fast."
# 如果你训练了3DGS
python main.py -y config/3dgs-waymo-1137.yaml -p "Add a Benz G in front of me, driving away fast."
渲染结果保存在 results/1137_demo_%Y_%m_%d_%H_%M_%S
。如果 save_cache
在 config/waymo-1137.yaml
中启用,中间文件保存在 results/cache/1137_demo_%Y_%m_%d_%H_%M_%S
以便调试和可视化。
配置文件说明
config/waymo-1137.yaml
包含每个条目的详细说明。我们将提供一些额外说明。假设yaml读取到 config_dict
:
-
config_dict['scene']['is_wide_angle']
决定渲染视图。如果设置为True
,我们将扩展Waymo的内部参数(宽度 -> 3倍宽度)以渲染广角图像。另外请注意,is_wide_angle = True
伴随rendering_mode = 'render_wide_angle_hdr_shutter'
;is_wide_angle = False
伴随rendering_mode = 'render_hdr_shutter'
-
config_dict['scene']['frames']
渲染的帧数。 -
config_dict['agents']['background_rendering_agent']['nerf_quiet_render']
决定是否将mcnerf的输出打印到终端。设置为False
用于调试。 -
config_dict['agents']['foreground_rendering_agent']['use_surrounding_lighting']
定义我们是否使用周围的照明。目前use_surrounding_lighting = True
只在增加一辆车时生效,因为Blender中的HDRI是全局光照。很难为每辆车设置单独的HDRI。use_surrounding_lighting = True
也可能导致渲染速度变慢,因为它会调用nerf 渲染#frames
次。每个默认yaml中我们设置为False
。 -
config_dict['agents']['foreground_rendering_agent']['skydome_hdri_idx']
是我们从data/waymo_skydome/${SCENE_NAME}/
中选择的文件名(不含拓展名)。默认是第一个帧('000'
)的skydome HDRI估计,但你可以手动选择另一个帧的更好估计。要查看HDRI,我们推荐使用vscode的VERIV和桌面环境的 tev。
代办事项
- 发布arxiv论文
- 发布代码和模型
- 运动跟踪模块 drl-based-trajectory-tracking (平滑轨迹)
- 多轮包装代码
引用
@InProceedings{wei2024editable,
title={Editable Scene Simulation for Autonomous Driving via Collaborative LLM-Agents},
author={Yuxi Wei and Zi Wang and Yifan Lu and Chenxin Xu and Changxing Liu and Hao Zhao and Siheng Chen and Yanfeng Wang},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
month={June},
year={2024},
}