https://github.com/justin900429/autonomous_driving_with_diffusion_model
Using diffusion model to reach controllable end-to-end driving with Carla simulation environment.
https://github.com/justin900429/autonomous_driving_with_diffusion_model
autonomous-driving carla-simulator controllable-generation deep-learning diffusion-model end-to-end-driving pytorch
Last synced: 10 months ago
JSON representation
Using diffusion model to reach controllable end-to-end driving with Carla simulation environment.
- Host: GitHub
- URL: https://github.com/justin900429/autonomous_driving_with_diffusion_model
- Owner: Justin900429
- Created: 2024-05-28T16:57:15.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-18T13:25:41.000Z (11 months ago)
- Last Synced: 2025-03-18T13:46:51.383Z (11 months ago)
- Topics: autonomous-driving, carla-simulator, controllable-generation, deep-learning, diffusion-model, end-to-end-driving, pytorch
- Language: Python
- Homepage:
- Size: 137 MB
- Stars: 10
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Autonomous Driving with Diffusion Model
This repo is made to acheive controllable end-to-end autonomous driving through the Diffusion model. We provide the code for training the model and interacting with the model in the Carla simulator. We also provide the pre-trained model for users to evaluate the performance on the Carla leaderboard 1.0.
| No Guidance | Classifier-free Guidance | Classifier Guidance |
| :-----------------------------------------: | :-------------------------------------------------------------: | :---------------------------------------------------: |
|  |  |  |
## A. Setup 🚀
Please ensure you have installed the Carla simulator and the Python API.
> [!WARNING]
> You should checkout your own cuda version and install your own PyTorch version. We provide an example of PyTorch 2.2.2 with cuda 12.1.
```shell
git clone https://github.com/Justin900429/carla_diffusion.git
conda create -n carla-diffusion python=3.8 -y
conda activate carla-diffusion
conda install pytorch==2.2.2 torchvision==0.17.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
pip install -r requirements.txt
```
If you would like to collect data by yourself, please install the Carla Python API and [Carla simulator](https://github.com/carla-simulator/carla):
```shell
# Carla version < 0.9.12
easy_install install {CARLA_ROOT}/PythonAPI/carla/dist/carla-{CARLA_VERSION}-py{CHECK_THIS_VERSION}-linux-x86_64.egg
# Carla version >= 0.9.12
pip install carla=={CARLA_VERSION}
```
Afterwards, please modify the `carla_sh_path` in `config/train_rl.yaml` to yours.
## B. Data setup 📊
>[!NOTE]
>Users can choose to download the provided data or collect the data by themselves.
### (Option 1) Downloading the data 📦
```shell
wget https://huggingface.co/datasets/Justin900/carla_image_and_path/resolve/main/data.zip
unzip -q data.zip && rm data.zip
```
### (Option 2) Collecting the data 📡
```shell
python misc/data_collect.py --save-path {PLACE_TO_SAVE_DATA} --save-num {NUM_OF_DATA}
# Concrete example
python misc/data_collect.py --save-path data/ --save-num 5000
```
> If you would like to collect data under `off-screen` mode, please add the flag `--off-screen`.
If you find the data collection process fail during the simulation, please try the following way (this always run in `off-screen` mode):
```shell
python misc/collect_loop.py --save-path {PLACE_TO_SAVE_DATA} --save-num {NUM_OF_DATA}
# Concrete example
python misc/collect_loop.py --save-path data/ --save-num 5000
```
This helps restart the simulation when the simulation is crashed but the number of data does not reach the target.
## C. Usage 🛠
### C-1. Model training 🧠
Users can choose the config file as shown below to train the model.
| Config path | Description |
| ------------------------------------------- | ---------------------------------------------------------- |
| `configs/default.yaml` | Train the model without any guidance. (For ablation study) |
| `configs/guidance/free_guidance.yaml` | Train the model with classifier-free guidance. |
| `configs/guidance/classifier_guidance.yaml` | Train the model with classifier guidance. |
```shell
# with single-gpu
python train.py --config {CONFIG_PATH}
# with multi-gpus
accelerate launch --multi_gpu --num_processes={NUM_OF_GPU} train.py --config {CONFIG_PATH}
```
### C-2. Interact with the model 🕹
>[!TIP]
> Check the description above to choose the config file.
```shell
python interact.py --config {CONFIG_PATH} --plot-on-world --save-bev-path {PATH_TO_SAVE_BEV_IMAGES} --opts EVAL.CHECKPOINT final.pth
# Concrete example
# 1. without any guidance
python interact.py --config configs/default.yaml --plot-on-world --save-bev-path bev_images --opts EVAL.CHECKPOINT final.pth
# 2. with classifier-free guidance
python interact.py --config configs/guidance/free_guidance.yaml --plot-on-world --save-bev-path bev_images --opts EVAL.CHECKPOINT final.pth
# 3. with classifier guidance
python interact.py --config configs/guidance/classifier_guidance.yaml --plot-on-world --save-bev-path bev_images --opts EVAL.CHECKPOINT final.pth
```
> [!NOTE]
> Both `--plot-on-world` and `--save-bev-path` are optional.
## D. Leaderboard 🏆
### (Optional) D-0. Download the pre-trained model 📦
We provide our pre-trained model for users to evaluate the performance on the Carla leaderboard.
| Model | Link |
| :----------------------------------- | :--------------------------------------------------------------------------------------------- |
| Classifier-free guidance | [link](https://github.com/Justin900429/autonomous_driving_with_diffusion_model/releases/download/v0.0.0/free_guidance_plus.pth) |
| Classifier guidance | [link](https://github.com/Justin900429/autonomous_driving_with_diffusion_model/releases/download/v0.0.0/classifier_guidance.pth) |
| Classifier guidance (with more data) | [link](https://github.com/Justin900429/autonomous_driving_with_diffusion_model/releases/download/v0.0.0/classifier_guidance_plus.pth) |
```shell
mkdir checkpoints
# Classifier-free guidance
wget https://github.com/Justin900429/autonomous_driving_with_diffusion_model/releases/download/v0.0.0/free_guidance_plus.pth -O checkpoints/free_guidance.pth
# Classifier guidance
wget https://github.com/Justin900429/autonomous_driving_with_diffusion_model/releases/download/v0.0.0/classifier_guidance.pth -O checkpoints/classifier_guidance.pth
# Classifier gudiance (with more training data)
wget https://github.com/Justin900429/autonomous_driving_with_diffusion_model/releases/download/v0.0.0/classifier_guidance_plus.pth -O checkpoints/classifier_guidance_plus.pth
```
### D-1. Environment setup
>[!TIP]
> This environment is different from the previous one and requires python 3.7 with Carla 0.9.10.
```shell
conda create -n carla-leaderboard python=3.7 -y
conda activate carla-leaderboard
conda install pytorch==1.13.0 torchvision==0.14.0 pytorch-cuda=11.7 -c pytorch -c nvidia -y
pip install -r requirements-leaderboard.txt
```
### D-2. Run the evaluator
Please check the below table and command to run different benchmarks.
| Benchmark | Scenario file | Route file |
| --------- | ------------------------------------------------ | ------------------------------------------------------ |
| Longest 6 | `leaderboard/data/scenarios/eval_scenarios.json` | `leaderboard/data/evaluation_routes/longest6_tiny.xml` |
```shell
# Open this in another terminal
bash {carla_server_root}/CarlaUE4.sh --world-port=2000 -opengl
bash leaderboard/scripts/run_evaluation.sh
# Concrete example (take longest 6 as an example)
bash leaderboard/scripts/run_evaluation.sh \
/path/to/carla/0.9.10\
leaderboard/data/scenarios/eval_scenarios.json \
leaderboard/data/evaluation_routes/longest6_tiny.xml \
configs/guidance/free_guidance.yaml \
free_guidance_longest_6 \
free_guidance_longest_6/result_longest_6.json
```
>[!IMPORTANT]
> Users should specify the checkpoint directly in the agent config file (see C-1) by setting `EVAL.CHECKPOINT`.
```yaml
...
EVAL:
CHECKPOINT: /path/to/checkpoint.pth
```
### D-3. Generate the statistics
After obtaining the `` results, users can generate the statistics by running the following command:
```shell
python e2e_driving/statistics.py --json-file
# Concrete example
python e2e_driving/statistics.py --json-file free_guidance_longest_6/result_longest_6.json
```
Approach
Score
Collision
Red light
Vehicle Blocked
Outside Road
Composed
Penalty
Route
Layout
Pedestrian
Vehicle
Classifier-free guidance
0.00
0.00
100.00
0.53
0.76
8.77
2.60
0.00
0.17
classifier guidance
2.66
0.10
72.80
0.25
0.00
4.53
2.82
0.37
0.00
classifier guidance*
14.89
0.23
84.84
0.00
0.00
0.91
1.90
0.23
0.00
## Acknowledgement 🙏
* Our environment is adapted from [Carla Roach](https://github.com/zhejz/carla-roach).
* The project template is obtained from [deep-learning-template](https://github.com/Justin900429/deep-learning-template).
* The agent for carla leaderboard is adapted from [TCP](https://github.com/OpenDriveLab/TCP).