Skip to content

Commit f532c9e

Browse files
author
Robin Chen
committed
Merge branch 'gl-dev' into main
2 parents eb93609 + e1c3011 commit f532c9e

File tree

70 files changed

+200007
-127
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+200007
-127
lines changed

CHANGELOG

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
## v0.2.1 (2021.11.18)
2+
- Add NoCrash Carla099
3+
- Add bev dataset
4+
- Add Carla AD Challenge scenarios and routes
5+
- Add LBC data collection and BeV training doc
6+
- Add Latent RL BeV and RL training doc
7+
- Add validation in LBC training
8+
- Update Benchmark datasaver
9+
- Update VAE model
10+
- Update LBC Image policy learn mode
11+
- Fix bug in benchmark collector
12+
- Fix visualizer not closed after done
13+
- Fix not alived sensor killed bug
14+
15+
116
## v0.2.0 (2021.11.1)
217
- Update DI-engine to version 0.2.0
318
- Reformat CIL to CILRS

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<img src="./docs/figs/DI-drive.png" width="200" alt="icon"/>
44

5-
Updated on 2021.11.01 DI-drive-v0.2.0 (beta)
5+
Updated on 2021.11.18 DI-drive-v0.2.1 (beta)
66

77
DI-drive - Decision Intelligence Platform for Autonomous Driving simulation.
88

core/data/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
from .cilrs_dataset import CILRSDataset
44
from .cict_dataset import CictDataset
55
from .lbc_dataset import LBCBirdViewDataset, LBCImageDataset
6+
from .bev_vae_dataset import BeVVAEDataset
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
79 227
2+
105 21
3+
129 88
4+
19 105
5+
231 212
6+
252 192
7+
222 120
8+
202 226
9+
11 17
10+
79 247
11+
3 177
12+
191 114
13+
235 240
14+
4 54
15+
17 207
16+
223 212
17+
154 66
18+
187 123
19+
129 56
20+
114 6
21+
40 192
22+
176 123
23+
121 187
24+
238 225
25+
219 154
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
66 19
2+
6 71
3+
66 28
4+
46 32
5+
25 59
6+
32 9
7+
43 72
8+
54 14
9+
26 50
10+
38 69
11+
75 24
12+
19 82
13+
65 6
14+
71 29
15+
59 16
16+
6 66
17+
83 56
18+
69 71
19+
82 28
20+
8 17
21+
19 12
22+
39 18
23+
51 8
24+
24 36
25+
64 73

core/data/benchmark_dataset_saver.py

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import glob
44
import numpy as np
55
from pathlib import Path
6-
from typing import Callable, List, Dict
6+
from typing import Callable, List, Dict, Optional
77

88
from core.utils.data_utils.data_writter import write_json, write_episode_lmdb
99
from core.utils.others.image_helper import save_image, is_image
@@ -28,27 +28,26 @@ class BenchmarkDatasetSaver():
2828
- save_dir (str): Dataset folder path.
2929
- obs_cfg (Dict): Observation config dict in simulator.
3030
- post_process_fn (Callable, optional): Post-process function defined by user. Defaults to None.
31+
- lmdb_obs (List, optional): Observation types that saved as lmdb rather than image, default to ['lidar', 'bev']
3132
3233
:Interfaces: make_dataset_path, save_episodes_data, make_index
3334
"""
3435

35-
def __init__(self, save_dir: str, obs_cfg: Dict, post_process_fn: Callable = None):
36-
"""
37-
[summary]
38-
39-
:Arguments:
40-
- save_dir (str): [description]
41-
- obs_cfg (Dict): [description]
42-
- post_process_fn (Callable, optional): [description]. Defaults to None.
43-
"""
36+
def __init__(
37+
self,
38+
save_dir: str,
39+
obs_cfg: Dict,
40+
post_process_fn: Optional[Callable] = None,
41+
lmdb_obs: Optional[List] = ['lidar', 'birdview'],
42+
) -> None:
4443
self._save_dir = save_dir
4544
self._obs_cfg = obs_cfg
4645
self._post_process_fn = post_process_fn
47-
self._lmdb_obs_type = []
46+
self._lmdb_obs_type = lmdb_obs
4847
if self._post_process_fn is None:
4948
self._post_process_fn = default_post_process_fn
5049

51-
def save_episodes_data(self, episodes_data: List, start_episode: int = 0):
50+
def save_episodes_data(self, episodes_data: List, start_episode: int = 0) -> None:
5251
"""
5352
Save data from several episodes sampled from collector, with 'env_param' and 'data' key
5453
saved in each episode.
@@ -93,7 +92,7 @@ def save_episodes_data(self, episodes_data: List, start_episode: int = 0):
9392
data.append((measurements, sensor_data, others))
9493
BenchmarkDatasetSaver._save_episode_data(episode_path, data, self._lmdb_obs_type)
9594

96-
def make_dataset_path(self, dataset_metainfo: Dict = dict()):
95+
def make_dataset_path(self, dataset_metainfo: Dict = dict()) -> None:
9796
"""
9897
Make dataset folder and write dataset meta infomation into a json file.
9998
@@ -111,20 +110,18 @@ def make_dataset_path(self, dataset_metainfo: Dict = dict()):
111110
obs_item = obs_item.copy()
112111
obs_item.pop('name')
113112
obs_metainfo.update({obs_name: obs_item})
114-
if obs_item['type'] in ['lidar', 'bev']:
115-
self._lmdb_obs_type.append(obs_name)
116113

117114
dataset_metainfo.update({'obs': obs_metainfo})
118115

119116
write_json(os.path.join(self._save_dir, 'metainfo.json'), dataset_metainfo)
120117

121118
@staticmethod
122-
def _make_episode_path(episode_path, env_params):
119+
def _make_episode_path(episode_path, env_params) -> None:
123120
os.makedirs(episode_path, exist_ok=True)
124121
write_json(os.path.join(episode_path, 'episode_metainfo.json'), env_params)
125122

126123
@staticmethod
127-
def _save_episode_data(episode_path, data, lmdb_obs_type=None):
124+
def _save_episode_data(episode_path, data, lmdb_obs_type=None) -> None:
128125
write_episode_lmdb(episode_path, data, lmdb_obs_type)
129126
for i, x in enumerate(data):
130127
sensor_data = x[1]
@@ -134,7 +131,7 @@ def _save_episode_data(episode_path, data, lmdb_obs_type=None):
134131
else:
135132
save_image(os.path.join(episode_path, "%s_%05d.png" % (k, i)), v)
136133

137-
def make_index(self, command_index: int = 11):
134+
def make_index(self, command_index: int = 11) -> None:
138135
"""
139136
Make an index txt file to save all the command of each frame in dataset.
140137

core/data/bev_vae_dataset.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import os
2+
import lmdb
3+
import cv2
4+
import numpy as np
5+
from typing import Any, Dict
6+
import torch
7+
from torchvision import transforms
8+
from torch.utils.data import Dataset
9+
10+
PIXEL_OFFSET = 10
11+
12+
13+
class BeVVAEDataset(Dataset):
14+
15+
def __init__(
16+
self,
17+
root_dir,
18+
img_size=320,
19+
crop_size=192,
20+
crop_x_jitter=5,
21+
crop_y_jitter=5,
22+
angle_jitter=5,
23+
down_ratio=4,
24+
max_frames=None
25+
) -> None:
26+
self._root_dir = root_dir
27+
self._img_size = img_size
28+
self._crop_size = crop_size
29+
self._crop_x_jitter = crop_x_jitter
30+
self._crop_y_jitter = crop_y_jitter
31+
self._angle_jitter = angle_jitter
32+
self._down_ratio = down_ratio
33+
self._max_frames = max_frames
34+
self.bird_view_transform = transforms.ToTensor()
35+
36+
epi_folder = [x for x in os.listdir(root_dir) if x.startswith('epi')]
37+
38+
self._lmdb_list = []
39+
self._idx_list = []
40+
41+
for item in epi_folder:
42+
lmdb_file = lmdb.open(os.path.join(root_dir, item, 'measurements.lmdb')).begin(write=False)
43+
max_len = int(lmdb_file.get('len'.encode()))
44+
for i in range(max_len):
45+
self._lmdb_list.append(lmdb_file)
46+
self._idx_list.append(i)
47+
48+
def __len__(self):
49+
return len(self._lmdb_list)
50+
51+
def __getitem__(self, index) -> Any:
52+
lmdb_txn = self._lmdb_list[index]
53+
episode_index = self._idx_list[index]
54+
55+
birdview = np.frombuffer(lmdb_txn.get(('birdview_%05d' % episode_index).encode()),
56+
np.uint8).reshape(320, 320, 7) * 255
57+
58+
delta_angle = np.random.randint(-self._angle_jitter, self._angle_jitter + 1)
59+
dx = np.random.randint(-self._crop_x_jitter, self._crop_x_jitter + 1)
60+
dy = np.random.randint(0, self._crop_y_jitter + 1) - PIXEL_OFFSET
61+
62+
pixel_ox = 160
63+
pixel_oy = 260
64+
65+
birdview = cv2.warpAffine(
66+
birdview,
67+
cv2.getRotationMatrix2D((pixel_ox, pixel_oy), delta_angle, 1.0),
68+
birdview.shape[1::-1],
69+
flags=cv2.INTER_LINEAR
70+
)
71+
72+
# random cropping
73+
center_x, center_y = 160, 260 - self._crop_size // 2
74+
birdview = birdview[dy + center_y - self._crop_size // 2:dy + center_y + self._crop_size // 2,
75+
dx + center_x - self._crop_size // 2:dx + center_x + self._crop_size // 2]
76+
77+
birdview = self.bird_view_transform(birdview)
78+
79+
return {'birdview': birdview}

core/data/carla_benchmark_collector.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,9 @@ def collect(
257257
reset_param_index = self._collect_suite_index_dict[next_suite]
258258
reset_param = self._collect_suite_reset_params[next_suite][reset_param_index]
259259
self._collect_suite_index_dict[next_suite] += 1
260-
if reset_param_index >= len(self._collect_suite_reset_params[next_suite]):
261-
self._collect_suite_index_dict[next_suite] = 0
260+
self._collect_suite_index_dict[next_suite] %= len(
261+
self._collect_suite_reset_params[next_suite]
262+
)
262263
running_env_params[env_id] = reset_param
263264
self._env_manager.reset({env_id: reset_param})
264265
self._traj_cache[env_id].clear()

core/data/casezoo/configs/route01.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
}
1515
}
1616
],
17-
"scenario_type": "FollowLeadingVehicle"
17+
"scenario_type": "FollowLeadingVehicleNew"
1818
},
1919
{
2020
"available_event_configurations": [

core/data/casezoo/configs/route02.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
}
1515
}
1616
],
17-
"scenario_type": "ControlLoss"
17+
"scenario_type": "ControlLossNew"
1818
},
1919
{
2020
"available_event_configurations": [
@@ -28,7 +28,7 @@
2828
}
2929
}
3030
],
31-
"scenario_type": "FollowLeadingVehicle"
31+
"scenario_type": "FollowLeadingVehicleNew"
3232
}
3333
]
3434
}

0 commit comments

Comments
 (0)