From 4535d52b4f468a85e14413dc8f360e48f422d7a2 Mon Sep 17 00:00:00 2001 From: Kin Date: Mon, 11 Aug 2025 22:00:46 +0200 Subject: [PATCH 1/7] conf(nus): update ground segmentation in nuscenes. --- conf/others/nuscenes.toml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 conf/others/nuscenes.toml diff --git a/conf/others/nuscenes.toml b/conf/others/nuscenes.toml new file mode 100644 index 0000000..f77b06e --- /dev/null +++ b/conf/others/nuscenes.toml @@ -0,0 +1,31 @@ + +[important] +height = 1.85 # sensor height. 雷达传感器高度,主要是+offset + +# 整个雷点点云以自己为中心 分为多少个segment,每个segment又分成多少个bin +[segments] +r_min = 0.1 # minimum point distance. 感兴趣的区域 +r_max = 80 # maximum point distance. +n_segments = 360 # number of radial segments. +n_bins = 160 # number of radial bins. + + +[ground] +# 直线的 slope 斜率,一个seg里拟合的线斜率 +min_slope = 0.0 # minimum slope of a ground line. [T_m_small] +max_slope = 0.1 # maximum slope of a ground line. [T_m] +# 如果拟合点超过这个 long threshold,判断其 height 变化是否超过 max_long_height +long_threshold = 2.0 # Distance at which points are considered far from each other. [T_d_prev] +max_long_height = 0.3 # maximum height change to previous point in long line. [T_b] +# 如果没有超过 long threshold,判断现在拟合的点与fitline高度变化是否超过 max_start_height +max_start_height = 0.2 # Maximum heigh of starting line to be labelled ground. +# 最大的拟合误差,超过这个误差的点不会被加入 line 拟合 +max_fit_error = 0.1 # maximum error of a point during line fit. [T_RMSE: will sqaure inside code.] + +# 判断是否是地面点的时候,需要满足的条件: +max_dist_to_line = 0.2 # maximum vertical distance of point to line to be considered ground. [T_d_ground] +line_search_angle = 2.0 # How far to search for a line in angular direction [rad]. + +[general] +n_threads = 8 # number of threads for parallel processing. +verbose = false # if you don't want to see every output, set this to false. \ No newline at end of file From b5298359f88ab663ea80c6ad9b2da8e354c6d5e1 Mon Sep 17 00:00:00 2001 From: Kin Date: Mon, 11 Aug 2025 22:00:46 +0200 Subject: [PATCH 2/7] conf(nus): update ground segmentation in nuscenes. --- conf/others/nuscenes.toml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 conf/others/nuscenes.toml diff --git a/conf/others/nuscenes.toml b/conf/others/nuscenes.toml new file mode 100644 index 0000000..f77b06e --- /dev/null +++ b/conf/others/nuscenes.toml @@ -0,0 +1,31 @@ + +[important] +height = 1.85 # sensor height. 雷达传感器高度,主要是+offset + +# 整个雷点点云以自己为中心 分为多少个segment,每个segment又分成多少个bin +[segments] +r_min = 0.1 # minimum point distance. 感兴趣的区域 +r_max = 80 # maximum point distance. +n_segments = 360 # number of radial segments. +n_bins = 160 # number of radial bins. + + +[ground] +# 直线的 slope 斜率,一个seg里拟合的线斜率 +min_slope = 0.0 # minimum slope of a ground line. [T_m_small] +max_slope = 0.1 # maximum slope of a ground line. [T_m] +# 如果拟合点超过这个 long threshold,判断其 height 变化是否超过 max_long_height +long_threshold = 2.0 # Distance at which points are considered far from each other. [T_d_prev] +max_long_height = 0.3 # maximum height change to previous point in long line. [T_b] +# 如果没有超过 long threshold,判断现在拟合的点与fitline高度变化是否超过 max_start_height +max_start_height = 0.2 # Maximum heigh of starting line to be labelled ground. +# 最大的拟合误差,超过这个误差的点不会被加入 line 拟合 +max_fit_error = 0.1 # maximum error of a point during line fit. [T_RMSE: will sqaure inside code.] + +# 判断是否是地面点的时候,需要满足的条件: +max_dist_to_line = 0.2 # maximum vertical distance of point to line to be considered ground. [T_d_ground] +line_search_angle = 2.0 # How far to search for a line in angular direction [rad]. + +[general] +n_threads = 8 # number of threads for parallel processing. +verbose = false # if you don't want to see every output, set this to false. \ No newline at end of file From dd67d5f71983a0dfaf724b5bca0855c7c13253fe Mon Sep 17 00:00:00 2001 From: Kin Date: Sat, 16 Aug 2025 21:50:31 +0200 Subject: [PATCH 3/7] feat(data): core extraction py file for nuscenes. * update related README also. * add NusMap to argoverse 2 for consistent evaluation afterward. --- assets/docs/nuscenes.png | Bin 0 -> 147499 bytes dataprocess/README.md | 16 +- dataprocess/extract_nus.py | 323 ++++++++++++++++++++++++++++++++++- dataprocess/misc_data.py | 62 ++++++- src/models/basic/__init__.py | 70 +++++++- src/utils/__init__.py | 29 +++- tools/visualization_rerun.py | 2 +- 7 files changed, 482 insertions(+), 20 deletions(-) create mode 100644 assets/docs/nuscenes.png diff --git a/assets/docs/nuscenes.png b/assets/docs/nuscenes.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed1ba0ef0312d83460b9927798e95c524fa5bc6 GIT binary patch literal 147499 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

qP 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

4B2)26N`IT<%Pdq$tO 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 d`OK2;JC np.ndarray: + """ + Remove ego points from a point cloud. + :param pc: point cloud to remove ego points from, shape: (N, 4) + :param length_threshold: Length threshold. + :param width_threshold: Width threshold. + :return: point cloud without ego points, shape: (N, 4). + """ + # NuScenes LiDAR position + # x: left --> width_threshold; y: front --> length_threshold; z: up --> height_threshold + x_filt = np.logical_and(pc[:, 0] > -width_threshold, pc[:, 0] < width_threshold) + y_filt = np.logical_and(pc[:, 1] > -length_threshold, pc[:, 1] < length_threshold) + not_close = np.logical_not(np.logical_and(x_filt, y_filt)) + not_close = not_close.astype(bool) + return pc[not_close] + +def _load_points_from_file(filename: str) -> np.ndarray: + """ + Private function to load point cloud from file. + :param filename: Path of the point cloud file. + :return: Point cloud as numpy array. + """ + pc = np.fromfile(filename, dtype=np.float32) + pc = pc.reshape((-1, 5))[:, :4] + return pc + +def get_pose(nusc, sweep_data): + # pose from lidar to world + ego2lidar = nusc.get('calibrated_sensor', sweep_data['calibrated_sensor_token']) + world2ego = nusc.get('ego_pose', sweep_data['ego_pose_token']) + ego2lidar_np = transform_matrix(ego2lidar['translation'], Quaternion(ego2lidar['rotation'])) + world2ego_np = transform_matrix(world2ego['translation'], Quaternion(world2ego['rotation'])) + return np.dot(world2ego_np, ego2lidar_np) + +def if_annotated_frame(sample_ann_dict, ts0): + gt_flow_flag = False + for key, anno_value in sample_ann_dict.items(): + if ts0 in anno_value.keys(): + gt_flow_flag = True # if there is one anno have gt vel then set to compute flow. + break + return gt_flow_flag + +def _resample_data(nusc, sample_data, sample_ann_dict, resample2frequency=10): + """ + NOTE(Qingwen) - 2025-05-18: + We always want to start from the first GT frame, and then resample the data! So we have as many GT frames as possible... + """ + sweep_data_lst, timestamps_lst = [], [] + skipFrame = int(20 / resample2frequency) # since nuscenes sweep at 20Hz, we want to resample to 10Hz + cnt = 0 + + # Find the first GT frame + while sample_data['next'] != '': + ts0 = sample_data['timestamp'] + gt_flow_flag = if_annotated_frame(sample_ann_dict, ts0) + + if gt_flow_flag: + # Found first GT frame, add it and break + sweep_data_lst.append(sample_data) + timestamps_lst.append(ts0) + sample_data = nusc.get('sample_data', sample_data['next']) + cnt = 1 # Reset counter after finding first GT + break + + sample_data = nusc.get('sample_data', sample_data['next']) + + # Continue processing from first GT frame + while sample_data['next'] != '': + ts0 = sample_data['timestamp'] + gt_flow_flag = if_annotated_frame(sample_ann_dict, ts0) + + # Always include GT frames + if gt_flow_flag: + sweep_data_lst.append(sample_data) + timestamps_lst.append(ts0) + sample_data = nusc.get('sample_data', sample_data['next']) + cnt = 1 # Reset counter after each GT frame + elif cnt % skipFrame == 0: + # Include non-GT frames according to sampling rate + sweep_data_lst.append(sample_data) + timestamps_lst.append(ts0) + sample_data = nusc.get('sample_data', sample_data['next']) + cnt += 1 + else: + # Skip this frame + sample_data = nusc.get('sample_data', sample_data['next']) + cnt += 1 + return sweep_data_lst, timestamps_lst + +def process_log(nusc_mode, data_dir: Path, scene_num_id: int, output_dir: Path, resample2frequency=10, n: Optional[int] = None) : + + def create_group_data(group, pc, pose, gm = None, flow_0to1=None, flow_valid=None, flow_category=None, flow_instance=None, ego_motion=None): + group.create_dataset('lidar', data=pc.astype(np.float32)) + group.create_dataset('pose', data=pose.astype(np.float64)) + group.create_dataset('ground_mask', data=gm.astype(bool)) + if ego_motion is not None: + group.create_dataset('ego_motion', data=ego_motion.astype(np.float32)) + if flow_0to1 is not None: + # ground truth flow information + group.create_dataset('flow', data=flow_0to1.astype(np.float32)) + group.create_dataset('flow_is_valid', data=flow_valid.astype(bool)) + group.create_dataset('flow_category_indices', data=flow_category.astype(np.uint8)) + group.create_dataset('flow_instance_id', data=flow_instance.astype(np.int16)) + + def compute_flow_simple(pc0, pose0, pose1, ts0, ts1, sample_ann_dict, dclass): + # compute delta transform between pose0 and pose1 + ego1_SE3_ego0 = npcal_pose0to1(pose0, pose1) + # flow due to ego motion + flow = np.zeros_like(pc0[:,:3]) + flow = pc0[:,:3] @ ego1_SE3_ego0[:3,:3].T + ego1_SE3_ego0[:3,3] - pc0[:,:3] # pose flow + + valid = np.ones(len(pc0), dtype=np.bool_) + classes = np.zeros(len(pc0), dtype=np.uint8) + instances = np.zeros(len(pc0), dtype=np.int16) + + delta_t = (ts1 - ts0) * 1e-6 + world_pc0 = pc0[:,:3] @ pose0[:3,:3].T + pose0[:3,3] + id_ = 0 + for key, anno_value in sample_ann_dict.items(): + # return: . Velocity in x/y/z direction in m/s. + if ts0 not in anno_value.keys(): + continue + ann_vel = anno_value[ts0]['vel'] + if np.isnan(ann_vel).any(): + continue + # previous x/y/z velocity is on world frame, need to transform to ego frame + ann_vel = ann_vel @ pose0[:3,:3] + box0 = anno_value[ts0]['bbx'] + cls = anno_value[ts0]['class'] + + # FIXME: compute points_in_box mask, expansion factor 1.1 here. + points_in_box_mask = points_in_box(box0, world_pc0[:,:3].T, wlh_factor=1.1) + classes[points_in_box_mask] = CATEGORY_TO_INDEX[NusNamMap[cls]] + if np.sum(points_in_box_mask) > 5: + obj_flow = np.ones_like(pc0[points_in_box_mask,:3]) * ann_vel * delta_t + flow[points_in_box_mask] += obj_flow + instances[points_in_box_mask] = (dclass[id_]+1) + id_ += 1 + else: + valid[points_in_box_mask] = False + + return {'flow_0_1': flow, + 'valid_0': valid, 'classes_0': classes, + 'ego_motion': ego1_SE3_ego0, + 'flow_instance_id': instances} + + nusc = NuScenes(dataroot=data_dir, version=nusc_mode, verbose=False) + scene = nusc.scene[scene_num_id] + log_id = scene['name'] + + # In nuscenes, samples are annotated at 2 Hz and sweeps at 20 Hz. + sample_data_lst = [] + for sample in nusc.sample: + if sample['scene_token'] != scene['token']: + continue + else: + sample_data_lst.append(sample) + sample_ann_dict = dict() + + # step: create a dictionary, with keys denoting the annotation token, + # and value denoting a list with annotation value and timestamp + for sample in sample_data_lst: + for ann_token in sample['anns']: + annotation = nusc.get('sample_annotation', ann_token) + if annotation['instance_token'] not in sample_ann_dict.keys(): + sample_ann_dict[annotation['instance_token']] = {} + # each annotation is list with attr + sample_ann_dict[annotation['instance_token']][sample['timestamp']]= { + 'bbx': Box(annotation['translation'], annotation['size'], Quaternion(annotation['rotation'])), \ + 'vel': nusc.box_velocity(ann_token).tolist(), \ + 'class': annotation['category_name']} + + # step note down timestamps for sweeps (interpolation points) and samples (at which data for interpolation exists) + now_sample_token_str = scene['first_sample_token'] + sample = nusc.get('sample', now_sample_token_str) + sample_data = nusc.get('sample_data', sample['data']['LIDAR_TOP']) + sweep_data_lst, timestamps = _resample_data(nusc, sample_data, sample_ann_dict, resample2frequency) + + if check_h5py_file_exists(output_dir/f'{log_id}.h5', timestamps): + print(f'{log_id} already exists and all timestamps are , skip...') + return + + dclass = defaultdict(lambda: len(dclass)) + mygroundseg = ground_seg(GROUNDSEG_config) + with h5py.File(output_dir/f'{log_id}.h5', 'a') as f: + for cnt, sweep_data in enumerate(sweep_data_lst): + ts0 = sweep_data['timestamp'] + # lidar point cloud + pc0 = _load_points_from_file(os.path.join(nusc.dataroot, sweep_data['filename'])) + pc0 = remove_ego_points(pc0) + if pc0.shape[0] < 10: + print(f'{log_id}/{ts0} has no points....') + continue + is_ground_0 = mygroundseg.run(pc0[:, :3]) + pose0 = get_pose(nusc, sweep_data) + + if cnt == len(sweep_data_lst) - 1: + group = f.create_group(str(ts0)) + create_group_data(group=group, pc=pc0, gm=is_ground_0.astype(np.bool_), pose=pose0.astype(np.float32)) + else: + sweep_data_next = sweep_data_lst[cnt+1] + ts1 = sweep_data_next['timestamp'] + pose1 = get_pose(nusc, sweep_data_next) + gt_flow_flag = if_annotated_frame(sample_ann_dict, ts0) + + group = f.create_group(str(ts0)) + if not gt_flow_flag: # no annotations, only save data + create_group_data(group=group, pc=pc0, gm=is_ground_0.astype(np.bool_), pose=pose0.astype(np.float32), \ + ego_motion=(np.linalg.inv(pose1) @ pose0).astype(np.float32)) + else: # compute sceneflow + scene_flow = compute_flow_simple(pc0, pose0, pose1, ts0, ts1, sample_ann_dict, dclass) + create_group_data(group=group, pc=pc0, gm=is_ground_0.astype(np.bool_), pose=pose0.astype(np.float32), + flow_0to1=scene_flow['flow_0_1'], flow_valid=scene_flow['valid_0'], flow_category=scene_flow['classes_0'], \ + flow_instance=scene_flow['flow_instance_id'], + ego_motion=scene_flow['ego_motion'].astype(np.float32)) + + +def proc(x, ignore_current_process=False): + if not ignore_current_process: + current=current_process() + pos = current._identity[0] + else: + pos = 1 + process_log(*x, n=pos) + +def process_logs(nusc_mode, data_dir: Path, scene_list: list, output_dir: Path, nproc: int): + """Compute sceneflow for all logs in the dataset. Logs are processed in parallel. + Args: + data_dir: Argoverse 2.0 directory + output_dir: Output directory. + """ + + if not (data_dir).exists(): + print(f'{data_dir} not found') + return + + args = sorted([(nusc_mode, data_dir, scene_num_id, output_dir) for scene_num_id in range(len(scene_list))]) + print(f'Using {nproc} processes') + + # # for debug + # for x in tqdm(args): + # proc(x, ignore_current_process=True) + # break + + if nproc <= 1: + for x in tqdm(args): + proc(x, ignore_current_process=True) + else: + with Pool(processes=nproc) as p: + res = list(tqdm(p.imap_unordered(proc, args), total=len(scene_list), ncols=100)) + +def main( + data_dir: str = "/home/kin/data/nus/raw", + mode: str = "v1.0-mini", + output_dir: str ="/home/kin/data/nus/h5py/demo", + nproc: int = (multiprocessing.cpu_count() - 1), + only_index: bool = False, + split_name = None +): + available_vers = ['v1.0-trainval', 'v1.0-test', 'v1.0-mini'] # defined by nus. + assert mode in available_vers + # nusc = NuScenes(dataroot=data_dir, version=mode, verbose=False) + # print(f"Processing {mode} dataset with {len(nusc.scene)} scenes...") + if mode == 'v1.0-trainval': + train_scenes = splits.train + val_scenes = splits.val + if split_name is not None and split_name == 'train': + input_dict = {'train': train_scenes} + elif split_name is not None and split_name == 'val': + input_dict = {'val': val_scenes} + else: + input_dict = {'train': train_scenes, 'val': val_scenes} + elif mode == 'v1.0-test': + test_scenes = splits.test + input_dict = {'test': test_scenes} + elif mode == 'v1.0-mini': + train_scenes = splits.mini_train + val_scenes = splits.mini_val + input_dict = { + 'train': train_scenes, + 'val': val_scenes + } + # NOTE(Qingwen): or if you don't want to split mini, use below + # input_dict = {'mini': train_scenes + val_scenes} + else: + raise ValueError('unknown') + + for input_key, input_val in input_dict.items(): + output_dir_ = Path(output_dir) / input_key + if only_index: + create_reading_index(Path(output_dir_)) + create_reading_index(Path(output_dir_), flow_inside_check=True) + return + output_dir_.mkdir(exist_ok=True, parents=True) + process_logs(mode, Path(data_dir), input_val, output_dir_, nproc) + create_reading_index(output_dir_) + create_reading_index(Path(output_dir_), flow_inside_check=True) + +if __name__ == '__main__': + start_time = time.time() + fire.Fire(main) + print(f"\nTime used: {(time.time() - start_time)/60:.2f} mins") \ No newline at end of file diff --git a/dataprocess/misc_data.py b/dataprocess/misc_data.py index 9698a77..0aba449 100644 --- a/dataprocess/misc_data.py +++ b/dataprocess/misc_data.py @@ -3,6 +3,30 @@ from pathlib import Path from tqdm import tqdm +def check_h5py_file_exists(h5py_file: Path, timestamps: list, verbose: bool = False) -> bool: + if not h5py_file.exists(): + return False + + log_id = h5py_file.name.split(".")[0] + try: + with h5py.File(h5py_file, 'r') as f: + for timestamp in timestamps: + if str(timestamp) not in f.keys(): + # delete the file if the timestamp is not in the file + # and it will reprocess this scene file + if verbose: + print(f"\n--- WARNING [data]: {log_id} has no {timestamp}, will be deleted the scene h5py.") + os.remove(h5py_file) + return False + except Exception as e: + if verbose: + print(f"\n--- WARNING [data]: {log_id} has error: {e}, will be deleted the scene h5py.") + os.remove(h5py_file) + return False + if verbose: + print(f'\n--- INFO [data]: {log_id} has been processed with total {len(timestamps)} timestamps.') + return True + def create_reading_index(data_dir: Path): start_time = time.time() data_index = [] @@ -88,4 +112,40 @@ def compose(self, right_se2: "SE2") -> "SE2": translation=chained_transform_matrix[:2, 2], ) return chained_se2 - \ No newline at end of file + + +## ====> nuScenes to Argoverse Mapping +NusNamMap = { + 'noise': 'NONE', + 'animal': 'ANIMAL', + 'human.pedestrian.adult': 'PEDESTRIAN', + 'human.pedestrian.child': 'PEDESTRIAN', + 'human.pedestrian.construction_worker': 'PEDESTRIAN', + 'human.pedestrian.personal_mobility': 'PEDESTRIAN', + 'human.pedestrian.police_officer': 'PEDESTRIAN', + 'human.pedestrian.stroller': 'STROLLER', + 'human.pedestrian.wheelchair': 'WHEELCHAIR', + 'movable_object.barrier': 'NONE', + 'movable_object.debris': 'NONE', + 'movable_object.pushable_pullable': 'NONE', + 'movable_object.trafficcone': 'CONSTRUCTION_CONE', + 'static_object.bicycle_rack': 'NONE', + 'vehicle.bicycle': 'BICYCLE', + 'vehicle.bus.bendy': 'ARTICULATED_BUS', + 'vehicle.bus.rigid': 'BUS', + 'vehicle.car': 'REGULAR_VEHICLE', + 'vehicle.construction': 'LARGE_VEHICLE', + 'vehicle.emergency.ambulance': 'LARGE_VEHICLE', + 'vehicle.emergency.police': 'REGULAR_VEHICLE', + 'vehicle.motorcycle': 'MOTORCYCLE', + 'vehicle.trailer': 'VEHICULAR_TRAILER', + 'vehicle.truck': 'TRUCK', + 'flat.driveable_surface': 'NONE', + 'flat.other': 'NONE', + 'flat.sidewalk': 'NONE', + 'flat.terrain': 'NONE', + 'static.manmade': 'NONE', + 'static.other': 'NONE', + 'static.vegetation': 'NONE', + 'vehicle.ego': 'NONE' +} \ No newline at end of file diff --git a/src/models/basic/__init__.py b/src/models/basic/__init__.py index 244c04c..d63d9f4 100644 --- a/src/models/basic/__init__.py +++ b/src/models/basic/__init__.py @@ -1,6 +1,22 @@ import torch import torch.nn as nn +import math +from torch.optim.lr_scheduler import _LRScheduler +# TODO: add a base model to wrap the same function like load_from_checkpoint, etc. +class BaseModel(nn.Module): + def __init__(self): + super(BaseModel, self).__init__() + + def load_from_checkpoint(self, ckpt_path): + ckpt = torch.load(ckpt_path, map_location="cpu")["state_dict"] + state_dict = { + k[len("model.") :]: v for k, v in ckpt.items() if k.startswith("model.") + } + print("\nLoading... model weight from: ", ckpt_path, "\n") + return self.load_state_dict(state_dict=state_dict, strict=False) + + @torch.no_grad() def cal_pose0to1(pose0: torch.Tensor, pose1: torch.Tensor): """ @@ -76,4 +92,56 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: batchnorm_res = conv_res else: batchnorm_res = self.batchnorm(conv_res) - return self.nonlinearity(batchnorm_res) \ No newline at end of file + return self.nonlinearity(batchnorm_res) + +class WarmupCosLR(_LRScheduler): + def __init__( + self, optimizer, min_lr, lr, \ + warmup_epochs, epochs, \ + last_epoch=-1, verbose=False + ) -> None: + self.min_lr = min_lr + self.lr = lr + self.epochs = epochs + self.warmup_epochs = warmup_epochs + super(WarmupCosLR, self).__init__(optimizer, last_epoch, verbose) + + def state_dict(self): + """Returns the state of the scheduler as a :class:`dict`. + + It contains an entry for every variable in self.__dict__ which + is not the optimizer. + """ + return { + key: value for key, value in self.__dict__.items() if key != "optimizer" + } + + def load_state_dict(self, state_dict): + """Loads the schedulers state. + + Args: + state_dict (dict): scheduler state. Should be an object returned + from a call to :meth:`state_dict`. + """ + self.__dict__.update(state_dict) + + def get_init_lr(self): + lr = self.lr / self.warmup_epochs + return lr + + def get_lr(self): + if self.last_epoch < self.warmup_epochs: + lr = self.lr * (self.last_epoch + 1) / self.warmup_epochs + else: + lr = self.min_lr + 0.5 * (self.lr - self.min_lr) * ( + 1 + + math.cos( + math.pi + * (self.last_epoch - self.warmup_epochs) + / (self.epochs - self.warmup_epochs) + ) + ) + if "lr_scale" in self.optimizer.param_groups[0]: + return [lr * group["lr_scale"] for group in self.optimizer.param_groups] + + return [lr for _ in self.optimizer.param_groups] diff --git a/src/utils/__init__.py b/src/utils/__init__.py index a9a803f..5111258 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -9,13 +9,24 @@ class bc: BOLD = '\033[1m' UNDERLINE = '\033[4m' +# ====> import func through string, ref: https://stackoverflow.com/a/19393328 +import importlib +def import_func(path: str): + function_string = path + mod_name, func_name = function_string.rsplit('.',1) + mod = importlib.import_module(mod_name) + func = getattr(mod, func_name) + return func -def hex_to_rgb(hex_color): - hex_color = hex_color.lstrip("#") - return tuple(int(hex_color[i:i + 2], 16) / 255.0 for i in (0, 2, 4)) - -color_map_hex = ['#a6cee3', '#de2d26', '#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f','#ff7f00',\ - '#cab2d6','#6a3d9a','#ffff99','#b15928', '#8dd3c7','#ffffb3','#bebada','#fb8072','#80b1d3',\ - '#fdb462','#b3de69','#fccde5','#d9d9d9','#bc80bd','#ccebc5','#ffed6f'] - -color_map = [hex_to_rgb(color) for color in color_map_hex] \ No newline at end of file +import numpy as np +def npcal_pose0to1(pose0, pose1): + """ + Note(Qingwen 2023-12-05 11:09): + Don't know why but it needed set the pose to float64 to calculate the inverse + otherwise it will be not expected result.... + """ + pose1_inv = np.eye(4, dtype=np.float64) + pose1_inv[:3,:3] = pose1[:3,:3].T + pose1_inv[:3,3] = (pose1[:3,:3].T * -pose1[:3,3]).sum(axis=1) + pose_0to1 = pose1_inv @ pose0.astype(np.float64) + return pose_0to1.astype(np.float32) \ No newline at end of file diff --git a/tools/visualization_rerun.py b/tools/visualization_rerun.py index 57331c5..6cc6ffc 100644 --- a/tools/visualization_rerun.py +++ b/tools/visualization_rerun.py @@ -19,7 +19,7 @@ BASE_DIR = os.path.abspath(os.path.join( os.path.dirname( __file__ ), '..' )) sys.path.append(BASE_DIR) from src.utils.mics import HDF5Data, flow_to_rgb -from src.utils import color_map +from src.utils.o3d_view import color_map import rerun as rr import rerun.blueprint as rrb import argparse From b7d279c1909978209d505603f3b266fd08a1cfa4 Mon Sep 17 00:00:00 2001 From: Kin Date: Mon, 25 Aug 2025 13:36:03 +0200 Subject: [PATCH 4/7] style(model): update a basemodel to avoid repeat have the same fn etc. --- src/models/deflow.py | 12 ++---------- src/models/fastflow3d.py | 14 +++----------- src/models/flow4d.py | 12 ++---------- src/models/ssf.py | 12 ++---------- src/trainer.py | 3 ++- 5 files changed, 11 insertions(+), 42 deletions(-) diff --git a/src/models/deflow.py b/src/models/deflow.py index ebb1629..d624690 100644 --- a/src/models/deflow.py +++ b/src/models/deflow.py @@ -15,9 +15,9 @@ from .basic.unet import FastFlow3DUNet from .basic.encoder import DynamicEmbedder from .basic.decoder import LinearDecoder, ConvGRUDecoder -from .basic import cal_pose0to1 +from .basic import cal_pose0to1, BaseModel -class DeFlow(nn.Module): +class DeFlow(BaseModel): def __init__(self, voxel_size = [0.2, 0.2, 6], point_cloud_range = [-51.2, -51.2, -3, 51.2, 51.2, 3], grid_feature_size = [512, 512], @@ -38,14 +38,6 @@ def __init__(self, voxel_size = [0.2, 0.2, 6], self.timer = dztimer.Timing() self.timer.start("Total") - def load_from_checkpoint(self, ckpt_path): - ckpt = torch.load(ckpt_path, map_location="cpu")["state_dict"] - state_dict = { - k[len("model.") :]: v for k, v in ckpt.items() if k.startswith("model.") - } - print("\nLoading... model weight from: ", ckpt_path, "\n") - return self.load_state_dict(state_dict=state_dict, strict=False) - def forward(self, batch): """ input: using the batch from dataloader, which is a dict diff --git a/src/models/fastflow3d.py b/src/models/fastflow3d.py index a08090f..e4d5774 100644 --- a/src/models/fastflow3d.py +++ b/src/models/fastflow3d.py @@ -12,10 +12,10 @@ from .basic.unet import FastFlow3DUNet from .basic.encoder import DynamicEmbedder from .basic.decoder import LinearDecoder -from .basic import cal_pose0to1 +from .basic import cal_pose0to1, BaseModel -class FastFlow3D(nn.Module): +class FastFlow3D(BaseModel): def __init__(self, voxel_size = [0.2, 0.2, 6], point_cloud_range = [-51.2, -51.2, -3, 51.2, 51.2, 3], grid_feature_size = [512, 512]): @@ -30,15 +30,7 @@ def __init__(self, voxel_size = [0.2, 0.2, 6], self.timer = dztimer.Timing() self.timer.start("Total") - - def load_from_checkpoint(self, ckpt_path): - ckpt = torch.load(ckpt_path, map_location="cpu")["state_dict"] - state_dict = { - k[len("model.") :]: v for k, v in ckpt.items() if k.startswith("model.") - } - print("\nLoading... model weight from: ", ckpt_path, "\n") - return self.load_state_dict(state_dict=state_dict, strict=False) - + def _model_forward(self, pc0s, pc1s): pc0_before_pseudoimages, pc0_voxel_infos_lst = self.embedder(pc0s) diff --git a/src/models/flow4d.py b/src/models/flow4d.py index b0f52b5..cbe5d33 100644 --- a/src/models/flow4d.py +++ b/src/models/flow4d.py @@ -9,11 +9,11 @@ import torch.nn as nn import dztimer, torch -from .basic import wrap_batch_pcs +from .basic import wrap_batch_pcs, BaseModel from .basic.flow4d_module import DynamicEmbedder_4D from .basic.flow4d_module import Network_4D, Seperate_to_3D, Point_head -class Flow4D(nn.Module): +class Flow4D(BaseModel): def __init__(self, voxel_size = [0.2, 0.2, 0.2], point_cloud_range = [-51.2, -51.2, -2.2, 51.2, 51.2, 4.2], grid_feature_size = [512, 512, 32], @@ -38,14 +38,6 @@ def __init__(self, voxel_size = [0.2, 0.2, 0.2], self.timer = dztimer.Timing() self.timer.start("Total") - def load_from_checkpoint(self, ckpt_path): - ckpt = torch.load(ckpt_path, map_location="cpu")["state_dict"] - state_dict = { - k[len("model.") :]: v for k, v in ckpt.items() if k.startswith("model.") - } - print("\nLoading... model weight from: ", ckpt_path, "\n") - return self.load_state_dict(state_dict=state_dict, strict=False) - def forward(self, batch): """ input: using the batch from dataloader, which is a dict diff --git a/src/models/ssf.py b/src/models/ssf.py index 8061180..8fb9799 100644 --- a/src/models/ssf.py +++ b/src/models/ssf.py @@ -16,9 +16,9 @@ from .basic.encoder import DynamicVoxelizer from .basic.ssf_module import DynamicScatterVFE from .basic.decoder import SimpleLinearDecoder -from .basic import cal_pose0to1 +from .basic import cal_pose0to1, BaseModel -class SSF(nn.Module): +class SSF(BaseModel): def __init__(self, voxel_size = [0.2, 0.2, 6], point_cloud_range = [-51.2, -51.2, -3, 51.2, 51.2, 3], grid_feature_size = [512, 512], @@ -57,14 +57,6 @@ def __init__(self, voxel_size = [0.2, 0.2, 6], self.timer = dztimer.Timing() self.timer.start("Total") - def load_from_checkpoint(self, ckpt_path): - ckpt = torch.load(ckpt_path, map_location="cpu")["state_dict"] - state_dict = { - k[len("model.") :]: v for k, v in ckpt.items() if k.startswith("model.") - } - print("\nLoading... model weight from: ", ckpt_path, "\n") - return self.load_state_dict(state_dict=state_dict, strict=False) - def forward(self, batch): """ input: using the batch from dataloader, which is a dict diff --git a/src/trainer.py b/src/trainer.py index d779388..fe2cb16 100644 --- a/src/trainer.py +++ b/src/trainer.py @@ -24,7 +24,8 @@ import os, sys, time, h5py, pickle BASE_DIR = os.path.abspath(os.path.join( os.path.dirname( __file__ ), '..' )) sys.path.append(BASE_DIR) -from src.utils.mics import import_func, weights_init, zip_res +from src.utils import import_func +from src.utils.mics import weights_init, zip_res from src.utils.av2_eval import write_output_file from src.models.basic import cal_pose0to1 from src.utils.eval_metric import OfficialMetrics, evaluate_leaderboard, evaluate_leaderboard_v2, evaluate_ssf From c606d293fb5f31b64f5d6f7cafaa9fef951ff40f Mon Sep 17 00:00:00 2001 From: Kin Date: Mon, 25 Aug 2025 17:23:54 +0200 Subject: [PATCH 5/7] docs(README): update readme. * will nus training need update dataloader, it will inovled by DeltaFlow merge there. --- README.md | 2 +- dataprocess/README.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 51d5307..f520bd7 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ 💞 If you find [*OpenSceneFlow*](https://github.com/KTH-RPL/OpenSceneFlow) useful to your research, please cite [**our works** 📖](#cite-us) and [give a star 🌟](https://github.com/KTH-RPL/OpenSceneFlow) as encouragement. (੭ˊ꒳​ˋ)੭✧ OpenSceneFlow is a codebase for point cloud scene flow estimation. -It is also an official implementation of the following papers (sored by the time of publication): +It is also an official implementation of the following papers (sorted by the time of publication): - **HiMo: High-Speed Objects Motion Compensation in Point Clouds** (SeFlow++) *Qingwen Zhang, Ajinkya Khoche, Yi Yang, Li Ling, Sina Sharif Mansouri, Olov Andersson, Patric Jensfelt* diff --git a/dataprocess/README.md b/dataprocess/README.md index 3b86bba..e900df6 100644 --- a/dataprocess/README.md +++ b/dataprocess/README.md @@ -137,6 +137,9 @@ python dataprocess/extract_av2.py --av2_type sensor --data_mode train --argo_dir # waymo: python dataprocess/extract_waymo.py --mode train --flow_data_dir /home/kin/data/waymo/flowlabel --map_dir /home/kin/data/waymo/flowlabel/map --output_dir /home/kin/data/waymo/preprocess --nproc 48 + +# nus: +python dataprocess/extract_nus.py --mode v1.0-trainval --ouput_dir /home/kin/data/nus/h5py/full --nproc 24 ``` From 96ba637dbe01a1d3a9830a4e8f25e1b409fad99c Mon Sep 17 00:00:00 2001 From: Kin Date: Mon, 25 Aug 2025 23:44:00 +0200 Subject: [PATCH 6/7] docs: fix typo on dataprocess README. tested successfully on all fn. --- dataprocess/README.md | 2 +- dataprocess/extract_nus.py | 3 ++- src/models/basic/__init__.py | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dataprocess/README.md b/dataprocess/README.md index e900df6..893af64 100644 --- a/dataprocess/README.md +++ b/dataprocess/README.md @@ -139,7 +139,7 @@ python dataprocess/extract_av2.py --av2_type sensor --data_mode train --argo_dir python dataprocess/extract_waymo.py --mode train --flow_data_dir /home/kin/data/waymo/flowlabel --map_dir /home/kin/data/waymo/flowlabel/map --output_dir /home/kin/data/waymo/preprocess --nproc 48 # nus: -python dataprocess/extract_nus.py --mode v1.0-trainval --ouput_dir /home/kin/data/nus/h5py/full --nproc 24 +python dataprocess/extract_nus.py --mode v1.0-trainval --output_dir /home/kin/data/nus/h5py/full --nproc 24 ``` diff --git a/dataprocess/extract_nus.py b/dataprocess/extract_nus.py index 15cfef0..4fcd2ad 100644 --- a/dataprocess/extract_nus.py +++ b/dataprocess/extract_nus.py @@ -295,7 +295,7 @@ def process_logs(nusc_mode, data_dir: Path, scene_list: list, output_dir: Path, res = list(tqdm(p.imap_unordered(proc, args), total=len(scene_list), ncols=100)) def main( - data_dir: str = "/home/kin/data/nus/raw", + data_dir: str = "/home/kin/data/nus/v1.0", mode: str = "v1.0-mini", output_dir: str ="/home/kin/data/nus/h5py/demo", nproc: int = (multiprocessing.cpu_count() - 1), @@ -332,6 +332,7 @@ def main( for input_key, input_val in input_dict.items(): output_dir_ = Path(output_dir) / input_key + print("[INFO] We are processing data to ", output_dir_) if only_index: create_reading_index(Path(output_dir_)) create_reading_index(Path(output_dir_), flow_inside_check=True) diff --git a/src/models/basic/__init__.py b/src/models/basic/__init__.py index d63d9f4..6803e63 100644 --- a/src/models/basic/__init__.py +++ b/src/models/basic/__init__.py @@ -3,7 +3,6 @@ import math from torch.optim.lr_scheduler import _LRScheduler -# TODO: add a base model to wrap the same function like load_from_checkpoint, etc. class BaseModel(nn.Module): def __init__(self): super(BaseModel, self).__init__() From d16adf526491a111eeef19b4fbdc21f6dbf5d95a Mon Sep 17 00:00:00 2001 From: Kin Date: Mon, 25 Aug 2025 23:54:15 +0200 Subject: [PATCH 7/7] add flow check in nus from supervised training later. docs: update --- CONTRIBUTING.md | 4 ++-- README.md | 2 +- dataprocess/misc_data.py | 15 +++++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c6f98a3..523e990 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,10 +1,10 @@ -# Contributing to OpenSceneFlow +# Contributing to [OpenSceneFlow](https://github.com/KTH-RPL/OpenSceneFlow) We want to make contributing to this project as easy and transparent as possible. We welcome any contributions, from bug fixes to new features. If you're interested in adding your own scene flow method, this guide will walk you through the process. ## Adding a New Method -Here is a quick guide to integrating a new method into the OpenSceneFlow codebase. +Here is a quick guide to integrating a new method into the [OpenSceneFlow](https://github.com/KTH-RPL/OpenSceneFlow) codebase. ### 1. Data Preparation diff --git a/README.md b/README.md index f520bd7..41f9f6e 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ If you prefer to build the Docker image by yourself, Check [build-docker-image]( ## 1. Data Preparation -Refer to [dataprocess/README.md](dataprocess/README.md) for dataset download instructions. Currently, we support **Argoverse 2**, **Waymo**, and **custom datasets** (more datasets will be added in the future). +Refer to [dataprocess/README.md](dataprocess/README.md) for dataset download instructions. Currently, we support **Argoverse 2**, **Waymo**, **nuScenes** and **custom datasets** (more datasets will be added in the future). After downloading, convert the raw data to `.h5` format for easy training, evaluation, and visualization. Follow the steps in [dataprocess/README.md#process](dataprocess/README.md#process). diff --git a/dataprocess/misc_data.py b/dataprocess/misc_data.py index 0aba449..b749a3c 100644 --- a/dataprocess/misc_data.py +++ b/dataprocess/misc_data.py @@ -27,7 +27,8 @@ def check_h5py_file_exists(h5py_file: Path, timestamps: list, verbose: bool = Fa print(f'\n--- INFO [data]: {log_id} has been processed with total {len(timestamps)} timestamps.') return True -def create_reading_index(data_dir: Path): +def create_reading_index(data_dir: Path, flow_inside_check=False): + pkl_file_name = 'index_total.pkl' if not flow_inside_check else 'index_flow.pkl' start_time = time.time() data_index = [] for file_name in tqdm(os.listdir(data_dir), ncols=100): @@ -36,14 +37,20 @@ def create_reading_index(data_dir: Path): scene_id = file_name.split(".")[0] timestamps = [] with h5py.File(data_dir/file_name, 'r') as f: - timestamps.extend(f.keys()) + if flow_inside_check: + for key in f.keys(): + if 'flow' in f[key]: + # print(f"Found flow in {scene_id} at {key}") + timestamps.append(key) + else: + timestamps.extend(f.keys()) timestamps.sort(key=lambda x: int(x)) # make sure the timestamps are in order for timestamp in timestamps: data_index.append([scene_id, timestamp]) - with open(data_dir/'index_total.pkl', 'wb') as f: + with open(data_dir/pkl_file_name, 'wb') as f: pickle.dump(data_index, f) - print(f"Create reading index Successfully, cost: {time.time() - start_time:.2f} s") + print(f"Create {pkl_file_name} index Successfully, cost: {time.time() - start_time:.2f} s") class SE2: