From 9bb04cee8803d5f8479ae58197c21931c75b5613 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Wed, 14 Jan 2026 16:08:31 +0900 Subject: [PATCH 01/46] Update docker installation commit for perception_evaluation --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c5240c498..22d18f5ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,7 +61,7 @@ RUN python3 -m pip --no-cache-dir install \ RUN python3 -m pip install git+https://github.com/tier4/t4-devkit@v0.5.1 # Install autoware-perception-evaluation -RUN python3 -m pip install git+https://github.com/tier4/autoware_perception_evaluation@develop +RUN python3 -m pip install git+https://github.com/tier4/autoware_perception_evaluation@dd37a546352f953565033f1d4b8cb443df1232c59 # Need to dowgrade setuptools to 60.2.0 to fix setup RUN python3 -m pip --no-cache-dir install \ From 07ac029bb6f5e81f4022baec372cefbe60221cbd Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Mon, 6 Jul 2026 16:38:20 +0900 Subject: [PATCH 02/46] Resolve conflict --- .../dataset/t4dataset/gen1_base.py | 198 ++++++++++++++++ .../dataset/t4dataset/gen2_base.py | 216 ++++++++++++++++++ ..._second_secfpn_30e_8xb16_gen1_base_120m.py | 154 +++++++++++++ ..._second_secfpn_50e_8xb16_gen2_base_120m.py | 167 ++++++++++++++ 4 files changed, 735 insertions(+) create mode 100644 autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py create mode 100644 autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py diff --git a/autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py b/autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py new file mode 100644 index 000000000..bbea675a7 --- /dev/null +++ b/autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py @@ -0,0 +1,198 @@ +custom_imports = dict( + imports=[ + "autoware_ml.detection3d.datasets.t4dataset", + "autoware_ml.detection3d.evaluation.t4metric.t4metric", + "autoware_ml.detection3d.evaluation.t4metric.t4metric_v2", + ] +) + +# dataset type setting +dataset_type = "T4Dataset" +info_train_file_name = "t4dataset_gen1_base_infos_train.pkl" +info_val_file_name = "t4dataset_gen1_base_infos_val.pkl" +info_test_file_name = "t4dataset_gen1_base_infos_test.pkl" + +info_train_statistics_file_name = "t4dataset_gen1_base_statistics_train.parquet" +info_val_statistics_file_name = "t4dataset_gen1_base_statistics_val.parquet" +info_test_statistics_file_name = "t4dataset_gen1_base_statistics_test.parquet" + +# dataset scene setting +dataset_version_list = [ + "db_jpntaxi_v1", + "db_jpntaxi_v2", + "db_jpntaxi_v4", + "db_gsm8_v1", + "db_j6_v1", + "db_j6_v2", + "db_j6_v3", + "db_j6_v5", +] + +# TODO (KokSeang): This will be removed to avoid repeatitive computation +# Dataset set, test info files, and enable/disable evaluation of prefix +dataset_test_groups = { + "gen1_base": ("t4dataset_gen1_base_infos_test.pkl", True), +} + +# dataset format setting +data_prefix = dict( + pts="", + CAM_FRONT="", + CAM_FRONT_LEFT="", + CAM_FRONT_RIGHT="", + CAM_BACK="", + CAM_BACK_RIGHT="", + CAM_BACK_LEFT="", + sweeps="", +) +camera_types = { + "CAM_FRONT", + "CAM_FRONT_RIGHT", + "CAM_FRONT_LEFT", + "CAM_BACK", + "CAM_BACK_LEFT", + "CAM_BACK_RIGHT", +} + +# class setting +name_mapping = { + # DBv1.0 + "vehicle.car": "car", + "vehicle.construction": "truck", + "vehicle.emergency (ambulance & police)": "car", + "vehicle.motorcycle": "bicycle", + "vehicle.trailer": "trailer", + "vehicle.truck": "truck", + "vehicle.bicycle": "bicycle", + "vehicle.bus (bendy & rigid)": "bus", + "pedestrian.adult": "pedestrian", + "pedestrian.child": "pedestrian", + "pedestrian.construction_worker": "pedestrian", + "pedestrian.personal_mobility": "pedestrian", + "pedestrian.police_officer": "pedestrian", + "pedestrian.stroller": "pedestrian", + "pedestrian.wheelchair": "pedestrian", + "movable_object.barrier": "barrier", + "movable_object.debris": "barrier", + "movable_object.pushable_pullable": "barrier", + "movable_object.trafficcone": "traffic_cone", + "movable_object.traffic_cone": "traffic_cone", + "animal": "animal", + "static_object.bicycle_rack": "bicycle_rack", + # DBv1.1 and UCv2.0 + "car": "car", + "truck": "truck", + "bus": "bus", + "trailer": "trailer", + "motorcycle": "bicycle", + "bicycle": "bicycle", + "police_car": "car", + "pedestrian": "pedestrian", + "police_officer": "pedestrian", + "forklift": "car", + "construction_worker": "pedestrian", + "stroller": "pedestrian", + # DBv2.0 and DBv3.0 + "animal": "animal", + "movable_object.barrier": "barrier", + "movable_object.pushable_pullable": "barrier", + "movable_object.traffic_cone": "traffic_cone", + "pedestrian.adult": "pedestrian", + "pedestrian.child": "pedestrian", + "pedestrian.construction_worker": "pedestrian", + "pedestrian.personal_mobility": "pedestrian", + "pedestrian.police_officer": "pedestrian", + "pedestrian.stroller": "pedestrian", + "pedestrian.wheelchair": "pedestrian", + "static_object.bicycle rack": "bicycle rack", + "static_object.bollard": "bollard", + "vehicle.ambulance": "car", # Define vehicle.ambulance as car since vehicle.emergency (ambulance & police) is defined as car + "vehicle.bicycle": "bicycle", + "vehicle.bus": "bus", + "vehicle.car": "car", + "vehicle.construction": "truck", + "vehicle.fire": "truck", + "vehicle.motorcycle": "bicycle", + "vehicle.police": "car", + "vehicle.trailer": "trailer", + "vehicle.truck": "truck", + # DBv1.3 + "ambulance": "car", + "kart": "car", + "wheelchair": "pedestrian", + "personal_mobility": "pedestrian", + "fire_truck": "truck", + "semi_trailer": "trailer", + "tractor_unit": "truck", + "construction_vehicle": "truck", + "traffic_cone": "traffic_cone", + "trafficcone": "traffic_cone", + "barrier": "barrier", + "other_vehicle": "car", + "other_pedestrian": "pedestrian", +} + +class_names = ["car", "truck", "bus", "bicycle", "pedestrian", "traffic_cone", "barrier"] +num_class = len(class_names) +metainfo = dict(classes=class_names) + +merge_objects = [ + ("truck", ["truck", "trailer"]), +] +merge_type = "extend_longer" # One of ["extend_longer","union", None] + +# visualization +class_colors = { + "car": (30, 144, 255), + "truck": (140, 0, 255), + "construction_vehicle": (255, 255, 0), + "bus": (111, 255, 111), + "trailer": (0, 255, 255), + "barrier": (0, 0, 0), + "motorcycle": (100, 0, 30), + "bicycle": (255, 0, 30), + "pedestrian": (255, 200, 200), + "traffic_cone": (120, 120, 120), +} +camera_panels = [ + "data/CAM_FRONT_LEFT", + "data/CAM_FRONT", + "data/CAM_FRONT_RIGHT", + "data/CAM_BACK_LEFT", + "data/CAM_BACK", + "data/CAM_BACK_RIGHT", +] + +# Add filter attributes +filter_attributes = [ + ("vehicle.bicycle", "vehicle_state.parked"), + ("vehicle.bicycle", "cycle_state.without_rider"), + ("vehicle.bicycle", "motorcycle_state.without_rider"), + ("vehicle.motorcycle", "vehicle_state.parked"), + ("vehicle.motorcycle", "cycle_state.without_rider"), + ("vehicle.motorcycle", "motorcycle_state.without_rider"), + ("bicycle", "vehicle_state.parked"), + ("bicycle", "cycle_state.without_rider"), + ("bicycle", "motorcycle_state.without_rider"), + ("motorcycle", "vehicle_state.parked"), + ("motorcycle", "cycle_state.without_rider"), + ("motorcycle", "motorcycle_state.without_rider"), +] + +evaluator_metric_configs = dict( + evaluation_task="detection", + target_labels=class_names, + center_distance_bev_thresholds=[0.5, 1.0, 2.0, 4.0], + # plane_distance_thresholds is required for the pass fail evaluation + plane_distance_thresholds=[2.0, 4.0], + iou_2d_thresholds=None, + iou_3d_thresholds=None, + label_prefix="autoware", + # bev minimum distance ranges for each range bucket, must be the same length as max_distance, + # they will form bev distance ranges in [(min_distance[0], max_distance[0]), (min_distance[1], max_distance[1]), ...] when filtering + min_distance=[0.0, 50.0, 90.0, 0.0], + # bev maximum distance ranges for each range bucket, must be the same length as min_distance + max_distance=[50.0, 90.0, 121.0, 121.0], + min_point_numbers=0, + matching_class_agnostic_fps=False, +) diff --git a/autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py b/autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py new file mode 100644 index 000000000..295c9d370 --- /dev/null +++ b/autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py @@ -0,0 +1,216 @@ +custom_imports = dict( + imports=[ + "autoware_ml.detection3d.datasets.t4dataset", + "autoware_ml.detection3d.evaluation.t4metric.t4metric", + "autoware_ml.detection3d.evaluation.t4metric.t4metric_v2", + ] +) + +# dataset type setting +dataset_type = "T4Dataset" +info_train_file_name = "t4dataset_gen2_base_infos_train.pkl" +info_val_file_name = "t4dataset_gen2_base_infos_val.pkl" +info_test_file_name = "t4dataset_gen2_base_infos_test.pkl" + +info_train_statistics_file_name = "t4dataset_gen2_base_statistics_train.parquet" +info_val_statistics_file_name = "t4dataset_gen2_base_statistics_val.parquet" +info_test_statistics_file_name = "t4dataset_gen2_base_statistics_test.parquet" + +# dataset scene setting +dataset_version_list = [ + "db_jpntaxigen2_v1", + "db_jpntaxigen2_v2", + "db_j6gen2_v1", + "db_j6gen2_v2", + "db_j6gen2_v3", + "db_j6gen2_v4", + "db_j6gen2_v5", + "db_j6gen2_v6", + "db_j6gen2_v7", + "db_j6gen2_v8", + "db_j6gen2_v9", + "db_j6gen2_v10", + "db_j6gen2_v11", + "db_j6gen2_v12", + "db_largebus_v1", + "db_largebus_v2", + "db_largebus_v3", +] + +dataset_test_groups = { + "largebus": ("t4dataset_largebus_infos_test.pkl", False), + "j6gen2": ("t4dataset_j6gen2_infos_test.pkl", False), + "j6gen2_base": ("t4dataset_j6gen2_base_infos_test.pkl", True), +} + +# dataset format setting +data_prefix = dict( + pts="", + CAM_FRONT="", + CAM_FRONT_LEFT="", + CAM_FRONT_RIGHT="", + CAM_BACK="", + CAM_BACK_RIGHT="", + CAM_BACK_LEFT="", + sweeps="", +) + +camera_types = { + "CAM_FRONT", + "CAM_FRONT_RIGHT", + "CAM_FRONT_LEFT", + "CAM_BACK", + "CAM_BACK_LEFT", + "CAM_BACK_RIGHT", +} + +# class setting +name_mapping = { + # DBv1.0 + "vehicle.car": "car", + "vehicle.construction": "truck", + "vehicle.emergency (ambulance & police)": "car", + "vehicle.motorcycle": "bicycle", + "vehicle.trailer": "trailer", + "vehicle.truck": "truck", + "vehicle.bicycle": "bicycle", + "vehicle.bus (bendy & rigid)": "bus", + "pedestrian.adult": "pedestrian", + "pedestrian.child": "pedestrian", + "pedestrian.construction_worker": "pedestrian", + "pedestrian.personal_mobility": "pedestrian", + "pedestrian.police_officer": "pedestrian", + "pedestrian.stroller": "pedestrian", + "pedestrian.wheelchair": "pedestrian", + "movable_object.barrier": "barrier", + "movable_object.debris": "barrier", + "movable_object.pushable_pullable": "barrier", + "movable_object.trafficcone": "traffic_cone", + "movable_object.traffic_cone": "traffic_cone", + "animal": "animal", + "static_object.bicycle_rack": "bicycle_rack", + # DBv1.1 and UCv2.0 + "car": "car", + "truck": "truck", + "bus": "bus", + "trailer": "trailer", + "motorcycle": "bicycle", + "bicycle": "bicycle", + "police_car": "car", + "pedestrian": "pedestrian", + "police_officer": "pedestrian", + "forklift": "car", + "construction_worker": "pedestrian", + "stroller": "pedestrian", + # DBv2.0 and DBv3.0 + "animal": "animal", + "movable_object.barrier": "barrier", + "movable_object.pushable_pullable": "barrier", + "movable_object.traffic_cone": "traffic_cone", + "pedestrian.adult": "pedestrian", + "pedestrian.child": "pedestrian", + "pedestrian.construction_worker": "pedestrian", + "pedestrian.personal_mobility": "pedestrian", + "pedestrian.police_officer": "pedestrian", + "pedestrian.stroller": "pedestrian", + "pedestrian.wheelchair": "pedestrian", + "static_object.bicycle rack": "bicycle rack", + "static_object.bollard": "bollard", + "vehicle.ambulance": "car", # Define vehicle.ambulance as car since vehicle.emergency (ambulance & police) is defined as car + "vehicle.bicycle": "bicycle", + "vehicle.bus": "bus", + "vehicle.car": "car", + "vehicle.construction": "truck", + "vehicle.fire": "truck", + "vehicle.motorcycle": "bicycle", + "vehicle.police": "car", + "vehicle.trailer": "trailer", + "vehicle.truck": "truck", + # DBv1.3 + "ambulance": "car", + "kart": "car", + "wheelchair": "pedestrian", + "personal_mobility": "pedestrian", + "fire_truck": "truck", + "semi_trailer": "trailer", + "tractor_unit": "truck", + "construction_vehicle": "truck", + "traffic_cone": "traffic_cone", + "trafficcone": "traffic_cone", + "barrier": "barrier", + "other_vehicle": "car", + "other_pedestrian": "pedestrian", +} + + +class_names = [ + "car", + "truck", + "bus", + "bicycle", + "pedestrian", + "traffic_cone", + "barrier", +] +num_class = len(class_names) +metainfo = dict(classes=class_names) + +merge_objects = [ + ("truck", ["truck", "trailer"]), +] +merge_type = "extend_longer" # One of ["extend_longer","union", None] + +# visualization +class_colors = { + "car": (30, 144, 255), + "truck": (140, 0, 255), + "construction_vehicle": (255, 255, 0), + "bus": (111, 255, 111), + "trailer": (0, 255, 255), + "barrier": (0, 0, 0), + "motorcycle": (100, 0, 30), + "bicycle": (255, 0, 30), + "pedestrian": (255, 200, 200), + "traffic_cone": (120, 120, 120), +} +camera_panels = [ + "data/CAM_FRONT_LEFT", + "data/CAM_FRONT", + "data/CAM_FRONT_RIGHT", + "data/CAM_BACK_LEFT", + "data/CAM_BACK", + "data/CAM_BACK_RIGHT", +] + +filter_attributes = [ + ("vehicle.bicycle", "vehicle_state.parked"), + ("vehicle.bicycle", "cycle_state.without_rider"), + ("vehicle.bicycle", "motorcycle_state.without_rider"), + ("vehicle.motorcycle", "vehicle_state.parked"), + ("vehicle.motorcycle", "cycle_state.without_rider"), + ("vehicle.motorcycle", "motorcycle_state.without_rider"), + ("bicycle", "vehicle_state.parked"), + ("bicycle", "cycle_state.without_rider"), + ("bicycle", "motorcycle_state.without_rider"), + ("motorcycle", "vehicle_state.parked"), + ("motorcycle", "cycle_state.without_rider"), + ("motorcycle", "motorcycle_state.without_rider"), +] + +evaluator_metric_configs = dict( + evaluation_task="detection", + target_labels=class_names, + center_distance_bev_thresholds=[0.5, 1.0, 2.0, 4.0], + # plane_distance_thresholds is required for the pass fail evaluation + plane_distance_thresholds=[2.0, 4.0], + iou_2d_thresholds=None, + iou_3d_thresholds=None, + label_prefix="autoware", + # bev minimum distance ranges for each range bucket, must be the same length as max_distance, + # they will form bev distance ranges in [(min_distance[0], max_distance[0]), (min_distance[1], max_distance[1]), ...] when filtering + min_distance=[0.0, 50.0, 90.0, 0.0], + # bev maximum distance ranges for each range bucket, must be the same length as min_distance + max_distance=[50.0, 90.0, 121.0, 121.0], + min_point_numbers=0, + matching_class_agnostic_fps=False, +) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py new file mode 100644 index 000000000..2671362d7 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py @@ -0,0 +1,154 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", + "../default/pipelines/default_lidar_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_30e_8xb16_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], + max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], + ), + pts_middle_encoder=dict( + in_channels=32, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py new file mode 100644 index 000000000..10727d8ec --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py @@ -0,0 +1,167 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py", + "../default/pipelines/default_lidar_intensity_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_50e_8xb16_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_intensity/gen2_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[ + _base_.point_cloud_range[0], + _base_.point_cloud_range[1], + _base_.point_cloud_range[2], + 0.0, + 0.0, + ], + max_norm_values=[ + _base_.point_cloud_range[3], + _base_.point_cloud_range[4], + _base_.point_cloud_range[5], + 255.0, + 0.2, + ], + ), + pts_middle_encoder=dict( + in_channels=50, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) +load_from = None From d4aaee7ba5e565a2549cd819040110068d9aebc5 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Mon, 6 Jul 2026 16:44:13 +0900 Subject: [PATCH 03/46] Resolve conflict --- ...ond_secfpn_30e_8xb32_gen1_base_120m_amp.py | 154 ++++++++++++++++++ .../default_30e_8xb16_adamw_cosine.py | 3 + .../default_30e_8xb32_adamw_cosine_amp.py | 90 ++++++++++ 3 files changed, 247 insertions(+) create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py create mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb32_adamw_cosine_amp.py diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py new file mode 100644 index 000000000..1ce2bcb1e --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py @@ -0,0 +1,154 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", + "../default/pipelines/default_lidar_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_30e_8xb32_adamw_cosine_amp.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], + max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], + ), + pts_middle_encoder=dict( + in_channels=32, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py index cc5c780bd..33d617544 100644 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py @@ -62,6 +62,9 @@ val_cfg = dict() test_cfg = dict() +optimizer = dict(type="AdamW", lr=lr, weight_decay=0.01) +clip_grad = dict(max_norm=15.0, norm_type=2) # max norm of gradients upper bound to be 15.0 since amp is used + optim_wrapper = dict( type="OptimWrapper", optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb32_adamw_cosine_amp.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb32_adamw_cosine_amp.py new file mode 100644 index 000000000..959c23bab --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb32_adamw_cosine_amp.py @@ -0,0 +1,90 @@ +# learning rate +lr = 3.0e-4 +t_max = 3 +max_epochs = 30 +val_interval = 5 + +train_gpu_size = 8 +test_batch_size = 4 +train_batch_size = 32 + +param_scheduler = [ + # learning rate scheduler + # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 + # during the next epochs, learning rate decreases from lr * 10 to + # lr * 1e-4 + dict( + type="CosineAnnealingLR", + T_max=t_max, + eta_min=lr * 10, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingLR", + T_max=(max_epochs - t_max), + eta_min=lr * 1e-4, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), + # momentum scheduler + # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 + # during the next epochs, momentum increases from 0.85 / 0.95 to 1 + dict( + type="CosineAnnealingMomentum", + T_max=t_max, + eta_min=0.85 / 0.95, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingMomentum", + T_max=(max_epochs - t_max), + eta_min=1, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), +] + +# runtime settings +# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 +train_cfg = dict( + by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] +) +val_cfg = dict() +test_cfg = dict() + +optimizer = dict(type="AdamW", lr=lr, weight_decay=0.01) +clip_grad = dict(max_norm=15.0, norm_type=2) # max norm of gradients upper bound to be 15.0 since amp is used + +optim_wrapper = dict( + type="AmpOptimWrapper", + dtype="float16", + optimizer=optimizer, + clip_grad=clip_grad, + # Update it accordingly + loss_scale={ + "init_scale": 2.0**10, # intial_scale: 1024 + "growth_interval": 1000, + }, +) + +# optim_wrapper = dict( +# type="OptimWrapper", +# optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), +# clip_grad=dict(max_norm=35, norm_type=2), +# ) + +auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) + +# Only set if the number of train_gpu_size more than 1 +if train_gpu_size > 1: + sync_bn = "torch" From 7e11f69d77505d26e5e80a8a6c1f5b1f16a987d5 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Thu, 9 Jul 2026 09:40:07 +0900 Subject: [PATCH 04/46] Resolve conflict --- .../transforms/object_min_points_filter.py | 18 ++++++------------ ...l_second_secfpn_30e_8xb16_gen1_base_120m.py | 4 ++-- .../default_30e_8xb16_adamw_cosine.py | 3 --- .../default_50e_8xb16_adamw_cosine.py | 4 ++-- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py b/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py index 610a26767..1b4abc4b2 100644 --- a/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py +++ b/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py @@ -1,3 +1,5 @@ +import numpy as np + from mmcv.transforms import BaseTransform from mmdet3d.structures.ops import box_np_ops from mmengine.registry import TRANSFORMS @@ -84,18 +86,10 @@ def transform(self, input_dict: dict) -> dict: keys are updated in the result dict. """ gt_bboxes_3d = input_dict["gt_bboxes_3d"] - - # ---- radius of each box center in BEV ---- - # (xmin, ymin, xmax, ymax) - lower_bev_range = [-self.range_radius[1], -self.range_radius[1], -self.range_radius[0], -self.range_radius[0]] - upper_bev_range = [self.range_radius[0], self.range_radius[0], self.range_radius[1], self.range_radius[1]] - - # ---- lower/upper bound for radius ---- - lower_mask = gt_bboxes_3d.in_range_bev(lower_bev_range) # e.g. min_radius = 5m - upper_mask = gt_bboxes_3d.in_range_bev(upper_bev_range) # e.g. max_radius = 70m - bev_radius_mask = (lower_mask | upper_mask).numpy().astype(bool) # final mask - - # Out of range gt masks are all valid + + # Get radius of each bev center + bbox_bev_centers = np.linalg.norm(gt_bboxes_3d.bev[:, :2]) + bev_radius_mask = (bbox_bev_centers >= self.range_radius[0]) and (bbox_bev_centers < self.range_radius[1]) out_of_range_gt_masks = ~bev_radius_mask points = input_dict["points"] diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py index 2671362d7..688337e0f 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py @@ -15,8 +15,8 @@ data_root = "data/t4dataset/" info_directory_path = "info/kokseang_2_9_0/" -experiment_group_name = "bevfusion_lidar/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m" +experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m_fixed_min_points" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py index 33d617544..cc5c780bd 100644 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py @@ -62,9 +62,6 @@ val_cfg = dict() test_cfg = dict() -optimizer = dict(type="AdamW", lr=lr, weight_decay=0.01) -clip_grad = dict(max_norm=15.0, norm_type=2) # max norm of gradients upper bound to be 15.0 since amp is used - optim_wrapper = dict( type="OptimWrapper", optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py index cf8b0e4f2..fe73eed96 100644 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py @@ -1,6 +1,6 @@ # learning rate lr = 2.0e-4 -t_max = 3 +t_max = 5 max_epochs = 50 val_interval = 5 @@ -65,7 +65,7 @@ optim_wrapper = dict( type="OptimWrapper", optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), - clip_grad=dict(max_norm=35, norm_type=2), + clip_grad=dict(max_norm=15, norm_type=2), ) auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) From 844af4df653ea1f70de057ed567da07b406b64af Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Thu, 9 Jul 2026 09:40:21 +0900 Subject: [PATCH 05/46] Resolve conflict --- ...econd_secfpn_50e_8xb16_j6gen2_base_120m.py | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py new file mode 100644 index 000000000..c25a89bf8 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py @@ -0,0 +1,168 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/j6gen2_base.py", + "../default/pipelines/default_lidar_intensity_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_50e_8xb16_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m_from_gen1" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[ + _base_.point_cloud_range[0], + _base_.point_cloud_range[1], + _base_.point_cloud_range[2], + 0.0, + 0.0, + ], + max_norm_values=[ + _base_.point_cloud_range[3], + _base_.point_cloud_range[4], + _base_.point_cloud_range[5], + 255.0, + 0.2, + ], + ), + pts_middle_encoder=dict( + in_channels=50, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) + +load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m/epoch_28.pth" From eba86b83bd46d613d3265c5cb8f3973f33bcf407 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Fri, 10 Jul 2026 14:33:47 +0900 Subject: [PATCH 06/46] Resolve conflict --- ...on_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py index c25a89bf8..fbce86b8b 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py @@ -16,7 +16,7 @@ info_directory_path = "info/kokseang_2_9_0/" experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m_from_gen1" +experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m_from_gen1_fixed_min_points" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter @@ -165,4 +165,4 @@ ) log_processor = dict(window_size=50) -load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m/epoch_28.pth" +load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m_fixed_min_points/epoch_28.pth" From c2f00e650e72ed907d07cafa0e5c94c0c1835396 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 10 Jul 2026 05:35:32 +0000 Subject: [PATCH 07/46] ci(pre-commit): autofix --- .../configs/detection3d/dataset/t4dataset/gen2_base.py | 2 +- .../datasets/transforms/object_min_points_filter.py | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py b/autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py index 295c9d370..4eb4a9272 100644 --- a/autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py +++ b/autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py @@ -18,7 +18,7 @@ # dataset scene setting dataset_version_list = [ - "db_jpntaxigen2_v1", + "db_jpntaxigen2_v1", "db_jpntaxigen2_v2", "db_j6gen2_v1", "db_j6gen2_v2", diff --git a/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py b/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py index 1b4abc4b2..97b4649e3 100644 --- a/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py +++ b/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py @@ -1,5 +1,4 @@ -import numpy as np - +import numpy as np from mmcv.transforms import BaseTransform from mmdet3d.structures.ops import box_np_ops from mmengine.registry import TRANSFORMS @@ -86,7 +85,7 @@ def transform(self, input_dict: dict) -> dict: keys are updated in the result dict. """ gt_bboxes_3d = input_dict["gt_bboxes_3d"] - + # Get radius of each bev center bbox_bev_centers = np.linalg.norm(gt_bboxes_3d.bev[:, :2]) bev_radius_mask = (bbox_bev_centers >= self.range_radius[0]) and (bbox_bev_centers < self.range_radius[1]) From 922c9f2a9568b1d0518b638435ac84ffabd9cb36 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:50:16 +0900 Subject: [PATCH 08/46] chore(CenterPoint): fix t4metricv2 config (#219) Signed-off-by: vividf --- .../second_secfpn_8xb16_121m_base_amp_t4metric_v2.py | 2 +- .../second_secfpn_8xb16_121m_j6gen2_base_amp_t4metric_v2.py | 2 +- .../second_secfpn_8xb16_121m_jpntaxi_base_amp_t4metric_v2.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_base_amp_t4metric_v2.py b/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_base_amp_t4metric_v2.py index e2df1985a..75d5a051d 100644 --- a/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_base_amp_t4metric_v2.py +++ b/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_base_amp_t4metric_v2.py @@ -16,7 +16,7 @@ frame_pass_fail_config = dict( target_labels=_base_.class_names, # Matching thresholds per class (must align with `plane_distance_thresholds` used in evaluation) - matching_threshold_list=[2.0, 2.0, 2.0, 2.0, 2.0], + matching_threshold_list=[2.0] * len(_base_.class_names), confidence_threshold_list=None, ) diff --git a/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_j6gen2_base_amp_t4metric_v2.py b/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_j6gen2_base_amp_t4metric_v2.py index 5c55f45a6..4b6d02376 100644 --- a/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_j6gen2_base_amp_t4metric_v2.py +++ b/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_j6gen2_base_amp_t4metric_v2.py @@ -16,7 +16,7 @@ frame_pass_fail_config = dict( target_labels=_base_.class_names, # Matching thresholds per class (must align with `plane_distance_thresholds` used in evaluation) - matching_threshold_list=[2.0, 2.0, 2.0, 2.0, 2.0], + matching_threshold_list=[2.0] * len(_base_.class_names), confidence_threshold_list=None, ) diff --git a/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_jpntaxi_base_amp_t4metric_v2.py b/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_jpntaxi_base_amp_t4metric_v2.py index 7a38a41c6..341ae3fe3 100644 --- a/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_jpntaxi_base_amp_t4metric_v2.py +++ b/projects/CenterPoint/configs/t4dataset/Centerpoint/second_secfpn_8xb16_121m_jpntaxi_base_amp_t4metric_v2.py @@ -16,7 +16,7 @@ frame_pass_fail_config = dict( target_labels=_base_.class_names, # Matching thresholds per class (must align with `plane_distance_thresholds` used in evaluation) - matching_threshold_list=[2.0, 2.0, 2.0, 2.0, 2.0], + matching_threshold_list=[2.0] * len(_base_.class_names), confidence_threshold_list=None, ) From 12d58bc450b46c052191d06983b470c89c20f6c4 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Tue, 7 Jul 2026 16:31:36 +0900 Subject: [PATCH 09/46] feat(BEVFusion): release BEVFusion 2.7.1_opt (#211) Signed-off-by: vividf --- .../docs/BEVFusion-L/v2/j6gen2_base.md | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md index 36812924c..116521295 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md @@ -1307,6 +1307,188 @@ --- + +### BEVFusion-LiDAR J6Gen2_base/2.7.1_opt + +
+ Changes + +Optimized the ONNX model and TensorRT plugin from `BEVFusion-LiDAR base/2.7.1` for faster inference, reducing BEVFusion-L latency by ~15%. The speedup comes from three changes to the sparse convolution backbone: + +- **Disable Sort**: skip sorting in `GetIndicePairsImplicitGemm`. +- **SparseConv + BatchNorm fusion**: fold BatchNorm into the preceding sparse convolution. +- **ImplicitGemm + ReLU fusion**: fuse the ReLU activation into the implicit GEMM kernel. + +> **Note**: The optimized ONNX requires the latest `autoware.universe` to run correctly. +
+ +
+ Artifacts + +- Deployed onnx and ROS parameter files (for internal) + - [WebAuto](https://evaluation.ci.tier4.jp/evaluation/mlpackages/46f8188d-e3be-4f2f-b989-fd27002610d7/releases/bf274dd7-e1d0-49d7-ba3a-8c9c66d05c00?project_id=zWhWRzei) + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/j6gen2_base/v2.7.1_opt/deployment.zip) + - [Google drive](https://drive.google.com/file/d/1cuGSnyBu_UdF5nPx6sUg-WcioXtQfFLW/view?usp=drive_link) +- Logs (for internal) + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/j6gen2_base/v2.7.1_opt/logs.zip) + - [Google drive](https://drive.google.com/file/d/1KZD_UEv8eMubyRHcWtUdznoUpPM30PF_/view?usp=drive_link) +- Pytorch Best checkpoints: + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/j6gen2_base/v2.7.1_opt/best_epoch_28.pth) + - [Google drive](https://drive.google.com/file/d/1Ss1UE5TAK_1ZKqUpMRKQ6R_8BhCYm5Eo/view?usp=drive_link) +
+ +
+ Evaluation + +**J6Gen2_base Datasets (5,179 frames)**: + + - j6gen2 (3,951 frames): db_j6gen2_v1 + db_j6gen2_v2 + db_j6gen2_v3 + db_j6gen2_v4 + db_j6gen2_v5 + db_j6gen2_v6 + db_j6gen2_v7 + db_j6gen2_v8 + db_j6gen2_v9 + - largebus (1,228 frames): db_largebus_v1 + db_largebus_v2 + db_largebus_v3 + +**Total BEV Center Distance mAP (eval range = 0.0 - 50.0m): 0.8824** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 64,520 | 0.9021 | 0.853 / 0.901 / 0.921 / 0.933 | 0.904 / 0.931 / 0.937 / 0.939 | 0.261 / 0.202 / 0.179 / 0.174 | +| truck | 6,947 | 0.8626 | 0.736 / 0.863 / 0.910 / 0.941 | 0.800 / 0.876 / 0.903 / 0.920 | 0.244 / 0.192 / 0.191 / 0.166 | +| bus | 2,275 | 0.9419 | 0.865 / 0.934 / 0.983 / 0.985 | 0.911 / 0.958 / 0.978 / 0.980 | 0.203 / 0.164 / 0.164 / 0.162 | +| bicycle | 1,379 | 0.8489 | 0.804 / 0.849 / 0.869 / 0.874 | 0.847 / 0.867 / 0.876 / 0.879 | 0.208 / 0.191 / 0.174 / 0.174 | +| pedestrian | 19,421 | 0.8567 | 0.834 / 0.853 / 0.865 / 0.875 | 0.822 / 0.832 / 0.838 / 0.844 | 0.159 / 0.154 / 0.144 / 0.149 | +| **ALL** | 94,542 | 0.8824 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 50.0 - 90.0m): 0.7187** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 58,562 | 0.8187 | 0.692 / 0.816 / 0.873 / 0.893 | 0.780 / 0.852 / 0.879 / 0.886 | 0.217 / 0.172 / 0.165 / 0.165 | +| truck | 5,101 | 0.6840 | 0.482 / 0.668 / 0.772 / 0.814 | 0.632 / 0.742 / 0.797 / 0.815 | 0.206 / 0.207 / 0.185 / 0.161 | +| bus | 2,078 | 0.8252 | 0.627 / 0.816 / 0.918 / 0.940 | 0.732 / 0.847 / 0.904 / 0.918 | 0.414 / 0.213 / 0.211 / 0.161 | +| bicycle | 758 | 0.5866 | 0.498 / 0.603 / 0.622 / 0.624 | 0.637 / 0.677 / 0.683 / 0.683 | 0.183 / 0.159 / 0.159 / 0.183 | +| pedestrian | 10,283 | 0.6791 | 0.648 / 0.675 / 0.691 / 0.703 | 0.690 / 0.704 / 0.713 / 0.720 | 0.136 / 0.136 / 0.136 / 0.137 | +| **ALL** | 76,782 | 0.7187 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 90.0 - 121.0m): 0.5221** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 20,371 | 0.6798 | 0.489 / 0.673 / 0.763 / 0.795 | 0.636 / 0.736 / 0.781 / 0.794 | 0.196 / 0.160 / 0.153 / 0.151 | +| truck | 3,172 | 0.5176 | 0.228 / 0.453 / 0.653 / 0.738 | 0.446 / 0.600 / 0.715 / 0.762 | 0.208 / 0.206 / 0.162 / 0.140 | +| bus | 376 | 0.5396 | 0.274 / 0.557 / 0.646 / 0.682 | 0.458 / 0.669 / 0.715 / 0.733 | 0.215 / 0.149 / 0.120 / 0.120 | +| bicycle | 155 | 0.4170 | 0.316 / 0.419 / 0.466 / 0.466 | 0.487 / 0.553 / 0.589 / 0.589 | 0.199 / 0.166 / 0.166 / 0.166 | +| pedestrian | 2,794 | 0.4565 | 0.442 / 0.452 / 0.462 / 0.471 | 0.563 / 0.569 / 0.573 / 0.578 | 0.120 / 0.120 / 0.120 / 0.120 | +| **ALL** | 26,868 | 0.5221 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 0.0 - 121.0m): 0.7990** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 143,453 | 0.8505 | 0.752 / 0.849 / 0.891 / 0.911 | 0.819 / 0.874 / 0.894 / 0.900 | 0.229 / 0.196 / 0.172 / 0.165 | +| truck | 15,220 | 0.7431 | 0.554 / 0.724 / 0.824 / 0.871 | 0.677 / 0.779 / 0.834 / 0.857 | 0.232 / 0.207 / 0.186 / 0.167 | +| bus | 4,729 | 0.8714 | 0.726 / 0.866 / 0.939 / 0.955 | 0.804 / 0.890 / 0.928 / 0.937 | 0.346 / 0.213 / 0.162 / 0.161 | +| bicycle | 2,292 | 0.7493 | 0.685 / 0.754 / 0.777 / 0.781 | 0.760 / 0.789 / 0.799 / 0.801 | 0.191 / 0.191 / 0.191 / 0.191 | +| pedestrian | 32,498 | 0.7807 | 0.755 / 0.777 / 0.790 / 0.801 | 0.760 / 0.771 / 0.778 / 0.784 | 0.152 / 0.137 / 0.136 / 0.136 | +| **ALL** | 198,192 | 0.7990 | — | — | — | + +--- + +**LargeBus**: db_largebus_v1 + db_largebus_v2 + db_largebus_v3 (1,228 frames) + +**Total BEV Center Distance mAP (eval range = 0.0 - 50.0m): 0.8939** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 14,883 | 0.9231 | 0.884 / 0.925 / 0.937 / 0.946 | 0.922 / 0.947 / 0.952 / 0.952 | 0.231 / 0.179 / 0.179 / 0.179 | +| truck | 1,193 | 0.8895 | 0.748 / 0.909 / 0.938 / 0.963 | 0.829 / 0.921 / 0.939 / 0.944 | 0.269 / 0.200 / 0.188 / 0.116 | +| bus | 336 | 0.9514 | 0.855 / 0.983 / 0.984 / 0.984 | 0.895 / 0.960 / 0.963 / 0.963 | 0.419 / 0.173 / 0.173 / 0.173 | +| bicycle | 740 | 0.8273 | 0.754 / 0.824 / 0.862 / 0.869 | 0.824 / 0.854 / 0.866 / 0.872 | 0.250 / 0.246 / 0.198 / 0.198 | +| pedestrian | 5,059 | 0.8783 | 0.862 / 0.876 / 0.883 / 0.891 | 0.849 / 0.857 / 0.862 / 0.866 | 0.150 / 0.150 / 0.148 / 0.135 | +| **ALL** | 22,211 | 0.8939 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 50.0 - 90.0m): 0.7679** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 10,994 | 0.8568 | 0.757 / 0.861 / 0.898 / 0.911 | 0.822 / 0.881 / 0.898 / 0.901 | 0.210 / 0.176 / 0.160 / 0.160 | +| truck | 1,011 | 0.7654 | 0.587 / 0.771 / 0.843 / 0.860 | 0.708 / 0.818 / 0.851 / 0.854 | 0.221 / 0.219 / 0.166 / 0.150 | +| bus | 143 | 0.8723 | 0.696 / 0.922 / 0.932 / 0.939 | 0.788 / 0.908 / 0.915 / 0.915 | 0.295 / 0.499 / 0.499 / 0.499 | +| bicycle | 463 | 0.5970 | 0.479 / 0.614 / 0.646 / 0.648 | 0.626 / 0.682 / 0.692 / 0.692 | 0.150 / 0.159 / 0.159 / 0.159 | +| pedestrian | 3,754 | 0.7481 | 0.725 / 0.747 / 0.755 / 0.766 | 0.738 / 0.749 / 0.755 / 0.761 | 0.123 / 0.121 / 0.121 / 0.121 | +| **ALL** | 16,365 | 0.7679 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 90.0 - 121.0m): 0.5929** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 3,018 | 0.7246 | 0.572 / 0.729 / 0.790 / 0.807 | 0.689 / 0.766 / 0.792 / 0.801 | 0.228 / 0.228 / 0.155 / 0.160 | +| truck | 602 | 0.6600 | 0.378 / 0.673 / 0.780 / 0.809 | 0.574 / 0.753 / 0.811 / 0.821 | 0.207 / 0.201 / 0.177 / 0.177 | +| bus | 60 | 0.6413 | 0.463 / 0.629 / 0.736 / 0.737 | 0.634 / 0.752 / 0.800 / 0.800 | 0.216 / 0.216 / 0.086 / 0.086 | +| bicycle | 85 | 0.3893 | 0.271 / 0.383 / 0.451 / 0.452 | 0.456 / 0.544 / 0.595 / 0.595 | 0.166 / 0.166 / 0.166 / 0.166 | +| pedestrian | 1,121 | 0.5496 | 0.536 / 0.546 / 0.552 / 0.565 | 0.622 / 0.629 / 0.633 / 0.638 | 0.118 / 0.118 / 0.118 / 0.121 | +| **ALL** | 4,886 | 0.5929 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 0.0 - 121.0m): 0.8261** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 28,895 | 0.8885 | 0.814 / 0.891 / 0.919 / 0.930 | 0.863 / 0.905 / 0.916 / 0.919 | 0.231 / 0.182 / 0.179 / 0.176 | +| truck | 2,806 | 0.8045 | 0.619 / 0.816 / 0.880 / 0.903 | 0.733 / 0.850 / 0.882 / 0.887 | 0.233 / 0.199 / 0.186 / 0.169 | +| bus | 539 | 0.8988 | 0.776 / 0.929 / 0.945 / 0.946 | 0.835 / 0.921 / 0.929 / 0.929 | 0.460 / 0.208 / 0.208 / 0.208 | +| bicycle | 1,288 | 0.7338 | 0.640 / 0.737 / 0.776 / 0.782 | 0.731 / 0.773 / 0.792 / 0.796 | 0.185 / 0.185 / 0.162 / 0.162 | +| pedestrian | 9,934 | 0.8051 | 0.786 / 0.803 / 0.811 / 0.821 | 0.781 / 0.791 / 0.796 / 0.801 | 0.150 / 0.135 / 0.135 / 0.135 | +| **ALL** | 43,462 | 0.8261 | — | — | — | + +--- + +**J6Gen2**: db_j6gen2_v1 + db_j6gen2_v2 + db_j6gen2_v3 + db_j6gen2_v4 + db_j6gen2_v5 + db_j6gen2_v6 + db_j6gen2_v7 + db_j6gen2_v8 + db_j6gen2_v9 (3,951 frames) + +**Total BEV Center Distance mAP (eval range = 0.0 - 50.0m): 0.8833** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 49,637 | 0.8941 | 0.842 / 0.891 / 0.912 / 0.931 | 0.899 / 0.926 / 0.933 / 0.935 | 0.272 / 0.203 / 0.188 / 0.173 | +| truck | 5,754 | 0.8571 | 0.733 / 0.855 / 0.904 / 0.936 | 0.795 / 0.867 / 0.895 / 0.915 | 0.242 / 0.191 / 0.191 / 0.180 | +| bus | 1,939 | 0.9386 | 0.864 / 0.931 / 0.975 / 0.985 | 0.916 / 0.957 / 0.981 / 0.984 | 0.265 / 0.187 / 0.139 / 0.138 | +| bicycle | 639 | 0.8776 | 0.867 / 0.881 / 0.881 / 0.881 | 0.879 / 0.887 / 0.887 / 0.887 | 0.174 / 0.174 / 0.174 / 0.174 | +| pedestrian | 14,362 | 0.8492 | 0.824 / 0.846 / 0.858 / 0.869 | 0.813 / 0.825 / 0.831 / 0.837 | 0.162 / 0.160 / 0.155 / 0.159 | +| **ALL** | 72,331 | 0.8833 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 50.0 - 90.0m): 0.7035** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 47,568 | 0.8111 | 0.678 / 0.809 / 0.868 / 0.890 | 0.771 / 0.846 / 0.874 / 0.882 | 0.243 / 0.170 / 0.165 / 0.165 | +| truck | 4,090 | 0.6651 | 0.459 / 0.644 / 0.755 / 0.803 | 0.613 / 0.724 / 0.785 / 0.806 | 0.206 / 0.206 / 0.185 / 0.164 | +| bus | 1,935 | 0.8227 | 0.622 / 0.807 / 0.919 / 0.943 | 0.729 / 0.843 / 0.904 / 0.920 | 0.413 / 0.212 / 0.176 / 0.161 | +| bicycle | 295 | 0.5784 | 0.543 / 0.588 / 0.590 / 0.592 | 0.675 / 0.686 / 0.686 / 0.690 | 0.215 / 0.207 / 0.207 / 0.207 | +| pedestrian | 6,529 | 0.6402 | 0.605 / 0.635 / 0.654 / 0.667 | 0.665 / 0.681 / 0.692 / 0.699 | 0.136 / 0.136 / 0.136 / 0.136 | +| **ALL** | 60,417 | 0.7035 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 90.0 - 121.0m): 0.5020** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 17,353 | 0.6719 | 0.474 / 0.662 / 0.758 / 0.793 | 0.628 / 0.732 / 0.779 / 0.793 | 0.188 / 0.171 / 0.146 / 0.150 | +| truck | 2,570 | 0.4839 | 0.193 / 0.399 / 0.622 / 0.722 | 0.414 / 0.561 / 0.692 / 0.750 | 0.206 / 0.206 / 0.161 / 0.128 | +| bus | 316 | 0.5176 | 0.234 / 0.541 / 0.626 / 0.669 | 0.429 / 0.656 / 0.703 / 0.724 | 0.306 / 0.120 / 0.120 / 0.120 | +| bicycle | 70 | 0.4435 | 0.340 / 0.466 / 0.484 / 0.484 | 0.513 / 0.584 / 0.602 / 0.602 | 0.199 / 0.199 / 0.199 / 0.199 | +| pedestrian | 1,673 | 0.3932 | 0.378 / 0.388 / 0.400 / 0.407 | 0.522 / 0.527 / 0.531 / 0.535 | 0.136 / 0.136 / 0.125 / 0.136 | +| **ALL** | 21,982 | 0.5020 | — | — | — | + +**Total BEV Center Distance mAP (eval range = 0.0 - 121.0m): 0.7958** + +| class_name | GTs | mAP | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | ---: | :---- | :---- | :---- | +| car | 114,558 | 0.8404 | 0.736 / 0.837 / 0.882 / 0.906 | 0.807 / 0.866 / 0.888 / 0.895 | 0.235 / 0.188 / 0.170 / 0.165 | +| truck | 12,414 | 0.7292 | 0.540 / 0.704 / 0.811 / 0.863 | 0.664 / 0.763 / 0.823 / 0.851 | 0.248 / 0.207 / 0.180 / 0.164 | +| bus | 4,190 | 0.8680 | 0.719 / 0.857 / 0.940 / 0.956 | 0.801 / 0.886 / 0.928 / 0.939 | 0.344 / 0.212 / 0.176 / 0.161 | +| bicycle | 1,004 | 0.7709 | 0.746 / 0.778 / 0.780 / 0.780 | 0.800 / 0.813 / 0.814 / 0.815 | 0.191 / 0.191 / 0.191 / 0.191 | +| pedestrian | 22,564 | 0.7703 | 0.742 / 0.766 / 0.781 / 0.792 | 0.751 / 0.763 / 0.771 / 0.777 | 0.152 / 0.138 / 0.138 / 0.144 | +| **ALL** | 154,730 | 0.7958 | — | — | — | + +
+ +--- + ### BEVFusion-LiDAR J6Gen2_base/2.7.1
From ebbf2d8f1d30e631a6c32c926b3a660010c76274 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Fri, 24 Jul 2026 16:37:59 +0900 Subject: [PATCH 10/46] Resolve conflict --- projects/BEVFusion/bevfusion/losses.py | 93 ++++++++++ ...cond_secfpn_30e_8xb16_jpntaxi_base_120m.py | 6 +- ...second_secfpn_30e_8xb24_gen1_base_120m.py} | 6 +- ...ond_secfpn_30e_8xb24_gen1_base_120m_amp.py | 156 ++++++++++++++++ ..._30e_8xb24_gen1_base_smooth_l1_120m_amp.py | 156 ++++++++++++++++ ...ecfpn_30e_8xb24_gen1_base_smoth_l1_120m.py | 154 ++++++++++++++++ ..._second_secfpn_50e_8xb16_gen2_base_120m.py | 5 +- ...econd_secfpn_50e_8xb16_j6gen2_base_120m.py | 4 +- ...cond_secfpn_50e_8xb16_jpntaxi_base_120m.py | 168 ++++++++++++++++++ ...ond_secfpn_50e_8xb24_gen2_base_120m_amp.py | 168 ++++++++++++++++++ ...d_secfpn_50e_8xb24_j6gen2_base_120m_amp.py | 168 ++++++++++++++++++ ...fault_lidar_second_secfpn_120m_iou_pred.py | 8 + ...ault_lidar_second_secfpn_smooth_l1_120m.py | 7 + .../default_30e_8xb24_adamw_cosine.py | 75 ++++++++ ... => default_30e_8xb24_adamw_cosine_amp.py} | 6 +- .../default_50e_8xb24_adamw_cosine_amp.py | 90 ++++++++++ .../default_70e_8xb16_adamw_cosine.py | 75 ++++++++ 17 files changed, 1332 insertions(+), 13 deletions(-) create mode 100644 projects/BEVFusion/bevfusion/losses.py rename projects/BEVFusion/configs/t4dataset/BEVFusion-L/{bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py => bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py} (95%) create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py create mode 100644 projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py create mode 100644 projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py create mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine.py rename projects/BEVFusion/configs/t4dataset/default/schedulers/{default_30e_8xb32_adamw_cosine_amp.py => default_30e_8xb24_adamw_cosine_amp.py} (92%) create mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py create mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py new file mode 100644 index 000000000..18b13b3f1 --- /dev/null +++ b/projects/BEVFusion/bevfusion/losses.py @@ -0,0 +1,93 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import Optional, Union + +import torch.nn as nn +from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss +from mmdet.registry import MODELS +from torch import Tensor +from torch.nn import BCEWithLogitsLoss + + +@MODELS.register_module(force=True) +class BCEWithLogitsLoss(nn.Module): + """BCEWithLogitsLoss""" + + def __init__( + self, + weight=None, + size_average=None, + reduce=None, + reduction='mean', + pos_weight=None + ) -> None: + super().__init__() + self.alpha = alpha + self.gamma = gamma + self.reduction = reduction + self.loss_weight = loss_weight + self.pos_weight = pos_weight + self.neg_weight = neg_weight + + def forward( + self, + pred: Tensor, + target: Tensor, + pos_inds: Optional[Tensor] = None, + pos_labels: Optional[Tensor] = None, + weight: Optional[Tensor] = None, + avg_factor: Optional[Union[int, float]] = None, + reduction_override: Optional[str] = None, + ) -> Tensor: + """Forward function. + + If you want to manually determine which positions are + positive samples, you can set the pos_index and pos_label + parameter. Currently, only the CenterNet update version uses + the parameter. + + Args: + pred (torch.Tensor): The prediction. The shape is (N, num_classes). + target (torch.Tensor): The learning target of the prediction + in gaussian distribution. The shape is (N, num_classes). + pos_inds (torch.Tensor): The positive sample index. + Defaults to None. + pos_labels (torch.Tensor): The label corresponding to the positive + sample index. Defaults to None. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, float, optional): Average factor that is used to + average the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. + """ + assert reduction_override in (None, "none", "mean", "sum") + reduction = reduction_override if reduction_override else self.reduction + if pos_inds is not None: + assert pos_labels is not None + # Only used by centernet update version + loss_reg = self.loss_weight * gaussian_focal_loss_with_pos_inds( + pred, + target, + pos_inds, + pos_labels, + alpha=self.alpha, + gamma=self.gamma, + pos_weight=self.pos_weight, + neg_weight=self.neg_weight, + reduction=reduction, + avg_factor=avg_factor, + ) + else: + loss_reg = self.loss_weight * gaussian_focal_loss( + pred, + target, + weight, + alpha=self.alpha, + gamma=self.gamma, + pos_weight=self.pos_weight, + neg_weight=self.neg_weight, + reduction=reduction, + avg_factor=avg_factor, + ) + return loss_reg diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py index 05947c2fd..d3cdebea0 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py @@ -13,9 +13,9 @@ # user setting data_root = "data/t4dataset/" -info_directory_path = "info/user_name/" +info_directory_path = "info/kokseang_2_9_0/" -experiment_group_name = "bevfusion_lidar_intensity/jpntaxi_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar_intensity_2_9_1/jpntaxi_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name @@ -165,4 +165,4 @@ ) log_processor = dict(window_size=50) -load_from = None +load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py similarity index 95% rename from projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py rename to projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py index 1ce2bcb1e..b2e5761c1 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py @@ -3,7 +3,7 @@ "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", "../default/pipelines/default_lidar_120m.py", "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_30e_8xb32_adamw_cosine_amp.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine.py", "../default/default_misc.py", ] @@ -15,8 +15,8 @@ data_root = "data/t4dataset/" info_directory_path = "info/kokseang_2_9_0/" -experiment_group_name = "bevfusion_lidar/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb32_gen1_base_120m_amp" +experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py new file mode 100644 index 000000000..af19e4b74 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py @@ -0,0 +1,156 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", + "../default/pipelines/default_lidar_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine_amp.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], + max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], + ), + pts_middle_encoder=dict( + in_channels=32, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) + +# activation_checkpointing = ["pts_backbone"] diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py new file mode 100644 index 000000000..42f6a464c --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py @@ -0,0 +1,156 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", + "../default/pipelines/default_lidar_120m.py", + "../default/models/default_lidar_second_secfpn_smooth_l1_120m.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine_amp.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], + max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], + ), + pts_middle_encoder=dict( + in_channels=32, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) + +# activation_checkpointing = ["pts_backbone"] diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py new file mode 100644 index 000000000..5ad7d6ee2 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py @@ -0,0 +1,154 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", + "../default/pipelines/default_lidar_120m.py", + "../default/models/default_lidar_second_secfpn_smooth_l1_120m.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], + max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], + ), + pts_middle_encoder=dict( + in_channels=32, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py index 10727d8ec..a30d8c982 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py @@ -15,7 +15,7 @@ data_root = "data/t4dataset/" info_directory_path = "info/kokseang_2_9_0/" -experiment_group_name = "bevfusion_lidar_intensity/gen2_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar_intensity_2_9_0/gen2_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name @@ -164,4 +164,5 @@ checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), ) log_processor = dict(window_size=50) -load_from = None + +load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m_fixed_min_points/epoch_28.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py index fbce86b8b..a41c922c8 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py @@ -16,7 +16,7 @@ info_directory_path = "info/kokseang_2_9_0/" experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m_from_gen1_fixed_min_points" +experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m_from_gen2_base" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter @@ -165,4 +165,4 @@ ) log_processor = dict(window_size=50) -load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m_fixed_min_points/epoch_28.pth" +load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py new file mode 100644 index 000000000..071f0e230 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py @@ -0,0 +1,168 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/jpntaxi_base.py", + "../default/pipelines/default_lidar_intensity_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_50e_8xb16_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_intensity_2_9_1/jpntaxi_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[ + _base_.point_cloud_range[0], + _base_.point_cloud_range[1], + _base_.point_cloud_range[2], + 0.0, + 0.0, + ], + max_norm_values=[ + _base_.point_cloud_range[3], + _base_.point_cloud_range[4], + _base_.point_cloud_range[5], + 255.0, + 0.2, + ], + ), + pts_middle_encoder=dict( + in_channels=50, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) + +load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py new file mode 100644 index 000000000..f1b067067 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py @@ -0,0 +1,168 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py", + "../default/pipelines/default_lidar_intensity_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_50e_8xb24_adamw_cosine_amp.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_intensity_2_9_0/gen2_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[ + _base_.point_cloud_range[0], + _base_.point_cloud_range[1], + _base_.point_cloud_range[2], + 0.0, + 0.0, + ], + max_norm_values=[ + _base_.point_cloud_range[3], + _base_.point_cloud_range[4], + _base_.point_cloud_range[5], + 255.0, + 0.2, + ], + ), + pts_middle_encoder=dict( + in_channels=50, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) + +load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp/best_epoch_26.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py new file mode 100644 index 000000000..ff1fbeae3 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py @@ -0,0 +1,168 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/j6gen2_base.py", + "../default/pipelines/default_lidar_intensity_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_50e_8xb24_adamw_cosine_amp.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_from_gen2_base_amp" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[ + _base_.point_cloud_range[0], + _base_.point_cloud_range[1], + _base_.point_cloud_range[2], + 0.0, + 0.0, + ], + max_norm_values=[ + _base_.point_cloud_range[3], + _base_.point_cloud_range[4], + _base_.point_cloud_range[5], + 255.0, + 0.2, + ], + ), + pts_middle_encoder=dict( + in_channels=50, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) + +load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py new file mode 100644 index 000000000..10febb310 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py @@ -0,0 +1,8 @@ +num_proposals = 500 +max_num_points = 32 +max_voxels = [120000, 160000] +out_size_factor = 8 + +model = dict( + loss_iou=None, +) diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py new file mode 100644 index 000000000..83afb8941 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py @@ -0,0 +1,7 @@ +_base_ = [ + "./default_lidar_second_secfpn_120m.py" +] + +model = dict( + loss_bbox=dict(type="mmdet.SmoothL1Loss", reduction="mean", loss_weight=0.25) +) diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine.py new file mode 100644 index 000000000..688f292c0 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine.py @@ -0,0 +1,75 @@ +# learning rate +lr = 3.0e-4 +t_max = 3 +max_epochs = 30 +val_interval = 5 + +train_gpu_size = 8 +test_batch_size = 4 +train_batch_size = 24 + +param_scheduler = [ + # learning rate scheduler + # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 + # during the next epochs, learning rate decreases from lr * 10 to + # lr * 1e-4 + dict( + type="CosineAnnealingLR", + T_max=t_max, + eta_min=lr * 10, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingLR", + T_max=(max_epochs - t_max), + eta_min=lr * 1e-4, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), + # momentum scheduler + # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 + # during the next epochs, momentum increases from 0.85 / 0.95 to 1 + dict( + type="CosineAnnealingMomentum", + T_max=t_max, + eta_min=0.85 / 0.95, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingMomentum", + T_max=(max_epochs - t_max), + eta_min=1, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), +] + +# runtime settings +# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 +train_cfg = dict( + by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] +) +val_cfg = dict() +test_cfg = dict() + +optim_wrapper = dict( + type="OptimWrapper", + optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), + clip_grad=dict(max_norm=35, norm_type=2), +) + +auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) + +# Only set if the number of train_gpu_size more than 1 +if train_gpu_size > 1: + sync_bn = "torch" diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb32_adamw_cosine_amp.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine_amp.py similarity index 92% rename from projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb32_adamw_cosine_amp.py rename to projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine_amp.py index 959c23bab..c0d0e66b6 100644 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb32_adamw_cosine_amp.py +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine_amp.py @@ -6,7 +6,7 @@ train_gpu_size = 8 test_batch_size = 4 -train_batch_size = 32 +train_batch_size = 24 param_scheduler = [ # learning rate scheduler @@ -63,7 +63,7 @@ test_cfg = dict() optimizer = dict(type="AdamW", lr=lr, weight_decay=0.01) -clip_grad = dict(max_norm=15.0, norm_type=2) # max norm of gradients upper bound to be 15.0 since amp is used +clip_grad = dict(max_norm=5.0, norm_type=2) # max norm of gradients upper bound to be 5.0 since amp is used optim_wrapper = dict( type="AmpOptimWrapper", @@ -72,7 +72,7 @@ clip_grad=clip_grad, # Update it accordingly loss_scale={ - "init_scale": 2.0**10, # intial_scale: 1024 + "init_scale": 2.0**9, # intial_scale: 512 "growth_interval": 1000, }, ) diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py new file mode 100644 index 000000000..b95467cf2 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py @@ -0,0 +1,90 @@ +# learning rate +lr = 2.0e-4 +t_max = 5 +max_epochs = 50 +val_interval = 5 + +train_gpu_size = 8 +test_batch_size = 4 +train_batch_size = 24 + +param_scheduler = [ + # learning rate scheduler + # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 + # during the next epochs, learning rate decreases from lr * 10 to + # lr * 1e-4 + dict( + type="CosineAnnealingLR", + T_max=t_max, + eta_min=lr * 10, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingLR", + T_max=(max_epochs - t_max), + eta_min=lr * 1e-4, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), + # momentum scheduler + # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 + # during the next epochs, momentum increases from 0.85 / 0.95 to 1 + dict( + type="CosineAnnealingMomentum", + T_max=t_max, + eta_min=0.85 / 0.95, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingMomentum", + T_max=(max_epochs - t_max), + eta_min=1, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), +] + +# runtime settings +# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 +train_cfg = dict( + by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] +) +val_cfg = dict() +test_cfg = dict() + +optimizer = dict(type="AdamW", lr=lr, weight_decay=0.01) +clip_grad = dict(max_norm=5.0, norm_type=2) # max norm of gradients upper bound to be 5.0 since amp is used + +optim_wrapper = dict( + type="AmpOptimWrapper", + dtype="float16", + optimizer=optimizer, + clip_grad=clip_grad, + # Update it accordingly + loss_scale={ + "init_scale": 2.0**9, # intial_scale: 512 + "growth_interval": 1000, + }, +) + +# optim_wrapper = dict( +# type="OptimWrapper", +# optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), +# clip_grad=dict(max_norm=35, norm_type=2), +# ) + +auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) + +# Only set if the number of train_gpu_size more than 1 +if train_gpu_size > 1: + sync_bn = "torch" diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py new file mode 100644 index 000000000..5ad84665b --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py @@ -0,0 +1,75 @@ +# learning rate +lr = 2.0e-4 +t_max = 5 +max_epochs = 70 +val_interval = 5 + +train_gpu_size = 8 +test_batch_size = 4 +train_batch_size = 16 + +param_scheduler = [ + # learning rate scheduler + # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 10 + # during the next epochs, learning rate decreases from lr * 10 to + # lr * 1e-4 + dict( + type="CosineAnnealingLR", + T_max=t_max, + eta_min=lr * 10, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingLR", + T_max=(max_epochs - t_max), + eta_min=lr * 1e-4, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), + # momentum scheduler + # During the first (0.10 * max_epochs) epochs, momentum increases from 0 to 0.85 / 0.95 + # during the next epochs, momentum increases from 0.85 / 0.95 to 1 + dict( + type="CosineAnnealingMomentum", + T_max=t_max, + eta_min=0.85 / 0.95, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingMomentum", + T_max=(max_epochs - t_max), + eta_min=1, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), +] + +# runtime settings +# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 +train_cfg = dict( + by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] +) +val_cfg = dict() +test_cfg = dict() + +optim_wrapper = dict( + type="OptimWrapper", + optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), + clip_grad=dict(max_norm=15, norm_type=2), +) + +auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) + +# Only set if the number of train_gpu_size more than 1 +if train_gpu_size > 1: + sync_bn = "torch" From 0326894d691f3d83f272abc4d5ac58adebf82d46 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 07:47:54 +0000 Subject: [PATCH 11/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/losses.py | 9 +-------- .../models/default_lidar_second_secfpn_smooth_l1_120m.py | 8 ++------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 18b13b3f1..87d257ad8 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -12,14 +12,7 @@ class BCEWithLogitsLoss(nn.Module): """BCEWithLogitsLoss""" - def __init__( - self, - weight=None, - size_average=None, - reduce=None, - reduction='mean', - pos_weight=None - ) -> None: + def __init__(self, weight=None, size_average=None, reduce=None, reduction="mean", pos_weight=None) -> None: super().__init__() self.alpha = alpha self.gamma = gamma diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py index 83afb8941..fd9800740 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py @@ -1,7 +1,3 @@ -_base_ = [ - "./default_lidar_second_secfpn_120m.py" -] +_base_ = ["./default_lidar_second_secfpn_120m.py"] -model = dict( - loss_bbox=dict(type="mmdet.SmoothL1Loss", reduction="mean", loss_weight=0.25) -) +model = dict(loss_bbox=dict(type="mmdet.SmoothL1Loss", reduction="mean", loss_weight=0.25)) From a00a0b30bd4090f6c5554c7c37443cf62e84f9ee Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Fri, 24 Jul 2026 17:35:01 +0900 Subject: [PATCH 12/46] Resolve conflict --- projects/BEVFusion/bevfusion/__init__.py | 2 + projects/BEVFusion/bevfusion/losses.py | 82 ++++----- ...cfpn_30e_8xb24_gen1_base_120m_iou_pred.py} | 8 +- ..._30e_8xb24_gen1_base_smooth_l1_120m_amp.py | 156 ------------------ ...fault_lidar_second_secfpn_120m_iou_pred.py | 12 +- 5 files changed, 55 insertions(+), 205 deletions(-) rename projects/BEVFusion/configs/t4dataset/BEVFusion-L/{bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py => bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py} (96%) delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py diff --git a/projects/BEVFusion/bevfusion/__init__.py b/projects/BEVFusion/bevfusion/__init__.py index e84525651..b2403cc18 100644 --- a/projects/BEVFusion/bevfusion/__init__.py +++ b/projects/BEVFusion/bevfusion/__init__.py @@ -8,6 +8,7 @@ from .transformer import TransformerDecoderLayer from .transforms_3d import BEVFusionGlobalRotScaleTrans, BEVFusionRandomFlip3D, GridMask, ImageAug3D from .utils import BBoxBEVL1Cost, HeuristicAssigner3D, HungarianAssigner3D, IoU3DCost, TransFusionBBoxCoder +from .losses import CustomBCEWithLogitsLoss __all__ = [ "BEVFusion", @@ -29,4 +30,5 @@ "BEVFusionGlobalRotScaleTrans", "TransFusionBBoxCoder", "HardSimpleVoxelSinCosEncoder", + "CustomBCEWithLogitsLoss" ] diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 87d257ad8..26a1fef85 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -3,30 +3,52 @@ import torch.nn as nn from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss -from mmdet.registry import MODELS +from mmdet3d.registry import MODELS from torch import Tensor -from torch.nn import BCEWithLogitsLoss +from torch.nn import functional as F -@MODELS.register_module(force=True) -class BCEWithLogitsLoss(nn.Module): +@weighted_loss +def bce_with_logits_loss( + pred: Tensor, + target: Tensor, + weight: Tensor, + reduction: str = 'mean', + avg_factor: Optional[int] = None, + pos_weight: Optional[Tensor] = None +) -> Tensor: + """ + """ + + losses = F.binary_cross_entropy_with_logits( + pred, + target, + None, # Always None since the weight will be used in the weighted_loss wrapper + pos_weight=pos_weight, + reduction='none', # Always none since the reduction will happen in the weighted_loss wrapper + ) + return losses + + +@MODELS.register_module() +class CustomBCEWithLogitsLoss(nn.Module): """BCEWithLogitsLoss""" - def __init__(self, weight=None, size_average=None, reduce=None, reduction="mean", pos_weight=None) -> None: + def __init__( + self, + weight=None, + reduction='mean', + pos_weight=None + ) -> None: super().__init__() - self.alpha = alpha - self.gamma = gamma + self.weight = weight self.reduction = reduction - self.loss_weight = loss_weight self.pos_weight = pos_weight - self.neg_weight = neg_weight def forward( self, pred: Tensor, target: Tensor, - pos_inds: Optional[Tensor] = None, - pos_labels: Optional[Tensor] = None, weight: Optional[Tensor] = None, avg_factor: Optional[Union[int, float]] = None, reduction_override: Optional[str] = None, @@ -56,31 +78,13 @@ def forward( """ assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - if pos_inds is not None: - assert pos_labels is not None - # Only used by centernet update version - loss_reg = self.loss_weight * gaussian_focal_loss_with_pos_inds( - pred, - target, - pos_inds, - pos_labels, - alpha=self.alpha, - gamma=self.gamma, - pos_weight=self.pos_weight, - neg_weight=self.neg_weight, - reduction=reduction, - avg_factor=avg_factor, - ) - else: - loss_reg = self.loss_weight * gaussian_focal_loss( - pred, - target, - weight, - alpha=self.alpha, - gamma=self.gamma, - pos_weight=self.pos_weight, - neg_weight=self.neg_weight, - reduction=reduction, - avg_factor=avg_factor, - ) - return loss_reg + + losses = bce_with_logits_loss( + pred, + target, + weight, + reduction=reduction, + avg_factor=avg_factor, + pos_weight=self.pos_weight + ) + return losses diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py similarity index 96% rename from projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py rename to projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py index af19e4b74..182d953dc 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py @@ -2,8 +2,8 @@ "../../../../../autoware_ml/configs/detection3d/default_runtime.py", "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_30e_8xb24_adamw_cosine_amp.py", + "../default/models/default_lidar_second_secfpn_120m_iou_pred.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine.py", "../default/default_misc.py", ] @@ -16,7 +16,7 @@ info_directory_path = "info/kokseang_2_9_0/" experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp" +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter @@ -152,5 +152,3 @@ checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), ) log_processor = dict(window_size=50) - -# activation_checkpointing = ["pts_backbone"] diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py deleted file mode 100644 index 42f6a464c..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp.py +++ /dev/null @@ -1,156 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", - "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_smooth_l1_120m.py", - "../default/schedulers/default_30e_8xb24_adamw_cosine_amp.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m_amp" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], - max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], - ), - pts_middle_encoder=dict( - in_channels=32, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) - -# activation_checkpointing = ["pts_backbone"] diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py index 10febb310..6cfda7878 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py @@ -1,8 +1,10 @@ -num_proposals = 500 -max_num_points = 32 -max_voxels = [120000, 160000] -out_size_factor = 8 +_base_ = [ + "./default_lidar_second_secfpn_120m.py" +] model = dict( - loss_iou=None, + bbox_head=dict( + loss_iou=dict(_delete_=True, type="CustomBCEWithLogitsLoss", reduction="mean", weight=1.0), + common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou=[1, 2]), + ) ) From 156f892aadcbae907a73cb48923778c24e6ae113 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 08:35:36 +0000 Subject: [PATCH 13/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/__init__.py | 4 +- projects/BEVFusion/bevfusion/losses.py | 37 +++++++------------ ...fault_lidar_second_secfpn_120m_iou_pred.py | 10 ++--- 3 files changed, 19 insertions(+), 32 deletions(-) diff --git a/projects/BEVFusion/bevfusion/__init__.py b/projects/BEVFusion/bevfusion/__init__.py index b2403cc18..f68e36452 100644 --- a/projects/BEVFusion/bevfusion/__init__.py +++ b/projects/BEVFusion/bevfusion/__init__.py @@ -4,11 +4,11 @@ from .bevfusion_voxel_encoder import HardSimpleVoxelSinCosEncoder from .depth_lss import DepthLSSTransform, LSSTransform from .loading import BEVLoadMultiViewImageFromFiles +from .losses import CustomBCEWithLogitsLoss from .sparse_encoder import BEVFusionSparseEncoder from .transformer import TransformerDecoderLayer from .transforms_3d import BEVFusionGlobalRotScaleTrans, BEVFusionRandomFlip3D, GridMask, ImageAug3D from .utils import BBoxBEVL1Cost, HeuristicAssigner3D, HungarianAssigner3D, IoU3DCost, TransFusionBBoxCoder -from .losses import CustomBCEWithLogitsLoss __all__ = [ "BEVFusion", @@ -30,5 +30,5 @@ "BEVFusionGlobalRotScaleTrans", "TransFusionBBoxCoder", "HardSimpleVoxelSinCosEncoder", - "CustomBCEWithLogitsLoss" + "CustomBCEWithLogitsLoss", ] diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 26a1fef85..065be016b 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -2,8 +2,8 @@ from typing import Optional, Union import torch.nn as nn -from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss from mmdet3d.registry import MODELS +from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss from torch import Tensor from torch.nn import functional as F @@ -12,20 +12,19 @@ def bce_with_logits_loss( pred: Tensor, target: Tensor, - weight: Tensor, - reduction: str = 'mean', + weight: Tensor, + reduction: str = "mean", avg_factor: Optional[int] = None, - pos_weight: Optional[Tensor] = None + pos_weight: Optional[Tensor] = None, ) -> Tensor: - """ - """ - + """ """ + losses = F.binary_cross_entropy_with_logits( - pred, - target, - None, # Always None since the weight will be used in the weighted_loss wrapper - pos_weight=pos_weight, - reduction='none', # Always none since the reduction will happen in the weighted_loss wrapper + pred, + target, + None, # Always None since the weight will be used in the weighted_loss wrapper + pos_weight=pos_weight, + reduction="none", # Always none since the reduction will happen in the weighted_loss wrapper ) return losses @@ -34,12 +33,7 @@ def bce_with_logits_loss( class CustomBCEWithLogitsLoss(nn.Module): """BCEWithLogitsLoss""" - def __init__( - self, - weight=None, - reduction='mean', - pos_weight=None - ) -> None: + def __init__(self, weight=None, reduction="mean", pos_weight=None) -> None: super().__init__() self.weight = weight self.reduction = reduction @@ -80,11 +74,6 @@ def forward( reduction = reduction_override if reduction_override else self.reduction losses = bce_with_logits_loss( - pred, - target, - weight, - reduction=reduction, - avg_factor=avg_factor, - pos_weight=self.pos_weight + pred, target, weight, reduction=reduction, avg_factor=avg_factor, pos_weight=self.pos_weight ) return losses diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py index 6cfda7878..af8aac751 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py @@ -1,10 +1,8 @@ -_base_ = [ - "./default_lidar_second_secfpn_120m.py" -] +_base_ = ["./default_lidar_second_secfpn_120m.py"] model = dict( - bbox_head=dict( + bbox_head=dict( loss_iou=dict(_delete_=True, type="CustomBCEWithLogitsLoss", reduction="mean", weight=1.0), - common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou=[1, 2]), - ) + common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou=[1, 2]), + ) ) From 138d5ca5f225db374184be0443c9e6923ff720fb Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Fri, 24 Jul 2026 17:42:02 +0900 Subject: [PATCH 14/46] Resolve conflict --- projects/BEVFusion/bevfusion/losses.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 065be016b..1efb3466e 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -12,10 +12,7 @@ def bce_with_logits_loss( pred: Tensor, target: Tensor, - weight: Tensor, - reduction: str = "mean", - avg_factor: Optional[int] = None, - pos_weight: Optional[Tensor] = None, + pos_weight: Optional[Tensor] = None ) -> Tensor: """ """ From b4c2f69cb1c8a8bc4db75b1303b58c357753649c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 08:42:34 +0000 Subject: [PATCH 15/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/losses.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 1efb3466e..aa99b71af 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -9,11 +9,7 @@ @weighted_loss -def bce_with_logits_loss( - pred: Tensor, - target: Tensor, - pos_weight: Optional[Tensor] = None -) -> Tensor: +def bce_with_logits_loss(pred: Tensor, target: Tensor, pos_weight: Optional[Tensor] = None) -> Tensor: """ """ losses = F.binary_cross_entropy_with_logits( From 30da5c8613cb1eeceee3a59258be27bb933cc294 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sat, 25 Jul 2026 12:16:44 +0900 Subject: [PATCH 16/46] Resolve conflict --- projects/BEVFusion/bevfusion/losses.py | 6 +++--- .../models/default_lidar_second_secfpn_120m_iou_pred.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index aa99b71af..eedfb61fc 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -26,9 +26,9 @@ def bce_with_logits_loss(pred: Tensor, target: Tensor, pos_weight: Optional[Tens class CustomBCEWithLogitsLoss(nn.Module): """BCEWithLogitsLoss""" - def __init__(self, weight=None, reduction="mean", pos_weight=None) -> None: + def __init__(self, loss_weight=None, reduction="mean", pos_weight=None) -> None: super().__init__() - self.weight = weight + self.loss_weight = weight self.reduction = reduction self.pos_weight = pos_weight @@ -66,7 +66,7 @@ def forward( assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - losses = bce_with_logits_loss( + losses = self.loss_weight * bce_with_logits_loss( pred, target, weight, reduction=reduction, avg_factor=avg_factor, pos_weight=self.pos_weight ) return losses diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py index af8aac751..a70d1e331 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py @@ -2,7 +2,7 @@ model = dict( bbox_head=dict( - loss_iou=dict(_delete_=True, type="CustomBCEWithLogitsLoss", reduction="mean", weight=1.0), + loss_iou=dict(_delete_=True, type="CustomBCEWithLogitsLoss", reduction="mean", loss_weight=1.0), common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou=[1, 2]), ) ) From 52239a9ffa5ed8a3a91783ed649bad7af0f006ad Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 26 Jul 2026 11:27:24 +0900 Subject: [PATCH 17/46] Resolve conflict --- projects/BEVFusion/bevfusion/__init__.py | 3 +- .../BEVFusion/bevfusion/bevfusion_head.py | 15 +- projects/BEVFusion/bevfusion/losses.py | 174 +++++++++++++++++- ...ecfpn_30e_8xb24_gen1_base_120m_iou_pred.py | 2 +- ...e_8xb24_gen1_base_120m_loss_bev_corners.py | 166 +++++++++++++++++ .../default_lidar_second_secfpn_120m.py | 1 + ...fault_lidar_second_secfpn_120m_iou_pred.py | 2 +- 7 files changed, 358 insertions(+), 5 deletions(-) create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py diff --git a/projects/BEVFusion/bevfusion/__init__.py b/projects/BEVFusion/bevfusion/__init__.py index f68e36452..f608711e5 100644 --- a/projects/BEVFusion/bevfusion/__init__.py +++ b/projects/BEVFusion/bevfusion/__init__.py @@ -4,7 +4,7 @@ from .bevfusion_voxel_encoder import HardSimpleVoxelSinCosEncoder from .depth_lss import DepthLSSTransform, LSSTransform from .loading import BEVLoadMultiViewImageFromFiles -from .losses import CustomBCEWithLogitsLoss +from .losses import CustomBCEWithLogitsLoss, BEVCornerLoss from .sparse_encoder import BEVFusionSparseEncoder from .transformer import TransformerDecoderLayer from .transforms_3d import BEVFusionGlobalRotScaleTrans, BEVFusionRandomFlip3D, GridMask, ImageAug3D @@ -31,4 +31,5 @@ "TransFusionBBoxCoder", "HardSimpleVoxelSinCosEncoder", "CustomBCEWithLogitsLoss", + "BEVCornerLoss" ] diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index 2d713b022..9e8b43941 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -64,6 +64,7 @@ def __init__( bias="auto", # loss loss_iou=None, + loss_bev_corners=None, loss_cls=dict(type="mmdet.GaussianFocalLoss", reduction="mean"), loss_bbox=dict(type="mmdet.L1Loss", reduction="mean"), loss_heatmap=dict(type="mmdet.GaussianFocalLoss", reduction="mean"), @@ -90,6 +91,7 @@ def __init__( self.num_classes += 1 self.loss_cls = MODELS.build(loss_cls) self.loss_iou = MODELS.build(loss_iou) if loss_iou is not None else None + self.loss_bev_corners = MODELS.build(loss_bev_corners) if loss_bev_corners is not None else None self.loss_bbox = MODELS.build(loss_bbox) self.loss_heatmap = MODELS.build(loss_heatmap) self.share_conv_out_channels = hidden_channel @@ -904,7 +906,18 @@ def loss_by_feat( loss_dict[f"{prefix}_loss_iou"] = self.loss_iou( layer_ious, ious, layer_iou_weights, avg_factor=max(num_pos, 1) ) - + + # loss_bev_corner + if self.loss_bev_corners is not None: + # [BS, num_proposals] + layer_bbox_bev_corners_weight = layer_bbox_weights[:, :, 0] + loss_bev_corner = self.loss_bev_corner( + preds, + layer_bbox_targets, + layer_labels, + layer_bbox_bev_corners_weight, + avg_factor=max(num_pos, 1) + ) loss_dict["matched_ious"] = layer_loss_cls.new_tensor(matched_ious) return loss_dict diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index eedfb61fc..e768cf098 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -22,13 +22,54 @@ def bce_with_logits_loss(pred: Tensor, target: Tensor, pos_weight: Optional[Tens return losses +@weighted_loss +def corner_l1_losses(pred: Tensor, target: Tensor, norm_values: Optional[Tensor] = None, barrier_masks = None) -> Tensor: + """ """ + + # Shape: [B, N, 4, 2] -> [B, N, 4] -> [B, N] + direct_losses = ( + pred - target + ).abs().sum(dim=-1).mean(dim=-1) + + losses = direct_losses + # Branch out barrier if set + if barrier_masks is not None: + + # [c0, c1, c2, c3] -> [c2, c3, c0, c1] + target_shifted_180 = torch.roll( + target, + shifts=2, + dims=-2, + ) + + shifted_losses = ( + pred - target_shifted_180 + ).abs().sum(dim=-1).mean(dim=-1) # [B, N] + + barrier_losses = torch.minimum( + direct_losses, + shifted_losses, + ) + + # Use symmetry-aware loss only for barriers. + losses = torch.where( + barrier_masks, + barrier_losses, + direct_losses, + ) + + if norm_values is not None: + losses = losses / norm_values + return losses + + @MODELS.register_module() class CustomBCEWithLogitsLoss(nn.Module): """BCEWithLogitsLoss""" def __init__(self, loss_weight=None, reduction="mean", pos_weight=None) -> None: super().__init__() - self.loss_weight = weight + self.loss_weight = loss_weight self.reduction = reduction self.pos_weight = pos_weight @@ -70,3 +111,134 @@ def forward( pred, target, weight, reduction=reduction, avg_factor=avg_factor, pos_weight=self.pos_weight ) return losses + + +@MODELS.register_module() +class BEVCornerLoss(nn.Module): + """Compute 4 corner losses between predictions and gt boxes.""" + + def __init__( + self, + out_size_factor, + voxel_size, + pc_range, + gt_diagonal_norm: bool, + cone_label_index: Optional[int], + barrier_label_index: Optional[int], + loss_weight=1.0, + reduction="mean" + ) -> None: + super().__init__() + self.loss_weight = loss_weight + self.reduction = reduction + self.out_size_factor = out_size_factor + self.voxel_size = voxel_size + self.pc_range = pc_range + self.gt_diagonal_norm = gt_diagonal_norm + self.cone_label_index = cone_label_index + self.barrier_label_index = barrier_label_index + + def _convert_to_bev_corners( + self, + bboxes: Tensor, + labels: Tensor + ) -> Tensor: + """ + bboxes (B, num_proposal, 10) + """ + batch_size = bboxes.shape[0] + center_x = bboxes[:, :, 0] * self.out_size_factor * self.voxel_size[0] + self.pc_range[0] + center_y = bboxes[:, :, 1] * self.out_size_factor * self.voxel_size[1] + self.pc_range[1] + lw = bboxes[:, :, 3:5].exp() + rot_sin = bboxes[:, :, 6:7] + rot_cos = bboxes[:, :, 7:8] + + norm_rotation = torch.sqrt(rot_sin.square() + rot_cos.square() + 1e-6) + rot_sin = rot_sin / norm_rotation + rot_cos = rot_cos / norm_rotation + + row1 = torch.cat([rot_cos, rot_sin], dim=-1) + row2 = torch.cat([-rot_sin, rot_cos], dim=-1) # (B, N, 2) + rotation_matrix_tranpose = torch.stack([row1, row2], dim=-2) # (B, N, 2, 2) + + if self.cone_label_index is not None: + cone_mask = ( + labels == self.cone_label_index + )[..., None, None] # [B, N, 1, 1] + + identity = torch.eye( + 2, + device=rotation_matrix_transpose.device, + dtype=rotation_matrix_transpose.dtype, + ).view(1, 1, 2, 2) + + rotation_matrix_transpose = torch.where( + cone_mask, + identity, + rotation_matrix_transpose, + ) + + x4 = lw.new_tensor([0.5, -0.5, -0.5, 0.5]).to(lw.device) + x4 = x4 * lw[:, :, 0] # (B, N, 4) + y4 = lw.new_tensor([0.5, 0.5, -0.5, -0.5]).to(lw.device) + y4 = y4 * lw[:, :, 1] # (B, N, 4) + # (top right, top left, bottom left, bottom right) + corners = torch.stack([x4, y4], dim=-1) # (B, N, 4, 2) + + # (B * N, 4, 2) @ (B * N, 2, 2) -> (B * N, 4, 2) + rotated = torch.bmm(corners.view([-1, 4, 2]), rotation_matrix_tranpose.view([-1, 2, 2])) + rotated = rotated.view([batch_size, -1, 4, 2]) # (B * N, 4, 2) -> (B, N, 4, 2) + # Translation + rotated[..., 0] += center_x + rotated[..., 1] += center_y + + # Diagonal values, (B, N,) + lw_diagonal = torch.sqrt( + lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6 + ) + return rotated, lw_diagonal + + def forward( + preds_bboxes: Tensor, + gts_bboxes: Tensor, + labels: Tensor, + weight: Tensor, + avg_factor: Optional[Union[int, float]] = None, + reduction_override: Optional[str] = None, + ) -> Tensor: + """ + preds_bboxes (B, num_proposals, 10) + gts_bboxes (B, num_proposals, 10) + labels (B, num_proposals, ) + """ + assert reduction_override in (None, "none", "mean", "sum") + reduction = reduction_override if reduction_override else self.reduction + + preds_corners, _ = self._convert_to_bev_corners( + bboxes=preds_tensor, labels=labels + ) + gts_corners, gt_diagonal_values = self._convert_to_bev_corners( + bboxes=gts_bboxes, labels=labels + ) + if self.gt_diagonal_norm: + norm_values = gt_diagonal_values + else: + norm_values = None + + if self.barrier_label_index is not None: + barrier_masks = labels == self.barrier_label_index + else: + barrier_masks = None + + losses = corner_l1_losses( + preds_corners, + gts_corners, + weight, + reduction=reduction, + avg_factor=avg_factor, + norm_values=norm_values, + barrier_masks=barrier_masks + ) # (B, N) + + return self.loss_weight * losses + diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py index 182d953dc..5f1924473 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py @@ -16,7 +16,7 @@ info_directory_path = "info/kokseang_2_9_0/" experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred" +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred_3_0" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py new file mode 100644 index 000000000..a59868321 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py @@ -0,0 +1,166 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", + "../default/pipelines/default_lidar_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], + max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], + ), + pts_middle_encoder=dict( + in_channels=32, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + loss_bev_corners=dict( + _delete_=True, + type="BEVCornerLoss", + out_size_factor=_base_.out_size_factor, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + gt_diagonal_norm=True, + cone_label_index=5, + barrier_label_index=6, + loss_weight=0.25, + reduction="mean" + ) + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py index 11b57c1cd..e2d954993 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py @@ -118,6 +118,7 @@ loss_weight=1.0, ), loss_iou=None, + loss_bev_corners=None, loss_heatmap=dict(type="mmdet.GaussianFocalLoss", reduction="none", loss_weight=1.0), loss_bbox=dict(type="mmdet.L1Loss", reduction="mean", loss_weight=0.25), # partial_ diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py index a70d1e331..db1d115ac 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py @@ -2,7 +2,7 @@ model = dict( bbox_head=dict( - loss_iou=dict(_delete_=True, type="CustomBCEWithLogitsLoss", reduction="mean", loss_weight=1.0), + loss_iou=dict(_delete_=True, type="CustomBCEWithLogitsLoss", reduction="mean", loss_weight=3.0), common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou=[1, 2]), ) ) From 40f1d64036c00242c8ca6a593443db5041cc63dc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 26 Jul 2026 02:27:50 +0000 Subject: [PATCH 18/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/__init__.py | 4 +- .../BEVFusion/bevfusion/bevfusion_head.py | 8 +- projects/BEVFusion/bevfusion/losses.py | 95 ++++++++----------- ...e_8xb24_gen1_base_120m_loss_bev_corners.py | 8 +- 4 files changed, 47 insertions(+), 68 deletions(-) diff --git a/projects/BEVFusion/bevfusion/__init__.py b/projects/BEVFusion/bevfusion/__init__.py index f608711e5..e69d15113 100644 --- a/projects/BEVFusion/bevfusion/__init__.py +++ b/projects/BEVFusion/bevfusion/__init__.py @@ -4,7 +4,7 @@ from .bevfusion_voxel_encoder import HardSimpleVoxelSinCosEncoder from .depth_lss import DepthLSSTransform, LSSTransform from .loading import BEVLoadMultiViewImageFromFiles -from .losses import CustomBCEWithLogitsLoss, BEVCornerLoss +from .losses import BEVCornerLoss, CustomBCEWithLogitsLoss from .sparse_encoder import BEVFusionSparseEncoder from .transformer import TransformerDecoderLayer from .transforms_3d import BEVFusionGlobalRotScaleTrans, BEVFusionRandomFlip3D, GridMask, ImageAug3D @@ -31,5 +31,5 @@ "TransFusionBBoxCoder", "HardSimpleVoxelSinCosEncoder", "CustomBCEWithLogitsLoss", - "BEVCornerLoss" + "BEVCornerLoss", ] diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index 9e8b43941..f77bb1a7e 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -906,17 +906,13 @@ def loss_by_feat( loss_dict[f"{prefix}_loss_iou"] = self.loss_iou( layer_ious, ious, layer_iou_weights, avg_factor=max(num_pos, 1) ) - + # loss_bev_corner if self.loss_bev_corners is not None: # [BS, num_proposals] layer_bbox_bev_corners_weight = layer_bbox_weights[:, :, 0] loss_bev_corner = self.loss_bev_corner( - preds, - layer_bbox_targets, - layer_labels, - layer_bbox_bev_corners_weight, - avg_factor=max(num_pos, 1) + preds, layer_bbox_targets, layer_labels, layer_bbox_bev_corners_weight, avg_factor=max(num_pos, 1) ) loss_dict["matched_ious"] = layer_loss_cls.new_tensor(matched_ious) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index e768cf098..262bb3783 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -23,17 +23,15 @@ def bce_with_logits_loss(pred: Tensor, target: Tensor, pos_weight: Optional[Tens @weighted_loss -def corner_l1_losses(pred: Tensor, target: Tensor, norm_values: Optional[Tensor] = None, barrier_masks = None) -> Tensor: +def corner_l1_losses(pred: Tensor, target: Tensor, norm_values: Optional[Tensor] = None, barrier_masks=None) -> Tensor: """ """ - + # Shape: [B, N, 4, 2] -> [B, N, 4] -> [B, N] - direct_losses = ( - pred - target - ).abs().sum(dim=-1).mean(dim=-1) - + direct_losses = (pred - target).abs().sum(dim=-1).mean(dim=-1) + losses = direct_losses # Branch out barrier if set - if barrier_masks is not None: + if barrier_masks is not None: # [c0, c1, c2, c3] -> [c2, c3, c0, c1] target_shifted_180 = torch.roll( @@ -42,9 +40,7 @@ def corner_l1_losses(pred: Tensor, target: Tensor, norm_values: Optional[Tensor] dims=-2, ) - shifted_losses = ( - pred - target_shifted_180 - ).abs().sum(dim=-1).mean(dim=-1) # [B, N] + shifted_losses = (pred - target_shifted_180).abs().sum(dim=-1).mean(dim=-1) # [B, N] barrier_losses = torch.minimum( direct_losses, @@ -60,7 +56,7 @@ def corner_l1_losses(pred: Tensor, target: Tensor, norm_values: Optional[Tensor] if norm_values is not None: losses = losses / norm_values - return losses + return losses @MODELS.register_module() @@ -118,16 +114,16 @@ class BEVCornerLoss(nn.Module): """Compute 4 corner losses between predictions and gt boxes.""" def __init__( - self, - out_size_factor, - voxel_size, - pc_range, + self, + out_size_factor, + voxel_size, + pc_range, gt_diagonal_norm: bool, cone_label_index: Optional[int], barrier_label_index: Optional[int], - loss_weight=1.0, - reduction="mean" - ) -> None: + loss_weight=1.0, + reduction="mean", + ) -> None: super().__init__() self.loss_weight = loss_weight self.reduction = reduction @@ -137,12 +133,8 @@ def __init__( self.gt_diagonal_norm = gt_diagonal_norm self.cone_label_index = cone_label_index self.barrier_label_index = barrier_label_index - - def _convert_to_bev_corners( - self, - bboxes: Tensor, - labels: Tensor - ) -> Tensor: + + def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: """ bboxes (B, num_proposal, 10) """ @@ -152,57 +144,53 @@ def _convert_to_bev_corners( lw = bboxes[:, :, 3:5].exp() rot_sin = bboxes[:, :, 6:7] rot_cos = bboxes[:, :, 7:8] - + norm_rotation = torch.sqrt(rot_sin.square() + rot_cos.square() + 1e-6) rot_sin = rot_sin / norm_rotation rot_cos = rot_cos / norm_rotation - + row1 = torch.cat([rot_cos, rot_sin], dim=-1) row2 = torch.cat([-rot_sin, rot_cos], dim=-1) # (B, N, 2) rotation_matrix_tranpose = torch.stack([row1, row2], dim=-2) # (B, N, 2, 2) - - if self.cone_label_index is not None: - cone_mask = ( - labels == self.cone_label_index - )[..., None, None] # [B, N, 1, 1] + + if self.cone_label_index is not None: + cone_mask = (labels == self.cone_label_index)[..., None, None] # [B, N, 1, 1] identity = torch.eye( 2, device=rotation_matrix_transpose.device, dtype=rotation_matrix_transpose.dtype, ).view(1, 1, 2, 2) - + rotation_matrix_transpose = torch.where( cone_mask, identity, rotation_matrix_transpose, ) - + x4 = lw.new_tensor([0.5, -0.5, -0.5, 0.5]).to(lw.device) x4 = x4 * lw[:, :, 0] # (B, N, 4) y4 = lw.new_tensor([0.5, 0.5, -0.5, -0.5]).to(lw.device) y4 = y4 * lw[:, :, 1] # (B, N, 4) # (top right, top left, bottom left, bottom right) corners = torch.stack([x4, y4], dim=-1) # (B, N, 4, 2) - + # (B * N, 4, 2) @ (B * N, 2, 2) -> (B * N, 4, 2) rotated = torch.bmm(corners.view([-1, 4, 2]), rotation_matrix_tranpose.view([-1, 2, 2])) rotated = rotated.view([batch_size, -1, 4, 2]) # (B * N, 4, 2) -> (B, N, 4, 2) # Translation rotated[..., 0] += center_x rotated[..., 1] += center_y - + # Diagonal values, (B, N,) - lw_diagonal = torch.sqrt( - lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6 - ) + lw_diagonal = torch.sqrt(lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6) return rotated, lw_diagonal def forward( preds_bboxes: Tensor, gts_bboxes: Tensor, labels: Tensor, - weight: Tensor, + weight: Tensor, avg_factor: Optional[Union[int, float]] = None, reduction_override: Optional[str] = None, ) -> Tensor: @@ -213,32 +201,27 @@ def forward( """ assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - - preds_corners, _ = self._convert_to_bev_corners( - bboxes=preds_tensor, labels=labels - ) - gts_corners, gt_diagonal_values = self._convert_to_bev_corners( - bboxes=gts_bboxes, labels=labels - ) + + preds_corners, _ = self._convert_to_bev_corners(bboxes=preds_tensor, labels=labels) + gts_corners, gt_diagonal_values = self._convert_to_bev_corners(bboxes=gts_bboxes, labels=labels) if self.gt_diagonal_norm: norm_values = gt_diagonal_values else: norm_values = None - + if self.barrier_label_index is not None: barrier_masks = labels == self.barrier_label_index else: - barrier_masks = None + barrier_masks = None losses = corner_l1_losses( - preds_corners, - gts_corners, - weight, - reduction=reduction, - avg_factor=avg_factor, + preds_corners, + gts_corners, + weight, + reduction=reduction, + avg_factor=avg_factor, norm_values=norm_values, - barrier_masks=barrier_masks - ) # (B, N) + barrier_masks=barrier_masks, + ) # (B, N) return self.loss_weight * losses - diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py index a59868321..6135d4f35 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py @@ -60,15 +60,15 @@ loss_bev_corners=dict( _delete_=True, type="BEVCornerLoss", - out_size_factor=_base_.out_size_factor, + out_size_factor=_base_.out_size_factor, voxel_size=_base_.voxel_size[0:2], pc_range=_base_.point_cloud_range[0:2], gt_diagonal_norm=True, cone_label_index=5, barrier_label_index=6, - loss_weight=0.25, - reduction="mean" - ) + loss_weight=0.25, + reduction="mean", + ), ), ) From 78029d1d315df316d8d06286ad3604cc20a93297 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 26 Jul 2026 11:31:08 +0900 Subject: [PATCH 19/46] Resolve conflict --- projects/BEVFusion/bevfusion/bevfusion_head.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index f77bb1a7e..ddd128654 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -906,14 +906,20 @@ def loss_by_feat( loss_dict[f"{prefix}_loss_iou"] = self.loss_iou( layer_ious, ious, layer_iou_weights, avg_factor=max(num_pos, 1) ) - - # loss_bev_corner + + # loss_bev_corners if self.loss_bev_corners is not None: # [BS, num_proposals] layer_bbox_bev_corners_weight = layer_bbox_weights[:, :, 0] - loss_bev_corner = self.loss_bev_corner( - preds, layer_bbox_targets, layer_labels, layer_bbox_bev_corners_weight, avg_factor=max(num_pos, 1) + loss_bev_corners = self.loss_bev_corners( + preds, + layer_bbox_targets, + layer_labels, + layer_bbox_bev_corners_weight, + avg_factor=max(num_pos, 1) ) + loss_dict[f"{prefix}_loss_bev_corners"] = loss_bev_corners + loss_dict["matched_ious"] = layer_loss_cls.new_tensor(matched_ious) return loss_dict From 6b41e1494f61b05c9b2b8ac1029a25cd40a96eb3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 26 Jul 2026 02:31:45 +0000 Subject: [PATCH 20/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/bevfusion_head.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index ddd128654..734699aca 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -906,17 +906,13 @@ def loss_by_feat( loss_dict[f"{prefix}_loss_iou"] = self.loss_iou( layer_ious, ious, layer_iou_weights, avg_factor=max(num_pos, 1) ) - + # loss_bev_corners if self.loss_bev_corners is not None: # [BS, num_proposals] layer_bbox_bev_corners_weight = layer_bbox_weights[:, :, 0] loss_bev_corners = self.loss_bev_corners( - preds, - layer_bbox_targets, - layer_labels, - layer_bbox_bev_corners_weight, - avg_factor=max(num_pos, 1) + preds, layer_bbox_targets, layer_labels, layer_bbox_bev_corners_weight, avg_factor=max(num_pos, 1) ) loss_dict[f"{prefix}_loss_bev_corners"] = loss_bev_corners From c3de79a5844652095268daa2a581c94c6f0ac4da Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 26 Jul 2026 11:38:03 +0900 Subject: [PATCH 21/46] Resolve conflict --- projects/BEVFusion/bevfusion/losses.py | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 262bb3783..22027b25b 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -187,6 +187,7 @@ def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: return rotated, lw_diagonal def forward( + self, preds_bboxes: Tensor, gts_bboxes: Tensor, labels: Tensor, From 2b2136c73b3b0db00392778d89f520dfb485edbe Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 26 Jul 2026 11:42:21 +0900 Subject: [PATCH 22/46] Resolve conflict --- projects/BEVFusion/bevfusion/losses.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 22027b25b..676899744 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -203,8 +203,14 @@ def forward( assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - preds_corners, _ = self._convert_to_bev_corners(bboxes=preds_tensor, labels=labels) - gts_corners, gt_diagonal_values = self._convert_to_bev_corners(bboxes=gts_bboxes, labels=labels) + preds_corners, _ = self._convert_to_bev_corners( + bboxes=preds_bboxes, + labels=labels + ) + gts_corners, gt_diagonal_values = self._convert_to_bev_corners( + bboxes=gts_bboxes, + labels=labels + ) if self.gt_diagonal_norm: norm_values = gt_diagonal_values else: From bbedf4f0e9ce7d693e28c45d5a5a542f1feb8e80 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 26 Jul 2026 02:42:46 +0000 Subject: [PATCH 23/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/losses.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 676899744..77115f1b6 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -203,14 +203,8 @@ def forward( assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - preds_corners, _ = self._convert_to_bev_corners( - bboxes=preds_bboxes, - labels=labels - ) - gts_corners, gt_diagonal_values = self._convert_to_bev_corners( - bboxes=gts_bboxes, - labels=labels - ) + preds_corners, _ = self._convert_to_bev_corners(bboxes=preds_bboxes, labels=labels) + gts_corners, gt_diagonal_values = self._convert_to_bev_corners(bboxes=gts_bboxes, labels=labels) if self.gt_diagonal_norm: norm_values = gt_diagonal_values else: From 7e6b5d1d10cbd6820eb624873f3266f771f79324 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 26 Jul 2026 11:48:57 +0900 Subject: [PATCH 24/46] Resolve conflict --- projects/BEVFusion/bevfusion/losses.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 77115f1b6..39c6ee656 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -6,6 +6,7 @@ from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss from torch import Tensor from torch.nn import functional as F +import torch @weighted_loss @@ -151,7 +152,7 @@ def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: row1 = torch.cat([rot_cos, rot_sin], dim=-1) row2 = torch.cat([-rot_sin, rot_cos], dim=-1) # (B, N, 2) - rotation_matrix_tranpose = torch.stack([row1, row2], dim=-2) # (B, N, 2, 2) + rotation_matrix_transpose = torch.stack([row1, row2], dim=-2) # (B, N, 2, 2) if self.cone_label_index is not None: cone_mask = (labels == self.cone_label_index)[..., None, None] # [B, N, 1, 1] @@ -176,7 +177,7 @@ def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: corners = torch.stack([x4, y4], dim=-1) # (B, N, 4, 2) # (B * N, 4, 2) @ (B * N, 2, 2) -> (B * N, 4, 2) - rotated = torch.bmm(corners.view([-1, 4, 2]), rotation_matrix_tranpose.view([-1, 2, 2])) + rotated = torch.bmm(corners.view([-1, 4, 2]), rotation_matrix_transpose.view([-1, 2, 2])) rotated = rotated.view([batch_size, -1, 4, 2]) # (B * N, 4, 2) -> (B, N, 4, 2) # Translation rotated[..., 0] += center_x From 730d12ee78474bf6440a7b6437d00030d40b8233 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 26 Jul 2026 02:49:31 +0000 Subject: [PATCH 25/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/losses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 39c6ee656..cb2530630 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -1,12 +1,12 @@ # Copyright (c) OpenMMLab. All rights reserved. from typing import Optional, Union +import torch import torch.nn as nn from mmdet3d.registry import MODELS from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss from torch import Tensor from torch.nn import functional as F -import torch @weighted_loss From 4cec0143aeab26a4c25a32ce15ebc3bd7abb5f86 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 2 Aug 2026 18:42:50 +0900 Subject: [PATCH 26/46] Resolve conflict --- .../BEVFusion/bevfusion/bevfusion_head.py | 21 +-- projects/BEVFusion/bevfusion/losses.py | 176 +++++------------- ...e_8xb24_gen1_base_120m_loss_bev_corners.py | 166 ----------------- 3 files changed, 45 insertions(+), 318 deletions(-) delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index 734699aca..7074809a4 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -64,7 +64,6 @@ def __init__( bias="auto", # loss loss_iou=None, - loss_bev_corners=None, loss_cls=dict(type="mmdet.GaussianFocalLoss", reduction="mean"), loss_bbox=dict(type="mmdet.L1Loss", reduction="mean"), loss_heatmap=dict(type="mmdet.GaussianFocalLoss", reduction="mean"), @@ -91,7 +90,6 @@ def __init__( self.num_classes += 1 self.loss_cls = MODELS.build(loss_cls) self.loss_iou = MODELS.build(loss_iou) if loss_iou is not None else None - self.loss_bev_corners = MODELS.build(loss_bev_corners) if loss_bev_corners is not None else None self.loss_bbox = MODELS.build(loss_bbox) self.loss_heatmap = MODELS.build(loss_heatmap) self.share_conv_out_channels = hidden_channel @@ -894,27 +892,12 @@ def loss_by_feat( # Output iou for iou-aware loss if self.loss_iou is not None: - layer_ious = preds_dict["iou"][ - ..., - idx_layer * self.num_proposals : (idx_layer + 1) * self.num_proposals, - ].squeeze( - 1 - ) # [BS, num_proposals] - # [BS, num_proposals] layer_iou_weights = layer_bbox_weights[:, :, 0] + layer_iou_labels = layer_labels.view(preds.shape[0], preds.shape[1]) loss_dict[f"{prefix}_loss_iou"] = self.loss_iou( - layer_ious, ious, layer_iou_weights, avg_factor=max(num_pos, 1) - ) - - # loss_bev_corners - if self.loss_bev_corners is not None: - # [BS, num_proposals] - layer_bbox_bev_corners_weight = layer_bbox_weights[:, :, 0] - loss_bev_corners = self.loss_bev_corners( - preds, layer_bbox_targets, layer_labels, layer_bbox_bev_corners_weight, avg_factor=max(num_pos, 1) + preds, layer_bbox_targets, layer_iou_labels, layer_iou_weights, avg_factor=max(num_pos, 1) ) - loss_dict[f"{prefix}_loss_bev_corners"] = loss_bev_corners loss_dict["matched_ious"] = layer_loss_cls.new_tensor(matched_ious) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index cb2530630..d5d505ca4 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -5,137 +5,51 @@ import torch.nn as nn from mmdet3d.registry import MODELS from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss +from mmcv.ops.diff_iou_rotated import oriented_box_intersection_2d from torch import Tensor from torch.nn import functional as F - @weighted_loss -def bce_with_logits_loss(pred: Tensor, target: Tensor, pos_weight: Optional[Tensor] = None) -> Tensor: +def iou_loss(pred: Tensor, target: Tensor) -> Tensor: """ """ - losses = F.binary_cross_entropy_with_logits( - pred, - target, - None, # Always None since the weight will be used in the weighted_loss wrapper - pos_weight=pos_weight, - reduction="none", # Always none since the reduction will happen in the weighted_loss wrapper - ) - return losses - - -@weighted_loss -def corner_l1_losses(pred: Tensor, target: Tensor, norm_values: Optional[Tensor] = None, barrier_masks=None) -> Tensor: - """ """ - - # Shape: [B, N, 4, 2] -> [B, N, 4] -> [B, N] - direct_losses = (pred - target).abs().sum(dim=-1).mean(dim=-1) - - losses = direct_losses - # Branch out barrier if set - if barrier_masks is not None: - - # [c0, c1, c2, c3] -> [c2, c3, c0, c1] - target_shifted_180 = torch.roll( - target, - shifts=2, - dims=-2, - ) - - shifted_losses = (pred - target_shifted_180).abs().sum(dim=-1).mean(dim=-1) # [B, N] - - barrier_losses = torch.minimum( - direct_losses, - shifted_losses, - ) - - # Use symmetry-aware loss only for barriers. - losses = torch.where( - barrier_masks, - barrier_losses, - direct_losses, - ) - - if norm_values is not None: - losses = losses / norm_values + losses = target - pred return losses - -@MODELS.register_module() -class CustomBCEWithLogitsLoss(nn.Module): - """BCEWithLogitsLoss""" - - def __init__(self, loss_weight=None, reduction="mean", pos_weight=None) -> None: - super().__init__() - self.loss_weight = loss_weight - self.reduction = reduction - self.pos_weight = pos_weight - - def forward( - self, - pred: Tensor, - target: Tensor, - weight: Optional[Tensor] = None, - avg_factor: Optional[Union[int, float]] = None, - reduction_override: Optional[str] = None, - ) -> Tensor: - """Forward function. - - If you want to manually determine which positions are - positive samples, you can set the pos_index and pos_label - parameter. Currently, only the CenterNet update version uses - the parameter. - - Args: - pred (torch.Tensor): The prediction. The shape is (N, num_classes). - target (torch.Tensor): The learning target of the prediction - in gaussian distribution. The shape is (N, num_classes). - pos_inds (torch.Tensor): The positive sample index. - Defaults to None. - pos_labels (torch.Tensor): The label corresponding to the positive - sample index. Defaults to None. - weight (torch.Tensor, optional): The weight of loss for each - prediction. Defaults to None. - avg_factor (int, float, optional): Average factor that is used to - average the loss. Defaults to None. - reduction_override (str, optional): The reduction method used to - override the original reduction method of the loss. - Defaults to None. - """ - assert reduction_override in (None, "none", "mean", "sum") - reduction = reduction_override if reduction_override else self.reduction - - losses = self.loss_weight * bce_with_logits_loss( - pred, target, weight, reduction=reduction, avg_factor=avg_factor, pos_weight=self.pos_weight - ) - return losses - - @MODELS.register_module() -class BEVCornerLoss(nn.Module): - """Compute 4 corner losses between predictions and gt boxes.""" +class RotatedBEVIOULoss(nn.Module): + """Compute rotated GIOU loss between predictions and gt boxes.""" def __init__( self, out_size_factor, voxel_size, pc_range, - gt_diagonal_norm: bool, cone_label_index: Optional[int], barrier_label_index: Optional[int], + num_orientation_bins=4, + orientation_bin_offset=torch.pi / 4, loss_weight=1.0, reduction="mean", ) -> None: + super().__init__() self.loss_weight = loss_weight self.reduction = reduction self.out_size_factor = out_size_factor self.voxel_size = voxel_size self.pc_range = pc_range - self.gt_diagonal_norm = gt_diagonal_norm self.cone_label_index = cone_label_index self.barrier_label_index = barrier_label_index - - def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: + self.num_orientation_bins = num_orientation_bins + self.orientation_bin_offset = orientation_bin_offset + self.bin_size = 2 * torch.pi / self.num_orientation_bins + + def _convert_to_bev_corners( + self, + bboxes: Tensor, + labels: Tensor, + is_gt: bool = False) -> Tensor: """ bboxes (B, num_proposal, 10) """ @@ -145,10 +59,10 @@ def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: lw = bboxes[:, :, 3:5].exp() rot_sin = bboxes[:, :, 6:7] rot_cos = bboxes[:, :, 7:8] - - norm_rotation = torch.sqrt(rot_sin.square() + rot_cos.square() + 1e-6) - rot_sin = rot_sin / norm_rotation - rot_cos = rot_cos / norm_rotation + if not is_gt: + norm_rotation = torch.sqrt(rot_sin.square() + rot_cos.square() + 1e-6) + rot_sin = rot_sin / norm_rotation + rot_cos = rot_cos / norm_rotation row1 = torch.cat([rot_cos, rot_sin], dim=-1) row2 = torch.cat([-rot_sin, rot_cos], dim=-1) # (B, N, 2) @@ -170,9 +84,9 @@ def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: ) x4 = lw.new_tensor([0.5, -0.5, -0.5, 0.5]).to(lw.device) - x4 = x4 * lw[:, :, 0] # (B, N, 4) + x4 = x4 * lw[:, :, 0].unsqueeze(-1) # (B, N, 4) y4 = lw.new_tensor([0.5, 0.5, -0.5, -0.5]).to(lw.device) - y4 = y4 * lw[:, :, 1] # (B, N, 4) + y4 = y4 * lw[:, :, 1].unsqueeze(-1) # (B, N, 4) # (top right, top left, bottom left, bottom right) corners = torch.stack([x4, y4], dim=-1) # (B, N, 4, 2) @@ -180,12 +94,12 @@ def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor) -> Tensor: rotated = torch.bmm(corners.view([-1, 4, 2]), rotation_matrix_transpose.view([-1, 2, 2])) rotated = rotated.view([batch_size, -1, 4, 2]) # (B * N, 4, 2) -> (B, N, 4, 2) # Translation - rotated[..., 0] += center_x - rotated[..., 1] += center_y + rotated[..., 0] += center_x.unsqueeze(-1) + rotated[..., 1] += center_y.unsqueeze(-1) # Diagonal values, (B, N,) - lw_diagonal = torch.sqrt(lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6) - return rotated, lw_diagonal + # lw_diagonal = torch.sqrt(lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6) + return rotated, lw def forward( self, @@ -203,27 +117,23 @@ def forward( """ assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - - preds_corners, _ = self._convert_to_bev_corners(bboxes=preds_bboxes, labels=labels) - gts_corners, gt_diagonal_values = self._convert_to_bev_corners(bboxes=gts_bboxes, labels=labels) - if self.gt_diagonal_norm: - norm_values = gt_diagonal_values - else: - norm_values = None - - if self.barrier_label_index is not None: - barrier_masks = labels == self.barrier_label_index - else: - barrier_masks = None - - losses = corner_l1_losses( - preds_corners, - gts_corners, + + preds_corners, preds_length_width = self._convert_to_bev_corners(bboxes=preds_bboxes, labels=labels, is_gt=False) + gts_corners, gts_length_width = self._convert_to_bev_corners(bboxes=gts_bboxes, labels=labels, is_gt=True) + + intersection, _ = oriented_box_intersection_2d(preds_corners, gts_corners) # (B, N) + area1 = preds_length_width[:, :, 0] * preds_length_width[:, :, 1] + area2 = gts_length_width[:, :, 0] * gts_length_width[:, :, 1] + union = area1 + area2 - intersection + iou = intersection / (union + 1e-8) + targets = torch.ones_like(iou) + + losses = iou_loss( + iou, + targets, weight, reduction=reduction, avg_factor=avg_factor, - norm_values=norm_values, - barrier_masks=barrier_masks, - ) # (B, N) - + ) return self.loss_weight * losses + \ No newline at end of file diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py deleted file mode 100644 index 6135d4f35..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners.py +++ /dev/null @@ -1,166 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", - "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_30e_8xb24_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_loss_bev_corners" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], - max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], - ), - pts_middle_encoder=dict( - in_channels=32, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - loss_bev_corners=dict( - _delete_=True, - type="BEVCornerLoss", - out_size_factor=_base_.out_size_factor, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - gt_diagonal_norm=True, - cone_label_index=5, - barrier_label_index=6, - loss_weight=0.25, - reduction="mean", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) From 182be883e5488ce0c923de2b45b369b1de7b5a28 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 2 Aug 2026 09:47:01 +0000 Subject: [PATCH 27/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/losses.py | 29 +++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index d5d505ca4..2369354e1 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -3,19 +3,21 @@ import torch import torch.nn as nn +from mmcv.ops.diff_iou_rotated import oriented_box_intersection_2d from mmdet3d.registry import MODELS from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss -from mmcv.ops.diff_iou_rotated import oriented_box_intersection_2d from torch import Tensor from torch.nn import functional as F + @weighted_loss def iou_loss(pred: Tensor, target: Tensor) -> Tensor: """ """ - losses = target - pred + losses = target - pred return losses + @MODELS.register_module() class RotatedBEVIOULoss(nn.Module): """Compute rotated GIOU loss between predictions and gt boxes.""" @@ -32,7 +34,7 @@ def __init__( loss_weight=1.0, reduction="mean", ) -> None: - + super().__init__() self.loss_weight = loss_weight self.reduction = reduction @@ -42,14 +44,10 @@ def __init__( self.cone_label_index = cone_label_index self.barrier_label_index = barrier_label_index self.num_orientation_bins = num_orientation_bins - self.orientation_bin_offset = orientation_bin_offset + self.orientation_bin_offset = orientation_bin_offset self.bin_size = 2 * torch.pi / self.num_orientation_bins - - def _convert_to_bev_corners( - self, - bboxes: Tensor, - labels: Tensor, - is_gt: bool = False) -> Tensor: + + def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor, is_gt: bool = False) -> Tensor: """ bboxes (B, num_proposal, 10) """ @@ -117,11 +115,13 @@ def forward( """ assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - - preds_corners, preds_length_width = self._convert_to_bev_corners(bboxes=preds_bboxes, labels=labels, is_gt=False) + + preds_corners, preds_length_width = self._convert_to_bev_corners( + bboxes=preds_bboxes, labels=labels, is_gt=False + ) gts_corners, gts_length_width = self._convert_to_bev_corners(bboxes=gts_bboxes, labels=labels, is_gt=True) - intersection, _ = oriented_box_intersection_2d(preds_corners, gts_corners) # (B, N) + intersection, _ = oriented_box_intersection_2d(preds_corners, gts_corners) # (B, N) area1 = preds_length_width[:, :, 0] * preds_length_width[:, :, 1] area2 = gts_length_width[:, :, 0] * gts_length_width[:, :, 1] union = area1 + area2 - intersection @@ -129,11 +129,10 @@ def forward( targets = torch.ones_like(iou) losses = iou_loss( - iou, + iou, targets, weight, reduction=reduction, avg_factor=avg_factor, ) return self.loss_weight * losses - \ No newline at end of file From 75e996ae7df43b94f407b8742842d062aa34624b Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 2 Aug 2026 22:08:24 +0900 Subject: [PATCH 28/46] Resolve conflict --- projects/BEVFusion/bevfusion/__init__.py | 5 +- .../BEVFusion/bevfusion/bevfusion_head.py | 104 +++++++++++- projects/BEVFusion/bevfusion/losses.py | 86 +--------- ..._second_secfpn_30e_8xb24_gen1_base_120m.py | 8 +- ...ecfpn_30e_8xb24_gen1_base_120m_iou_pred.py | 154 ------------------ ...ecfpn_30e_8xb24_gen1_base_smoth_l1_120m.py | 154 ------------------ .../default_lidar_second_secfpn_120m.py | 1 - .../default_30e_8xb24_adamw_cosine_amp.py | 90 ---------- .../default_50e_8xb24_adamw_cosine_amp.py | 90 ---------- .../default_70e_8xb16_adamw_cosine.py | 75 --------- 10 files changed, 111 insertions(+), 656 deletions(-) delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py delete mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine_amp.py delete mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py delete mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py diff --git a/projects/BEVFusion/bevfusion/__init__.py b/projects/BEVFusion/bevfusion/__init__.py index e69d15113..820aa001f 100644 --- a/projects/BEVFusion/bevfusion/__init__.py +++ b/projects/BEVFusion/bevfusion/__init__.py @@ -4,7 +4,7 @@ from .bevfusion_voxel_encoder import HardSimpleVoxelSinCosEncoder from .depth_lss import DepthLSSTransform, LSSTransform from .loading import BEVLoadMultiViewImageFromFiles -from .losses import BEVCornerLoss, CustomBCEWithLogitsLoss +from .losses import RotatedBEVIOULoss from .sparse_encoder import BEVFusionSparseEncoder from .transformer import TransformerDecoderLayer from .transforms_3d import BEVFusionGlobalRotScaleTrans, BEVFusionRandomFlip3D, GridMask, ImageAug3D @@ -30,6 +30,5 @@ "BEVFusionGlobalRotScaleTrans", "TransFusionBBoxCoder", "HardSimpleVoxelSinCosEncoder", - "CustomBCEWithLogitsLoss", - "BEVCornerLoss", + "RotatedBEVIOULoss" ] diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index 7074809a4..67480dc66 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -15,8 +15,9 @@ from mmdet.models.utils import multi_apply from mmengine.logging import print_log from mmengine.structures import InstanceData +from mmcv.ops.diff_iou_rotated import oriented_box_intersection_2d from torch import nn - +from torch import Tensor def clip_sigmoid(x, eps=1e-4): y = torch.clamp(x.sigmoid_(), min=eps, max=1 - eps) @@ -64,6 +65,7 @@ def __init__( bias="auto", # loss loss_iou=None, + loss_iou_preds=None, loss_cls=dict(type="mmdet.GaussianFocalLoss", reduction="mean"), loss_bbox=dict(type="mmdet.L1Loss", reduction="mean"), loss_heatmap=dict(type="mmdet.GaussianFocalLoss", reduction="mean"), @@ -90,6 +92,7 @@ def __init__( self.num_classes += 1 self.loss_cls = MODELS.build(loss_cls) self.loss_iou = MODELS.build(loss_iou) if loss_iou is not None else None + self.loss_iou_preds = MODELS.build(loss_iou_preds) if loss_iou_preds is not None else None self.loss_bbox = MODELS.build(loss_bbox) self.loss_heatmap = MODELS.build(loss_heatmap) self.share_conv_out_channels = hidden_channel @@ -219,6 +222,7 @@ def __init__( print_log(f"BEVFusionHead Partial ignore labels: {self.partial_ignore_labels}, dense heatmap pooling classes: \ {self.dense_heatmap_pooling_classes}, class_names: {self.class_names}, \ local_concat_class_remapping: {self.local_concat_class_remapping}", logger="current") + self.cone_class_index = self.class_name_to_indices.get("traffic_cone", None) def create_2D_grid(self, x_size, y_size): meshgrid = [[0, x_size - 1, x_size], [0, y_size - 1, y_size]] @@ -414,9 +418,9 @@ def predict_by_feat(self, preds_dicts, metas, img=None, rescale=False, for_roi=F for layer_id, preds_dict in enumerate(preds_dicts): batch_size = preds_dict[0]["heatmap"].shape[0] batch_score = preds_dict[0]["heatmap"][..., -self.num_proposals :].sigmoid() - if self.loss_iou is not None: + if self.loss_iou_preds is not None: batch_score = torch.sqrt( - batch_score * preds_dict[0]["iou"][..., -self.num_proposals :].sigmoid() + batch_score * preds_dict[0]["iou_preds"][..., -self.num_proposals :].sigmoid() ) # noqa: E501 one_hot = F.one_hot(self.query_labels, num_classes=self.num_classes).permute(0, 2, 1) batch_score = batch_score * preds_dict[0]["query_heatmap_score"] * one_hot @@ -889,16 +893,106 @@ def loss_by_feat( loss_dict[f"{prefix}_loss_cls"] = layer_loss_cls loss_dict[f"{prefix}_loss_bbox"] = layer_loss_bbox + + if self.loss_iou is not None or self.loss_iou_preds is not None: + layer_iou_labels = layer_labels.view(preds.shape[0], preds.shape[1]) + ious = self._compute_ious( + preds, + layer_bbox_targets, + layer_iou_labels, + ) # Output iou for iou-aware loss if self.loss_iou is not None: # [BS, num_proposals] layer_iou_weights = layer_bbox_weights[:, :, 0] - layer_iou_labels = layer_labels.view(preds.shape[0], preds.shape[1]) loss_dict[f"{prefix}_loss_iou"] = self.loss_iou( - preds, layer_bbox_targets, layer_iou_labels, layer_iou_weights, avg_factor=max(num_pos, 1) + ious, + layer_iou_weights, + avg_factor=max(num_pos, 1) ) loss_dict["matched_ious"] = layer_loss_cls.new_tensor(matched_ious) return loss_dict + + def _convert_to_bev_corners( + self, + bboxes: Tensor, + labels: Tensor, + is_gt: bool = False) -> Tensor: + """ + bboxes (B, num_proposal, 10) + """ + batch_size = bboxes.shape[0] + center_x = bboxes[:, :, 0] * self.bbox_coder.out_size_factor * self.bbox_coder.voxel_size[0] + self.bbox_coder.pc_range[0] + center_y = bboxes[:, :, 1] * self.bbox_coder.out_size_factor * self.bbox_coder.voxel_size[1] + self.bbox_coder.pc_range[1] + lw = bboxes[:, :, 3:5].exp() + rot_sin = bboxes[:, :, 6:7] + rot_cos = bboxes[:, :, 7:8] + if not is_gt: + norm_rotation = torch.sqrt(rot_sin.square() + rot_cos.square() + 1e-6) + rot_sin = rot_sin / norm_rotation + rot_cos = rot_cos / norm_rotation + + row1 = torch.cat([rot_cos, rot_sin], dim=-1) + row2 = torch.cat([-rot_sin, rot_cos], dim=-1) # (B, N, 2) + rotation_matrix_transpose = torch.stack([row1, row2], dim=-2) # (B, N, 2, 2) + + if self.cone_class_index is not None: + cone_mask = (labels == self.cone_class_index)[..., None, None] # [B, N, 1, 1] + + identity = torch.eye( + 2, + device=rotation_matrix_transpose.device, + dtype=rotation_matrix_transpose.dtype, + ).view(1, 1, 2, 2) + + rotation_matrix_transpose = torch.where( + cone_mask, + identity, + rotation_matrix_transpose, + ) + + x4 = lw.new_tensor([0.5, -0.5, -0.5, 0.5]).to(lw.device) + x4 = x4 * lw[:, :, 0].unsqueeze(-1) # (B, N, 4) + y4 = lw.new_tensor([0.5, 0.5, -0.5, -0.5]).to(lw.device) + y4 = y4 * lw[:, :, 1].unsqueeze(-1) # (B, N, 4) + # (top right, top left, bottom left, bottom right) + corners = torch.stack([x4, y4], dim=-1) # (B, N, 4, 2) + + # (B * N, 4, 2) @ (B * N, 2, 2) -> (B * N, 4, 2) + rotated = torch.bmm(corners.view([-1, 4, 2]), rotation_matrix_transpose.view([-1, 2, 2])) + rotated = rotated.view([batch_size, -1, 4, 2]) # (B * N, 4, 2) -> (B, N, 4, 2) + # Translation + rotated[..., 0] += center_x.unsqueeze(-1) + rotated[..., 1] += center_y.unsqueeze(-1) + + # Diagonal values, (B, N,) + # lw_diagonal = torch.sqrt(lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6) + return rotated, lw + + def _compute_ious( + self, + preds: Tensor, + layer_bbox_targets: Tensor, + layer_iou_labels: Tensor, + ) -> Tensor: + """ + """ + pred_bboxes_corners, pred_bboxes_lw = self._convert_to_bev_corners( + preds, + layer_iou_labels, + is_gt=False + ) + gt_bboxes_corners, gt_bboxes_lw = self._convert_to_bev_corners( + layer_bbox_targets, + layer_iou_labels, + is_gt=True + ) + intersection, _ = oriented_box_intersection_2d(pred_bboxes_corners, gt_bboxes_corners) # (B, N) + area1 = pred_bboxes_lw[:, :, 0] * pred_bboxes_lw[:, :, 1] + area2 = gt_bboxes_lw[:, :, 0] * gt_bboxes_lw[:, :, 1] + union = area1 + area2 - intersection + ious = intersection / (union + 1e-8) + return ious diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 2369354e1..b7fd4154c 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -24,13 +24,6 @@ class RotatedBEVIOULoss(nn.Module): def __init__( self, - out_size_factor, - voxel_size, - pc_range, - cone_label_index: Optional[int], - barrier_label_index: Optional[int], - num_orientation_bins=4, - orientation_bin_offset=torch.pi / 4, loss_weight=1.0, reduction="mean", ) -> None: @@ -38,72 +31,10 @@ def __init__( super().__init__() self.loss_weight = loss_weight self.reduction = reduction - self.out_size_factor = out_size_factor - self.voxel_size = voxel_size - self.pc_range = pc_range - self.cone_label_index = cone_label_index - self.barrier_label_index = barrier_label_index - self.num_orientation_bins = num_orientation_bins - self.orientation_bin_offset = orientation_bin_offset - self.bin_size = 2 * torch.pi / self.num_orientation_bins - - def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor, is_gt: bool = False) -> Tensor: - """ - bboxes (B, num_proposal, 10) - """ - batch_size = bboxes.shape[0] - center_x = bboxes[:, :, 0] * self.out_size_factor * self.voxel_size[0] + self.pc_range[0] - center_y = bboxes[:, :, 1] * self.out_size_factor * self.voxel_size[1] + self.pc_range[1] - lw = bboxes[:, :, 3:5].exp() - rot_sin = bboxes[:, :, 6:7] - rot_cos = bboxes[:, :, 7:8] - if not is_gt: - norm_rotation = torch.sqrt(rot_sin.square() + rot_cos.square() + 1e-6) - rot_sin = rot_sin / norm_rotation - rot_cos = rot_cos / norm_rotation - - row1 = torch.cat([rot_cos, rot_sin], dim=-1) - row2 = torch.cat([-rot_sin, rot_cos], dim=-1) # (B, N, 2) - rotation_matrix_transpose = torch.stack([row1, row2], dim=-2) # (B, N, 2, 2) - - if self.cone_label_index is not None: - cone_mask = (labels == self.cone_label_index)[..., None, None] # [B, N, 1, 1] - - identity = torch.eye( - 2, - device=rotation_matrix_transpose.device, - dtype=rotation_matrix_transpose.dtype, - ).view(1, 1, 2, 2) - - rotation_matrix_transpose = torch.where( - cone_mask, - identity, - rotation_matrix_transpose, - ) - - x4 = lw.new_tensor([0.5, -0.5, -0.5, 0.5]).to(lw.device) - x4 = x4 * lw[:, :, 0].unsqueeze(-1) # (B, N, 4) - y4 = lw.new_tensor([0.5, 0.5, -0.5, -0.5]).to(lw.device) - y4 = y4 * lw[:, :, 1].unsqueeze(-1) # (B, N, 4) - # (top right, top left, bottom left, bottom right) - corners = torch.stack([x4, y4], dim=-1) # (B, N, 4, 2) - - # (B * N, 4, 2) @ (B * N, 2, 2) -> (B * N, 4, 2) - rotated = torch.bmm(corners.view([-1, 4, 2]), rotation_matrix_transpose.view([-1, 2, 2])) - rotated = rotated.view([batch_size, -1, 4, 2]) # (B * N, 4, 2) -> (B, N, 4, 2) - # Translation - rotated[..., 0] += center_x.unsqueeze(-1) - rotated[..., 1] += center_y.unsqueeze(-1) - - # Diagonal values, (B, N,) - # lw_diagonal = torch.sqrt(lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6) - return rotated, lw - + def forward( self, - preds_bboxes: Tensor, - gts_bboxes: Tensor, - labels: Tensor, + ious: Tensor, weight: Tensor, avg_factor: Optional[Union[int, float]] = None, reduction_override: Optional[str] = None, @@ -115,21 +46,10 @@ def forward( """ assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - - preds_corners, preds_length_width = self._convert_to_bev_corners( - bboxes=preds_bboxes, labels=labels, is_gt=False - ) - gts_corners, gts_length_width = self._convert_to_bev_corners(bboxes=gts_bboxes, labels=labels, is_gt=True) - - intersection, _ = oriented_box_intersection_2d(preds_corners, gts_corners) # (B, N) - area1 = preds_length_width[:, :, 0] * preds_length_width[:, :, 1] - area2 = gts_length_width[:, :, 0] * gts_length_width[:, :, 1] - union = area1 + area2 - intersection - iou = intersection / (union + 1e-8) targets = torch.ones_like(iou) losses = iou_loss( - iou, + ious, targets, weight, reduction=reduction, diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py index b2e5761c1..a6124aa82 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py @@ -16,7 +16,7 @@ info_directory_path = "info/kokseang_2_9_0/" experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m" +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_loss" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter @@ -57,6 +57,12 @@ loss_heatmap=dict( reduction="none", ), + loss_iou=dict( + _delete_=True, + type="RotatedBEVIOULoss", + loss_weight=0.20, + reduction="mean", + ), ), ) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py deleted file mode 100644 index 5f1924473..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred.py +++ /dev/null @@ -1,154 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", - "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_120m_iou_pred.py", - "../default/schedulers/default_30e_8xb24_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_pred_3_0" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], - max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], - ), - pts_middle_encoder=dict( - in_channels=32, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py deleted file mode 100644 index 5ad7d6ee2..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smoth_l1_120m.py +++ /dev/null @@ -1,154 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", - "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_smooth_l1_120m.py", - "../default/schedulers/default_30e_8xb24_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_smooth_l1_120m" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], - max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], - ), - pts_middle_encoder=dict( - in_channels=32, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py index e2d954993..11b57c1cd 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py @@ -118,7 +118,6 @@ loss_weight=1.0, ), loss_iou=None, - loss_bev_corners=None, loss_heatmap=dict(type="mmdet.GaussianFocalLoss", reduction="none", loss_weight=1.0), loss_bbox=dict(type="mmdet.L1Loss", reduction="mean", loss_weight=0.25), # partial_ diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine_amp.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine_amp.py deleted file mode 100644 index c0d0e66b6..000000000 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb24_adamw_cosine_amp.py +++ /dev/null @@ -1,90 +0,0 @@ -# learning rate -lr = 3.0e-4 -t_max = 3 -max_epochs = 30 -val_interval = 5 - -train_gpu_size = 8 -test_batch_size = 4 -train_batch_size = 24 - -param_scheduler = [ - # learning rate scheduler - # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 - # during the next epochs, learning rate decreases from lr * 10 to - # lr * 1e-4 - dict( - type="CosineAnnealingLR", - T_max=t_max, - eta_min=lr * 10, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingLR", - T_max=(max_epochs - t_max), - eta_min=lr * 1e-4, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), - # momentum scheduler - # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 - # during the next epochs, momentum increases from 0.85 / 0.95 to 1 - dict( - type="CosineAnnealingMomentum", - T_max=t_max, - eta_min=0.85 / 0.95, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingMomentum", - T_max=(max_epochs - t_max), - eta_min=1, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), -] - -# runtime settings -# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 -train_cfg = dict( - by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] -) -val_cfg = dict() -test_cfg = dict() - -optimizer = dict(type="AdamW", lr=lr, weight_decay=0.01) -clip_grad = dict(max_norm=5.0, norm_type=2) # max norm of gradients upper bound to be 5.0 since amp is used - -optim_wrapper = dict( - type="AmpOptimWrapper", - dtype="float16", - optimizer=optimizer, - clip_grad=clip_grad, - # Update it accordingly - loss_scale={ - "init_scale": 2.0**9, # intial_scale: 512 - "growth_interval": 1000, - }, -) - -# optim_wrapper = dict( -# type="OptimWrapper", -# optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), -# clip_grad=dict(max_norm=35, norm_type=2), -# ) - -auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) - -# Only set if the number of train_gpu_size more than 1 -if train_gpu_size > 1: - sync_bn = "torch" diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py deleted file mode 100644 index b95467cf2..000000000 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine_amp.py +++ /dev/null @@ -1,90 +0,0 @@ -# learning rate -lr = 2.0e-4 -t_max = 5 -max_epochs = 50 -val_interval = 5 - -train_gpu_size = 8 -test_batch_size = 4 -train_batch_size = 24 - -param_scheduler = [ - # learning rate scheduler - # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 - # during the next epochs, learning rate decreases from lr * 10 to - # lr * 1e-4 - dict( - type="CosineAnnealingLR", - T_max=t_max, - eta_min=lr * 10, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingLR", - T_max=(max_epochs - t_max), - eta_min=lr * 1e-4, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), - # momentum scheduler - # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 - # during the next epochs, momentum increases from 0.85 / 0.95 to 1 - dict( - type="CosineAnnealingMomentum", - T_max=t_max, - eta_min=0.85 / 0.95, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingMomentum", - T_max=(max_epochs - t_max), - eta_min=1, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), -] - -# runtime settings -# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 -train_cfg = dict( - by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] -) -val_cfg = dict() -test_cfg = dict() - -optimizer = dict(type="AdamW", lr=lr, weight_decay=0.01) -clip_grad = dict(max_norm=5.0, norm_type=2) # max norm of gradients upper bound to be 5.0 since amp is used - -optim_wrapper = dict( - type="AmpOptimWrapper", - dtype="float16", - optimizer=optimizer, - clip_grad=clip_grad, - # Update it accordingly - loss_scale={ - "init_scale": 2.0**9, # intial_scale: 512 - "growth_interval": 1000, - }, -) - -# optim_wrapper = dict( -# type="OptimWrapper", -# optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), -# clip_grad=dict(max_norm=35, norm_type=2), -# ) - -auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) - -# Only set if the number of train_gpu_size more than 1 -if train_gpu_size > 1: - sync_bn = "torch" diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py deleted file mode 100644 index 5ad84665b..000000000 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_70e_8xb16_adamw_cosine.py +++ /dev/null @@ -1,75 +0,0 @@ -# learning rate -lr = 2.0e-4 -t_max = 5 -max_epochs = 70 -val_interval = 5 - -train_gpu_size = 8 -test_batch_size = 4 -train_batch_size = 16 - -param_scheduler = [ - # learning rate scheduler - # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 10 - # during the next epochs, learning rate decreases from lr * 10 to - # lr * 1e-4 - dict( - type="CosineAnnealingLR", - T_max=t_max, - eta_min=lr * 10, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingLR", - T_max=(max_epochs - t_max), - eta_min=lr * 1e-4, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), - # momentum scheduler - # During the first (0.10 * max_epochs) epochs, momentum increases from 0 to 0.85 / 0.95 - # during the next epochs, momentum increases from 0.85 / 0.95 to 1 - dict( - type="CosineAnnealingMomentum", - T_max=t_max, - eta_min=0.85 / 0.95, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingMomentum", - T_max=(max_epochs - t_max), - eta_min=1, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), -] - -# runtime settings -# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 -train_cfg = dict( - by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] -) -val_cfg = dict() -test_cfg = dict() - -optim_wrapper = dict( - type="OptimWrapper", - optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), - clip_grad=dict(max_norm=15, norm_type=2), -) - -auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) - -# Only set if the number of train_gpu_size more than 1 -if train_gpu_size > 1: - sync_bn = "torch" From 17b48c0362fb2249d8da295a402384d4e38f8949 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 2 Aug 2026 13:09:00 +0000 Subject: [PATCH 29/46] ci(pre-commit): autofix --- projects/BEVFusion/bevfusion/__init__.py | 4 +- .../BEVFusion/bevfusion/bevfusion_head.py | 55 ++++++++----------- projects/BEVFusion/bevfusion/losses.py | 6 +- 3 files changed, 28 insertions(+), 37 deletions(-) diff --git a/projects/BEVFusion/bevfusion/__init__.py b/projects/BEVFusion/bevfusion/__init__.py index 820aa001f..b074dc63d 100644 --- a/projects/BEVFusion/bevfusion/__init__.py +++ b/projects/BEVFusion/bevfusion/__init__.py @@ -4,7 +4,7 @@ from .bevfusion_voxel_encoder import HardSimpleVoxelSinCosEncoder from .depth_lss import DepthLSSTransform, LSSTransform from .loading import BEVLoadMultiViewImageFromFiles -from .losses import RotatedBEVIOULoss +from .losses import RotatedBEVIOULoss from .sparse_encoder import BEVFusionSparseEncoder from .transformer import TransformerDecoderLayer from .transforms_3d import BEVFusionGlobalRotScaleTrans, BEVFusionRandomFlip3D, GridMask, ImageAug3D @@ -30,5 +30,5 @@ "BEVFusionGlobalRotScaleTrans", "TransFusionBBoxCoder", "HardSimpleVoxelSinCosEncoder", - "RotatedBEVIOULoss" + "RotatedBEVIOULoss", ] diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index 67480dc66..4b9a3cfd8 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -6,6 +6,7 @@ import torch import torch.nn.functional as F from mmcv.cnn import ConvModule, build_conv_layer +from mmcv.ops.diff_iou_rotated import oriented_box_intersection_2d from mmdet3d.models import circle_nms, draw_heatmap_gaussian, gaussian_radius from mmdet3d.models.dense_heads.centerpoint_head import SeparateHead from mmdet3d.models.layers import nms_bev @@ -15,9 +16,8 @@ from mmdet.models.utils import multi_apply from mmengine.logging import print_log from mmengine.structures import InstanceData -from mmcv.ops.diff_iou_rotated import oriented_box_intersection_2d -from torch import nn -from torch import Tensor +from torch import Tensor, nn + def clip_sigmoid(x, eps=1e-4): y = torch.clamp(x.sigmoid_(), min=eps, max=1 - eps) @@ -893,11 +893,11 @@ def loss_by_feat( loss_dict[f"{prefix}_loss_cls"] = layer_loss_cls loss_dict[f"{prefix}_loss_bbox"] = layer_loss_bbox - + if self.loss_iou is not None or self.loss_iou_preds is not None: layer_iou_labels = layer_labels.view(preds.shape[0], preds.shape[1]) ious = self._compute_ious( - preds, + preds, layer_bbox_targets, layer_iou_labels, ) @@ -906,27 +906,25 @@ def loss_by_feat( if self.loss_iou is not None: # [BS, num_proposals] layer_iou_weights = layer_bbox_weights[:, :, 0] - loss_dict[f"{prefix}_loss_iou"] = self.loss_iou( - ious, - layer_iou_weights, - avg_factor=max(num_pos, 1) - ) + loss_dict[f"{prefix}_loss_iou"] = self.loss_iou(ious, layer_iou_weights, avg_factor=max(num_pos, 1)) loss_dict["matched_ious"] = layer_loss_cls.new_tensor(matched_ious) return loss_dict - - def _convert_to_bev_corners( - self, - bboxes: Tensor, - labels: Tensor, - is_gt: bool = False) -> Tensor: + + def _convert_to_bev_corners(self, bboxes: Tensor, labels: Tensor, is_gt: bool = False) -> Tensor: """ bboxes (B, num_proposal, 10) """ batch_size = bboxes.shape[0] - center_x = bboxes[:, :, 0] * self.bbox_coder.out_size_factor * self.bbox_coder.voxel_size[0] + self.bbox_coder.pc_range[0] - center_y = bboxes[:, :, 1] * self.bbox_coder.out_size_factor * self.bbox_coder.voxel_size[1] + self.bbox_coder.pc_range[1] + center_x = ( + bboxes[:, :, 0] * self.bbox_coder.out_size_factor * self.bbox_coder.voxel_size[0] + + self.bbox_coder.pc_range[0] + ) + center_y = ( + bboxes[:, :, 1] * self.bbox_coder.out_size_factor * self.bbox_coder.voxel_size[1] + + self.bbox_coder.pc_range[1] + ) lw = bboxes[:, :, 3:5].exp() rot_sin = bboxes[:, :, 6:7] rot_cos = bboxes[:, :, 7:8] @@ -971,26 +969,19 @@ def _convert_to_bev_corners( # Diagonal values, (B, N,) # lw_diagonal = torch.sqrt(lw[:, :, 0].square() + lw[:, :, 1].square() + 1e-6) return rotated, lw - + def _compute_ious( - self, - preds: Tensor, + self, + preds: Tensor, layer_bbox_targets: Tensor, layer_iou_labels: Tensor, ) -> Tensor: - """ - """ - pred_bboxes_corners, pred_bboxes_lw = self._convert_to_bev_corners( - preds, - layer_iou_labels, - is_gt=False - ) + """ """ + pred_bboxes_corners, pred_bboxes_lw = self._convert_to_bev_corners(preds, layer_iou_labels, is_gt=False) gt_bboxes_corners, gt_bboxes_lw = self._convert_to_bev_corners( - layer_bbox_targets, - layer_iou_labels, - is_gt=True + layer_bbox_targets, layer_iou_labels, is_gt=True ) - intersection, _ = oriented_box_intersection_2d(pred_bboxes_corners, gt_bboxes_corners) # (B, N) + intersection, _ = oriented_box_intersection_2d(pred_bboxes_corners, gt_bboxes_corners) # (B, N) area1 = pred_bboxes_lw[:, :, 0] * pred_bboxes_lw[:, :, 1] area2 = gt_bboxes_lw[:, :, 0] * gt_bboxes_lw[:, :, 1] union = area1 + area2 - intersection diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index b7fd4154c..f267cdb4b 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -31,10 +31,10 @@ def __init__( super().__init__() self.loss_weight = loss_weight self.reduction = reduction - + def forward( self, - ious: Tensor, + ious: Tensor, weight: Tensor, avg_factor: Optional[Union[int, float]] = None, reduction_override: Optional[str] = None, @@ -49,7 +49,7 @@ def forward( targets = torch.ones_like(iou) losses = iou_loss( - ious, + ious, targets, weight, reduction=reduction, From ef1b9908d270318a9792446389dd276fcf07acbf Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 9 Aug 2026 13:09:49 +0900 Subject: [PATCH 30/46] Resolve conflict --- .../BEVFusion/bevfusion/bevfusion_head.py | 10 ++ projects/BEVFusion/bevfusion/losses.py | 2 +- ..._second_secfpn_30e_8xb24_gen1_base_120m.py | 2 +- ...ond_secfpn_50e_8xb24_gen2_base_120m_amp.py | 168 ------------------ ...d_secfpn_50e_8xb24_j6gen2_base_120m_amp.py | 168 ------------------ 5 files changed, 12 insertions(+), 338 deletions(-) delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py diff --git a/projects/BEVFusion/bevfusion/bevfusion_head.py b/projects/BEVFusion/bevfusion/bevfusion_head.py index 4b9a3cfd8..cba728404 100644 --- a/projects/BEVFusion/bevfusion/bevfusion_head.py +++ b/projects/BEVFusion/bevfusion/bevfusion_head.py @@ -877,6 +877,16 @@ def loss_by_feat( preds = torch.cat([layer_center, layer_height, layer_dim, layer_rot, layer_vel], dim=1).permute( 0, 2, 1 ) # [BS, num_proposals, code_size] + + if "iou_preds" in preds_dict.keys(): + layer_iou_preds = preds_dict["iou_preds"][ + ..., + idx_layer * self.num_proposals : (idx_layer + 1) * self.num_proposals, + ] + layer_iou_preds = layer_iou_preds.squeeze(1) + else: + layer_iou_preds = None + code_weights = self.train_cfg.get("code_weights", None) layer_bbox_weights = bbox_weights[ :, diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index f267cdb4b..3b8cda5e1 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -46,7 +46,7 @@ def forward( """ assert reduction_override in (None, "none", "mean", "sum") reduction = reduction_override if reduction_override else self.reduction - targets = torch.ones_like(iou) + targets = torch.ones_like(ious) losses = iou_loss( ious, diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py index a6124aa82..79092d7ea 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py @@ -60,7 +60,7 @@ loss_iou=dict( _delete_=True, type="RotatedBEVIOULoss", - loss_weight=0.20, + loss_weight=0.10, reduction="mean", ), ), diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py deleted file mode 100644 index f1b067067..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp.py +++ /dev/null @@ -1,168 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py", - "../default/pipelines/default_lidar_intensity_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_50e_8xb24_adamw_cosine_amp.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_intensity_2_9_0/gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_amp" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[ - _base_.point_cloud_range[0], - _base_.point_cloud_range[1], - _base_.point_cloud_range[2], - 0.0, - 0.0, - ], - max_norm_values=[ - _base_.point_cloud_range[3], - _base_.point_cloud_range[4], - _base_.point_cloud_range[5], - 255.0, - 0.2, - ], - ), - pts_middle_encoder=dict( - in_channels=50, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) - -load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_amp/best_epoch_26.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py deleted file mode 100644 index ff1fbeae3..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_amp.py +++ /dev/null @@ -1,168 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/j6gen2_base.py", - "../default/pipelines/default_lidar_intensity_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_50e_8xb24_adamw_cosine_amp.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_from_gen2_base_amp" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[ - _base_.point_cloud_range[0], - _base_.point_cloud_range[1], - _base_.point_cloud_range[2], - 0.0, - 0.0, - ], - max_norm_values=[ - _base_.point_cloud_range[3], - _base_.point_cloud_range[4], - _base_.point_cloud_range[5], - 255.0, - 0.2, - ], - ), - pts_middle_encoder=dict( - in_channels=50, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) - -load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" From f6a705caee5b685e7180b7d8d94494ab58c382e3 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Sun, 9 Aug 2026 13:08:55 +0900 Subject: [PATCH 31/46] Resolve conflict --- ...cfpn_30e_8xb24_gen1_base_120m_iou_preds.py | 168 ++++++++++++++++++ ...second_secfpn_50e_8xb24_gen2_base_120m.py} | 12 +- ...fpn_50e_8xb24_j6gen2_base_120m_iou_loss.py | 167 +++++++++++++++++ .../default_lidar_second_secfpn_120m.py | 1 + .../default_50e_8xb24_adamw_cosine.py | 75 ++++++++ 5 files changed, 420 insertions(+), 3 deletions(-) create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py rename projects/BEVFusion/configs/t4dataset/BEVFusion-L/{bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py => bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py} (93%) create mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss.py create mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py new file mode 100644 index 000000000..ec24f7916 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py @@ -0,0 +1,168 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", + "../default/pipelines/default_lidar_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_loss_iou_preds" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], + max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], + ), + pts_middle_encoder=dict( + in_channels=32, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + loss_iou=dict( + _delete_=True, + type="RotatedBEVIOULoss", + loss_weight=0.10, + reduction="mean", + ), + loss_iou_preds=dict( + _delete_=True, + type="mmdet.CrossEntropyLoss", + use_sigmoid=True, + reduction="mean", + loss_weight=0.20, + ), + common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou_preds=[1, 2]), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py similarity index 93% rename from projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py rename to projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py index a30d8c982..edce0bad7 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py @@ -3,7 +3,7 @@ "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen2_base.py", "../default/pipelines/default_lidar_intensity_120m.py", "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_50e_8xb16_adamw_cosine.py", + "../default/schedulers/default_50e_8xb24_adamw_cosine.py", "../default/default_misc.py", ] @@ -16,7 +16,7 @@ info_directory_path = "info/kokseang_2_9_0/" experiment_group_name = "bevfusion_lidar_intensity_2_9_0/gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m" +experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou_loss_more_epochs" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter @@ -69,6 +69,12 @@ loss_heatmap=dict( reduction="none", ), + loss_iou=dict( + _delete_=True, + type="RotatedBEVIOULoss", + loss_weight=0.10, + reduction="mean", + ), ), ) @@ -165,4 +171,4 @@ ) log_processor = dict(window_size=50) -load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m_fixed_min_points/epoch_28.pth" +load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_loss/best_epoch_25.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss.py new file mode 100644 index 000000000..35b6efb7f --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss.py @@ -0,0 +1,167 @@ +_base_ = [ + "../../../../../autoware_ml/configs/detection3d/default_runtime.py", + "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/j6gen2_base.py", + "../default/pipelines/default_lidar_intensity_120m.py", + "../default/models/default_lidar_second_secfpn_120m.py", + "../default/schedulers/default_50e_8xb24_adamw_cosine.py", + "../default/default_misc.py", +] + +custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) +custom_imports["imports"] += _base_.custom_imports["imports"] +custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] + +# user setting +data_root = "data/t4dataset/" +info_directory_path = "info/kokseang_2_9_0/" + +experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss" +work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name + +# model parameter +model = dict( + type="BEVFusion", + voxelize_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + voxel_size=_base_.voxel_size, + ), + pts_voxel_encoder=dict( + in_channels=len(_base_.lidar_sweep_dims), + # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here + min_norm_values=[ + _base_.point_cloud_range[0], + _base_.point_cloud_range[1], + _base_.point_cloud_range[2], + 0.0, + 0.0, + ], + max_norm_values=[ + _base_.point_cloud_range[3], + _base_.point_cloud_range[4], + _base_.point_cloud_range[5], + 255.0, + 0.2, + ], + ), + pts_middle_encoder=dict( + in_channels=50, + sparse_shape=_base_.grid_size, + dense_output_shapes=_base_.sparse_dense_output_shapes, + ), + bbox_head=dict( + class_names=_base_.class_names, # Use class names to identify the correct class indices + train_cfg=dict( + point_cloud_range=_base_.point_cloud_range, + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size, + ), + test_cfg=dict( + grid_size=_base_.grid_size, + voxel_size=_base_.voxel_size[0:2], + pc_range=_base_.point_cloud_range[0:2], + ), + bbox_coder=dict( + pc_range=_base_.point_cloud_range[0:2], + voxel_size=_base_.voxel_size[0:2], + ), + partial_ignore_labels=["traffic_cone", "barrier"], + loss_heatmap=dict( + reduction="none", + ), + ), +) + +# Dataset parameters +train_dataloader = dict( + batch_size=_base_.train_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=True), + dataset=dict( + type=_base_.dataset_type, + pipeline=_base_.train_pipeline, + modality=_base_.input_modality, + backend_args=_base_.backend_args, + data_root=data_root, + ann_file=info_directory_path + _base_.info_train_file_name, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + test_mode=False, + data_prefix=_base_.data_prefix, + box_type_3d="LiDAR", + filter_cfg=_base_.filter_cfg, + ), +) + +val_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_val_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +test_dataloader = dict( + batch_size=_base_.test_batch_size, + num_workers=_base_.num_workers, + persistent_workers=True, + sampler=dict(type="DefaultSampler", shuffle=False), + dataset=dict( + type=_base_.dataset_type, + data_root=data_root, + ann_file=info_directory_path + _base_.info_test_file_name, + pipeline=_base_.test_pipeline, + metainfo=_base_.metainfo, + class_names=_base_.class_names, + modality=_base_.input_modality, + data_prefix=_base_.data_prefix, + test_mode=True, + box_type_3d="LiDAR", + backend_args=_base_.backend_args, + ), +) + +val_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_val_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, +) + +test_evaluator = dict( + type="T4Metric", + data_root=data_root, + ann_file=data_root + info_directory_path + _base_.info_test_file_name, + metric="bbox", + backend_args=_base_.backend_args, + class_names=_base_.class_names, + name_mapping=_base_.name_mapping, + eval_class_range=_base_.eval_class_range, + filter_attributes=_base_.filter_attributes, + save_csv=True, +) + +default_hooks = dict( + logger=dict(type="LoggerHook", interval=50), + checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), +) +log_processor = dict(window_size=50) +load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou_loss_more_epochs/epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py index 11b57c1cd..c655c480a 100644 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py +++ b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m.py @@ -118,6 +118,7 @@ loss_weight=1.0, ), loss_iou=None, + loss_iou_preds=None, loss_heatmap=dict(type="mmdet.GaussianFocalLoss", reduction="none", loss_weight=1.0), loss_bbox=dict(type="mmdet.L1Loss", reduction="mean", loss_weight=0.25), # partial_ diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py new file mode 100644 index 000000000..3d74060f1 --- /dev/null +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py @@ -0,0 +1,75 @@ +# learning rate +lr = 2.0e-4 +t_max = 5 +max_epochs = 50 +val_interval = 5 + +train_gpu_size = 8 +test_batch_size = 4 +train_batch_size = 24 + +param_scheduler = [ + # learning rate scheduler + # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 + # during the next epochs, learning rate decreases from lr * 10 to + # lr * 1e-4 + dict( + type="CosineAnnealingLR", + T_max=t_max, + eta_min=lr * 10, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingLR", + T_max=(max_epochs - t_max), + eta_min=lr * 1e-4, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), + # momentum scheduler + # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 + # during the next epochs, momentum increases from 0.85 / 0.95 to 1 + dict( + type="CosineAnnealingMomentum", + T_max=t_max, + eta_min=0.85 / 0.95, + begin=0, + end=t_max, + by_epoch=True, + convert_to_iter_based=True, + ), + dict( + type="CosineAnnealingMomentum", + T_max=(max_epochs - t_max), + eta_min=1, + begin=t_max, + end=max_epochs, + by_epoch=True, + convert_to_iter_based=True, + ), +] + +# runtime settings +# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 +train_cfg = dict( + by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] +) +val_cfg = dict() +test_cfg = dict() + +optim_wrapper = dict( + type="OptimWrapper", + optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), + clip_grad=dict(max_norm=35, norm_type=2), +) + +auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) + +# Only set if the number of train_gpu_size more than 1 +if train_gpu_size > 1: + sync_bn = "torch" From 0570b634719e3ef6fa32947a474a9c9cb0b64ce0 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Mon, 17 Aug 2026 15:43:19 +0900 Subject: [PATCH 32/46] Resolve conflict --- ..._second_secfpn_30e_8xb16_gen1_base_120m.py | 154 ---------------- ...econd_secfpn_30e_8xb16_j6gen2_base_120m.py | 167 ----------------- ...cond_secfpn_30e_8xb16_jpntaxi_base_120m.py | 168 ------------------ ...cfpn_30e_8xb24_gen1_base_120m_iou_preds.py | 168 ------------------ ...ond_secfpn_30e_8xb24_jpntaxi_base_120m.py} | 7 +- ...0e_8xb24_jpntaxi_base_120m_t4metric_v2.py} | 6 +- ...voxel_second_secfpn_50e_8xb16_base_120m.py | 154 ---------------- ..._secfpn_50e_8xb16_base_120m_t4metric_v2.py | 77 -------- ...econd_secfpn_50e_8xb16_j6gen2_base_120m.py | 168 ------------------ ...cond_secfpn_50e_8xb24_j6gen2_base_120m.py} | 0 ...50e_8xb24_j6gen2_base_120m_t4metric_v2.py} | 6 +- 11 files changed, 9 insertions(+), 1066 deletions(-) delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m.py delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py rename projects/BEVFusion/configs/t4dataset/BEVFusion-L/{bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py => bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py} (95%) rename projects/BEVFusion/configs/t4dataset/BEVFusion-L/{bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m_t4metric_v2.py => bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py} (92%) delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m.py delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m_t4metric_v2.py delete mode 100644 projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py rename projects/BEVFusion/configs/t4dataset/BEVFusion-L/{bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss.py => bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py} (100%) rename projects/BEVFusion/configs/t4dataset/BEVFusion-L/{bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m_t4metric_v2.py => bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py} (92%) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py deleted file mode 100644 index 688337e0f..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m.py +++ /dev/null @@ -1,154 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", - "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_30e_8xb16_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_gen1_base_120m_fixed_min_points" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], - max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], - ), - pts_middle_encoder=dict( - in_channels=32, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m.py deleted file mode 100644 index 3edd06c92..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m.py +++ /dev/null @@ -1,167 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/j6gen2_base.py", - "../default/pipelines/default_lidar_intensity_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_30e_8xb16_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/user_name/" - -experiment_group_name = "bevfusion_lidar_intensity/j6gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[ - _base_.point_cloud_range[0], - _base_.point_cloud_range[1], - _base_.point_cloud_range[2], - 0.0, - 0.0, - ], - max_norm_values=[ - _base_.point_cloud_range[3], - _base_.point_cloud_range[4], - _base_.point_cloud_range[5], - 255.0, - 0.2, - ], - ), - pts_middle_encoder=dict( - in_channels=50, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) -load_from = None diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py deleted file mode 100644 index d3cdebea0..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py +++ /dev/null @@ -1,168 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/jpntaxi_base.py", - "../default/pipelines/default_lidar_intensity_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_30e_8xb16_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_intensity_2_9_1/jpntaxi_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[ - _base_.point_cloud_range[0], - _base_.point_cloud_range[1], - _base_.point_cloud_range[2], - 0.0, - 0.0, - ], - max_norm_values=[ - _base_.point_cloud_range[3], - _base_.point_cloud_range[4], - _base_.point_cloud_range[5], - 255.0, - 0.2, - ], - ), - pts_middle_encoder=dict( - in_channels=50, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) - -load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py deleted file mode 100644 index ec24f7916..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_preds.py +++ /dev/null @@ -1,168 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py", - "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_30e_8xb24_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_loss_iou_preds" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], - max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], - ), - pts_middle_encoder=dict( - in_channels=32, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - loss_iou=dict( - _delete_=True, - type="RotatedBEVIOULoss", - loss_weight=0.10, - reduction="mean", - ), - loss_iou_preds=dict( - _delete_=True, - type="mmdet.CrossEntropyLoss", - use_sigmoid=True, - reduction="mean", - loss_weight=0.20, - ), - common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou_preds=[1, 2]), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py similarity index 95% rename from projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py rename to projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py index 071f0e230..3935c6cfd 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py @@ -3,7 +3,7 @@ "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/jpntaxi_base.py", "../default/pipelines/default_lidar_intensity_120m.py", "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_50e_8xb16_adamw_cosine.py", + "../default/schedulers/default_30e_8xb24_adamw_cosine.py", "../default/default_misc.py", ] @@ -16,7 +16,7 @@ info_directory_path = "info/kokseang_2_9_0/" experiment_group_name = "bevfusion_lidar_intensity_2_9_1/jpntaxi_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_jpntaxi_base_120m" +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_iou_loss" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter @@ -164,5 +164,4 @@ checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), ) log_processor = dict(window_size=50) - -load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" +load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou_loss_more_epochs/epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m_t4metric_v2.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py similarity index 92% rename from projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m_t4metric_v2.py rename to projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py index b6c23eeb8..70f02b734 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m_t4metric_v2.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py @@ -1,10 +1,10 @@ _base_ = [ - "./bevfusion_lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m.py", + "./bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py", ] # user setting -experiment_group_name = "bevfusion_lidar_intensity/jpntaxi_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_jpntaxi_base_120m_t4metric_v2" +experiment_group_name = "bevfusion_lidar_intensity_2_9_1/jpntaxi_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # Add evaluator configs diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m.py deleted file mode 100644 index 7716a1508..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m.py +++ /dev/null @@ -1,154 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/base.py", - "../default/pipelines/default_lidar_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_50e_8xb16_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/user_name/" - -experiment_group_name = "bevfusion_lidar/base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_base_120m" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[_base_.point_cloud_range[0], _base_.point_cloud_range[1], _base_.point_cloud_range[2], 0.0], - max_norm_values=[_base_.point_cloud_range[3], _base_.point_cloud_range[4], _base_.point_cloud_range[5], 0.2], - ), - pts_middle_encoder=dict( - in_channels=32, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m_t4metric_v2.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m_t4metric_v2.py deleted file mode 100644 index 6f1c88ec4..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m_t4metric_v2.py +++ /dev/null @@ -1,77 +0,0 @@ -_base_ = [ - "./bevfusion_lidar_voxel_second_secfpn_50e_8xb16_base_120m.py", -] - -# user setting -experiment_group_name = "bevfusion_lidar/base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_base_120m_t4metric_v2" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# Add evaluator configs -perception_evaluator_configs = dict( - dataset_paths=_base_.data_root, - frame_id="base_link", - evaluation_config_dict=_base_.evaluator_metric_configs, - load_raw_data=False, -) - -frame_pass_fail_config = dict( - target_labels=_base_.class_names, - # Matching thresholds per class (must align with `plane_distance_thresholds` used in evaluation) - matching_threshold_list=[2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], - confidence_threshold_list=None, -) - -training_statistics_parquet_path = ( - _base_.data_root + _base_.info_directory_path + _base_.info_train_statistics_file_name -) -testing_statistics_parquet_path = _base_.data_root + _base_.info_directory_path + _base_.info_test_statistics_file_name -validation_statistics_parquet_path = ( - _base_.data_root + _base_.info_directory_path + _base_.info_val_statistics_file_name -) - -val_evaluator = dict( - _delete_=True, - type="T4MetricV2", - data_root=_base_.data_root, - ann_file=_base_.data_root + _base_.info_directory_path + _base_.info_val_file_name, - training_statistics_parquet_path=training_statistics_parquet_path, - testing_statistics_parquet_path=testing_statistics_parquet_path, - validation_statistics_parquet_path=validation_statistics_parquet_path, - output_dir="validation", - dataset_name="base", - perception_evaluator_configs=perception_evaluator_configs, - critical_object_filter_config=None, - frame_pass_fail_config=frame_pass_fail_config, - num_workers=64, - scene_batch_size=-1, - write_metric_summary=False, - class_names={{_base_.class_names}}, - name_mapping={{_base_.name_mapping}}, - experiment_name=experiment_name, - experiment_group_name=_base_.experiment_group_name, - min_num_points=2, -) - -test_evaluator = dict( - _delete_=True, - type="T4MetricV2", - data_root=_base_.data_root, - ann_file=_base_.data_root + _base_.info_directory_path + _base_.info_test_file_name, - training_statistics_parquet_path=training_statistics_parquet_path, - testing_statistics_parquet_path=testing_statistics_parquet_path, - validation_statistics_parquet_path=validation_statistics_parquet_path, - output_dir="testing", - dataset_name="base", - perception_evaluator_configs=perception_evaluator_configs, - critical_object_filter_config=None, - frame_pass_fail_config=frame_pass_fail_config, - num_workers=64, - scene_batch_size=-1, - write_metric_summary=True, - class_names={{_base_.class_names}}, - name_mapping={{_base_.name_mapping}}, - experiment_name=experiment_name, - experiment_group_name=_base_.experiment_group_name, - min_num_points=2, -) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py deleted file mode 100644 index a41c922c8..000000000 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m.py +++ /dev/null @@ -1,168 +0,0 @@ -_base_ = [ - "../../../../../autoware_ml/configs/detection3d/default_runtime.py", - "../../../../../autoware_ml/configs/detection3d/dataset/t4dataset/j6gen2_base.py", - "../default/pipelines/default_lidar_intensity_120m.py", - "../default/models/default_lidar_second_secfpn_120m.py", - "../default/schedulers/default_50e_8xb16_adamw_cosine.py", - "../default/default_misc.py", -] - -custom_imports = dict(imports=["projects.BEVFusion.bevfusion"], allow_failed_imports=False) -custom_imports["imports"] += _base_.custom_imports["imports"] -custom_imports["imports"] += ["autoware_ml.detection3d.datasets.transforms"] - -# user setting -data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" - -experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb16_j6gen2_base_120m_from_gen2_base" -work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name - -# model parameter -model = dict( - type="BEVFusion", - voxelize_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - voxel_size=_base_.voxel_size, - ), - pts_voxel_encoder=dict( - in_channels=len(_base_.lidar_sweep_dims), - # min-max normalization for x, y, z, intensity, time_lag, where the max of time lag technically is two seeps (200 ms) here - min_norm_values=[ - _base_.point_cloud_range[0], - _base_.point_cloud_range[1], - _base_.point_cloud_range[2], - 0.0, - 0.0, - ], - max_norm_values=[ - _base_.point_cloud_range[3], - _base_.point_cloud_range[4], - _base_.point_cloud_range[5], - 255.0, - 0.2, - ], - ), - pts_middle_encoder=dict( - in_channels=50, - sparse_shape=_base_.grid_size, - dense_output_shapes=_base_.sparse_dense_output_shapes, - ), - bbox_head=dict( - class_names=_base_.class_names, # Use class names to identify the correct class indices - train_cfg=dict( - point_cloud_range=_base_.point_cloud_range, - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size, - ), - test_cfg=dict( - grid_size=_base_.grid_size, - voxel_size=_base_.voxel_size[0:2], - pc_range=_base_.point_cloud_range[0:2], - ), - bbox_coder=dict( - pc_range=_base_.point_cloud_range[0:2], - voxel_size=_base_.voxel_size[0:2], - ), - partial_ignore_labels=["traffic_cone", "barrier"], - loss_heatmap=dict( - reduction="none", - ), - ), -) - -# Dataset parameters -train_dataloader = dict( - batch_size=_base_.train_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=True), - dataset=dict( - type=_base_.dataset_type, - pipeline=_base_.train_pipeline, - modality=_base_.input_modality, - backend_args=_base_.backend_args, - data_root=data_root, - ann_file=info_directory_path + _base_.info_train_file_name, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - test_mode=False, - data_prefix=_base_.data_prefix, - box_type_3d="LiDAR", - filter_cfg=_base_.filter_cfg, - ), -) - -val_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_val_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -test_dataloader = dict( - batch_size=_base_.test_batch_size, - num_workers=_base_.num_workers, - persistent_workers=True, - sampler=dict(type="DefaultSampler", shuffle=False), - dataset=dict( - type=_base_.dataset_type, - data_root=data_root, - ann_file=info_directory_path + _base_.info_test_file_name, - pipeline=_base_.test_pipeline, - metainfo=_base_.metainfo, - class_names=_base_.class_names, - modality=_base_.input_modality, - data_prefix=_base_.data_prefix, - test_mode=True, - box_type_3d="LiDAR", - backend_args=_base_.backend_args, - ), -) - -val_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_val_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, -) - -test_evaluator = dict( - type="T4Metric", - data_root=data_root, - ann_file=data_root + info_directory_path + _base_.info_test_file_name, - metric="bbox", - backend_args=_base_.backend_args, - class_names=_base_.class_names, - name_mapping=_base_.name_mapping, - eval_class_range=_base_.eval_class_range, - filter_attributes=_base_.filter_attributes, - save_csv=True, -) - -default_hooks = dict( - logger=dict(type="LoggerHook", interval=50), - checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), -) -log_processor = dict(window_size=50) - -load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb16_gen2_base_120m/best_epoch_50.pth" diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py similarity index 100% rename from projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss.py rename to projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m_t4metric_v2.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py similarity index 92% rename from projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m_t4metric_v2.py rename to projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py index 8931d3008..b28060f1d 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m_t4metric_v2.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py @@ -1,10 +1,10 @@ _base_ = [ - "./bevfusion_lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m.py", + "./bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py", ] # user setting -experiment_group_name = "bevfusion_lidar_intensity/j6gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb16_j6gen2_base_120m_t4metric_v2" +experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type +experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # Add evaluator configs From a94e6332b1bcf8e6eff7260b5308dbc3c6c384c4 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Mon, 17 Aug 2026 15:45:10 +0900 Subject: [PATCH 33/46] Resolve conflict --- ...on_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py | 4 ++-- ...lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py | 6 +++--- ...second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py | 2 +- ...on_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py | 6 +++--- ..._lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py | 6 +++--- ..._second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py index 79092d7ea..c9e8cfde9 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py @@ -13,9 +13,9 @@ # user setting data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" +info_directory_path = "info/user_name/" -experiment_group_name = "bevfusion_lidar_2_9_0/gen1_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar/gen1_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_loss" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py index 3935c6cfd..a1771a474 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py @@ -13,9 +13,9 @@ # user setting data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" +info_directory_path = "info/user_name/" -experiment_group_name = "bevfusion_lidar_intensity_2_9_1/jpntaxi_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar/jpntaxi_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_iou_loss" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name @@ -164,4 +164,4 @@ checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), ) log_processor = dict(window_size=50) -load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou_loss_more_epochs/epoch_50.pth" +load_from = None diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py index 70f02b734..4e1ae7709 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2.py @@ -3,7 +3,7 @@ ] # user setting -experiment_group_name = "bevfusion_lidar_intensity_2_9_1/jpntaxi_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar/jpntaxi_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_t4metric_v2" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py index edce0bad7..153782915 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py @@ -13,9 +13,9 @@ # user setting data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" +info_directory_path = "info/user_name/" -experiment_group_name = "bevfusion_lidar_intensity_2_9_0/gen2_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar/gen2_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou_loss_more_epochs" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name @@ -171,4 +171,4 @@ ) log_processor = dict(window_size=50) -load_from = "work_dirs/bevfusion_lidar_2_9_0/gen1_base/T4Dataset/lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_loss/best_epoch_25.pth" +load_from = None diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py index 35b6efb7f..4b4a7f6fe 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py @@ -13,9 +13,9 @@ # user setting data_root = "data/t4dataset/" -info_directory_path = "info/kokseang_2_9_0/" +info_directory_path = "info/user_name/" -experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar/j6gen2_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name @@ -164,4 +164,4 @@ checkpoint=dict(type="CheckpointHook", interval=1, max_keep_ckpts=3, save_best="NuScenes metric/T4Metric/mAP"), ) log_processor = dict(window_size=50) -load_from = "work_dirs/bevfusion_lidar_intensity_2_9_0/gen2_base/T4Dataset/lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou_loss_more_epochs/epoch_50.pth" +load_from = None diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py index b28060f1d..280a418f0 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2.py @@ -3,7 +3,7 @@ ] # user setting -experiment_group_name = "bevfusion_lidar_intensity_2_9_1/j6gen2_base/" + _base_.dataset_type +experiment_group_name = "bevfusion_lidar/j6gen2_base/" + _base_.dataset_type experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_t4metric_v2" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name From c41cf0425f848dc78b0ff9201b914a321d4c2fd3 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Mon, 17 Aug 2026 15:46:47 +0900 Subject: [PATCH 34/46] Resolve conflict --- ...fault_lidar_second_secfpn_120m_iou_pred.py | 8 -- ...ault_lidar_second_secfpn_smooth_l1_120m.py | 3 - .../default_30e_8xb16_adamw_cosine.py | 75 ------------------- .../default_50e_8xb16_adamw_cosine.py | 75 ------------------- 4 files changed, 161 deletions(-) delete mode 100644 projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py delete mode 100644 projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py delete mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py delete mode 100644 projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py deleted file mode 100644 index db1d115ac..000000000 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_120m_iou_pred.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ["./default_lidar_second_secfpn_120m.py"] - -model = dict( - bbox_head=dict( - loss_iou=dict(_delete_=True, type="CustomBCEWithLogitsLoss", reduction="mean", loss_weight=3.0), - common_heads=dict(center=[2, 2], height=[1, 2], dim=[3, 2], rot=[2, 2], vel=[2, 2], iou=[1, 2]), - ) -) diff --git a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py b/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py deleted file mode 100644 index fd9800740..000000000 --- a/projects/BEVFusion/configs/t4dataset/default/models/default_lidar_second_secfpn_smooth_l1_120m.py +++ /dev/null @@ -1,3 +0,0 @@ -_base_ = ["./default_lidar_second_secfpn_120m.py"] - -model = dict(loss_bbox=dict(type="mmdet.SmoothL1Loss", reduction="mean", loss_weight=0.25)) diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py deleted file mode 100644 index cc5c780bd..000000000 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_30e_8xb16_adamw_cosine.py +++ /dev/null @@ -1,75 +0,0 @@ -# learning rate -lr = 2.0e-4 -t_max = 3 -max_epochs = 30 -val_interval = 5 - -train_gpu_size = 8 -test_batch_size = 4 -train_batch_size = 16 - -param_scheduler = [ - # learning rate scheduler - # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 - # during the next epochs, learning rate decreases from lr * 10 to - # lr * 1e-4 - dict( - type="CosineAnnealingLR", - T_max=t_max, - eta_min=lr * 10, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingLR", - T_max=(max_epochs - t_max), - eta_min=lr * 1e-4, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), - # momentum scheduler - # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 - # during the next epochs, momentum increases from 0.85 / 0.95 to 1 - dict( - type="CosineAnnealingMomentum", - T_max=t_max, - eta_min=0.85 / 0.95, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingMomentum", - T_max=(max_epochs - t_max), - eta_min=1, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), -] - -# runtime settings -# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 -train_cfg = dict( - by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] -) -val_cfg = dict() -test_cfg = dict() - -optim_wrapper = dict( - type="OptimWrapper", - optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), - clip_grad=dict(max_norm=35, norm_type=2), -) - -auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) - -# Only set if the number of train_gpu_size more than 1 -if train_gpu_size > 1: - sync_bn = "torch" diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py deleted file mode 100644 index fe73eed96..000000000 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb16_adamw_cosine.py +++ /dev/null @@ -1,75 +0,0 @@ -# learning rate -lr = 2.0e-4 -t_max = 5 -max_epochs = 50 -val_interval = 5 - -train_gpu_size = 8 -test_batch_size = 4 -train_batch_size = 16 - -param_scheduler = [ - # learning rate scheduler - # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 10 - # during the next epochs, learning rate decreases from lr * 10 to - # lr * 1e-4 - dict( - type="CosineAnnealingLR", - T_max=t_max, - eta_min=lr * 10, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingLR", - T_max=(max_epochs - t_max), - eta_min=lr * 1e-4, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), - # momentum scheduler - # During the first (0.10 * max_epochs) epochs, momentum increases from 0 to 0.85 / 0.95 - # during the next epochs, momentum increases from 0.85 / 0.95 to 1 - dict( - type="CosineAnnealingMomentum", - T_max=t_max, - eta_min=0.85 / 0.95, - begin=0, - end=t_max, - by_epoch=True, - convert_to_iter_based=True, - ), - dict( - type="CosineAnnealingMomentum", - T_max=(max_epochs - t_max), - eta_min=1, - begin=t_max, - end=max_epochs, - by_epoch=True, - convert_to_iter_based=True, - ), -] - -# runtime settings -# Run validation for every val_interval epochs before max_epochs - 5, and run validation every 1 epoch after max_epochs - 5 -train_cfg = dict( - by_epoch=True, max_epochs=max_epochs, val_interval=val_interval, dynamic_intervals=[(max_epochs - 5, 1)] -) -val_cfg = dict() -test_cfg = dict() - -optim_wrapper = dict( - type="OptimWrapper", - optimizer=dict(type="AdamW", lr=lr, weight_decay=0.01), - clip_grad=dict(max_norm=15, norm_type=2), -) - -auto_scale_lr = dict(enable=False, base_batch_size=train_gpu_size * train_batch_size) - -# Only set if the number of train_gpu_size more than 1 -if train_gpu_size > 1: - sync_bn = "torch" From 3ac4d040506125707064963315993b3c25cc7942 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Mon, 17 Aug 2026 23:24:37 +0900 Subject: [PATCH 35/46] Resolve conflict --- .../docs/BEVFusion-L/v2/j6gen2_base.md | 801 ++++++++++++++++++ .../docs/BEVFusion-L/v2/jpntaxi_base.md | 295 +++++++ 2 files changed, 1096 insertions(+) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md index 0a6adc79f..71abf3e98 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md @@ -70,6 +70,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(75,589) | truck
(8,273) | bus
(2,706) | bicycle
(2,097) | pedestrian
(23,254) | traffic_cone
(8,310) | barrier
(1,350) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.7448 | 0.6931 | 0.6959 | 0.6800 | 0.6700 | 0.6541 | 0.9051 | 0.8311 | 0.9228 | 0.8915 | 0.8565 | 0.5840 | 0.2227 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.7289 | 0.6808 | 0.6820 | 0.6757 | 0.6579 | 0.6516 | 0.9000 | 0.8398 | 0.9130 | 0.8907 | 0.8535 | 0.4465 | 0.2590 |
@@ -79,6 +80,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(64,960) | truck
(5,922) | bus
(2,257) | bicycle
(1,298) | pedestrian
(12,052) | traffic_cone
(2,636) | barrier
(622) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.5994 | 0.5402 | 0.6035 | 0.5874 | 0.5739 | 0.5578 | 0.8229 | 0.6617 | 0.8074 | 0.6561 | 0.6822 | 0.3772 | 0.1880 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.5802 | 0.5217 | 0.5876 | 0.5690 | 0.5584 | 0.5398 | 0.8127 | 0.6518 | 0.7926 | 0.6527 | 0.6690 | 0.2760 | 0.2064 | @@ -88,6 +90,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(22,141) | truck
(3,506) | bus
(544) | bicycle
(376) | pedestrian
(3,656) | traffic_cone
(462) | barrier
(145) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.4531 | 0.4074 | 0.5130 | 0.4930 | 0.4902 | 0.4702 | 0.7174 | 0.5312 | 0.5750 | 0.5027 | 0.4945 | 0.2211 | 0.1295 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.4396 | 0.3969 | 0.5002 | 0.4696 | 0.4789 | 0.4483 | 0.7147 | 0.5324 | 0.5445 | 0.4977 | 0.4993 | 0.1329 | 0.1559 | @@ -97,6 +100,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(162,690) | truck
(17,701) | bus
(5,507) | bicycle
(3,771) | pedestrian
(38,962) | traffic_cone
(11,408) | barrier
(2,117) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.6771 | 0.6212 | 0.6541 | 0.6372 | 0.6261 | 0.6093 | 0.8618 | 0.7275 | 0.8494 | 0.7865 | 0.7839 | 0.5274 | 0.2032 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.6590 | 0.6053 | 0.6391 | 0.6214 | 0.6122 | 0.5946 | 0.8547 | 0.7285 | 0.8389 | 0.7843 | 0.7789 | 0.3955 | 0.2321 | @@ -110,6 +114,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.1636 | 0.1921 | 0.2009 | 0.2089 | 1.0000 | 0.2075 | 0.2294 | 0.2358 | 0.2514 | 1.0000 | 0.1987 | 0.2350 | 0.2215 | 0.2223 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.1699 | 0.1847 | 0.2714 | 0.1985 | 1.0000 | 0.1878 | 0.2040 | 0.2866 | 0.2091 | 1.0000 | 0.2039 | 0.2176 | 0.2883 | 0.2138 | 1.0000 | Num match summary @@ -118,18 +123,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 75,589) | truck
0.5/1.0/2.0/4.0
(GTs: 8,273) | bus
0.5/1.0/2.0/4.0
(GTs: 2,706) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,097) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 23,254) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 8,310) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,350) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 8,339 / 8,339 / 8,339 / 8,339 | 910 / 910 / 910 / 910 | 297 / 297 / 297 / 297 | 230 / 230 / 230 / 230 | 2,558 / 2,558 / 2,558 / 2,558 | 914 / 914 / 914 / 914 | 148 / 148 / 148 / 148 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 8,314 / 8,314 / 8,314 / 8,314 | 910 / 910 / 910 / 910 | 297 / 297 / 297 / 297 | 230 / 230 / 230 / 230 | 2,557 / 2,557 / 2,557 / 2,557 | 914 / 914 / 914 / 914 | 148 / 148 / 148 / 148 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 75,589) | truck
0.5/1.0/2.0/4.0
(GTs: 8,273) | bus
0.5/1.0/2.0/4.0
(GTs: 2,706) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,097) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 23,254) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 8,310) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,350) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 31,082 / 31,082 / 31,082 / 31,082 | 3,391 / 3,391 / 3,391 / 3,391 | 1,109 / 1,109 / 1,109 / 1,109 | 859 / 859 / 859 / 859 | 9,535 / 9,535 / 9,535 / 9,535 | 3,407 / 3,407 / 3,407 / 3,407 | 0 / 553 / 553 / 553 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 30,991 / 30,991 / 30,991 / 30,991 | 3,391 / 3,391 / 3,391 / 3,391 | 1,109 / 1,109 / 1,109 / 1,109 | 859 / 859 / 859 / 859 | 9,534 / 9,534 / 9,534 / 9,534 | 3,407 / 3,407 / 3,407 / 3,407 | 553 / 553 / 553 / 553 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 75,589) | truck
0.5/1.0/2.0/4.0
(GTs: 8,273) | bus
0.5/1.0/2.0/4.0
(GTs: 2,706) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,097) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 23,254) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 8,310) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,350) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 66,338 / 68,627 / 69,254 / 69,512 | 6,224 / 6,907 / 7,224 / 7,345 | 2,390 / 2,559 / 2,607 / 2,615 | 1,749 / 1,797 / 1,804 / 1,806 | 18,908 / 19,118 / 19,271 / 19,406 | 5,208 / 5,572 / 5,689 / 5,831 | 418 / 577 / 608 / 629 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 65,297 / 67,749 / 68,945 / 69,400 | 6,298 / 7,033 / 7,266 / 7,405 | 2,282 / 2,494 / 2,565 / 2,589 | 1,789 / 1,815 / 1,822 / 1,825 | 18,701 / 19,099 / 19,305 / 19,357 | 4,529 / 4,841 / 5,046 / 5,561 | 453 / 529 / 550 / 562 | @@ -139,6 +147,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.2250 | 0.2574 | 0.2194 | 0.2600 | 1.0000 | 0.2770 | 0.2899 | 0.2526 | 0.3032 | 1.0000 | 0.2610 | 0.2836 | 0.2307 | 0.2768 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.2380 | 0.2382 | 0.2946 | 0.2537 | 1.0000 | 0.2943 | 0.2886 | 0.3273 | 0.3009 | 1.0000 | 0.2809 | 0.2785 | 0.3078 | 0.2721 | 1.0000 | Num match summary @@ -147,18 +156,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 64,960) | truck
0.5/1.0/2.0/4.0
(GTs: 5,922) | bus
0.5/1.0/2.0/4.0
(GTs: 2,257) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,298) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 12,052) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 2,636) | barrier
0.5/1.0/2.0/4.0
(GTs: 622) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 7,166 / 7,166 / 7,166 / 7,166 | 651 / 651 / 651 / 651 | 248 / 248 / 248 / 248 | 142 / 142 / 142 / 142 | 1,326 / 1,326 / 1,326 / 1,326 | 289 / 289 / 289 / 289 | 68 / 68 / 68 / 68 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 7,145 / 7,145 / 7,145 / 7,145 | 651 / 651 / 651 / 651 | 248 / 248 / 248 / 248 | 142 / 142 / 142 / 142 | 1,325 / 1,325 / 1,325 / 1,325 | 289 / 289 / 289 / 289 | 68 / 68 / 68 / 68 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 64,960) | truck
0.5/1.0/2.0/4.0
(GTs: 5,922) | bus
0.5/1.0/2.0/4.0
(GTs: 2,257) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,298) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 12,052) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 2,636) | barrier
0.5/1.0/2.0/4.0
(GTs: 622) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 26,709 / 26,709 / 26,709 / 26,709 | 2,428 / 2,428 / 2,428 / 2,428 | 925 / 925 / 925 / 925 | 532 / 532 / 532 / 532 | 4,943 / 4,943 / 4,943 / 4,943 | 1,080 / 1,080 / 1,080 / 1,080 | 0 / 255 / 255 / 255 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 26,633 / 26,633 / 26,633 / 26,633 | 2,428 / 2,428 / 2,428 / 2,428 | 925 / 925 / 925 / 925 | 532 / 532 / 532 / 532 | 4,941 / 4,941 / 4,941 / 4,941 | 1,080 / 1,080 / 1,080 / 1,080 | 0 / 255 / 255 / 255 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 64,960) | truck
0.5/1.0/2.0/4.0
(GTs: 5,922) | bus
0.5/1.0/2.0/4.0
(GTs: 2,257) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,298) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 12,052) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 2,636) | barrier
0.5/1.0/2.0/4.0
(GTs: 622) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 48,458 / 54,005 / 55,962 / 56,342 | 3,357 / 3,998 / 4,271 / 4,366 | 1,493 / 1,843 / 1,938 / 2,076 | 808 / 859 / 890 / 891 | 8,273 / 8,667 / 8,745 / 8,721 | 1,217 / 1,252 / 1,339 / 1,390 | 169 / 243 / 261 / 230 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 47,451 / 52,827 / 55,318 / 55,889 | 3,253 / 4,045 / 4,354 / 4,471 | 1,367 / 1,826 / 1,951 / 1,981 | 839 / 846 / 901 / 902 | 8,085 / 8,202 / 8,275 / 8,325 | 1,120 / 1,225 / 1,270 / 1,347 | 156 / 231 / 237 / 268 | @@ -168,6 +180,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.2996 | 0.2406 | 0.2380 | 0.3575 | 1.0000 | 0.3505 | 0.2988 | 0.2702 | 0.4157 | 1.0000 | 0.3276 | 0.2699 | 0.2427 | 0.3863 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.3252 | 0.2112 | 0.3207 | 0.3389 | 1.0000 | 0.4093 | 0.3020 | 0.3601 | 0.4304 | 1.0000 | 0.3625 | 0.2467 | 0.3279 | 0.3624 | 1.0000 | Num match summary @@ -176,18 +189,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 22,141) | truck
0.5/1.0/2.0/4.0
(GTs: 3,506) | bus
0.5/1.0/2.0/4.0
(GTs: 544) | bicycle
0.5/1.0/2.0/4.0
(GTs: 376) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 3,656) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 462) | barrier
0.5/1.0/2.0/4.0
(GTs: 145) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 2,440 / 2,440 / 2,440 / 2,440 | 385 / 385 / 385 / 385 | 59 / 59 / 59 / 59 | 41 / 41 / 41 / 41 | 402 / 402 / 402 / 402 | 50 / 50 / 50 / 50 | 15 / 15 / 15 / 15 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 2,435 / 2,435 / 2,435 / 2,435 | 385 / 385 / 385 / 385 | 59 / 59 / 59 / 59 | 41 / 41 / 41 / 41 | 402 / 402 / 402 / 402 | 50 / 50 / 50 / 50 | 15 / 15 / 15 / 15 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 22,141) | truck
0.5/1.0/2.0/4.0
(GTs: 3,506) | bus
0.5/1.0/2.0/4.0
(GTs: 544) | bicycle
0.5/1.0/2.0/4.0
(GTs: 376) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 3,656) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 462) | barrier
0.5/1.0/2.0/4.0
(GTs: 145) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 9,095 / 9,095 / 9,095 / 9,095 | 1,437 / 1,437 / 1,437 / 1,437 | 223 / 223 / 223 / 223 | 154 / 154 / 154 / 154 | 1,498 / 1,498 / 1,498 / 1,498 | 189 / 189 / 189 / 189 | 0 / 59 / 59 / 59 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 9,077 / 9,077 / 9,077 / 9,077 | 1,437 / 1,437 / 1,437 / 1,437 | 223 / 223 / 223 / 223 | 154 / 154 / 154 / 154 | 1,498 / 1,498 / 1,498 / 1,498 | 0 / 189 / 189 / 189 | 0 / 59 / 59 / 59 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 22,141) | truck
0.5/1.0/2.0/4.0
(GTs: 3,506) | bus
0.5/1.0/2.0/4.0
(GTs: 544) | bicycle
0.5/1.0/2.0/4.0
(GTs: 376) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 3,656) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 462) | barrier
0.5/1.0/2.0/4.0
(GTs: 145) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 14,016 / 16,637 / 17,502 / 17,728 | 1,456 / 2,007 / 2,333 / 2,538 | 231 / 326 / 378 / 383 | 206 / 229 / 235 / 235 | 2,101 / 2,340 / 2,309 / 2,332 | 173 / 180 / 184 / 189 | 33 / 52 / 57 / 68 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 13,838 / 16,236 / 17,440 / 17,774 | 1,483 / 1,981 / 2,484 / 2,599 | 192 / 312 / 394 / 405 | 187 / 218 / 223 / 223 | 2,141 / 2,167 / 2,181 / 2,199 | 132 / 147 / 178 / 186 | 33 / 52 / 72 / 73 | @@ -197,6 +213,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.1893 | 0.2152 | 0.2105 | 0.2296 | 1.0000 | 0.2410 | 0.2512 | 0.2454 | 0.2756 | 1.0000 | 0.2316 | 0.2537 | 0.2280 | 0.2523 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.1972 | 0.2036 | 0.2826 | 0.2208 | 1.0000 | 0.2503 | 0.2473 | 0.3146 | 0.2684 | 1.0000 | 0.2405 | 0.2402 | 0.2976 | 0.2433 | 1.0000 | Num match summary @@ -205,18 +222,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 162,690) | truck
0.5/1.0/2.0/4.0
(GTs: 17,701) | bus
0.5/1.0/2.0/4.0
(GTs: 5,507) | bicycle
0.5/1.0/2.0/4.0
(GTs: 3,771) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 38,962) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 11,408) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,117) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 17,945 / 17,945 / 17,945 / 17,945 | 1,947 / 1,947 / 1,947 / 1,947 | 605 / 605 / 605 / 605 | 414 / 414 / 414 / 414 | 4,286 / 4,286 / 4,286 / 4,286 | 1,254 / 1,254 / 1,254 / 1,254 | 232 / 232 / 232 / 232 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 17,895 / 17,895 / 17,895 / 17,895 | 1,947 / 1,947 / 1,947 / 1,947 | 605 / 605 / 605 / 605 | 414 / 414 / 414 / 414 | 4,285 / 4,285 / 4,285 / 4,285 | 1,254 / 1,254 / 1,254 / 1,254 | 232 / 232 / 232 / 232 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 162,690) | truck
0.5/1.0/2.0/4.0
(GTs: 17,701) | bus
0.5/1.0/2.0/4.0
(GTs: 5,507) | bicycle
0.5/1.0/2.0/4.0
(GTs: 3,771) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 38,962) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 11,408) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,117) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 66,887 / 66,887 / 66,887 / 66,887 | 7,257 / 7,257 / 7,257 / 7,257 | 2,257 / 2,257 / 2,257 / 2,257 | 1,546 / 1,546 / 1,546 / 1,546 | 15,977 / 15,977 / 15,977 / 15,977 | 4,677 / 4,677 / 4,677 / 4,677 | 0 / 867 / 867 / 867 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 66,702 / 66,702 / 66,702 / 66,702 | 7,257 / 7,257 / 7,257 / 7,257 | 2,257 / 2,257 / 2,257 / 2,257 | 1,546 / 1,546 / 1,546 / 1,546 | 15,974 / 15,974 / 15,974 / 15,974 | 4,677 / 4,677 / 4,677 / 4,677 | 0 / 867 / 867 / 867 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 162,690) | truck
0.5/1.0/2.0/4.0
(GTs: 17,701) | bus
0.5/1.0/2.0/4.0
(GTs: 5,507) | bicycle
0.5/1.0/2.0/4.0
(GTs: 3,771) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 38,962) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 11,408) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,117) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 127,648 / 139,390 / 143,024 / 143,959 | 10,681 / 12,986 / 13,994 / 14,360 | 4,050 / 4,683 / 5,002 / 5,069 | 2,730 / 2,821 / 2,841 / 2,845 | 28,978 / 29,363 / 29,579 / 29,675 | 6,502 / 6,949 / 7,100 / 7,295 | 661 / 830 / 909 / 936 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 126,514 / 137,022 / 141,450 / 143,300 | 10,859 / 13,045 / 14,027 / 14,439 | 3,844 / 4,623 / 4,831 / 4,974 | 2,732 / 2,840 / 2,856 / 2,859 | 28,970 / 29,422 / 29,647 / 29,660 | 5,644 / 6,197 / 6,356 / 7,069 | 602 / 827 / 850 / 871 | @@ -240,6 +260,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(14,872) | truck
(1,192) | bus
(336) | bicycle
(740) | pedestrian
(5,055) | traffic_cone
(60) | barrier
(0) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.6350 | 0.6000 | 0.5846 | 0.5518 | 0.5671 | 0.5343 | 0.9234 | 0.8694 | 0.9372 | 0.8545 | 0.8608 | 0.0000 | 0.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.6313 | 0.6015 | 0.5746 | 0.5493 | 0.5597 | 0.5344 | 0.9156 | 0.8702 | 0.9160 | 0.8586 | 0.8588 | 0.0000 | 0.0000 | @@ -249,6 +270,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(10,929) | truck
(1,009) | bus
(141) | bicycle
(460) | pedestrian
(3,721) | traffic_cone
(4) | barrier
(0) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.5415 | 0.5002 | 0.4940 | 0.4918 | 0.4734 | 0.4712 | 0.8576 | 0.7404 | 0.8855 | 0.5667 | 0.7404 | 0.0000 | 0.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.5281 | 0.4877 | 0.4942 | 0.4916 | 0.4740 | 0.4714 | 0.8442 | 0.7108 | 0.8522 | 0.5764 | 0.7129 | 0.0000 | 0.0000 | @@ -258,6 +280,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(2,883) | truck
(600) | bus
(60) | bicycle
(85) | pedestrian
(1,092) | traffic_cone
(0) | barrier
(0) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.4215 | 0.3881 | 0.4169 | 0.4097 | 0.4002 | 0.3930 | 0.7638 | 0.6693 | 0.6062 | 0.3504 | 0.5610 | 0.0000 | 0.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.4172 | 0.3831 | 0.4189 | 0.4104 | 0.4018 | 0.3934 | 0.7548 | 0.6586 | 0.5716 | 0.3759 | 0.5594 | 0.0000 | 0.0000 | @@ -267,6 +290,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(28,684) | truck
(2,801) | bus
(537) | bicycle
(1,285) | pedestrian
(9,868) | traffic_cone
(64) | barrier
(0) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.5845 | 0.5468 | 0.5500 | 0.5179 | 0.5312 | 0.4991 | 0.8916 | 0.7866 | 0.8830 | 0.7351 | 0.7950 | 0.0000 | 0.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.5779 | 0.5432 | 0.5404 | 0.5154 | 0.5230 | 0.4980 | 0.8813 | 0.7754 | 0.8642 | 0.7410 | 0.7836 | 0.0000 | 0.0000 | @@ -278,6 +302,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.2625 | 0.4177 | 0.3107 | 0.3382 | 1.0000 | 0.3916 | 0.3939 | 0.3964 | 0.4751 | 1.0000 | 0.1716 | 0.3458 | 0.2078 | 0.2324 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.2732 | 0.4747 | 0.3197 | 0.3430 | 1.0000 | 0.3937 | 0.3922 | 0.3996 | 0.4786 | 1.0000 | 0.1883 | 0.3943 | 0.2227 | 0.2329 | 1.0000 | Num match summary @@ -286,18 +311,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 14,872) | truck
0.5/1.0/2.0/4.0
(GTs: 1,192) | bus
0.5/1.0/2.0/4.0
(GTs: 336) | bicycle
0.5/1.0/2.0/4.0
(GTs: 740) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 5,055) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 60) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 1,635 / 1,635 / 1,635 / 1,635 | 131 / 131 / 131 / 131 | 36 / 36 / 36 / 36 | 81 / 81 / 81 / 81 | 556 / 556 / 556 / 556 | 6 / 6 / 6 / 6 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 1,635 / 1,635 / 1,635 / 1,635 | 131 / 131 / 131 / 131 | 36 / 36 / 36 / 36 | 81 / 81 / 81 / 81 | 556 / 556 / 556 / 556 | 6 / 6 / 6 / 6 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 14,872) | truck
0.5/1.0/2.0/4.0
(GTs: 1,192) | bus
0.5/1.0/2.0/4.0
(GTs: 336) | bicycle
0.5/1.0/2.0/4.0
(GTs: 740) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 5,055) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 60) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 6,097 / 6,097 / 6,097 / 6,097 | 488 / 488 / 488 / 488 | 137 / 137 / 137 / 137 | 303 / 303 / 303 / 303 | 2,072 / 2,072 / 2,072 / 2,072 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 6,097 / 6,097 / 6,097 / 6,097 | 488 / 488 / 488 / 488 | 137 / 137 / 137 / 137 | 303 / 303 / 303 / 303 | 2,072 / 2,072 / 2,072 / 2,072 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 14,872) | truck
0.5/1.0/2.0/4.0
(GTs: 1,192) | bus
0.5/1.0/2.0/4.0
(GTs: 336) | bicycle
0.5/1.0/2.0/4.0
(GTs: 740) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 5,055) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 60) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 13,306 / 13,815 / 13,873 / 13,881 | 950 / 1,047 / 1,077 / 1,085 | 294 / 330 / 332 / 332 | 606 / 638 / 633 / 634 | 4,166 / 4,224 / 4,245 / 4,270 | 12 / 12 / 12 / 12 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 13,178 / 13,676 / 13,748 / 13,798 | 925 / 1,041 / 1,064 / 1,073 | 254 / 330 / 333 / 333 | 612 / 628 / 640 / 643 | 4,247 / 4,294 / 4,313 / 4,330 | 19 / 20 / 20 / 21 | 0 / 0 / 0 / 0 | @@ -307,6 +335,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.2976 | 0.7122 | 0.3527 | 0.4046 | 1.0000 | 0.3071 | 0.7158 | 0.3559 | 0.4105 | 1.0000 | 0.2044 | 0.6811 | 0.2522 | 0.3333 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.3091 | 0.6981 | 0.3081 | 0.3833 | 1.0000 | 0.3181 | 0.6966 | 0.3115 | 0.3980 | 1.0000 | 0.2197 | 0.6583 | 0.2015 | 0.3121 | 1.0000 | Num match summary @@ -315,18 +344,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 10,929) | truck
0.5/1.0/2.0/4.0
(GTs: 1,009) | bus
0.5/1.0/2.0/4.0
(GTs: 141) | bicycle
0.5/1.0/2.0/4.0
(GTs: 460) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 3,721) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 4) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 1,202 / 1,202 / 1,202 / 1,202 | 110 / 110 / 110 / 110 | 15 / 15 / 15 / 15 | 50 / 50 / 50 / 50 | 409 / 409 / 409 / 409 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 1,202 / 1,202 / 1,202 / 1,202 | 110 / 110 / 110 / 110 | 15 / 15 / 15 / 15 | 50 / 50 / 50 / 50 | 409 / 409 / 409 / 409 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 10,929) | truck
0.5/1.0/2.0/4.0
(GTs: 1,009) | bus
0.5/1.0/2.0/4.0
(GTs: 141) | bicycle
0.5/1.0/2.0/4.0
(GTs: 460) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 3,721) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 4) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 4,480 / 4,480 / 4,480 / 4,480 | 413 / 413 / 413 / 413 | 57 / 57 / 57 / 57 | 188 / 188 / 188 / 188 | 1,525 / 1,525 / 1,525 / 1,525 | 1 / 1 / 1 / 1 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 4,480 / 4,480 / 4,480 / 4,480 | 413 / 413 / 413 / 413 | 57 / 57 / 57 / 57 | 188 / 188 / 188 / 188 | 1,525 / 1,525 / 1,525 / 1,525 | 1 / 1 / 1 / 1 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 10,929) | truck
0.5/1.0/2.0/4.0
(GTs: 1,009) | bus
0.5/1.0/2.0/4.0
(GTs: 141) | bicycle
0.5/1.0/2.0/4.0
(GTs: 460) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 3,721) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 4) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 8,680 / 9,346 / 9,522 / 9,634 | 659 / 766 / 798 / 822 | 110 / 128 / 129 / 129 | 262 / 284 / 284 / 284 | 2,660 / 2,691 / 2,712 / 2,729 | 2 / 2 / 2 / 2 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 8,463 / 9,288 / 9,554 / 9,621 | 617 / 739 / 799 / 804 | 103 / 124 / 124 / 124 | 263 / 289 / 292 / 292 | 2,604 / 2,652 / 2,667 / 2,682 | 2 / 2 / 2 / 2 | 0 / 0 / 0 / 0 | @@ -336,6 +368,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.4714 | 0.4080 | 0.4268 | 0.6321 | 1.0000 | 0.4845 | 0.4395 | 0.4299 | 0.6568 | 1.0000 | 0.2965 | 0.2446 | 0.2066 | 0.5391 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.4683 | 0.4107 | 0.4227 | 0.5956 | 1.0000 | 0.4839 | 0.4292 | 0.4259 | 0.6425 | 1.0000 | 0.2920 | 0.2122 | 0.1980 | 0.5124 | 1.0000 | Num match summary @@ -344,18 +377,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 2,883) | truck
0.5/1.0/2.0/4.0
(GTs: 600) | bus
0.5/1.0/2.0/4.0
(GTs: 60) | bicycle
0.5/1.0/2.0/4.0
(GTs: 85) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 1,092) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 0) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 317 / 317 / 317 / 317 | 66 / 66 / 66 / 66 | 6 / 6 / 6 / 6 | 9 / 9 / 9 / 9 | 120 / 120 / 120 / 120 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 317 / 317 / 317 / 317 | 66 / 66 / 66 / 66 | 6 / 6 / 6 / 6 | 9 / 9 / 9 / 9 | 120 / 120 / 120 / 120 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 2,883) | truck
0.5/1.0/2.0/4.0
(GTs: 600) | bus
0.5/1.0/2.0/4.0
(GTs: 60) | bicycle
0.5/1.0/2.0/4.0
(GTs: 85) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 1,092) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 0) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 1,182 / 1,182 / 1,182 / 1,182 | 246 / 246 / 246 / 246 | 24 / 24 / 24 / 24 | 34 / 34 / 34 / 34 | 447 / 447 / 447 / 447 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 1,182 / 1,182 / 1,182 / 1,182 | 246 / 246 / 246 / 246 | 24 / 24 / 24 / 24 | 34 / 34 / 34 / 34 | 447 / 447 / 447 / 447 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 2,883) | truck
0.5/1.0/2.0/4.0
(GTs: 600) | bus
0.5/1.0/2.0/4.0
(GTs: 60) | bicycle
0.5/1.0/2.0/4.0
(GTs: 85) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 1,092) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 0) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 1,941 / 2,181 / 2,257 / 2,276 | 316 / 419 / 450 / 461 | 28 / 35 / 41 / 41 | 38 / 47 / 49 / 49 | 756 / 762 / 766 / 773 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 1,929 / 2,144 / 2,236 / 2,337 | 301 / 408 / 466 / 475 | 26 / 32 / 41 / 41 | 39 / 42 / 46 / 46 | 691 / 697 / 700 / 730 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | @@ -365,6 +401,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.2789 | 0.4613 | 0.3211 | 0.3612 | 1.0000 | 0.4124 | 0.4210 | 0.4063 | 0.5038 | 1.0000 | 0.1941 | 0.4106 | 0.2211 | 0.2767 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.2907 | 0.5134 | 0.3242 | 0.3572 | 1.0000 | 0.4150 | 0.4172 | 0.4068 | 0.4972 | 1.0000 | 0.2100 | 0.4414 | 0.2253 | 0.2736 | 1.0000 | Num match summary @@ -373,18 +410,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 28,684) | truck
0.5/1.0/2.0/4.0
(GTs: 2,801) | bus
0.5/1.0/2.0/4.0
(GTs: 537) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,285) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 9,868) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 64) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 3,155 / 3,155 / 3,155 / 3,155 | 308 / 308 / 308 / 308 | 59 / 59 / 59 / 59 | 141 / 141 / 141 / 141 | 1,085 / 1,085 / 1,085 / 1,085 | 7 / 7 / 7 / 7 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 3,155 / 3,155 / 3,155 / 3,155 | 308 / 308 / 308 / 308 | 59 / 59 / 59 / 59 | 141 / 141 / 141 / 141 | 1,085 / 1,085 / 1,085 / 1,085 | 7 / 7 / 7 / 7 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 28,684) | truck
0.5/1.0/2.0/4.0
(GTs: 2,801) | bus
0.5/1.0/2.0/4.0
(GTs: 537) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,285) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 9,868) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 64) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 11,760 / 11,760 / 11,760 / 11,760 | 1,148 / 1,148 / 1,148 / 1,148 | 220 / 220 / 220 / 220 | 526 / 526 / 526 / 526 | 4,045 / 4,045 / 4,045 / 4,045 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 11,760 / 11,760 / 11,760 / 11,760 | 1,148 / 1,148 / 1,148 / 1,148 | 220 / 220 / 220 / 220 | 526 / 526 / 526 / 526 | 4,045 / 4,045 / 4,045 / 4,045 | 0 / 0 / 0 / 0 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 28,684) | truck
0.5/1.0/2.0/4.0
(GTs: 2,801) | bus
0.5/1.0/2.0/4.0
(GTs: 537) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,285) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 9,868) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 64) | barrier
0.5/1.0/2.0/4.0
(GTs: 0) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 23,900 / 25,377 / 25,706 / 25,903 | 1,923 / 2,238 / 2,325 / 2,350 | 438 / 500 / 509 / 509 | 907 / 959 / 976 / 977 | 7,431 / 7,767 / 7,804 / 7,811 | 14 / 14 / 14 / 14 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 23,528 / 24,950 / 25,596 / 25,735 | 1,866 / 2,196 / 2,328 / 2,367 | 379 / 486 / 490 / 490 | 874 / 918 / 941 / 944 | 7,461 / 7,553 / 7,587 / 7,622 | 19 / 22 / 22 / 23 | 0 / 0 / 0 / 0 | @@ -415,6 +455,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(60,938) | truck
(7,081) | bus
(2,370) | bicycle
(1,357) | pedestrian
(18,202) | traffic_cone
(8,250) | barrier
(1,350) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.7504 | 0.6990 | 0.6985 | 0.6827 | 0.6728 | 0.6570 | 0.9017 | 0.8242 | 0.9182 | 0.9120 | 0.8551 | 0.6137 | 0.2278 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.7371 | 0.6887 | 0.6863 | 0.6799 | 0.6621 | 0.6558 | 0.8940 | 0.8368 | 0.9124 | 0.9072 | 0.8537 | 0.4940 | 0.2617 | @@ -424,6 +465,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(54,217) | truck
(4,913) | bus
(2,116) | bicycle
(838) | pedestrian
(8,336) | traffic_cone
(2,632) | barrier
(622) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.6007 | 0.5415 | 0.6048 | 0.5886 | 0.5752 | 0.5590 | 0.8140 | 0.6462 | 0.8024 | 0.7056 | 0.6564 | 0.3888 | 0.1917 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.5833 | 0.5245 | 0.5890 | 0.5704 | 0.5596 | 0.5410 | 0.8044 | 0.6387 | 0.7893 | 0.6949 | 0.6496 | 0.2967 | 0.2096 | @@ -433,6 +475,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(19,301) | truck
(2,906) | bus
(484) | bicycle
(291) | pedestrian
(2,564) | traffic_cone
(462) | barrier
(145) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.4514 | 0.4055 | 0.5106 | 0.4910 | 0.4877 | 0.4680 | 0.7111 | 0.5017 | 0.5713 | 0.5430 | 0.4665 | 0.2350 | 0.1312 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.4384 | 0.3949 | 0.4973 | 0.4673 | 0.4756 | 0.4456 | 0.7075 | 0.5046 | 0.5412 | 0.5343 | 0.4732 | 0.1509 | 0.1571 | @@ -442,6 +485,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(134,456) | truck
(14,900) | bus
(4,970) | bicycle
(2,486) | pedestrian
(29,102) | traffic_cone
(11,344) | barrier
(2,117) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.6812 | 0.6257 | 0.6560 | 0.6392 | 0.6283 | 0.6114 | 0.8513 | 0.7163 | 0.8482 | 0.8118 | 0.7811 | 0.5519 | 0.2079 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.6650 | 0.6111 | 0.6420 | 0.6241 | 0.6150 | 0.5972 | 0.8448 | 0.7186 | 0.8363 | 0.8063 | 0.7779 | 0.4361 | 0.2350 | @@ -453,6 +497,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.1626 | 0.1917 | 0.2008 | 0.2119 | 1.0000 | 0.2063 | 0.2275 | 0.2354 | 0.2553 | 1.0000 | 0.1969 | 0.2311 | 0.2206 | 0.2285 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.1692 | 0.1845 | 0.2711 | 0.1983 | 1.0000 | 0.1868 | 0.2021 | 0.2864 | 0.2108 | 1.0000 | 0.2026 | 0.2155 | 0.2887 | 0.2184 | 1.0000 |
@@ -462,18 +507,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 60,938) | truck
0.5/1.0/2.0/4.0
(GTs: 7,081) | bus
0.5/1.0/2.0/4.0
(GTs: 2,370) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,357) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 18,202) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 8,250) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,350) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 6,703 / 6,703 / 6,703 / 6,703 | 778 / 778 / 778 / 778 | 260 / 260 / 260 / 260 | 149 / 149 / 149 / 149 | 2,002 / 2,002 / 2,002 / 2,002 | 907 / 907 / 907 / 907 | 148 / 148 / 148 / 148 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 6,703 / 6,703 / 6,703 / 6,703 | 778 / 778 / 778 / 778 | 260 / 260 / 260 / 260 | 149 / 149 / 149 / 149 | 2,002 / 2,002 / 2,002 / 2,002 | 907 / 907 / 907 / 907 | 148 / 148 / 148 / 148 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 60,938) | truck
0.5/1.0/2.0/4.0
(GTs: 7,081) | bus
0.5/1.0/2.0/4.0
(GTs: 2,370) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,357) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 18,202) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 8,250) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,350) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 24,984 / 24,984 / 24,984 / 24,984 | 2,903 / 2,903 / 2,903 / 2,903 | 971 / 971 / 971 / 971 | 556 / 556 / 556 / 556 | 7,462 / 7,462 / 7,462 / 7,462 | 3,382 / 3,382 / 3,382 / 3,382 | 0 / 553 / 553 / 553 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 24,984 / 24,984 / 24,984 / 24,984 | 2,903 / 2,903 / 2,903 / 2,903 | 971 / 971 / 971 / 971 | 556 / 556 / 556 / 556 | 7,462 / 7,462 / 7,462 / 7,462 | 3,382 / 3,382 / 3,382 / 3,382 | 553 / 553 / 553 / 553 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 60,938) | truck
0.5/1.0/2.0/4.0
(GTs: 7,081) | bus
0.5/1.0/2.0/4.0
(GTs: 2,370) | bicycle
0.5/1.0/2.0/4.0
(GTs: 1,357) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 18,202) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 8,250) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,350) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 53,009 / 54,789 / 55,430 / 55,517 | 5,192 / 5,851 / 6,147 / 6,299 | 2,088 / 2,223 / 2,269 / 2,280 | 1,164 / 1,172 / 1,172 / 1,173 | 14,694 / 14,898 / 15,021 / 15,128 | 5,197 / 5,560 / 5,677 / 5,819 | 418 / 577 / 608 / 629 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 52,338 / 54,149 / 55,189 / 55,565 | 5,350 / 5,996 / 6,202 / 6,337 | 2,027 / 2,173 / 2,227 / 2,232 | 1,170 / 1,181 / 1,182 / 1,182 | 14,547 / 14,883 / 15,058 / 15,106 | 4,519 / 4,942 / 5,249 / 5,546 | 453 / 538 / 550 / 562 |
@@ -483,6 +531,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.2253 | 0.2562 | 0.2181 | 0.2558 | 1.0000 | 0.2786 | 0.2874 | 0.2511 | 0.3007 | 1.0000 | 0.2634 | 0.2790 | 0.2296 | 0.2748 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.2376 | 0.2394 | 0.2946 | 0.2552 | 1.0000 | 0.2952 | 0.2891 | 0.3267 | 0.3020 | 1.0000 | 0.2820 | 0.2779 | 0.3072 | 0.2730 | 1.0000 | Num match summary @@ -491,18 +540,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 54,217) | truck
0.5/1.0/2.0/4.0
(GTs: 4,913) | bus
0.5/1.0/2.0/4.0
(GTs: 2,116) | bicycle
0.5/1.0/2.0/4.0
(GTs: 838) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 8,336) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 2,632) | barrier
0.5/1.0/2.0/4.0
(GTs: 622) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 5,963 / 5,963 / 5,963 / 5,963 | 540 / 540 / 540 / 540 | 232 / 232 / 232 / 232 | 92 / 92 / 92 / 92 | 916 / 916 / 916 / 916 | 289 / 289 / 289 / 289 | 68 / 68 / 68 / 68 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 5,963 / 5,963 / 5,963 / 5,963 | 540 / 540 / 540 / 540 | 232 / 232 / 232 / 232 | 92 / 92 / 92 / 92 | 916 / 916 / 916 / 916 | 289 / 289 / 289 / 289 | 68 / 68 / 68 / 68 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 54,217) | truck
0.5/1.0/2.0/4.0
(GTs: 4,913) | bus
0.5/1.0/2.0/4.0
(GTs: 2,116) | bicycle
0.5/1.0/2.0/4.0
(GTs: 838) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 8,336) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 2,632) | barrier
0.5/1.0/2.0/4.0
(GTs: 622) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 22,228 / 22,228 / 22,228 / 22,228 | 2,014 / 2,014 / 2,014 / 2,014 | 867 / 867 / 867 / 867 | 343 / 343 / 343 / 343 | 3,417 / 3,417 / 3,417 / 3,417 | 1,079 / 1,079 / 1,079 / 1,079 | 0 / 255 / 255 / 255 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 22,228 / 22,228 / 22,228 / 22,228 | 2,014 / 2,014 / 2,014 / 2,014 | 867 / 867 / 867 / 867 | 343 / 343 / 343 / 343 | 3,417 / 3,417 / 3,417 / 3,417 | 1,079 / 1,079 / 1,079 / 1,079 | 0 / 255 / 255 / 255 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 54,217) | truck
0.5/1.0/2.0/4.0
(GTs: 4,913) | bus
0.5/1.0/2.0/4.0
(GTs: 2,116) | bicycle
0.5/1.0/2.0/4.0
(GTs: 838) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 8,336) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 2,632) | barrier
0.5/1.0/2.0/4.0
(GTs: 622) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 39,866 / 44,628 / 46,320 / 46,716 | 2,698 / 3,236 / 3,480 / 3,571 | 1,383 / 1,713 / 1,807 / 1,946 | 554 / 581 / 602 / 607 | 5,708 / 5,923 / 5,984 / 6,023 | 1,215 / 1,308 / 1,337 / 1,444 | 169 / 244 / 262 / 264 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 39,059 / 43,688 / 45,797 / 46,308 | 2,628 / 3,307 / 3,561 / 3,660 | 1,261 / 1,700 / 1,825 / 1,855 | 584 / 579 / 581 / 611 | 5,589 / 5,531 / 5,588 / 5,745 | 1,142 / 1,223 / 1,314 / 1,394 | 156 / 231 / 237 / 268 | @@ -512,6 +564,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.3033 | 0.2448 | 0.2420 | 0.3607 | 1.0000 | 0.3541 | 0.3030 | 0.2731 | 0.4171 | 1.0000 | 0.3334 | 0.2749 | 0.2467 | 0.3895 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.3293 | 0.2166 | 0.3253 | 0.3476 | 1.0000 | 0.4132 | 0.3083 | 0.3639 | 0.4336 | 1.0000 | 0.3657 | 0.2567 | 0.3324 | 0.3634 | 1.0000 | Num match summary @@ -520,18 +573,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 19,301) | truck
0.5/1.0/2.0/4.0
(GTs: 2,906) | bus
0.5/1.0/2.0/4.0
(GTs: 484) | bicycle
0.5/1.0/2.0/4.0
(GTs: 291) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 2,564) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 462) | barrier
0.5/1.0/2.0/4.0
(GTs: 145) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 2,123 / 2,123 / 2,123 / 2,123 | 319 / 319 / 319 / 319 | 53 / 53 / 53 / 53 | 32 / 32 / 32 / 32 | 282 / 282 / 282 / 282 | 50 / 50 / 50 / 50 | 15 / 15 / 15 / 15 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 2,123 / 2,123 / 2,123 / 2,123 | 319 / 319 / 319 / 319 | 53 / 53 / 53 / 53 | 32 / 32 / 32 / 32 | 282 / 282 / 282 / 282 | 50 / 50 / 50 / 50 | 15 / 15 / 15 / 15 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 19,301) | truck
0.5/1.0/2.0/4.0
(GTs: 2,906) | bus
0.5/1.0/2.0/4.0
(GTs: 484) | bicycle
0.5/1.0/2.0/4.0
(GTs: 291) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 2,564) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 462) | barrier
0.5/1.0/2.0/4.0
(GTs: 145) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 7,913 / 7,913 / 7,913 / 7,913 | 1,191 / 1,191 / 1,191 / 1,191 | 198 / 198 / 198 / 198 | 119 / 119 / 119 / 119 | 1,051 / 1,051 / 1,051 / 1,051 | 189 / 189 / 189 / 189 | 0 / 59 / 59 / 59 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 7,913 / 7,913 / 7,913 / 7,913 | 1,191 / 1,191 / 1,191 / 1,191 | 198 / 198 / 198 / 198 | 119 / 119 / 119 / 119 | 1,051 / 1,051 / 1,051 / 1,051 | 0 / 189 / 189 / 189 | 0 / 59 / 59 / 59 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 19,301) | truck
0.5/1.0/2.0/4.0
(GTs: 2,906) | bus
0.5/1.0/2.0/4.0
(GTs: 484) | bicycle
0.5/1.0/2.0/4.0
(GTs: 291) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 2,564) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 462) | barrier
0.5/1.0/2.0/4.0
(GTs: 145) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 12,054 / 14,389 / 15,184 / 15,392 | 1,130 / 1,598 / 1,887 / 2,122 | 204 / 291 / 335 / 340 | 148 / 185 / 189 / 189 | 1,543 / 1,572 / 1,589 / 1,608 | 174 / 181 / 185 / 189 | 33 / 52 / 65 / 68 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 12,130 / 14,043 / 15,222 / 15,426 | 1,162 / 1,568 / 2,007 / 2,112 | 169 / 279 / 355 / 366 | 153 / 180 / 181 / 181 | 1,439 / 1,486 / 1,498 / 1,509 | 155 / 172 / 178 / 186 | 33 / 52 / 72 / 73 | @@ -540,6 +596,8 @@ Eval Range: 0.0 - 121.0m | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | + | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 0.1892 | 0.2143 | 0.2104 | 0.2317 | 1.0000 | 0.2413 | 0.2495 | 0.2451 | 0.2782 | 1.0000 | 0.2323 | 0.2523 | 0.2276 | 0.2561 | 1.0000 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 0.1971 | 0.2029 | 0.2829 | 0.2224 | 1.0000 | 0.2506 | 0.2464 | 0.3150 | 0.2717 | 1.0000 | 0.2419 | 0.2401 | 0.2986 | 0.2465 | 1.0000 | Num match summary @@ -548,18 +606,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 134,456) | truck
0.5/1.0/2.0/4.0
(GTs: 14,900) | bus
0.5/1.0/2.0/4.0
(GTs: 4,970) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,486) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 29,102) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 11,344) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,117) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 14,790 / 14,790 / 14,790 / 14,790 | 1,639 / 1,639 / 1,639 / 1,639 | 546 / 546 / 546 / 546 | 273 / 273 / 273 / 273 | 3,201 / 3,201 / 3,201 / 3,201 | 1,247 / 1,247 / 1,247 / 1,247 | 232 / 232 / 232 / 232 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 14,790 / 14,790 / 14,790 / 14,790 | 1,639 / 1,639 / 1,639 / 1,639 | 546 / 546 / 546 / 546 | 273 / 273 / 273 / 273 | 3,201 / 3,201 / 3,201 / 3,201 | 1,247 / 1,247 / 1,247 / 1,247 | 232 / 232 / 232 / 232 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 134,456) | truck
0.5/1.0/2.0/4.0
(GTs: 14,900) | bus
0.5/1.0/2.0/4.0
(GTs: 4,970) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,486) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 29,102) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 11,344) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,117) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 55,126 / 55,126 / 55,126 / 55,126 | 6,109 / 6,109 / 6,109 / 6,109 | 2,037 / 2,037 / 2,037 / 2,037 | 1,019 / 1,019 / 1,019 / 1,019 | 11,931 / 11,931 / 11,931 / 11,931 | 4,651 / 4,651 / 4,651 / 4,651 | 0 / 867 / 867 / 867 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 55,126 / 55,126 / 55,126 / 55,126 | 6,109 / 6,109 / 6,109 / 6,109 | 2,037 / 2,037 / 2,037 / 2,037 | 1,019 / 1,019 / 1,019 / 1,019 | 11,931 / 11,931 / 11,931 / 11,931 | 4,651 / 4,651 / 4,651 / 4,651 | 0 / 867 / 867 / 867 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 134,456) | truck
0.5/1.0/2.0/4.0
(GTs: 14,900) | bus
0.5/1.0/2.0/4.0
(GTs: 4,970) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,486) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 29,102) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 11,344) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,117) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR j6gen2_base/2.8.2 | 104,267 / 114,032 / 117,273 / 118,068 | 8,808 / 10,604 / 11,671 / 11,997 | 3,655 / 4,216 / 4,500 / 4,564 | 1,836 / 1,880 / 1,896 / 1,899 | 21,512 / 21,828 / 22,008 / 22,175 | 6,679 / 6,947 / 7,086 / 7,281 | 661 / 830 / 909 / 936 | | BEVFusion-LiDAR j6gen2_base/2.8.1 | 102,297 / 112,278 / 116,527 / 117,516 | 9,001 / 10,847 / 11,695 / 12,090 | 3,495 / 4,146 / 4,350 / 4,483 | 1,859 / 1,919 / 1,923 / 1,923 | 21,639 / 21,986 / 21,863 / 22,136 | 5,782 / 6,632 / 6,752 / 7,077 | 602 / 827 / 850 / 872 | @@ -567,6 +628,746 @@ ## Release +### BEVFusion-LiDAR J6Gen2_base/2.8.2 + +
+ Changes + +- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with j6gen2 base dataset and intensity. +
+ +
+ Artifacts + +- Deployed onnx and ROS parameter files (for internal) + - [WebAuto]() + - [model-zoo]() + - [Google drive]() +- Logs (for internal) + - [model-zoo]() + - [Google drive]() +- Pytorch Best checkpoints: + - [model-zoo]() + - [Google drive]() + +
+ +
+ Training configs + +- [Config file path]() +- Train time: NVIDIA H200 140GB * 8 * 50 epochs = 39 hours +- Batch size: 8*24 = 192 +- Training Dataset (frames: 63,813): + - j6gen2: db_j6gen2_v1 + db_j6gen2_v2 + db_j6gen2_v3 + db_j6gen2_v4 + db_j6gen2_v5 + db_j6gen2_v6 + db_j6gen2_v7 + db_j6gen2_v8 + db_j6gen2_v9 + db_j6gen2_v10 + db_j6gen2_v11 + db_j6gen2_v12 (51,208 frames) + - largebus: db_largebus_v1 + db_largebus_v2 + db_largebus_v3 (12,605 frames) + +
+ +
+ Evaluation + +**J6Gen2_base Datasets (5,910 frames)**: + + - j6gen2 (4,682 frames): db_j6gen2_v1 + db_j6gen2_v2 + db_j6gen2_v3 + db_j6gen2_v4 + db_j6gen2_v5 + db_j6gen2_v6 + db_j6gen2_v7 + db_j6gen2_v8 + db_j6gen2_v9 + db_j6gen2_v10 + db_j6gen2_v11 + db_j6gen2_v12 + - largebus (1,228 frames): db_largebus_v1 + db_largebus_v2 + db_largebus_v3 + +**Total BEV Center Distance mAP (eval range = 0.0 - 50.0m): 0.7448** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 75,810 | 67,823 / 70,437 / 71,336 / 71,681 | 0.865 / 0.904 / 0.925 / 0.926 | 0.910 / 0.935 / 0.941 / 0.942 | 0.250 / 0.207 / 0.186 / 0.172 | +| truck | 8,273 | 6,486 / 7,204 / 7,600 / 7,767 | 0.707 / 0.829 / 0.882 / 0.907 | 0.791 / 0.867 / 0.902 / 0.917 | 0.234 / 0.197 / 0.177 / 0.177 | +| bus | 2,706 | 2,404 / 2,580 / 2,641 / 2,657 | 0.829 / 0.925 / 0.963 / 0.974 | 0.895 / 0.954 / 0.972 / 0.975 | 0.141 / 0.117 / 0.117 / 0.117 | +| bicycle | 2,097 | 1,963 / 1,992 / 1,996 / 2,002 | 0.872 / 0.892 / 0.900 / 0.902 | 0.871 / 0.882 / 0.890 / 0.891 | 0.206 / 0.185 / 0.193 / 0.193 | +| pedestrian | 23,257 | 21,433 / 21,779 / 21,932 / 22,046 | 0.836 / 0.853 / 0.866 / 0.872 | 0.834 / 0.844 / 0.851 / 0.856 | 0.164 / 0.166 / 0.165 / 0.165 | +| traffic_cone | 8,310 | 6,687 / 7,010 / 7,132 / 7,291 | 0.537 / 0.580 / 0.597 / 0.623 | 0.632 / 0.654 / 0.667 / 0.683 | 0.221 / 0.199 / 0.199 / 0.199 | +| barrier | 1,350 | 551 / 736 / 788 / 826 | 0.130 / 0.226 / 0.256 / 0.279 | 0.348 / 0.427 / 0.450 / 0.466 | 0.147 / 0.102 / 0.102 / 0.102 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 8,339 / 8,339 / 8,339 / 8,339 | 0.106 / 0.110 / 0.112 / 0.114 | 0.032 / 0.034 / 0.035 / 0.035 | 0.111 / 0.112 / 0.112 / 0.112 | 0.130 / 0.131 / 0.131 / 0.131 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 910 / 910 / 910 / 910 | 0.142 / 0.164 / 0.179 / 0.191 | 0.025 / 0.027 / 0.028 / 0.029 | 0.121 / 0.126 / 0.128 / 0.130 | 0.328 / 0.334 / 0.334 / 0.336 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 297 / 297 / 297 / 297 | 0.111 / 0.123 / 0.143 / 0.145 | 0.052 / 0.053 / 0.053 / 0.054 | 0.082 / 0.085 / 0.090 / 0.091 | 0.150 / 0.151 / 0.149 / 0.150 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 230 / 230 / 230 / 230 | 0.125 / 0.130 / 0.132 / 0.134 | 0.078 / 0.079 / 0.080 / 0.080 | 0.190 / 0.192 / 0.193 / 0.193 | 0.563 / 0.563 / 0.562 / 0.562 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 2,558 / 2,558 / 2,558 / 2,558 | 0.100 / 0.105 / 0.114 / 0.132 | 0.400 / 0.402 / 0.405 / 0.409 | 0.230 / 0.231 / 0.231 / 0.232 | 0.233 / 0.233 / 0.233 / 0.235 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 914 / 914 / 914 / 914 | 0.140 / 0.155 / 0.177 / 0.242 | 0.283 / 0.282 / 0.281 / 0.281 | 0.280 / 0.279 / 0.279 / 0.279 | 0.025 / 0.025 / 0.025 / 0.025 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 148 / 148 / 148 / 148 | 0.213 / 0.291 / 0.334 / 0.417 | 0.458 / 0.467 / 0.468 / 0.466 | 0.341 / 0.379 / 0.393 / 0.404 | 0.027 / 0.027 / 0.027 / 0.027 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 31,082 / 31,082 / 31,082 / 31,082 | 0.114 / 0.120 / 0.122 / 0.125 | 0.037 / 0.039 / 0.041 / 0.042 | 0.116 / 0.117 / 0.118 / 0.118 | 0.139 / 0.140 / 0.141 / 0.141 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 3,391 / 3,391 / 3,391 / 3,391 | 0.150 / 0.180 / 0.201 / 0.218 | 0.029 / 0.031 / 0.033 / 0.034 | 0.126 / 0.132 / 0.135 / 0.138 | 0.348 / 0.352 / 0.351 / 0.352 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,109 / 1,109 / 1,109 / 1,109 | 0.120 / 0.136 / 0.153 / 0.155 | 0.058 / 0.059 / 0.059 / 0.060 | 0.086 / 0.089 / 0.094 / 0.094 | 0.161 / 0.162 / 0.160 / 0.160 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 859 / 859 / 859 / 859 | 0.127 / 0.133 / 0.137 / 0.139 | 0.088 / 0.088 / 0.090 / 0.090 | 0.197 / 0.199 / 0.200 / 0.200 | 0.571 / 0.572 / 0.571 / 0.571 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 9,535 / 9,535 / 9,535 / 9,535 | 0.104 / 0.111 / 0.124 / 0.146 | 0.427 / 0.430 / 0.434 / 0.438 | 0.236 / 0.237 / 0.237 / 0.238 | 0.240 / 0.239 / 0.240 / 0.242 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 3,407 / 3,407 / 3,407 / 3,407 | 0.148 / 0.168 / 0.199 / 0.292 | 0.315 / 0.312 / 0.311 / 0.309 | 0.281 / 0.281 / 0.281 / 0.281 | 0.026 / 0.026 / 0.026 / 0.026 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 553 / 553 / 553 | 1.000 / 0.322 / 0.380 / 0.488 | 1.000 / 0.518 / 0.525 / 0.526 | 1.000 / 0.444 / 0.458 / 0.468 | 1.000 / 0.028 / 0.028 / 0.029 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 66,338 / 68,627 / 69,254 / 69,512 | 0.130 / 0.146 / 0.153 / 0.160 | 0.056 / 0.066 / 0.071 / 0.072 | 0.126 / 0.129 / 0.130 / 0.130 | 0.149 / 0.151 / 0.153 / 0.153 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 6,224 / 6,907 / 7,224 / 7,345 | 0.162 / 0.210 / 0.256 / 0.297 | 0.042 / 0.051 / 0.059 / 0.062 | 0.135 / 0.146 / 0.154 / 0.159 | 0.347 / 0.349 / 0.349 / 0.353 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 2,390 / 2,559 / 2,607 / 2,615 | 0.139 / 0.172 / 0.192 / 0.201 | 0.086 / 0.097 / 0.098 / 0.100 | 0.095 / 0.101 / 0.105 / 0.106 | 0.179 / 0.178 / 0.178 / 0.178 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 1,749 / 1,797 / 1,804 / 1,806 | 0.133 / 0.142 / 0.154 / 0.158 | 0.104 / 0.109 / 0.111 / 0.111 | 0.205 / 0.209 / 0.213 / 0.213 | 0.577 / 0.580 / 0.576 / 0.575 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 18,908 / 19,118 / 19,271 / 19,406 | 0.111 / 0.122 / 0.142 / 0.177 | 0.456 / 0.460 / 0.465 / 0.472 | 0.242 / 0.244 / 0.245 / 0.246 | 0.245 / 0.245 / 0.246 / 0.248 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 5,208 / 5,572 / 5,689 / 5,831 | 0.149 / 0.173 / 0.209 / 0.317 | 0.323 / 0.328 / 0.327 / 0.325 | 0.281 / 0.281 / 0.281 / 0.282 | 0.026 / 0.026 / 0.026 / 0.026 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 418 / 577 / 608 / 629 | 0.218 / 0.311 / 0.363 / 0.464 | 0.535 / 0.531 / 0.534 / 0.533 | 0.390 / 0.438 / 0.452 / 0.463 | 0.024 / 0.029 / 0.029 / 0.029 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +**Total BEV Center Distance mAP (eval range = 50.0 - 90.0m): 0.5994** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 65,146 | 51,620 / 57,424 / 59,899 / 60,675 | 0.706 / 0.826 / 0.870 / 0.890 | 0.786 / 0.857 / 0.882 / 0.888 | 0.229 / 0.184 / 0.170 / 0.170 | +| truck | 5,922 | 3,658 / 4,459 / 4,926 / 5,142 | 0.474 / 0.647 / 0.743 / 0.783 | 0.634 / 0.742 / 0.793 / 0.811 | 0.232 / 0.207 / 0.207 / 0.207 | +| bus | 2,257 | 1,602 / 1,970 / 2,103 / 2,164 | 0.592 / 0.817 / 0.898 / 0.923 | 0.717 / 0.854 / 0.898 / 0.912 | 0.364 / 0.276 / 0.276 / 0.154 | +| bicycle | 1,298 | 1,002 / 1,072 / 1,077 / 1,078 | 0.587 / 0.675 / 0.679 / 0.683 | 0.683 / 0.726 / 0.729 / 0.729 | 0.156 / 0.156 / 0.135 / 0.135 | +| pedestrian | 12,057 | 10,456 / 10,666 / 10,761 / 10,864 | 0.654 / 0.678 / 0.692 / 0.704 | 0.701 / 0.712 / 0.718 / 0.723 | 0.143 / 0.130 / 0.130 / 0.134 | +| traffic_cone | 2,636 | 1,794 / 1,868 / 1,909 / 1,993 | 0.339 / 0.362 / 0.384 / 0.424 | 0.499 / 0.514 / 0.525 / 0.545 | 0.181 / 0.181 / 0.166 / 0.166 | +| barrier | 622 | 221 / 284 / 311 / 326 | 0.102 / 0.191 / 0.224 / 0.235 | 0.315 / 0.394 / 0.423 / 0.426 | 0.097 / 0.066 / 0.066 / 0.096 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 7,166 / 7,166 / 7,166 / 7,166 | 0.156 / 0.178 / 0.193 / 0.205 | 0.103 / 0.130 / 0.149 / 0.153 | 0.154 / 0.158 / 0.159 / 0.159 | 0.161 / 0.161 / 0.162 / 0.162 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 651 / 651 / 651 / 651 | 0.189 / 0.234 / 0.276 / 0.314 | 0.034 / 0.037 / 0.041 / 0.043 | 0.159 / 0.169 / 0.176 / 0.180 | 0.431 / 0.441 / 0.446 / 0.450 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 248 / 248 / 248 / 248 | 0.164 / 0.210 / 0.235 / 0.245 | 0.160 / 0.147 / 0.144 / 0.148 | 0.117 / 0.127 / 0.132 / 0.133 | 0.139 / 0.149 / 0.150 / 0.152 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 142 / 142 / 142 / 142 | 0.175 / 0.201 / 0.203 / 0.207 | 0.144 / 0.148 / 0.147 / 0.150 | 0.205 / 0.214 / 0.214 / 0.214 | 0.670 / 0.713 / 0.713 / 0.716 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 1,326 / 1,326 / 1,326 / 1,326 | 0.114 / 0.125 / 0.141 / 0.176 | 0.528 / 0.535 / 0.540 / 0.548 | 0.223 / 0.223 / 0.223 / 0.224 | 0.285 / 0.285 / 0.286 / 0.289 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 289 / 289 / 289 / 289 | 0.152 / 0.170 / 0.222 / 0.414 | 0.316 / 0.322 / 0.322 / 0.324 | 0.288 / 0.288 / 0.289 / 0.291 | 0.038 / 0.037 / 0.037 / 0.038 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 68 / 68 / 68 / 68 | 0.234 / 0.318 / 0.380 / 0.469 | 0.469 / 0.490 / 0.470 / 0.464 | 0.339 / 0.354 / 0.363 / 0.370 | 0.039 / 0.043 / 0.043 / 0.043 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 26,709 / 26,709 / 26,709 / 26,709 | 0.167 / 0.195 / 0.215 / 0.231 | 0.125 / 0.159 / 0.183 / 0.188 | 0.161 / 0.164 / 0.165 / 0.166 | 0.169 / 0.169 / 0.169 / 0.170 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 2,428 / 2,428 / 2,428 / 2,428 | 0.204 / 0.263 / 0.322 / 0.370 | 0.041 / 0.045 / 0.050 / 0.052 | 0.166 / 0.178 / 0.187 / 0.192 | 0.423 / 0.442 / 0.451 / 0.458 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 925 / 925 / 925 / 925 | 0.180 / 0.240 / 0.275 / 0.287 | 0.119 / 0.114 / 0.113 / 0.120 | 0.125 / 0.136 / 0.143 / 0.143 | 0.163 / 0.171 / 0.171 / 0.172 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 532 / 532 / 532 / 532 | 0.179 / 0.208 / 0.211 / 0.219 | 0.173 / 0.178 / 0.177 / 0.182 | 0.211 / 0.217 / 0.217 / 0.218 | 0.693 / 0.716 / 0.715 / 0.721 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 4,943 / 4,943 / 4,943 / 4,943 | 0.121 / 0.134 / 0.154 / 0.195 | 0.564 / 0.571 / 0.577 / 0.585 | 0.225 / 0.226 / 0.226 / 0.227 | 0.307 / 0.305 / 0.306 / 0.310 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1,080 / 1,080 / 1,080 / 1,080 | 0.159 / 0.181 / 0.248 / 0.472 | 0.395 / 0.401 / 0.397 / 0.396 | 0.296 / 0.295 / 0.296 / 0.298 | 0.037 / 0.037 / 0.037 / 0.038 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 255 / 255 / 255 | 1.000 / 0.336 / 0.426 / 0.564 | 1.000 / 0.422 / 0.398 / 0.396 | 1.000 / 0.390 / 0.399 / 0.407 | 1.000 / 0.047 / 0.046 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 48,458 / 54,005 / 55,962 / 56,342 | 0.179 / 0.222 / 0.255 / 0.278 | 0.158 / 0.205 / 0.235 / 0.240 | 0.166 / 0.171 / 0.173 / 0.173 | 0.179 / 0.183 / 0.185 / 0.186 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 3,357 / 3,998 / 4,271 / 4,366 | 0.208 / 0.279 / 0.347 / 0.402 | 0.048 / 0.052 / 0.056 / 0.057 | 0.169 / 0.184 / 0.193 / 0.199 | 0.428 / 0.450 / 0.459 / 0.468 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,493 / 1,843 / 1,938 / 2,076 | 0.192 / 0.279 / 0.329 / 0.393 | 0.127 / 0.124 / 0.125 / 0.181 | 0.128 / 0.144 / 0.153 / 0.157 | 0.169 / 0.186 / 0.190 / 0.192 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 808 / 859 / 890 / 891 | 0.179 / 0.207 / 0.214 / 0.220 | 0.185 / 0.191 / 0.200 / 0.203 | 0.212 / 0.218 / 0.221 / 0.221 | 0.690 / 0.714 / 0.733 / 0.737 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 8,273 / 8,667 / 8,745 / 8,721 | 0.123 / 0.139 / 0.162 / 0.203 | 0.570 / 0.586 / 0.593 / 0.598 | 0.226 / 0.227 / 0.227 / 0.228 | 0.315 / 0.318 / 0.318 / 0.320 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1,217 / 1,252 / 1,339 / 1,390 | 0.156 / 0.175 / 0.236 / 0.430 | 0.372 / 0.382 / 0.385 / 0.386 | 0.292 / 0.291 / 0.293 / 0.296 | 0.037 / 0.037 / 0.037 / 0.038 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 169 / 243 / 261 / 230 | 0.240 / 0.330 / 0.410 / 0.521 | 0.443 / 0.417 / 0.399 / 0.426 | 0.349 / 0.379 / 0.389 / 0.378 | 0.040 / 0.047 / 0.046 / 0.049 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +**Total BEV Center Distance mAP (eval range = 90.0 - 121.0m): 0.4531** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 22,184 | 15,927 / 18,813 / 20,236 / 20,624 | 0.545 / 0.715 / 0.796 / 0.815 | 0.667 / 0.761 / 0.800 / 0.810 | 0.201 / 0.168 / 0.168 / 0.168 | +| truck | 3,506 | 1,591 / 2,289 / 2,745 / 2,973 | 0.247 / 0.494 / 0.655 / 0.729 | 0.459 / 0.630 / 0.728 / 0.766 | 0.184 / 0.181 / 0.174 / 0.139 | +| bus | 544 | 273 / 379 / 431 / 443 | 0.322 / 0.579 / 0.689 / 0.711 | 0.530 / 0.683 / 0.752 / 0.762 | 0.318 / 0.200 / 0.117 / 0.117 | +| bicycle | 376 | 277 / 308 / 315 / 315 | 0.405 / 0.520 / 0.543 / 0.543 | 0.541 / 0.601 / 0.617 / 0.617 | 0.131 / 0.131 / 0.131 / 0.131 | +| pedestrian | 3,656 | 2,993 / 3,043 / 3,079 / 3,114 | 0.475 / 0.491 / 0.501 / 0.511 | 0.577 / 0.585 / 0.590 / 0.596 | 0.130 / 0.108 / 0.113 / 0.113 | +| traffic_cone | 462 | 296 / 307 / 315 / 322 | 0.199 / 0.212 / 0.224 / 0.250 | 0.401 / 0.417 / 0.426 / 0.438 | 0.196 / 0.196 / 0.196 / 0.196 | +| barrier | 145 | 45 / 71 / 81 / 85 | 0.035 / 0.124 / 0.170 / 0.189 | 0.237 / 0.373 / 0.409 / 0.429 | 0.118 / 0.118 / 0.118 / 0.091 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 2,440 / 2,440 / 2,440 / 2,440 | 0.196 / 0.238 / 0.273 / 0.300 | 0.187 / 0.245 / 0.277 / 0.287 | 0.179 / 0.183 / 0.184 / 0.185 | 0.301 / 0.297 / 0.295 / 0.294 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 385 / 385 / 385 / 385 | 0.230 / 0.329 / 0.424 / 0.492 | 0.044 / 0.056 / 0.064 / 0.069 | 0.172 / 0.193 / 0.208 / 0.216 | 0.394 / 0.413 / 0.423 / 0.429 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 59 / 59 / 59 / 59 | 0.247 / 0.325 / 0.367 / 0.383 | 0.037 / 0.052 / 0.059 / 0.061 | 0.141 / 0.157 / 0.164 / 0.166 | 0.429 / 0.445 / 0.469 / 0.471 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 41 / 41 / 41 / 41 | 0.249 / 0.287 / 0.304 / 0.304 | 0.114 / 0.118 / 0.117 / 0.117 | 0.256 / 0.266 / 0.268 / 0.268 | 0.855 / 0.881 / 0.889 / 0.889 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 402 / 402 / 402 / 402 | 0.124 / 0.134 / 0.152 / 0.198 | 0.466 / 0.474 / 0.474 / 0.480 | 0.229 / 0.230 / 0.230 / 0.231 | 0.365 / 0.374 / 0.374 / 0.376 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 50 / 50 / 50 / 50 | 0.141 / 0.153 / 0.199 / 0.466 | 0.384 / 0.394 / 0.400 / 0.393 | 0.307 / 0.306 / 0.306 / 0.309 | 0.043 / 0.043 / 0.044 / 0.044 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 15 / 15 / 15 / 15 | 0.234 / 0.369 / 0.478 / 0.794 | 0.395 / 0.322 / 0.330 / 0.318 | 0.276 / 0.319 / 0.346 / 0.371 | 0.043 / 0.042 / 0.043 / 0.044 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 9,095 / 9,095 / 9,095 / 9,095 | 0.206 / 0.256 / 0.299 / 0.334 | 0.240 / 0.293 / 0.328 / 0.338 | 0.184 / 0.189 / 0.190 / 0.190 | 0.305 / 0.304 / 0.302 / 0.301 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,437 / 1,437 / 1,437 / 1,437 | 0.242 / 0.359 / 0.484 / 0.577 | 0.068 / 0.068 / 0.078 / 0.085 | 0.185 / 0.204 / 0.221 / 0.231 | 0.464 / 0.479 / 0.478 / 0.479 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 223 / 223 / 223 / 223 | 0.253 / 0.345 / 0.410 / 0.436 | 0.071 / 0.073 / 0.080 / 0.082 | 0.145 / 0.161 / 0.171 / 0.175 | 0.451 / 0.473 / 0.508 / 0.510 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 154 / 154 / 154 / 154 | 0.227 / 0.273 / 0.302 / 0.302 | 0.155 / 0.152 / 0.149 / 0.149 | 0.248 / 0.258 / 0.261 / 0.261 | 0.889 / 0.919 / 0.930 / 0.930 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 1,498 / 1,498 / 1,498 / 1,498 | 0.133 / 0.145 / 0.167 / 0.222 | 0.516 / 0.523 / 0.524 / 0.534 | 0.228 / 0.228 / 0.229 / 0.229 | 0.394 / 0.399 / 0.399 / 0.402 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 189 / 189 / 189 / 189 | 0.153 / 0.171 / 0.224 / 0.498 | 0.492 / 0.503 / 0.510 / 0.511 | 0.305 / 0.302 / 0.302 / 0.305 | 0.046 / 0.046 / 0.046 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 59 / 59 / 59 | 1.000 / 0.405 / 0.537 / 0.854 | 1.000 / 0.278 / 0.289 / 0.278 | 1.000 / 0.363 / 0.389 / 0.411 | 1.000 / 0.046 / 0.047 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 14,016 / 16,637 / 17,502 / 17,728 | 0.210 / 0.271 / 0.324 / 0.368 | 0.270 / 0.335 / 0.372 / 0.386 | 0.186 / 0.192 / 0.193 / 0.194 | 0.305 / 0.308 / 0.306 / 0.305 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,456 / 2,007 / 2,333 / 2,538 | 0.240 / 0.366 / 0.511 / 0.638 | 0.062 / 0.067 / 0.083 / 0.099 | 0.183 / 0.206 / 0.226 / 0.240 | 0.464 / 0.493 / 0.500 / 0.509 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 231 / 326 / 378 / 383 | 0.250 / 0.354 / 0.460 / 0.487 | 0.042 / 0.087 / 0.107 / 0.107 | 0.141 / 0.162 / 0.177 / 0.181 | 0.430 / 0.490 / 0.548 / 0.549 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 206 / 229 / 235 / 235 | 0.225 / 0.266 / 0.291 / 0.291 | 0.128 / 0.135 / 0.134 / 0.134 | 0.249 / 0.259 / 0.262 / 0.262 | 0.878 / 0.908 / 0.928 / 0.928 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 2,101 / 2,340 / 2,309 / 2,332 | 0.131 / 0.148 / 0.168 / 0.222 | 0.486 / 0.524 / 0.521 / 0.533 | 0.226 / 0.229 / 0.228 / 0.228 | 0.381 / 0.412 / 0.408 / 0.411 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 173 / 180 / 184 / 189 | 0.142 / 0.162 / 0.209 / 0.479 | 0.402 / 0.430 / 0.440 / 0.451 | 0.304 / 0.302 / 0.303 / 0.307 | 0.044 / 0.044 / 0.044 / 0.044 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 33 / 52 / 57 / 68 | 0.231 / 0.389 / 0.489 / 0.850 | 0.364 / 0.287 / 0.295 / 0.277 | 0.277 / 0.322 / 0.343 / 0.409 | 0.043 / 0.043 / 0.045 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +**Total BEV Center Distance mAP (eval range = 0.0 - 121.0m): 0.6771** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 163,140 | 135,636 / 147,074 / 151,952 / 153,472 | 0.774 / 0.864 / 0.899 / 0.910 | 0.830 / 0.882 / 0.900 / 0.905 | 0.252 / 0.186 / 0.173 / 0.170 | +| truck | 17,701 | 11,757 / 13,995 / 15,339 / 15,982 | 0.547 / 0.713 / 0.803 / 0.847 | 0.679 / 0.783 / 0.836 / 0.857 | 0.288 / 0.190 / 0.174 / 0.174 | +| bus | 5,507 | 4,286 / 4,945 / 5,193 / 5,283 | 0.691 / 0.853 / 0.920 / 0.934 | 0.785 / 0.885 / 0.921 / 0.931 | 0.318 / 0.238 / 0.155 / 0.143 | +| bicycle | 3,771 | 3,248 / 3,380 / 3,395 / 3,401 | 0.742 / 0.795 / 0.804 / 0.805 | 0.777 / 0.802 / 0.808 / 0.809 | 0.185 / 0.185 / 0.185 / 0.185 | +| pedestrian | 38,970 | 34,933 / 35,530 / 35,814 / 36,068 | 0.760 / 0.782 / 0.791 / 0.803 | 0.770 / 0.780 / 0.786 / 0.791 | 0.158 / 0.158 / 0.158 / 0.160 | +| traffic_cone | 11,408 | 8,788 / 9,196 / 9,366 / 9,619 | 0.483 / 0.519 / 0.539 / 0.568 | 0.593 / 0.616 / 0.628 / 0.645 | 0.216 / 0.199 / 0.199 / 0.198 | +| barrier | 2,117 | 821 / 1,096 / 1,187 / 1,245 | 0.112 / 0.206 / 0.238 / 0.257 | 0.330 / 0.414 / 0.440 / 0.453 | 0.105 / 0.105 / 0.097 / 0.097 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 17,945 / 17,945 / 17,945 / 17,945 | 0.127 / 0.141 / 0.150 / 0.156 | 0.060 / 0.075 / 0.085 / 0.087 | 0.128 / 0.131 / 0.132 / 0.133 | 0.150 / 0.152 / 0.153 / 0.154 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,947 / 1,947 / 1,947 / 1,947 | 0.163 / 0.202 / 0.235 / 0.265 | 0.029 / 0.034 / 0.037 / 0.040 | 0.136 / 0.145 / 0.151 / 0.155 | 0.366 / 0.376 / 0.379 / 0.383 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 605 / 605 / 605 / 605 | 0.132 / 0.160 / 0.184 / 0.189 | 0.091 / 0.090 / 0.090 / 0.092 | 0.095 / 0.102 / 0.107 / 0.108 | 0.155 / 0.162 / 0.162 / 0.163 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 414 / 414 / 414 / 414 | 0.143 / 0.155 / 0.159 / 0.161 | 0.096 / 0.097 / 0.098 / 0.099 | 0.199 / 0.203 / 0.204 / 0.204 | 0.599 / 0.613 / 0.613 / 0.614 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 4,286 / 4,286 / 4,286 / 4,286 | 0.105 / 0.112 / 0.124 / 0.147 | 0.436 / 0.441 / 0.443 / 0.449 | 0.230 / 0.231 / 0.231 / 0.232 | 0.249 / 0.250 / 0.250 / 0.252 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1,254 / 1,254 / 1,254 / 1,254 | 0.143 / 0.158 / 0.186 / 0.279 | 0.289 / 0.289 / 0.289 / 0.289 | 0.281 / 0.281 / 0.281 / 0.282 | 0.028 / 0.028 / 0.028 / 0.028 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 232 / 232 / 232 / 232 | 0.219 / 0.303 / 0.356 / 0.451 | 0.476 / 0.479 / 0.474 / 0.470 | 0.345 / 0.376 / 0.389 / 0.400 | 0.030 / 0.031 / 0.031 / 0.031 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 66,887 / 66,887 / 66,887 / 66,887 | 0.141 / 0.159 / 0.171 / 0.180 | 0.078 / 0.098 / 0.112 / 0.114 | 0.137 / 0.141 / 0.142 / 0.142 | 0.162 / 0.164 / 0.165 / 0.165 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 7,257 / 7,257 / 7,257 / 7,257 | 0.178 / 0.229 / 0.278 / 0.319 | 0.036 / 0.041 / 0.045 / 0.049 | 0.145 / 0.156 / 0.164 / 0.169 | 0.380 / 0.390 / 0.393 / 0.398 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 2,257 / 2,257 / 2,257 / 2,257 | 0.147 / 0.185 / 0.209 / 0.216 | 0.083 / 0.083 / 0.084 / 0.087 | 0.102 / 0.110 / 0.115 / 0.116 | 0.175 / 0.181 / 0.181 / 0.182 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 1,546 / 1,546 / 1,546 / 1,546 | 0.149 / 0.164 / 0.169 / 0.173 | 0.114 / 0.116 / 0.117 / 0.118 | 0.206 / 0.211 / 0.212 / 0.212 | 0.618 / 0.630 / 0.630 / 0.631 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 15,977 / 15,977 / 15,977 / 15,977 | 0.111 / 0.120 / 0.136 / 0.167 | 0.471 / 0.476 / 0.479 / 0.485 | 0.234 / 0.235 / 0.236 / 0.237 | 0.263 / 0.263 / 0.263 / 0.266 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 4,677 / 4,677 / 4,677 / 4,677 | 0.151 / 0.172 / 0.212 / 0.340 | 0.331 / 0.330 / 0.328 / 0.327 | 0.285 / 0.284 / 0.284 / 0.285 | 0.028 / 0.028 / 0.028 / 0.029 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 867 / 867 / 867 | 1.000 / 0.332 / 0.405 / 0.535 | 1.000 / 0.477 / 0.478 / 0.480 | 1.000 / 0.424 / 0.438 / 0.448 | 1.000 / 0.034 / 0.034 / 0.035 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 127,648 / 139,390 / 143,024 / 143,959 | 0.156 / 0.191 / 0.215 / 0.232 | 0.113 / 0.151 / 0.172 / 0.177 | 0.147 / 0.153 / 0.154 / 0.155 | 0.177 / 0.182 / 0.184 / 0.185 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 10,681 / 12,986 / 13,994 / 14,360 | 0.184 / 0.257 / 0.331 / 0.393 | 0.041 / 0.055 / 0.064 / 0.068 | 0.149 / 0.167 / 0.179 / 0.186 | 0.385 / 0.404 / 0.411 / 0.417 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 4,050 / 4,683 / 5,002 / 5,069 | 0.163 / 0.226 / 0.272 / 0.300 | 0.092 / 0.096 / 0.110 / 0.131 | 0.109 / 0.122 / 0.130 / 0.132 | 0.194 / 0.203 / 0.213 / 0.213 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 2,730 / 2,821 / 2,841 / 2,845 | 0.153 / 0.169 / 0.178 / 0.183 | 0.126 / 0.130 / 0.132 / 0.133 | 0.210 / 0.215 / 0.218 / 0.218 | 0.628 / 0.643 / 0.640 / 0.641 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 28,978 / 29,363 / 29,579 / 29,675 | 0.115 / 0.127 / 0.147 / 0.184 | 0.488 / 0.493 / 0.498 / 0.504 | 0.237 / 0.238 / 0.239 / 0.239 | 0.273 / 0.273 / 0.273 / 0.276 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 6,502 / 6,949 / 7,100 / 7,295 | 0.150 / 0.173 / 0.213 / 0.340 | 0.329 / 0.339 / 0.338 / 0.337 | 0.283 / 0.284 / 0.284 / 0.285 | 0.028 / 0.028 / 0.028 / 0.029 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 661 / 830 / 909 / 936 | 0.223 / 0.317 / 0.387 / 0.506 | 0.502 / 0.502 / 0.491 / 0.490 | 0.376 / 0.408 / 0.428 / 0.439 | 0.033 / 0.035 / 0.035 / 0.035 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +--- + +**LargeBus**: db_largebus_v1 + db_largebus_v2 + db_largebus_v3 (1,228 frames) + +**Total BEV Center Distance mAP (eval range = 0.0 - 50.0m): 0.6350** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 14,872 | 13,588 / 14,029 / 14,152 / 14,198 | 0.889 / 0.927 / 0.938 / 0.939 | 0.926 / 0.949 / 0.953 / 0.954 | 0.264 / 0.159 / 0.159 / 0.159 | +| truck | 1,192 | 978 / 1,083 / 1,115 / 1,130 | 0.756 / 0.881 / 0.914 / 0.927 | 0.830 / 0.915 / 0.930 / 0.936 | 0.225 / 0.225 / 0.179 / 0.175 | +| bus | 336 | 296 / 333 / 335 / 335 | 0.802 / 0.980 / 0.983 / 0.983 | 0.866 / 0.972 / 0.978 / 0.978 | 0.127 / 0.127 / 0.127 / 0.127 | +| bicycle | 740 | 680 / 699 / 703 / 708 | 0.814 / 0.858 / 0.870 / 0.877 | 0.833 / 0.856 / 0.876 / 0.877 | 0.186 / 0.151 / 0.192 / 0.192 | +| pedestrian | 5,055 | 4,710 / 4,756 / 4,782 / 4,799 | 0.847 / 0.861 / 0.865 / 0.871 | 0.850 / 0.857 / 0.861 / 0.865 | 0.172 / 0.166 / 0.166 / 0.165 | +| traffic_cone | 60 | 23 / 23 / 23 / 23 | 0.000 / 0.000 / 0.000 / 0.000 | 0.045 / 0.045 / 0.045 / 0.045 | 0.215 / 0.215 / 0.215 / 0.215 | +| barrier | 0 | 0 / 0 / 0 / 0 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / nan / nan | nan / nan / nan / nan | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 1,635 / 1,635 / 1,635 / 1,635 | 0.107 / 0.111 / 0.112 / 0.113 | 0.035 / 0.037 / 0.038 / 0.038 | 0.109 / 0.110 / 0.111 / 0.111 | 0.150 / 0.151 / 0.151 / 0.151 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 131 / 131 / 131 / 131 | 0.138 / 0.161 / 0.166 / 0.170 | 0.030 / 0.032 / 0.034 / 0.035 | 0.121 / 0.125 / 0.126 / 0.127 | 0.196 / 0.198 / 0.199 / 0.199 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 36 / 36 / 36 / 36 | 0.149 / 0.179 / 0.180 / 0.180 | 0.227 / 0.216 / 0.217 / 0.217 | 0.087 / 0.091 / 0.092 / 0.092 | 0.153 / 0.148 / 0.148 / 0.148 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 81 / 81 / 81 / 81 | 0.132 / 0.142 / 0.148 / 0.151 | 0.101 / 0.102 / 0.103 / 0.104 | 0.202 / 0.206 / 0.208 / 0.209 | 0.551 / 0.549 / 0.548 / 0.548 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 556 / 556 / 556 / 556 | 0.093 / 0.097 / 0.102 / 0.123 | 0.294 / 0.296 / 0.296 / 0.303 | 0.209 / 0.209 / 0.210 / 0.210 | 0.242 / 0.242 / 0.242 / 0.246 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 6 / 6 / 6 / 6 | 0.149 / 0.149 / 0.149 / 0.149 | 1.236 / 1.236 / 1.236 / 1.236 | 0.434 / 0.434 / 0.434 / 0.434 | 0.077 / 0.077 / 0.077 / 0.077 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 6,097 / 6,097 / 6,097 / 6,097 | 0.116 / 0.121 / 0.123 / 0.124 | 0.041 / 0.044 / 0.045 / 0.045 | 0.115 / 0.116 / 0.117 / 0.117 | 0.156 / 0.157 / 0.157 / 0.157 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 488 / 488 / 488 / 488 | 0.146 / 0.175 / 0.183 / 0.189 | 0.035 / 0.036 / 0.038 / 0.040 | 0.126 / 0.130 / 0.132 / 0.133 | 0.210 / 0.212 / 0.213 / 0.213 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 137 / 137 / 137 / 137 | 0.159 / 0.195 / 0.197 / 0.197 | 0.230 / 0.216 / 0.217 / 0.217 | 0.091 / 0.097 / 0.097 / 0.097 | 0.166 / 0.158 / 0.158 / 0.158 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 303 / 303 / 303 / 303 | 0.136 / 0.147 / 0.158 / 0.162 | 0.121 / 0.121 / 0.123 / 0.124 | 0.211 / 0.216 / 0.219 / 0.220 | 0.552 / 0.551 / 0.548 / 0.548 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 2,072 / 2,072 / 2,072 / 2,072 | 0.097 / 0.102 / 0.108 / 0.130 | 0.331 / 0.333 / 0.334 / 0.340 | 0.216 / 0.216 / 0.217 / 0.217 | 0.246 / 0.246 / 0.246 / 0.250 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 13,306 / 13,815 / 13,873 / 13,881 | 0.132 / 0.146 / 0.151 / 0.154 | 0.060 / 0.074 / 0.077 / 0.078 | 0.127 / 0.130 / 0.130 / 0.130 | 0.158 / 0.160 / 0.160 / 0.160 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 950 / 1,047 / 1,077 / 1,085 | 0.159 / 0.209 / 0.227 / 0.244 | 0.051 / 0.061 / 0.072 / 0.081 | 0.139 / 0.147 / 0.151 / 0.153 | 0.231 / 0.226 / 0.226 / 0.225 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 294 / 330 / 332 / 332 | 0.183 / 0.230 / 0.235 / 0.235 | 0.280 / 0.271 / 0.278 / 0.278 | 0.101 / 0.109 / 0.110 / 0.110 | 0.147 / 0.143 / 0.143 / 0.143 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 606 / 638 / 633 / 634 | 0.144 / 0.162 / 0.191 / 0.198 | 0.143 / 0.146 / 0.149 / 0.149 | 0.220 / 0.229 / 0.237 / 0.238 | 0.547 / 0.539 / 0.536 / 0.534 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 4,166 / 4,224 / 4,245 / 4,270 | 0.104 / 0.113 / 0.124 / 0.155 | 0.367 / 0.373 / 0.376 / 0.384 | 0.222 / 0.223 / 0.224 / 0.224 | 0.246 / 0.247 / 0.246 / 0.251 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 12 / 12 / 12 / 12 | 0.155 / 0.155 / 0.155 / 0.155 | 1.138 / 1.138 / 1.138 / 1.138 | 0.409 / 0.409 / 0.409 / 0.409 | 0.078 / 0.078 / 0.078 / 0.078 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | + +
+ +**Total BEV Center Distance mAP (eval range = 50.0 - 90.0m): 0.5415** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 10,929 | 9,069 / 9,855 / 10,183 / 10,282 | 0.763 / 0.862 / 0.897 / 0.908 | 0.829 / 0.887 / 0.904 / 0.907 | 0.200 / 0.184 / 0.184 / 0.169 | +| truck | 1,009 | 702 / 822 / 878 / 898 | 0.586 / 0.740 / 0.810 / 0.826 | 0.727 / 0.815 / 0.848 / 0.856 | 0.235 / 0.174 / 0.174 / 0.135 | +| bus | 141 | 116 / 135 / 136 / 139 | 0.731 / 0.925 / 0.936 / 0.949 | 0.797 / 0.927 / 0.935 / 0.935 | 0.457 / 0.457 / 0.457 / 0.457 | +| bicycle | 460 | 325 / 351 / 354 / 355 | 0.471 / 0.595 / 0.599 / 0.602 | 0.622 / 0.682 / 0.682 / 0.682 | 0.138 / 0.144 / 0.144 / 0.144 | +| pedestrian | 3,721 | 3,254 / 3,308 / 3,334 / 3,362 | 0.720 / 0.737 / 0.746 / 0.759 | 0.739 / 0.749 / 0.754 / 0.758 | 0.129 / 0.130 / 0.129 / 0.129 | +| traffic_cone | 4 | 2 / 2 / 2 / 2 | 0.000 / 0.000 / 0.000 / 0.000 | 0.080 / 0.080 / 0.080 / 0.080 | 0.213 / 0.213 / 0.213 / 0.213 | +| barrier | 0 | 0 / 0 / 0 / 0 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / nan / nan | nan / nan / nan / nan | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 1,202 / 1,202 / 1,202 / 1,202 | 0.153 / 0.167 / 0.174 / 0.181 | 0.073 / 0.087 / 0.095 / 0.097 | 0.145 / 0.149 / 0.150 / 0.150 | 0.215 / 0.219 / 0.222 / 0.222 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 110 / 110 / 110 / 110 | 0.188 / 0.218 / 0.248 / 0.259 | 0.047 / 0.052 / 0.055 / 0.057 | 0.184 / 0.189 / 0.194 / 0.195 | 0.275 / 0.287 / 0.292 / 0.295 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 15 / 15 / 15 / 15 | 0.185 / 0.216 / 0.219 / 0.222 | 0.528 / 0.492 / 0.490 / 0.486 | 0.081 / 0.089 / 0.090 / 0.090 | 0.176 / 0.203 / 0.204 / 0.206 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 50 / 50 / 50 / 50 | 0.183 / 0.233 / 0.235 / 0.235 | 0.228 / 0.224 / 0.223 / 0.224 | 0.240 / 0.258 / 0.258 / 0.258 | 0.723 / 0.858 / 0.857 / 0.857 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 409 / 409 / 409 / 409 | 0.112 / 0.120 / 0.127 / 0.154 | 0.439 / 0.441 / 0.444 / 0.450 | 0.207 / 0.207 / 0.208 / 0.208 | 0.270 / 0.270 / 0.270 / 0.272 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 0 / 0 / 0 / 0 | 0.126 / 0.126 / 0.126 / 0.126 | 2.678 / 2.678 / 2.678 / 2.678 | 0.582 / 0.582 / 0.582 / 0.582 | 0.034 / 0.034 / 0.034 / 0.034 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 4,480 / 4,480 / 4,480 / 4,480 | 0.162 / 0.181 / 0.192 / 0.199 | 0.091 / 0.109 / 0.118 / 0.121 | 0.153 / 0.157 / 0.158 / 0.158 | 0.229 / 0.233 / 0.237 / 0.237 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 413 / 413 / 413 / 413 | 0.200 / 0.237 / 0.277 / 0.294 | 0.052 / 0.059 / 0.065 / 0.066 | 0.185 / 0.191 / 0.197 / 0.199 | 0.272 / 0.293 / 0.303 / 0.308 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 57 / 57 / 57 / 57 | 0.199 / 0.241 / 0.246 / 0.249 | 0.421 / 0.395 / 0.392 / 0.390 | 0.084 / 0.095 / 0.096 / 0.096 | 0.194 / 0.231 / 0.232 / 0.233 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 188 / 188 / 188 / 188 | 0.183 / 0.224 / 0.227 / 0.229 | 0.263 / 0.268 / 0.266 / 0.267 | 0.248 / 0.259 / 0.260 / 0.260 | 0.737 / 0.824 / 0.823 / 0.824 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 1,525 / 1,525 / 1,525 / 1,525 | 0.120 / 0.130 / 0.140 / 0.177 | 0.486 / 0.489 / 0.492 / 0.501 | 0.213 / 0.213 / 0.214 / 0.214 | 0.287 / 0.286 / 0.286 / 0.289 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1 / 1 / 1 / 1 | 0.123 / 0.123 / 0.123 / 0.123 | 2.682 / 2.682 / 2.682 / 2.682 | 0.579 / 0.579 / 0.579 / 0.579 | 0.035 / 0.035 / 0.035 / 0.035 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 8,680 / 9,346 / 9,522 / 9,634 | 0.176 / 0.208 / 0.228 / 0.243 | 0.134 / 0.161 / 0.174 / 0.180 | 0.161 / 0.166 / 0.168 / 0.168 | 0.250 / 0.261 / 0.269 / 0.268 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 659 / 766 / 798 / 822 | 0.206 / 0.257 / 0.305 / 0.341 | 0.070 / 0.091 / 0.095 / 0.100 | 0.184 / 0.191 / 0.196 / 0.200 | 0.267 / 0.290 / 0.297 / 0.326 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 110 / 128 / 129 / 129 | 0.201 / 0.263 / 0.270 / 0.270 | 0.373 / 0.349 / 0.346 / 0.346 | 0.088 / 0.104 / 0.106 / 0.106 | 0.211 / 0.297 / 0.298 / 0.298 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 262 / 284 / 284 / 284 | 0.183 / 0.222 / 0.222 / 0.222 | 0.276 / 0.283 / 0.283 / 0.283 | 0.247 / 0.260 / 0.260 / 0.260 | 0.775 / 0.859 / 0.859 / 0.859 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 2,660 / 2,691 / 2,712 / 2,729 | 0.124 / 0.137 / 0.149 / 0.187 | 0.509 / 0.515 / 0.519 / 0.527 | 0.217 / 0.218 / 0.219 / 0.220 | 0.295 / 0.293 / 0.293 / 0.296 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 2 / 2 / 2 / 2 | 0.123 / 0.123 / 0.123 / 0.123 | 2.682 / 2.682 / 2.682 / 2.682 | 0.579 / 0.579 / 0.579 / 0.579 | 0.035 / 0.035 / 0.035 / 0.035 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | + +
+ +**Total BEV Center Distance mAP (eval range = 90.0 - 121.0m): 0.4215** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 2,883 | 2,175 / 2,525 / 2,694 / 2,720 | 0.621 / 0.769 / 0.827 / 0.838 | 0.713 / 0.789 / 0.817 / 0.823 | 0.212 / 0.197 / 0.197 / 0.197 | +| truck | 600 | 350 / 478 / 522 / 537 | 0.415 / 0.686 / 0.773 / 0.803 | 0.589 / 0.751 / 0.797 / 0.817 | 0.236 / 0.181 / 0.167 / 0.167 | +| bus | 60 | 32 / 42 / 48 / 48 | 0.394 / 0.593 / 0.719 / 0.719 | 0.583 / 0.714 / 0.804 / 0.804 | 0.296 / 0.293 / 0.210 / 0.210 | +| bicycle | 85 | 58 / 65 / 68 / 68 | 0.237 / 0.372 / 0.396 / 0.396 | 0.429 / 0.511 / 0.533 / 0.533 | 0.127 / 0.123 / 0.123 / 0.123 | +| pedestrian | 1,092 | 957 / 965 / 969 / 978 | 0.548 / 0.559 / 0.563 / 0.574 | 0.625 / 0.629 / 0.633 / 0.639 | 0.114 / 0.114 / 0.114 / 0.114 | +| traffic_cone | 0 | 0 / 0 / 0 / 0 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / nan / nan | nan / nan / nan / nan | +| barrier | 0 | 0 / 0 / 0 / 0 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / nan / nan | nan / nan / nan / nan | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 317 / 317 / 317 / 317 | 0.192 / 0.221 / 0.239 / 0.263 | 0.078 / 0.099 / 0.117 / 0.120 | 0.180 / 0.185 / 0.186 / 0.186 | 0.438 / 0.457 / 0.464 / 0.465 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 66 / 66 / 66 / 66 | 0.228 / 0.296 / 0.331 / 0.353 | 0.036 / 0.038 / 0.043 / 0.043 | 0.176 / 0.193 / 0.198 / 0.201 | 0.171 / 0.210 / 0.221 / 0.222 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 6 / 6 / 6 / 6 | 0.284 / 0.330 / 0.370 / 0.370 | 0.080 / 0.157 / 0.215 / 0.215 | 0.144 / 0.151 / 0.158 / 0.158 | 0.273 / 0.307 / 0.451 / 0.451 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 9 / 9 / 9 / 9 | 0.200 / 0.285 / 0.313 / 0.313 | 0.128 / 0.113 / 0.112 / 0.112 | 0.267 / 0.280 / 0.285 / 0.285 | 0.936 / 1.041 / 1.067 / 1.067 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 120 / 120 / 120 / 120 | 0.128 / 0.133 / 0.153 / 0.197 | 0.432 / 0.432 / 0.423 / 0.429 | 0.180 / 0.180 / 0.180 / 0.179 | 0.364 / 0.364 / 0.363 / 0.367 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 1,182 / 1,182 / 1,182 / 1,182 | 0.200 / 0.239 / 0.264 / 0.295 | 0.102 / 0.130 / 0.154 / 0.158 | 0.185 / 0.190 / 0.191 / 0.191 | 0.490 / 0.511 / 0.517 / 0.517 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 246 / 246 / 246 / 246 | 0.234 / 0.324 / 0.373 / 0.405 | 0.044 / 0.045 / 0.052 / 0.051 | 0.186 / 0.204 / 0.210 / 0.214 | 0.218 / 0.250 / 0.262 / 0.262 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 24 / 24 / 24 / 24 | 0.282 / 0.352 / 0.417 / 0.417 | 0.177 / 0.268 / 0.338 / 0.338 | 0.146 / 0.158 / 0.167 / 0.167 | 0.303 / 0.340 / 0.583 / 0.583 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 34 / 34 / 34 / 34 | 0.195 / 0.275 / 0.318 / 0.318 | 0.166 / 0.130 / 0.128 / 0.128 | 0.263 / 0.275 / 0.283 / 0.283 | 0.934 / 0.988 / 1.038 / 1.038 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 447 / 447 / 447 / 447 | 0.137 / 0.143 / 0.162 / 0.217 | 0.476 / 0.475 / 0.469 / 0.479 | 0.180 / 0.181 / 0.181 / 0.181 | 0.387 / 0.387 / 0.388 / 0.393 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 1,941 / 2,181 / 2,257 / 2,276 | 0.205 / 0.252 / 0.286 / 0.325 | 0.129 / 0.164 / 0.189 / 0.195 | 0.188 / 0.195 / 0.195 / 0.195 | 0.510 / 0.540 / 0.546 / 0.542 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 316 / 419 / 450 / 461 | 0.236 / 0.337 / 0.402 / 0.451 | 0.047 / 0.043 / 0.055 / 0.055 | 0.191 / 0.213 / 0.219 / 0.226 | 0.231 / 0.276 / 0.292 / 0.289 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 28 / 35 / 41 / 41 | 0.284 / 0.362 / 0.507 / 0.507 | 0.254 / 0.383 / 0.482 / 0.482 | 0.140 / 0.154 / 0.178 / 0.178 | 0.260 / 0.313 / 0.785 / 0.785 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 38 / 47 / 49 / 49 | 0.195 / 0.271 / 0.315 / 0.315 | 0.128 / 0.113 / 0.110 / 0.110 | 0.274 / 0.283 / 0.290 / 0.290 | 0.864 / 0.945 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 756 / 762 / 766 / 773 | 0.141 / 0.146 / 0.166 / 0.228 | 0.485 / 0.486 / 0.484 / 0.499 | 0.180 / 0.181 / 0.182 / 0.181 | 0.397 / 0.399 / 0.401 / 0.407 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 0 / 0 / 0 / 0 | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | +| barrier | 0 / 0 / 0 / 0 | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | + +
+ +**Total BEV Center Distance mAP (eval range = 0.0 - 121.0m): 0.5845** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 28,684 | 24,874 / 26,462 / 27,090 / 27,261 | 0.823 / 0.896 / 0.919 / 0.928 | 0.870 / 0.911 / 0.922 / 0.924 | 0.226 / 0.184 / 0.183 / 0.169 | +| truck | 2,801 | 2,031 / 2,384 / 2,519 / 2,572 | 0.626 / 0.798 / 0.851 / 0.872 | 0.744 / 0.845 / 0.873 / 0.883 | 0.233 / 0.181 / 0.174 / 0.174 | +| bus | 537 | 444 / 510 / 519 / 522 | 0.731 / 0.916 / 0.939 / 0.946 | 0.796 / 0.909 / 0.925 / 0.925 | 0.127 / 0.127 / 0.127 / 0.127 | +| bicycle | 1,285 | 1,066 / 1,120 / 1,129 / 1,135 | 0.667 / 0.748 / 0.760 / 0.765 | 0.734 / 0.776 / 0.789 / 0.790 | 0.151 / 0.151 / 0.151 / 0.151 | +| pedestrian | 9,868 | 8,936 / 9,044 / 9,100 / 9,157 | 0.778 / 0.792 / 0.801 / 0.808 | 0.784 / 0.792 / 0.796 / 0.800 | 0.154 / 0.133 / 0.133 / 0.136 | +| traffic_cone | 64 | 25 / 25 / 25 / 25 | 0.000 / 0.000 / 0.000 / 0.000 | 0.046 / 0.046 / 0.046 / 0.046 | 0.213 / 0.213 / 0.213 / 0.213 | +| barrier | 0 | 0 / 0 / 0 / 0 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / nan / nan | nan / nan / nan / nan | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 3,155 / 3,155 / 3,155 / 3,155 | 0.125 / 0.134 / 0.138 / 0.141 | 0.048 / 0.055 / 0.059 / 0.060 | 0.123 / 0.126 / 0.126 / 0.127 | 0.178 / 0.182 / 0.184 / 0.184 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 308 / 308 / 308 / 308 | 0.166 / 0.199 / 0.216 / 0.226 | 0.036 / 0.040 / 0.042 / 0.044 | 0.147 / 0.154 / 0.157 / 0.159 | 0.216 / 0.225 / 0.229 / 0.230 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 59 / 59 / 59 / 59 | 0.162 / 0.194 / 0.199 / 0.200 | 0.304 / 0.289 / 0.290 / 0.290 | 0.087 / 0.093 / 0.094 / 0.095 | 0.164 / 0.169 / 0.175 / 0.176 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 141 / 141 / 141 / 141 | 0.145 / 0.168 / 0.176 / 0.179 | 0.131 / 0.132 / 0.133 / 0.134 | 0.213 / 0.223 / 0.225 / 0.225 | 0.591 / 0.631 / 0.628 / 0.628 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 1,085 / 1,085 / 1,085 / 1,085 | 0.101 / 0.106 / 0.114 / 0.137 | 0.350 / 0.352 / 0.354 / 0.360 | 0.209 / 0.210 / 0.210 / 0.211 | 0.256 / 0.256 / 0.256 / 0.260 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 7 / 7 / 7 / 7 | 0.147 / 0.147 / 0.147 / 0.147 | 1.353 / 1.353 / 1.353 / 1.353 | 0.444 / 0.444 / 0.444 / 0.444 | 0.074 / 0.074 / 0.074 / 0.074 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 11,760 / 11,760 / 11,760 / 11,760 | 0.136 / 0.148 / 0.154 / 0.158 | 0.059 / 0.069 / 0.074 / 0.076 | 0.132 / 0.134 / 0.135 / 0.135 | 0.191 / 0.196 / 0.198 / 0.199 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,148 / 1,148 / 1,148 / 1,148 | 0.178 / 0.220 / 0.244 / 0.258 | 0.043 / 0.047 / 0.050 / 0.053 | 0.156 / 0.164 / 0.168 / 0.170 | 0.235 / 0.244 / 0.249 / 0.250 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 220 / 220 / 220 / 220 | 0.175 / 0.216 / 0.221 / 0.223 | 0.277 / 0.263 / 0.265 / 0.266 | 0.092 / 0.099 / 0.101 / 0.101 | 0.183 / 0.190 / 0.199 / 0.199 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 526 / 526 / 526 / 526 | 0.153 / 0.177 / 0.190 / 0.194 | 0.159 / 0.161 / 0.162 / 0.163 | 0.225 / 0.234 / 0.237 / 0.238 | 0.603 / 0.638 / 0.634 / 0.634 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 4,045 / 4,045 / 4,045 / 4,045 | 0.108 / 0.115 / 0.124 / 0.152 | 0.396 / 0.399 / 0.401 / 0.407 | 0.213 / 0.214 / 0.215 / 0.215 | 0.265 / 0.265 / 0.266 / 0.269 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 23,900 / 25,377 / 25,706 / 25,903 | 0.153 / 0.178 / 0.192 / 0.204 | 0.091 / 0.114 / 0.124 / 0.128 | 0.144 / 0.149 / 0.150 / 0.150 | 0.218 / 0.230 / 0.235 / 0.234 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,923 / 2,238 / 2,325 / 2,350 | 0.188 / 0.249 / 0.288 / 0.312 | 0.057 / 0.068 / 0.075 / 0.081 | 0.163 / 0.175 / 0.180 / 0.182 | 0.242 / 0.257 / 0.263 / 0.263 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 438 / 500 / 509 / 509 | 0.195 / 0.248 / 0.267 / 0.267 | 0.299 / 0.296 / 0.309 / 0.309 | 0.102 / 0.112 / 0.115 / 0.115 | 0.172 / 0.197 / 0.236 / 0.236 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 907 / 959 / 976 / 977 | 0.158 / 0.185 / 0.207 / 0.212 | 0.180 / 0.183 / 0.187 / 0.187 | 0.230 / 0.240 / 0.248 / 0.248 | 0.597 / 0.628 / 0.623 / 0.622 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 7,431 / 7,767 / 7,804 / 7,811 | 0.114 / 0.126 / 0.138 / 0.174 | 0.419 / 0.433 / 0.435 / 0.443 | 0.216 / 0.218 / 0.218 / 0.219 | 0.276 / 0.274 / 0.274 / 0.278 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 14 / 14 / 14 / 14 | 0.151 / 0.151 / 0.151 / 0.151 | 1.359 / 1.359 / 1.359 / 1.359 | 0.433 / 0.433 / 0.433 / 0.433 | 0.072 / 0.072 / 0.072 / 0.072 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | + +
+ +--- + +**J6Gen2**: db_j6gen2_v1 + db_j6gen2_v2 + db_j6gen2_v3 + db_j6gen2_v4 + db_j6gen2_v5 + db_j6gen2_v6 + db_j6gen2_v7 + db_j6gen2_v8 + db_j6gen2_v9 + db_j6gen2_v10 + db_j6gen2_v11 + db_j6gen2_v12 (4,682 frames) + +**Total BEV Center Distance mAP (eval range = 0.0 - 50.0m): 0.7504** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 60,938 | 54,235 / 56,408 / 57,184 / 57,483 | 0.863 / 0.903 / 0.915 / 0.925 | 0.906 / 0.932 / 0.938 / 0.940 | 0.250 / 0.219 / 0.186 / 0.186 | +| truck | 7,081 | 5,508 / 6,121 / 6,485 / 6,637 | 0.696 / 0.817 / 0.879 / 0.905 | 0.785 / 0.859 / 0.897 / 0.913 | 0.292 / 0.197 / 0.177 / 0.159 | +| bus | 2,370 | 2,108 / 2,247 / 2,306 / 2,322 | 0.834 / 0.913 / 0.963 / 0.964 | 0.900 / 0.952 / 0.971 / 0.974 | 0.202 / 0.134 / 0.134 / 0.127 | +| bicycle | 1,357 | 1,283 / 1,293 / 1,293 / 1,294 | 0.902 / 0.915 / 0.915 / 0.916 | 0.893 / 0.899 / 0.899 / 0.900 | 0.193 / 0.193 / 0.193 / 0.193 | +| pedestrian | 18,202 | 16,723 / 17,023 / 17,150 / 17,247 | 0.829 / 0.853 / 0.866 / 0.873 | 0.829 / 0.841 / 0.848 / 0.854 | 0.165 / 0.165 / 0.165 / 0.165 | +| traffic_cone | 8,250 | 6,664 / 6,987 / 7,109 / 7,268 | 0.562 / 0.607 / 0.629 / 0.656 | 0.651 / 0.675 / 0.688 / 0.706 | 0.221 / 0.199 / 0.199 / 0.199 | +| barrier | 1,350 | 551 / 736 / 788 / 826 | 0.133 / 0.231 / 0.262 / 0.285 | 0.352 / 0.434 / 0.458 / 0.474 | 0.147 / 0.102 / 0.102 / 0.102 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 6,703 / 6,703 / 6,703 / 6,703 | 0.106 / 0.110 / 0.111 / 0.114 | 0.031 / 0.033 / 0.034 / 0.035 | 0.111 / 0.112 / 0.113 / 0.113 | 0.125 / 0.126 / 0.126 / 0.127 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 778 / 778 / 778 / 778 | 0.143 / 0.165 / 0.182 / 0.195 | 0.024 / 0.026 / 0.028 / 0.029 | 0.121 / 0.126 / 0.129 / 0.131 | 0.350 / 0.357 / 0.357 / 0.359 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 260 / 260 / 260 / 260 | 0.106 / 0.116 / 0.139 / 0.140 | 0.029 / 0.031 / 0.032 / 0.032 | 0.082 / 0.084 / 0.090 / 0.090 | 0.149 / 0.151 / 0.149 / 0.149 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 149 / 149 / 149 / 149 | 0.122 / 0.124 / 0.124 / 0.126 | 0.068 / 0.069 / 0.069 / 0.069 | 0.185 / 0.185 / 0.185 / 0.185 | 0.568 / 0.570 / 0.570 / 0.570 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 2,002 / 2,002 / 2,002 / 2,002 | 0.102 / 0.107 / 0.118 / 0.135 | 0.432 / 0.434 / 0.439 / 0.441 | 0.236 / 0.237 / 0.238 / 0.238 | 0.230 / 0.230 / 0.230 / 0.231 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 907 / 907 / 907 / 907 | 0.140 / 0.155 / 0.178 / 0.244 | 0.282 / 0.281 / 0.281 / 0.281 | 0.279 / 0.279 / 0.279 / 0.279 | 0.025 / 0.025 / 0.025 / 0.025 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 148 / 148 / 148 / 148 | 0.213 / 0.291 / 0.334 / 0.417 | 0.458 / 0.467 / 0.468 / 0.466 | 0.341 / 0.379 / 0.393 / 0.404 | 0.027 / 0.027 / 0.027 / 0.027 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 24,984 / 24,984 / 24,984 / 24,984 | 0.114 / 0.119 / 0.121 / 0.126 | 0.036 / 0.039 / 0.040 / 0.041 | 0.116 / 0.118 / 0.118 / 0.118 | 0.135 / 0.136 / 0.137 / 0.137 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 2,903 / 2,903 / 2,903 / 2,903 | 0.151 / 0.180 / 0.205 / 0.224 | 0.027 / 0.030 / 0.032 / 0.033 | 0.126 / 0.132 / 0.136 / 0.139 | 0.373 / 0.377 / 0.376 / 0.377 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 971 / 971 / 971 / 971 | 0.115 / 0.127 / 0.147 / 0.148 | 0.034 / 0.037 / 0.037 / 0.037 | 0.085 / 0.088 / 0.093 / 0.093 | 0.159 / 0.161 / 0.160 / 0.160 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 556 / 556 / 556 / 556 | 0.123 / 0.126 / 0.126 / 0.128 | 0.073 / 0.074 / 0.074 / 0.074 | 0.190 / 0.191 / 0.191 / 0.191 | 0.579 / 0.581 / 0.581 / 0.581 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 7,462 / 7,462 / 7,462 / 7,462 | 0.106 / 0.113 / 0.129 / 0.151 | 0.455 / 0.458 / 0.463 / 0.466 | 0.241 / 0.243 / 0.243 / 0.244 | 0.238 / 0.238 / 0.238 / 0.239 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 3,382 / 3,382 / 3,382 / 3,382 | 0.148 / 0.168 / 0.200 / 0.293 | 0.312 / 0.310 / 0.309 / 0.308 | 0.281 / 0.281 / 0.281 / 0.281 | 0.026 / 0.026 / 0.026 / 0.026 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 553 / 553 / 553 | 1.000 / 0.322 / 0.380 / 0.488 | 1.000 / 0.518 / 0.525 / 0.526 | 1.000 / 0.444 / 0.458 / 0.468 | 1.000 / 0.028 / 0.028 / 0.029 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 53,009 / 54,789 / 55,430 / 55,517 | 0.130 / 0.145 / 0.154 / 0.160 | 0.054 / 0.064 / 0.069 / 0.070 | 0.126 / 0.129 / 0.130 / 0.130 | 0.146 / 0.149 / 0.151 / 0.151 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 5,192 / 5,851 / 6,147 / 6,299 | 0.161 / 0.210 / 0.261 / 0.311 | 0.036 / 0.048 / 0.056 / 0.061 | 0.133 / 0.146 / 0.154 / 0.160 | 0.369 / 0.371 / 0.370 / 0.377 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 2,088 / 2,223 / 2,269 / 2,280 | 0.132 / 0.163 / 0.185 / 0.195 | 0.059 / 0.069 / 0.070 / 0.074 | 0.094 / 0.099 / 0.104 / 0.105 | 0.183 / 0.184 / 0.184 / 0.183 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 1,164 / 1,172 / 1,172 / 1,173 | 0.129 / 0.134 / 0.134 / 0.137 | 0.088 / 0.091 / 0.091 / 0.091 | 0.200 / 0.200 / 0.200 / 0.200 | 0.592 / 0.597 / 0.597 / 0.597 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 14,694 / 14,898 / 15,021 / 15,128 | 0.112 / 0.124 / 0.147 / 0.184 | 0.481 / 0.485 / 0.490 / 0.496 | 0.248 / 0.249 / 0.250 / 0.252 | 0.245 / 0.245 / 0.246 / 0.248 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 5,197 / 5,560 / 5,677 / 5,819 | 0.149 / 0.173 / 0.209 / 0.317 | 0.322 / 0.326 / 0.325 / 0.323 | 0.281 / 0.281 / 0.281 / 0.282 | 0.026 / 0.026 / 0.026 / 0.026 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 418 / 577 / 608 / 629 | 0.218 / 0.311 / 0.363 / 0.464 | 0.535 / 0.531 / 0.534 / 0.533 | 0.390 / 0.438 / 0.452 / 0.463 | 0.024 / 0.029 / 0.029 / 0.029 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +**Total BEV Center Distance mAP (eval range = 50.0 - 90.0m): 0.6007** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 54,217 | 42,551 / 47,569 / 49,716 / 50,393 | 0.692 / 0.815 / 0.867 / 0.881 | 0.778 / 0.851 / 0.877 / 0.884 | 0.231 / 0.185 / 0.172 / 0.170 | +| truck | 4,913 | 2,956 / 3,637 / 4,048 / 4,244 | 0.452 / 0.629 / 0.728 / 0.776 | 0.615 / 0.728 / 0.783 / 0.803 | 0.232 / 0.214 / 0.214 / 0.214 | +| bus | 2,116 | 1,486 / 1,835 / 1,967 / 2,025 | 0.587 / 0.807 / 0.892 / 0.924 | 0.712 / 0.852 / 0.899 / 0.916 | 0.364 / 0.276 / 0.276 / 0.144 | +| bicycle | 838 | 677 / 721 / 723 / 723 | 0.653 / 0.720 / 0.723 / 0.726 | 0.718 / 0.753 / 0.754 / 0.755 | 0.157 / 0.157 / 0.134 / 0.129 | +| pedestrian | 8,336 | 7,202 / 7,358 / 7,427 / 7,502 | 0.627 / 0.653 / 0.668 / 0.678 | 0.685 / 0.697 / 0.704 / 0.708 | 0.142 / 0.134 / 0.134 / 0.134 | +| traffic_cone | 2,632 | 1,792 / 1,866 / 1,907 / 1,991 | 0.349 / 0.373 / 0.395 / 0.437 | 0.506 / 0.521 / 0.533 / 0.554 | 0.181 / 0.166 / 0.166 / 0.152 | +| barrier | 622 | 221 / 284 / 311 / 326 | 0.104 / 0.194 / 0.229 / 0.240 | 0.317 / 0.401 / 0.431 / 0.434 | 0.097 / 0.066 / 0.066 / 0.066 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 5,963 / 5,963 / 5,963 / 5,963 | 0.156 / 0.179 / 0.197 / 0.208 | 0.108 / 0.137 / 0.160 / 0.163 | 0.156 / 0.159 / 0.160 / 0.161 | 0.149 / 0.149 / 0.149 / 0.150 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 540 / 540 / 540 / 540 | 0.190 / 0.238 / 0.282 / 0.328 | 0.031 / 0.034 / 0.038 / 0.040 | 0.153 / 0.164 / 0.172 / 0.177 | 0.469 / 0.478 / 0.481 / 0.486 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 232 / 232 / 232 / 232 | 0.163 / 0.209 / 0.236 / 0.248 | 0.129 / 0.119 / 0.117 / 0.122 | 0.121 / 0.130 / 0.136 / 0.137 | 0.136 / 0.143 / 0.144 / 0.146 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 92 / 92 / 92 / 92 | 0.171 / 0.186 / 0.188 / 0.193 | 0.111 / 0.117 / 0.117 / 0.120 | 0.193 / 0.195 / 0.195 / 0.195 | 0.647 / 0.645 / 0.645 / 0.648 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 916 / 916 / 916 / 916 | 0.115 / 0.127 / 0.147 / 0.185 | 0.575 / 0.582 / 0.588 / 0.595 | 0.231 / 0.231 / 0.231 / 0.232 | 0.294 / 0.292 / 0.294 / 0.297 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 289 / 289 / 289 / 289 | 0.152 / 0.170 / 0.222 / 0.414 | 0.314 / 0.320 / 0.320 / 0.323 | 0.288 / 0.288 / 0.288 / 0.291 | 0.038 / 0.037 / 0.037 / 0.038 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 68 / 68 / 68 / 68 | 0.234 / 0.318 / 0.380 / 0.469 | 0.469 / 0.490 / 0.470 / 0.464 | 0.339 / 0.354 / 0.363 / 0.370 | 0.039 / 0.043 / 0.043 / 0.043 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 22,228 / 22,228 / 22,228 / 22,228 | 0.168 / 0.198 / 0.221 / 0.236 | 0.132 / 0.168 / 0.197 / 0.200 | 0.162 / 0.166 / 0.167 / 0.167 | 0.156 / 0.155 / 0.156 / 0.156 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 2,014 / 2,014 / 2,014 / 2,014 | 0.205 / 0.269 / 0.332 / 0.389 | 0.039 / 0.041 / 0.046 / 0.049 | 0.162 / 0.176 / 0.185 / 0.191 | 0.461 / 0.478 / 0.485 / 0.492 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 867 / 867 / 867 / 867 | 0.180 / 0.240 / 0.277 / 0.292 | 0.096 / 0.092 / 0.091 / 0.101 | 0.129 / 0.139 / 0.146 / 0.147 | 0.161 / 0.165 / 0.164 / 0.166 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 343 / 343 / 343 / 343 | 0.176 / 0.199 / 0.201 / 0.210 | 0.133 / 0.139 / 0.139 / 0.144 | 0.194 / 0.198 / 0.198 / 0.198 | 0.671 / 0.664 / 0.664 / 0.670 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 3,417 / 3,417 / 3,417 / 3,417 | 0.122 / 0.136 / 0.161 / 0.202 | 0.601 / 0.608 / 0.615 / 0.623 | 0.231 / 0.231 / 0.231 / 0.232 | 0.316 / 0.314 / 0.315 / 0.319 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1,079 / 1,079 / 1,079 / 1,079 | 0.159 / 0.181 / 0.248 / 0.472 | 0.392 / 0.398 / 0.394 / 0.394 | 0.295 / 0.295 / 0.296 / 0.298 | 0.037 / 0.037 / 0.037 / 0.038 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 255 / 255 / 255 | 1.000 / 0.336 / 0.426 / 0.564 | 1.000 / 0.422 / 0.398 / 0.396 | 1.000 / 0.390 / 0.399 / 0.407 | 1.000 / 0.047 / 0.046 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 39,866 / 44,628 / 46,320 / 46,716 | 0.179 / 0.225 / 0.260 / 0.285 | 0.164 / 0.213 / 0.247 / 0.253 | 0.167 / 0.173 / 0.174 / 0.175 | 0.164 / 0.166 / 0.168 / 0.169 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 2,698 / 3,236 / 3,480 / 3,571 | 0.208 / 0.284 / 0.357 / 0.419 | 0.043 / 0.045 / 0.051 / 0.051 | 0.165 / 0.182 / 0.192 / 0.199 | 0.467 / 0.486 / 0.495 / 0.503 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,383 / 1,713 / 1,807 / 1,946 | 0.191 / 0.280 / 0.333 / 0.402 | 0.107 / 0.108 / 0.109 / 0.170 | 0.132 / 0.147 / 0.156 / 0.160 | 0.165 / 0.178 / 0.183 / 0.185 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 554 / 581 / 602 / 607 | 0.178 / 0.201 / 0.208 / 0.222 | 0.139 / 0.143 / 0.158 / 0.163 | 0.195 / 0.199 / 0.202 / 0.202 | 0.689 / 0.683 / 0.676 / 0.683 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 5,708 / 5,923 / 5,984 / 6,023 | 0.123 / 0.139 / 0.167 / 0.210 | 0.604 / 0.616 / 0.624 / 0.631 | 0.231 / 0.231 / 0.231 / 0.232 | 0.324 / 0.325 / 0.327 / 0.331 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1,215 / 1,308 / 1,337 / 1,444 | 0.156 / 0.177 / 0.236 / 0.444 | 0.368 / 0.383 / 0.382 / 0.391 | 0.291 / 0.292 / 0.293 / 0.297 | 0.037 / 0.037 / 0.037 / 0.038 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 169 / 244 / 262 / 264 | 0.240 / 0.331 / 0.410 / 0.507 | 0.443 / 0.415 / 0.398 / 0.395 | 0.349 / 0.378 / 0.389 / 0.393 | 0.040 / 0.047 / 0.046 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +**Total BEV Center Distance mAP (eval range = 90.0 - 121.0m): 0.4514** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 19,301 | 13,752 / 16,288 / 17,542 / 17,904 | 0.535 / 0.708 / 0.788 / 0.812 | 0.661 / 0.757 / 0.798 / 0.809 | 0.202 / 0.168 / 0.168 / 0.168 | +| truck | 2,906 | 1,241 / 1,811 / 2,223 / 2,436 | 0.212 / 0.452 / 0.629 / 0.713 | 0.432 / 0.605 / 0.714 / 0.758 | 0.185 / 0.175 / 0.174 / 0.117 | +| bus | 484 | 241 / 337 / 383 / 395 | 0.314 / 0.576 / 0.685 / 0.710 | 0.525 / 0.683 / 0.747 / 0.758 | 0.318 / 0.200 / 0.117 / 0.117 | +| bicycle | 291 | 219 / 243 / 247 / 247 | 0.450 / 0.560 / 0.581 / 0.581 | 0.579 / 0.629 / 0.643 / 0.643 | 0.203 / 0.133 / 0.133 / 0.133 | +| pedestrian | 2,564 | 2,036 / 2,078 / 2,110 / 2,136 | 0.445 / 0.463 / 0.473 / 0.484 | 0.557 / 0.568 / 0.573 / 0.580 | 0.108 / 0.108 / 0.107 / 0.107 | +| traffic_cone | 462 | 296 / 307 / 315 / 322 | 0.211 / 0.226 / 0.238 / 0.264 | 0.412 / 0.429 / 0.438 / 0.450 | 0.194 / 0.194 / 0.194 / 0.196 | +| barrier | 145 | 45 / 71 / 81 / 85 | 0.035 / 0.125 / 0.172 / 0.192 | 0.237 / 0.374 / 0.410 / 0.432 | 0.118 / 0.118 / 0.090 / 0.091 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 2,123 / 2,123 / 2,123 / 2,123 | 0.197 / 0.241 / 0.277 / 0.306 | 0.207 / 0.270 / 0.301 / 0.314 | 0.179 / 0.183 / 0.184 / 0.185 | 0.278 / 0.271 / 0.268 / 0.268 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 319 / 319 / 319 / 319 | 0.231 / 0.339 / 0.450 / 0.532 | 0.048 / 0.061 / 0.069 / 0.075 | 0.170 / 0.192 / 0.210 / 0.219 | 0.466 / 0.476 / 0.479 / 0.486 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 53 / 53 / 53 / 53 | 0.241 / 0.323 / 0.366 / 0.384 | 0.029 / 0.034 / 0.037 / 0.038 | 0.141 / 0.158 / 0.165 / 0.168 | 0.454 / 0.468 / 0.475 / 0.477 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 32 / 32 / 32 / 32 | 0.261 / 0.291 / 0.306 / 0.306 | 0.109 / 0.116 / 0.114 / 0.114 | 0.259 / 0.268 / 0.269 / 0.269 | 0.837 / 0.847 / 0.850 / 0.850 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 282 / 282 / 282 / 282 | 0.121 / 0.135 / 0.152 / 0.198 | 0.484 / 0.495 / 0.498 / 0.504 | 0.254 / 0.255 / 0.255 / 0.256 | 0.366 / 0.379 / 0.378 / 0.380 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 50 / 50 / 50 / 50 | 0.141 / 0.153 / 0.199 / 0.466 | 0.384 / 0.394 / 0.400 / 0.393 | 0.307 / 0.306 / 0.306 / 0.309 | 0.043 / 0.043 / 0.044 / 0.044 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 15 / 15 / 15 / 15 | 0.234 / 0.369 / 0.478 / 0.794 | 0.395 / 0.322 / 0.330 / 0.318 | 0.276 / 0.319 / 0.346 / 0.371 | 0.043 / 0.042 / 0.043 / 0.044 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 7,913 / 7,913 / 7,913 / 7,913 | 0.207 / 0.259 / 0.304 / 0.341 | 0.264 / 0.320 / 0.354 / 0.367 | 0.184 / 0.189 / 0.190 / 0.190 | 0.274 / 0.271 / 0.267 / 0.267 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,191 / 1,191 / 1,191 / 1,191 | 0.244 / 0.369 / 0.513 / 0.620 | 0.079 / 0.074 / 0.084 / 0.093 | 0.184 / 0.204 / 0.224 / 0.235 | 0.532 / 0.541 / 0.532 / 0.533 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 198 / 198 / 198 / 198 | 0.248 / 0.344 / 0.409 / 0.438 | 0.045 / 0.044 / 0.046 / 0.049 | 0.145 / 0.161 / 0.172 / 0.176 | 0.470 / 0.491 / 0.498 / 0.502 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 119 / 119 / 119 / 119 | 0.236 / 0.274 / 0.299 / 0.299 | 0.150 / 0.154 / 0.150 / 0.150 | 0.244 / 0.254 / 0.256 / 0.256 | 0.872 / 0.893 / 0.898 / 0.898 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 1,051 / 1,051 / 1,051 / 1,051 | 0.131 / 0.147 / 0.170 / 0.224 | 0.539 / 0.548 / 0.551 / 0.560 | 0.251 / 0.251 / 0.252 / 0.252 | 0.400 / 0.405 / 0.404 / 0.407 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 189 / 189 / 189 / 189 | 0.153 / 0.171 / 0.224 / 0.498 | 0.492 / 0.503 / 0.510 / 0.511 | 0.305 / 0.302 / 0.302 / 0.305 | 0.046 / 0.046 / 0.046 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 59 / 59 / 59 | 1.000 / 0.405 / 0.537 / 0.854 | 1.000 / 0.278 / 0.289 / 0.278 | 1.000 / 0.363 / 0.389 / 0.411 | 1.000 / 0.046 / 0.047 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 12,054 / 14,389 / 15,184 / 15,392 | 0.211 / 0.274 / 0.329 / 0.373 | 0.292 / 0.359 / 0.399 / 0.413 | 0.186 / 0.192 / 0.193 / 0.193 | 0.271 / 0.273 / 0.270 / 0.270 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,130 / 1,598 / 1,887 / 2,122 | 0.240 / 0.374 / 0.537 / 0.691 | 0.067 / 0.073 / 0.091 / 0.117 | 0.181 / 0.205 / 0.228 / 0.246 | 0.531 / 0.548 / 0.549 / 0.563 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 204 / 291 / 335 / 340 | 0.244 / 0.353 / 0.456 / 0.486 | 0.028 / 0.051 / 0.062 / 0.061 | 0.141 / 0.163 / 0.177 / 0.181 | 0.451 / 0.512 / 0.518 / 0.520 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 148 / 185 / 189 / 189 | 0.242 / 0.266 / 0.286 / 0.286 | 0.134 / 0.140 / 0.140 / 0.140 | 0.244 / 0.252 / 0.254 / 0.254 | 0.900 / 0.898 / 0.908 / 0.908 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 1,543 / 1,572 / 1,589 / 1,608 | 0.132 / 0.149 / 0.172 / 0.228 | 0.528 / 0.540 / 0.547 / 0.557 | 0.251 / 0.251 / 0.251 / 0.253 | 0.407 / 0.416 / 0.415 / 0.419 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 174 / 181 / 185 / 189 | 0.141 / 0.161 / 0.208 / 0.479 | 0.409 / 0.437 / 0.446 / 0.451 | 0.305 / 0.303 / 0.304 / 0.307 | 0.044 / 0.044 / 0.044 / 0.044 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 33 / 52 / 65 / 68 | 0.231 / 0.389 / 0.544 / 0.850 | 0.364 / 0.287 / 0.288 / 0.277 | 0.277 / 0.322 / 0.384 / 0.409 | 0.043 / 0.043 / 0.046 / 0.046 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +**Total BEV Center Distance mAP (eval range = 0.0 - 121.0m): 0.6812** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 134,456 | 110,762 / 120,612 / 124,862 / 126,211 | 0.762 / 0.853 / 0.889 / 0.901 | 0.822 / 0.876 / 0.896 / 0.901 | 0.245 / 0.186 / 0.173 / 0.170 | +| truck | 14,900 | 9,726 / 11,611 / 12,820 / 13,410 | 0.533 / 0.694 / 0.796 / 0.843 | 0.667 / 0.771 / 0.829 / 0.852 | 0.288 / 0.216 / 0.174 / 0.175 | +| bus | 4,970 | 3,842 / 4,435 / 4,674 / 4,761 | 0.690 / 0.849 / 0.919 / 0.934 | 0.786 / 0.884 / 0.921 / 0.932 | 0.318 / 0.238 / 0.155 / 0.143 | +| bicycle | 2,486 | 2,182 / 2,260 / 2,266 / 2,266 | 0.778 / 0.819 / 0.824 / 0.826 | 0.800 / 0.820 / 0.821 / 0.822 | 0.200 / 0.200 / 0.193 / 0.193 | +| pedestrian | 29,102 | 25,997 / 26,486 / 26,714 / 26,911 | 0.755 / 0.779 / 0.789 / 0.801 | 0.766 / 0.777 / 0.783 / 0.789 | 0.160 / 0.160 / 0.160 / 0.160 | +| traffic_cone | 11,344 | 8,763 / 9,171 / 9,341 / 9,594 | 0.505 / 0.543 / 0.564 / 0.595 | 0.609 / 0.633 / 0.645 / 0.663 | 0.199 / 0.199 / 0.199 / 0.198 | +| barrier | 2,117 | 821 / 1,096 / 1,187 / 1,245 | 0.114 / 0.210 / 0.244 / 0.263 | 0.334 / 0.420 / 0.446 / 0.460 | 0.105 / 0.105 / 0.097 / 0.097 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 14,790 / 14,790 / 14,790 / 14,790 | 0.128 / 0.142 / 0.151 / 0.158 | 0.063 / 0.079 / 0.089 / 0.091 | 0.129 / 0.133 / 0.134 / 0.134 | 0.144 / 0.145 / 0.146 / 0.147 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,639 / 1,639 / 1,639 / 1,639 | 0.162 / 0.201 / 0.240 / 0.274 | 0.028 / 0.032 / 0.036 / 0.039 | 0.133 / 0.143 / 0.150 / 0.154 | 0.397 / 0.407 / 0.410 / 0.414 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 546 / 546 / 546 / 546 | 0.129 / 0.157 / 0.182 / 0.187 | 0.067 / 0.067 / 0.067 / 0.069 | 0.097 / 0.103 / 0.109 / 0.110 | 0.155 / 0.161 / 0.161 / 0.162 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 273 / 273 / 273 / 273 | 0.141 / 0.149 / 0.151 / 0.153 | 0.080 / 0.082 / 0.083 / 0.084 | 0.193 / 0.195 / 0.195 / 0.195 | 0.601 / 0.604 / 0.605 / 0.606 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 3,201 / 3,201 / 3,201 / 3,201 | 0.106 / 0.114 / 0.127 / 0.151 | 0.467 / 0.471 / 0.475 / 0.479 | 0.237 / 0.238 / 0.238 / 0.239 | 0.247 / 0.247 / 0.248 / 0.250 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1,247 / 1,247 / 1,247 / 1,247 | 0.142 / 0.158 / 0.186 / 0.278 | 0.288 / 0.288 / 0.288 / 0.288 | 0.281 / 0.281 / 0.281 / 0.281 | 0.028 / 0.028 / 0.028 / 0.028 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 232 / 232 / 232 / 232 | 0.219 / 0.303 / 0.356 / 0.451 | 0.476 / 0.479 / 0.474 / 0.470 | 0.345 / 0.376 / 0.389 / 0.400 | 0.030 / 0.031 / 0.031 / 0.031 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 55,126 / 55,126 / 55,126 / 55,126 | 0.141 / 0.161 / 0.174 / 0.184 | 0.082 / 0.104 / 0.119 / 0.122 | 0.139 / 0.142 / 0.143 / 0.143 | 0.155 / 0.156 / 0.157 / 0.157 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 6,109 / 6,109 / 6,109 / 6,109 | 0.178 / 0.230 / 0.286 / 0.333 | 0.035 / 0.039 / 0.044 / 0.048 | 0.142 / 0.154 / 0.163 / 0.169 | 0.410 / 0.420 / 0.423 / 0.427 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 2,037 / 2,037 / 2,037 / 2,037 | 0.144 / 0.182 / 0.208 / 0.216 | 0.061 / 0.063 / 0.063 / 0.067 | 0.104 / 0.111 / 0.117 / 0.118 | 0.175 / 0.180 / 0.180 / 0.180 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 1,019 / 1,019 / 1,019 / 1,019 | 0.147 / 0.157 / 0.160 / 0.163 | 0.092 / 0.095 / 0.096 / 0.096 | 0.198 / 0.200 / 0.201 / 0.201 | 0.622 / 0.625 / 0.626 / 0.628 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 11,931 / 11,931 / 11,931 / 11,931 | 0.112 / 0.122 / 0.141 / 0.173 | 0.497 / 0.502 / 0.506 / 0.512 | 0.242 / 0.243 / 0.243 / 0.244 | 0.262 / 0.262 / 0.262 / 0.265 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 4,651 / 4,651 / 4,651 / 4,651 | 0.151 / 0.172 / 0.212 / 0.339 | 0.329 / 0.327 / 0.326 / 0.325 | 0.284 / 0.284 / 0.284 / 0.285 | 0.028 / 0.028 / 0.028 / 0.028 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 867 / 867 / 867 | 1.000 / 0.332 / 0.405 / 0.535 | 1.000 / 0.477 / 0.478 / 0.480 | 1.000 / 0.424 / 0.438 / 0.448 | 1.000 / 0.034 / 0.034 / 0.035 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 104,267 / 114,032 / 117,273 / 118,068 | 0.157 / 0.193 / 0.220 / 0.239 | 0.120 / 0.160 / 0.183 / 0.188 | 0.148 / 0.154 / 0.156 / 0.156 | 0.167 / 0.171 / 0.174 / 0.174 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 8,808 / 10,604 / 11,671 / 11,997 | 0.184 / 0.256 / 0.340 / 0.408 | 0.039 / 0.050 / 0.062 / 0.066 | 0.147 / 0.165 / 0.179 / 0.187 | 0.416 / 0.434 / 0.441 / 0.446 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 3,655 / 4,216 / 4,500 / 4,564 | 0.161 / 0.224 / 0.272 / 0.304 | 0.075 / 0.080 / 0.090 / 0.112 | 0.111 / 0.123 / 0.132 / 0.134 | 0.195 / 0.203 / 0.210 / 0.210 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 1,836 / 1,880 / 1,896 / 1,899 | 0.151 / 0.164 / 0.166 / 0.170 | 0.105 / 0.108 / 0.110 / 0.112 | 0.202 / 0.204 / 0.204 / 0.204 | 0.642 / 0.646 / 0.649 / 0.651 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 21,512 / 21,828 / 22,008 / 22,175 | 0.116 / 0.128 / 0.151 / 0.190 | 0.511 / 0.517 / 0.522 / 0.529 | 0.244 / 0.245 / 0.246 / 0.247 | 0.272 / 0.272 / 0.272 / 0.275 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 6,679 / 6,947 / 7,086 / 7,281 | 0.151 / 0.173 / 0.213 / 0.340 | 0.334 / 0.336 / 0.336 / 0.335 | 0.284 / 0.283 / 0.283 / 0.285 | 0.028 / 0.028 / 0.028 / 0.028 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 661 / 830 / 909 / 936 | 0.223 / 0.317 / 0.387 / 0.506 | 0.502 / 0.502 / 0.491 / 0.490 | 0.376 / 0.408 / 0.428 / 0.439 | 0.033 / 0.035 / 0.035 / 0.035 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+
+ +--- + + ### BEVFusion-LiDAR J6Gen2_base/2.8.1_opt
diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md index 45c5827d1..3446b3fb3 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md @@ -28,6 +28,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(50,954) | truck
(18,624) | bus
(3,853) | bicycle
(3,768) | pedestrian
(70,699) | traffic_cone
(12,525) | barrier
(2,009) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.6805 | 0.6470 | 0.6079 | 0.6028 | 0.5911 | 0.5860 | 0.9214 | 0.8593 | 0.8823 | 0.7987 | 0.9225 | 0.3795 | 0.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.6765 | 0.6414 | 0.6054 | 0.6011 | 0.5878 | 0.5835 | 0.9267 | 0.8595 | 0.8713 | 0.7844 | 0.9097 | 0.3843 | 0.0000 |
@@ -37,6 +38,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(41,196) | truck
(22,942) | bus
(3,033) | bicycle
(2,310) | pedestrian
(36,881) | traffic_cone
(7,183) | barrier
(1,847) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.5789 | 0.5494 | 0.5483 | 0.5400 | 0.5335 | 0.5253 | 0.8505 | 0.6994 | 0.6017 | 0.6407 | 0.8181 | 0.4416 | 0.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.5673 | 0.5339 | 0.5415 | 0.5344 | 0.5248 | 0.5177 | 0.8485 | 0.7006 | 0.5352 | 0.6574 | 0.8105 | 0.4191 | 0.0000 | @@ -46,6 +48,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(17,510) | truck
(14,707) | bus
(2,997) | bicycle
(566) | pedestrian
(16,580) | traffic_cone
(769) | barrier
(566) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.4305 | 0.4042 | 0.4480 | 0.4394 | 0.4348 | 0.4263 | 0.7545 | 0.5764 | 0.5035 | 0.3688 | 0.7564 | 0.0536 | 0.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.4071 | 0.3837 | 0.4400 | 0.4130 | 0.4284 | 0.4014 | 0.7505 | 0.5566 | 0.4693 | 0.3213 | 0.7219 | 0.0302 | 0.0000 | @@ -55,6 +58,7 @@ | Model version | mAP | mAPH | map_based_nds (recall @ 0.10) | map_based_nds (recall @ 0.40) | maph_based_nds (recall @ 0.10) | maph_based_nds (recall 0.40) | car
(109,660) | truck
(56,273) | bus
(9,883) | bicycle
(6,644) | pedestrian
(124,160) | traffic_cone
(20,477) | barrier
(4,422) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.6108 | 0.5782 | 0.5674 | 0.5605 | 0.5511 | 0.5442 | 0.8800 | 0.7340 | 0.6904 | 0.7166 | 0.8803 | 0.3742 | 0.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.6019 | 0.5676 | 0.5626 | 0.5563 | 0.5455 | 0.5392 | 0.8804 | 0.7288 | 0.6567 | 0.7104 | 0.8656 | 0.3711 | 0.0000 | @@ -68,6 +72,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.2725 | 0.2764 | 0.2983 | 0.4767 | 1.0000 | 0.2812 | 0.2913 | 0.3025 | 0.4993 | 1.0000 | 0.3747 | 0.1689 | 0.2883 | 0.4032 | 1.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.2719 | 0.2964 | 0.2975 | 0.4627 | 1.0000 | 0.2842 | 0.3077 | 0.3000 | 0.4803 | 1.0000 | 0.1861 | 0.1991 | 0.1904 | 0.4301 | 1.0000 | Num match summary @@ -76,18 +81,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 50,954) | truck
0.5/1.0/2.0/4.0
(GTs: 18,624) | bus
0.5/1.0/2.0/4.0
(GTs: 3,853) | bicycle
0.5/1.0/2.0/4.0
(GTs: 3,768) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 70,699) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 12,525) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,009) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 5,604 / 5,604 / 5,604 / 5,604 | 2,048 / 2,048 / 2,048 / 2,048 | 423 / 423 / 423 / 423 | 414 / 414 / 414 / 414 | 7,776 / 7,776 / 7,776 / 7,776 | 1,377 / 1,377 / 1,377 / 1,377 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 5,604 / 5,604 / 5,604 / 5,604 | 2,048 / 2,048 / 2,048 / 2,048 | 423 / 423 / 423 / 423 | 414 / 414 / 414 / 414 | 7,776 / 7,776 / 7,776 / 7,776 | 1,377 / 1,377 / 1,377 / 1,377 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 50,954) | truck
0.5/1.0/2.0/4.0
(GTs: 18,624) | bus
0.5/1.0/2.0/4.0
(GTs: 3,853) | bicycle
0.5/1.0/2.0/4.0
(GTs: 3,768) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 70,699) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 12,525) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,009) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 20,891 / 20,891 / 20,891 / 20,891 | 7,635 / 7,635 / 7,635 / 7,635 | 1,579 / 1,579 / 1,579 / 1,579 | 1,544 / 1,544 / 1,544 / 1,544 | 28,986 / 28,986 / 28,986 / 28,986 | 5,135 / 5,135 / 5,135 / 5,135 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 20,891 / 20,891 / 20,891 / 20,891 | 7,635 / 7,635 / 7,635 / 7,635 | 1,579 / 1,579 / 1,579 / 1,579 | 1,544 / 1,544 / 1,544 / 1,544 | 28,986 / 28,986 / 28,986 / 28,986 | 5,135 / 5,135 / 5,135 / 5,135 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 50,954) | truck
0.5/1.0/2.0/4.0
(GTs: 18,624) | bus
0.5/1.0/2.0/4.0
(GTs: 3,853) | bicycle
0.5/1.0/2.0/4.0
(GTs: 3,768) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 70,699) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 12,525) | barrier
0.5/1.0/2.0/4.0
(GTs: 2,009) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 45,081 / 47,085 / 47,582 / 47,729 | 14,459 / 16,068 / 17,312 / 17,653 | 3,168 / 3,503 / 3,549 / 3,555 | 2,888 / 2,941 / 2,943 / 2,917 | 61,664 / 62,454 / 62,964 / 63,126 | 6,934 / 7,314 / 7,438 / 7,682 | 0 / 0 / 1 / 1 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 44,532 / 46,751 / 47,578 / 47,681 | 14,348 / 16,107 / 17,107 / 17,466 | 3,000 / 3,436 / 3,542 / 3,547 | 2,845 / 2,913 / 2,876 / 2,876 | 60,539 / 61,514 / 62,277 / 62,441 | 6,486 / 6,824 / 7,125 / 7,398 | 0 / 0 / 0 / 0 | @@ -97,6 +105,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.3237 | 0.2560 | 0.3139 | 0.5181 | 1.0000 | 0.3449 | 0.2666 | 0.3186 | 0.5641 | 1.0000 | 0.2543 | 0.1558 | 0.2095 | 0.5329 | 1.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.3372 | 0.2750 | 0.3096 | 0.4999 | 1.0000 | 0.3578 | 0.2816 | 0.3131 | 0.5396 | 1.0000 | 0.2676 | 0.1735 | 0.2026 | 0.5014 | 1.0000 | Num match summary @@ -105,18 +114,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 41,196) | truck
0.5/1.0/2.0/4.0
(GTs: 22,942) | bus
0.5/1.0/2.0/4.0
(GTs: 3,033) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,310) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 36,881) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 7,183) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,847) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 4,531 / 4,531 / 4,531 / 4,531 | 2,523 / 2,523 / 2,523 / 2,523 | 333 / 333 / 333 / 333 | 254 / 254 / 254 / 254 | 4,056 / 4,056 / 4,056 / 4,056 | 790 / 790 / 790 / 790 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 4,531 / 4,531 / 4,531 / 4,531 | 2,523 / 2,523 / 2,523 / 2,523 | 333 / 333 / 333 / 333 | 254 / 254 / 254 / 254 | 4,056 / 4,056 / 4,056 / 4,056 | 790 / 790 / 790 / 790 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 41,196) | truck
0.5/1.0/2.0/4.0
(GTs: 22,942) | bus
0.5/1.0/2.0/4.0
(GTs: 3,033) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,310) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 36,881) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 7,183) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,847) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 16,890 / 16,890 / 16,890 / 16,890 | 9,406 / 9,406 / 9,406 / 9,406 | 1,243 / 1,243 / 1,243 / 1,243 | 947 / 947 / 947 / 947 | 15,121 / 15,121 / 15,121 / 15,121 | 2,945 / 2,945 / 2,945 / 2,945 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 16,890 / 16,890 / 16,890 / 16,890 | 9,406 / 9,406 / 9,406 / 9,406 | 1,243 / 1,243 / 1,243 / 1,243 | 947 / 947 / 947 / 947 | 15,121 / 15,121 / 15,121 / 15,121 | 2,945 / 2,945 / 2,945 / 2,945 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 41,196) | truck
0.5/1.0/2.0/4.0
(GTs: 22,942) | bus
0.5/1.0/2.0/4.0
(GTs: 3,033) | bicycle
0.5/1.0/2.0/4.0
(GTs: 2,310) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 36,881) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 7,183) | barrier
0.5/1.0/2.0/4.0
(GTs: 1,847) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 31,798 / 34,060 / 35,358 / 35,644 | 12,996 / 15,519 / 17,471 / 18,421 | 1,254 / 1,869 / 2,167 / 2,247 | 1,347 / 1,493 / 1,493 / 1,507 | 29,017 / 29,767 / 29,954 / 30,095 | 3,523 / 3,698 / 3,747 / 3,828 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 31,946 / 34,752 / 35,481 / 35,761 | 13,234 / 15,760 / 17,748 / 18,656 | 1,143 / 1,712 / 1,912 / 1,948 | 1,403 / 1,491 / 1,492 / 1,475 | 28,761 / 29,331 / 29,372 / 29,481 | 3,696 / 3,847 / 3,872 / 4,000 | 0 / 0 / 0 / 0 | @@ -126,6 +138,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.3960 | 0.3334 | 0.3373 | 0.6059 | 1.0000 | 0.4159 | 0.3559 | 0.3418 | 0.6447 | 1.0000 | 0.3309 | 0.2434 | 0.2347 | 0.6031 | 1.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.3797 | 0.3240 | 0.3484 | 0.5829 | 1.0000 | 0.4651 | 0.3644 | 0.3942 | 0.6814 | 1.0000 | 0.3149 | 0.2340 | 0.2477 | 0.5670 | 1.0000 | Num match summary @@ -134,18 +147,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 17,510) | truck
0.5/1.0/2.0/4.0
(GTs: 14,707) | bus
0.5/1.0/2.0/4.0
(GTs: 2,997) | bicycle
0.5/1.0/2.0/4.0
(GTs: 566) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 16,580) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 769) | barrier
0.5/1.0/2.0/4.0
(GTs: 566) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 1,926 / 1,926 / 1,926 / 1,926 | 1,617 / 1,617 / 1,617 / 1,617 | 329 / 329 / 329 / 329 | 62 / 62 / 62 / 62 | 1,823 / 1,823 / 1,823 / 1,823 | 84 / 84 / 84 / 84 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 1,926 / 1,926 / 1,926 / 1,926 | 1,617 / 1,617 / 1,617 / 1,617 | 329 / 329 / 329 / 329 | 62 / 62 / 62 / 62 | 1,823 / 1,823 / 1,823 / 1,823 | 84 / 84 / 84 / 84 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 17,510) | truck
0.5/1.0/2.0/4.0
(GTs: 14,707) | bus
0.5/1.0/2.0/4.0
(GTs: 2,997) | bicycle
0.5/1.0/2.0/4.0
(GTs: 566) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 16,580) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 769) | barrier
0.5/1.0/2.0/4.0
(GTs: 566) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 7,179 / 7,179 / 7,179 / 7,179 | 6,029 / 6,029 / 6,029 / 6,029 | 1,228 / 1,228 / 1,228 / 1,228 | 232 / 232 / 232 / 232 | 6,797 / 6,797 / 6,797 / 6,797 | 315 / 315 / 315 / 315 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 7,179 / 7,179 / 7,179 / 7,179 | 6,029 / 6,029 / 6,029 / 6,029 | 1,228 / 1,228 / 1,228 / 1,228 | 232 / 232 / 232 / 232 | 6,797 / 6,797 / 6,797 / 6,797 | 0 / 0 / 315 / 315 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 17,510) | truck
0.5/1.0/2.0/4.0
(GTs: 14,707) | bus
0.5/1.0/2.0/4.0
(GTs: 2,997) | bicycle
0.5/1.0/2.0/4.0
(GTs: 566) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 16,580) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 769) | barrier
0.5/1.0/2.0/4.0
(GTs: 566) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 11,669 / 13,699 / 14,162 / 14,222 | 6,142 / 8,634 / 10,294 / 11,220 | 1,070 / 1,642 / 1,922 / 2,115 | 229 / 249 / 264 / 272 | 12,114 / 12,134 / 12,203 / 12,326 | 173 / 163 / 166 / 178 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 11,780 / 13,293 / 14,056 / 14,133 | 5,970 / 8,371 / 10,098 / 11,087 | 1,279 / 1,474 / 1,872 / 1,945 | 222 / 261 / 241 / 246 | 11,842 / 12,158 / 12,274 / 12,415 | 148 / 150 / 155 / 167 | 0 / 0 / 0 / 0 | @@ -155,6 +171,7 @@ | Model version | mATE (recall @ 0.10) | mAOE (recall @ 0.10) | mASE (recall @ 0.10) | mAVE (recall @ 0.10) | mAAE (recall @ 0.10) | mATE (recall @ 0.40) | mAOE (recall @ 0.40) | mASE (recall @ 0.40) | mAVE (recall @ 0.40) | mAAE (recall @ 0.40) | mATE (optimal) | mAOE (optimal) | mASE (optimal) | mAVE (optimal) | mAAE (optimal) | | :---- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 0.2980 | 0.2734 | 0.3071 | 0.5013 | 1.0000 | 0.3171 | 0.2870 | 0.3132 | 0.5319 | 1.0000 | 0.4149 | 0.1656 | 0.2991 | 0.4399 | 1.0000 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 0.3015 | 0.2921 | 0.3048 | 0.4845 | 1.0000 | 0.3235 | 0.3009 | 0.3096 | 0.5122 | 1.0000 | 0.2333 | 0.1943 | 0.2011 | 0.4683 | 1.0000 | Num match summary @@ -163,18 +180,21 @@ | Model version | car
0.5/1.0/2.0/4.0
(GTs: 109,660) | truck
0.5/1.0/2.0/4.0
(GTs: 56,273) | bus
0.5/1.0/2.0/4.0
(GTs: 9,883) | bicycle
0.5/1.0/2.0/4.0
(GTs: 6,644) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 124,160) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 20,477) | barrier
0.5/1.0/2.0/4.0
(GTs: 4,422) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 12,062 / 12,062 / 12,062 / 12,062 | 6,190 / 6,190 / 6,190 / 6,190 | 1,087 / 1,087 / 1,087 / 1,087 | 730 / 730 / 730 / 730 | 13,657 / 13,657 / 13,657 / 13,657 | 2,252 / 2,252 / 2,252 / 2,252 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 12,062 / 12,062 / 12,062 / 12,062 | 6,190 / 6,190 / 6,190 / 6,190 | 1,087 / 1,087 / 1,087 / 1,087 | 730 / 730 / 730 / 730 | 13,657 / 13,657 / 13,657 / 13,657 | 2,252 / 2,252 / 2,252 / 2,252 | 0 / 0 / 0 / 0 | **recall 0.40** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 109,660) | truck
0.5/1.0/2.0/4.0
(GTs: 56,273) | bus
0.5/1.0/2.0/4.0
(GTs: 9,883) | bicycle
0.5/1.0/2.0/4.0
(GTs: 6,644) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 124,160) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 20,477) | barrier
0.5/1.0/2.0/4.0
(GTs: 4,422) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 44,960 / 44,960 / 44,960 / 44,960 | 23,071 / 23,071 / 23,071 / 23,071 | 4,052 / 4,052 / 4,052 / 4,052 | 2,724 / 2,724 / 2,724 / 2,724 | 50,905 / 50,905 / 50,905 / 50,905 | 8,395 / 8,395 / 8,395 / 8,395 | 0 / 0 / 0 / 0 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 44,960 / 44,960 / 44,960 / 44,960 | 23,071 / 23,071 / 23,071 / 23,071 | 4,052 / 4,052 / 4,052 / 4,052 | 2,724 / 2,724 / 2,724 / 2,724 | 50,905 / 50,905 / 50,905 / 50,905 | 8,395 / 8,395 / 8,395 / 8,395 | 0 / 0 / 0 / 0 | **optimal** | Model version | car
0.5/1.0/2.0/4.0
(GTs: 109,660) | truck
0.5/1.0/2.0/4.0
(GTs: 56,273) | bus
0.5/1.0/2.0/4.0
(GTs: 9,883) | bicycle
0.5/1.0/2.0/4.0
(GTs: 6,644) | pedestrian
0.5/1.0/2.0/4.0
(GTs: 124,160) | traffic_cone
0.5/1.0/2.0/4.0
(GTs: 20,477) | barrier
0.5/1.0/2.0/4.0
(GTs: 4,422) | | :---- | :---- | :---- | :---- | :---- | :---- | :---- | :---- | + | BEVFusion-LiDAR jpntaxi_base/2.8.2 | 87,998 / 94,984 / 96,896 / 97,260 | 33,659 / 40,156 / 45,350 / 47,490 | 5,437 / 7,023 / 7,658 / 7,906 | 4,534 / 4,634 / 4,650 / 4,672 | 103,181 / 104,432 / 104,866 / 105,408 | 10,052 / 11,003 / 11,088 / 11,468 | 0 / 0 / 1 / 1 | | BEVFusion-LiDAR jpntaxi_base/2.8.1 | 87,589 / 94,880 / 97,103 / 97,882 | 33,139 / 40,397 / 44,749 / 47,200 | 4,572 / 6,029 / 7,207 / 7,319 | 4,479 / 4,726 / 4,742 / 4,763 | 100,710 / 102,804 / 103,519 / 104,226 | 10,025 / 10,672 / 11,043 / 11,437 | 0 / 0 / 0 / 0 | @@ -182,6 +202,281 @@ ## Release +### BEVFusion-LiDAR JPNTaxi_base/2.8.2 + +
+ Changes + +- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with JPNTaxi_base dataset and intensity. +
+ +
+ Artifacts + +- Deployed onnx and ROS parameter files (for internal) + - [WebAuto]() + - [model-zoo]() + - [Google drive]() +- Logs (for internal) + - [model-zoo]() + - [Google drive]() +- Pytorch Best checkpoints: + - [model-zoo]() + - [Google drive]() + +
+ +
+ Training configs + +- [Config file path]() +- Train time: NVIDIA H200 140GB * 8 * 30 epochs = 24 hours +- Batch size: 24*8 = 192 +- Training Dataset (frames: 58,068): + - jpntaxi: db_jpntaxi_v1 + db_jpntaxi_v2 + db_jpntaxi_v4 + - jpntaxi_gen2: db_jpntaxigen2_v1 + db_jpntaxigen2_v2 + +
+ +
+ Evaluation + +**JPNTaxi_gen2 Datasets (10,687 frames)**: + + - jpntaxi_gen2 (10,687 frames): db_jpntaxigen2_v1 + db_jpntaxigen2_v2 + +**Total BEV Center Distance mAP (eval range = 0.0 - 50.0m): 0.6805** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 50,954 | 45,994 / 48,125 / 48,775 / 48,999 | 0.873 / 0.926 / 0.938 / 0.949 | 0.913 / 0.946 / 0.952 / 0.954 | 0.252 / 0.195 / 0.168 / 0.161 | +| truck | 18,624 | 14,870 / 16,561 / 17,789 / 18,122 | 0.708 / 0.838 / 0.934 / 0.957 | 0.806 / 0.887 / 0.943 / 0.957 | 0.300 / 0.241 / 0.167 / 0.142 | +| bus | 3,853 | 3,291 / 3,591 / 3,656 / 3,669 | 0.806 / 0.896 / 0.909 / 0.918 | 0.857 / 0.903 / 0.914 / 0.915 | 0.299 / 0.110 / 0.105 / 0.105 | +| bicycle | 3,768 | 3,343 / 3,390 / 3,392 / 3,393 | 0.785 / 0.801 / 0.804 / 0.805 | 0.816 / 0.823 / 0.824 / 0.824 | 0.259 / 0.245 / 0.245 / 0.259 | +| pedestrian | 70,699 | 67,094 / 67,771 / 68,024 / 68,242 | 0.907 / 0.920 / 0.930 / 0.933 | 0.894 / 0.902 / 0.908 / 0.911 | 0.155 / 0.151 / 0.150 / 0.151 | +| traffic_cone | 12,525 | 8,610 / 9,282 / 9,568 / 9,746 | 0.335 / 0.371 / 0.395 / 0.417 | 0.528 / 0.551 / 0.567 / 0.579 | 0.132 / 0.128 / 0.132 / 0.128 | +| barrier | 2,009 | 0 / 0 / 1 / 1 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / 0.001 / 0.001 | nan / nan / 0.044 / 0.044 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 5,604 / 5,604 / 5,604 / 5,604 | 0.106 / 0.112 / 0.114 / 0.119 | 0.022 / 0.024 / 0.024 / 0.024 | 0.103 / 0.104 / 0.104 / 0.105 | 0.356 / 0.362 / 0.363 / 0.364 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 2,048 / 2,048 / 2,048 / 2,048 | 0.146 / 0.171 / 0.202 / 0.210 | 0.017 / 0.017 / 0.018 / 0.018 | 0.114 / 0.120 / 0.125 / 0.127 | 0.426 / 0.433 / 0.443 / 0.447 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 423 / 423 / 423 / 423 | 0.165 / 0.171 / 0.173 / 0.174 | 0.019 / 0.019 / 0.019 / 0.020 | 0.107 / 0.110 / 0.110 / 0.110 | 0.277 / 0.294 / 0.297 / 0.298 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 414 / 414 / 414 / 414 | 0.122 / 0.125 / 0.126 / 0.128 | 0.124 / 0.125 / 0.126 / 0.125 | 0.206 / 0.207 / 0.207 / 0.207 | 0.707 / 0.714 / 0.716 / 0.717 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 7,776 / 7,776 / 7,776 / 7,776 | 0.104 / 0.106 / 0.110 / 0.115 | 0.247 / 0.248 / 0.249 / 0.251 | 0.225 / 0.226 / 0.226 / 0.226 | 0.432 / 0.432 / 0.432 / 0.433 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 1,377 / 1,377 / 1,377 / 1,377 | 0.133 / 0.150 / 0.215 / 0.334 | 0.490 / 0.503 / 0.508 / 0.503 | 0.321 / 0.321 / 0.321 / 0.323 | 0.102 / 0.101 / 0.101 / 0.101 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 20,891 / 20,891 / 20,891 / 20,891 | 0.113 / 0.122 / 0.124 / 0.130 | 0.024 / 0.026 / 0.026 / 0.027 | 0.106 / 0.108 / 0.108 / 0.109 | 0.384 / 0.390 / 0.392 / 0.393 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 7,635 / 7,635 / 7,635 / 7,635 | 0.152 / 0.185 / 0.224 / 0.236 | 0.018 / 0.018 / 0.018 / 0.019 | 0.119 / 0.126 / 0.133 / 0.135 | 0.459 / 0.465 / 0.475 / 0.480 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,579 / 1,579 / 1,579 / 1,579 | 0.155 / 0.165 / 0.168 / 0.170 | 0.019 / 0.019 / 0.020 / 0.020 | 0.111 / 0.114 / 0.115 / 0.115 | 0.350 / 0.365 / 0.369 / 0.370 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 1,544 / 1,544 / 1,544 / 1,544 | 0.129 / 0.133 / 0.134 / 0.137 | 0.123 / 0.124 / 0.125 / 0.125 | 0.212 / 0.212 / 0.213 / 0.213 | 0.722 / 0.730 / 0.732 / 0.734 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 28,986 / 28,986 / 28,986 / 28,986 | 0.108 / 0.111 / 0.116 / 0.125 | 0.253 / 0.254 / 0.256 / 0.258 | 0.229 / 0.229 / 0.230 / 0.230 | 0.444 / 0.444 / 0.445 / 0.446 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 5,135 / 5,135 / 5,135 / 5,135 | 0.143 / 0.170 / 0.247 / 0.379 | 0.591 / 0.599 / 0.598 / 0.595 | 0.326 / 0.325 / 0.324 / 0.326 | 0.099 / 0.098 / 0.098 / 0.098 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 45,081 / 47,085 / 47,582 / 47,729 | 0.128 / 0.148 / 0.157 / 0.168 | 0.036 / 0.044 / 0.048 / 0.049 | 0.116 / 0.120 / 0.121 / 0.121 | 0.429 / 0.449 / 0.458 / 0.459 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 14,459 / 16,068 / 17,312 / 17,653 | 0.162 / 0.211 / 0.282 / 0.321 | 0.020 / 0.021 / 0.025 / 0.027 | 0.125 / 0.136 / 0.149 / 0.154 | 0.507 / 0.537 / 0.569 / 0.588 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 3,168 / 3,503 / 3,549 / 3,555 | 0.154 / 0.194 / 0.208 / 0.213 | 0.020 / 0.024 / 0.026 / 0.027 | 0.116 / 0.128 / 0.130 / 0.130 | 0.406 / 0.412 / 0.415 / 0.415 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 2,888 / 2,941 / 2,943 / 2,917 | 0.134 / 0.139 / 0.140 / 0.143 | 0.124 / 0.127 / 0.127 / 0.126 | 0.213 / 0.215 / 0.215 / 0.215 | 0.726 / 0.731 / 0.734 / 0.736 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 61,664 / 62,454 / 62,964 / 63,126 | 0.116 / 0.124 / 0.138 / 0.158 | 0.276 / 0.279 / 0.283 / 0.288 | 0.236 / 0.236 / 0.237 / 0.237 | 0.457 / 0.458 / 0.457 / 0.460 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 6,934 / 7,314 / 7,438 / 7,682 | 0.142 / 0.170 / 0.245 / 0.381 | 0.602 / 0.606 / 0.604 / 0.607 | 0.327 / 0.326 / 0.324 / 0.327 | 0.098 / 0.097 / 0.097 / 0.097 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 1 / 1 | nan / nan / 1.529 / 1.529 | nan / nan / 0.078 / 0.078 | nan / nan / 0.856 / 0.856 | nan / nan / 0.125 / 0.125 | nan / nan / 1.000 / 1.000 | + +
+ +**Total BEV Center Distance mAP (eval range = 50.0 - 90.0m): 0.5789** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 41,196 | 34,259 / 37,333 / 38,730 / 39,106 | 0.765 / 0.851 / 0.890 / 0.895 | 0.815 / 0.864 / 0.879 / 0.884 | 0.249 / 0.221 / 0.179 / 0.173 | +| truck | 22,942 | 14,312 / 17,397 / 19,498 / 20,610 | 0.502 / 0.672 / 0.786 / 0.838 | 0.651 / 0.757 / 0.826 / 0.852 | 0.299 / 0.243 / 0.188 / 0.152 | +| bus | 3,033 | 1,532 / 2,169 / 2,549 / 2,624 | 0.339 / 0.568 / 0.738 / 0.761 | 0.509 / 0.678 / 0.786 / 0.799 | 0.374 / 0.169 / 0.169 / 0.140 | +| bicycle | 2,310 | 1,800 / 1,900 / 1,910 / 1,919 | 0.597 / 0.651 / 0.653 / 0.662 | 0.677 / 0.705 / 0.705 / 0.712 | 0.215 / 0.160 / 0.160 / 0.160 | +| pedestrian | 36,881 | 33,968 / 34,351 / 34,488 / 34,603 | 0.804 / 0.817 / 0.823 / 0.829 | 0.803 / 0.811 / 0.816 / 0.820 | 0.163 / 0.152 / 0.152 / 0.152 | +| traffic_cone | 7,183 | 4,883 / 5,043 / 5,100 / 5,199 | 0.403 / 0.434 / 0.453 / 0.477 | 0.554 / 0.575 / 0.583 / 0.595 | 0.161 / 0.157 / 0.157 / 0.157 | +| barrier | 1,847 | 0 / 0 / 0 / 0 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / nan / nan | nan / nan / nan / nan | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 4,531 / 4,531 / 4,531 / 4,531 | 0.138 / 0.150 / 0.158 / 0.165 | 0.035 / 0.041 / 0.045 / 0.046 | 0.133 / 0.136 / 0.137 / 0.137 | 0.316 / 0.338 / 0.353 / 0.355 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 2,523 / 2,523 / 2,523 / 2,523 | 0.187 / 0.227 / 0.271 / 0.302 | 0.022 / 0.025 / 0.027 / 0.031 | 0.153 / 0.161 / 0.167 / 0.172 | 0.451 / 0.500 / 0.544 / 0.568 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 333 / 333 / 333 / 333 | 0.198 / 0.277 / 0.357 / 0.378 | 0.036 / 0.044 / 0.048 / 0.050 | 0.121 / 0.131 / 0.142 / 0.143 | 0.257 / 0.307 / 0.331 / 0.335 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 254 / 254 / 254 / 254 | 0.179 / 0.194 / 0.195 / 0.212 | 0.075 / 0.077 / 0.077 / 0.079 | 0.223 / 0.224 / 0.224 / 0.224 | 0.878 / 0.902 / 0.902 / 0.901 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 4,056 / 4,056 / 4,056 / 4,056 | 0.116 / 0.120 / 0.129 / 0.154 | 0.293 / 0.297 / 0.298 / 0.301 | 0.258 / 0.258 / 0.258 / 0.258 | 0.456 / 0.457 / 0.457 / 0.459 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 790 / 790 / 790 / 790 | 0.149 / 0.167 / 0.241 / 0.395 | 0.299 / 0.302 / 0.310 / 0.307 | 0.284 / 0.282 / 0.283 / 0.283 | 0.110 / 0.109 / 0.110 / 0.110 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 16,890 / 16,890 / 16,890 / 16,890 | 0.148 / 0.165 / 0.177 / 0.186 | 0.043 / 0.051 / 0.057 / 0.058 | 0.139 / 0.142 / 0.143 / 0.143 | 0.381 / 0.407 / 0.425 / 0.427 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 9,406 / 9,406 / 9,406 / 9,406 | 0.191 / 0.247 / 0.311 / 0.356 | 0.027 / 0.030 / 0.033 / 0.038 | 0.158 / 0.168 / 0.176 / 0.182 | 0.554 / 0.605 / 0.654 / 0.681 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,243 / 1,243 / 1,243 / 1,243 | 0.219 / 0.335 / 0.444 / 0.474 | 0.060 / 0.061 / 0.062 / 0.066 | 0.124 / 0.139 / 0.152 / 0.153 | 0.346 / 0.377 / 0.394 / 0.397 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 947 / 947 / 947 / 947 | 0.185 / 0.203 / 0.206 / 0.232 | 0.093 / 0.095 / 0.095 / 0.097 | 0.233 / 0.233 / 0.234 / 0.233 | 0.933 / 0.956 / 0.956 / 0.953 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 15,121 / 15,121 / 15,121 / 15,121 | 0.120 / 0.125 / 0.137 / 0.168 | 0.319 / 0.323 / 0.325 / 0.328 | 0.259 / 0.260 / 0.260 / 0.260 | 0.483 / 0.483 / 0.483 / 0.486 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 2,945 / 2,945 / 2,945 / 2,945 | 0.156 / 0.180 / 0.254 / 0.436 | 0.296 / 0.302 / 0.304 / 0.301 | 0.285 / 0.282 / 0.283 / 0.283 | 0.104 / 0.103 / 0.103 / 0.103 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 31,798 / 34,060 / 35,358 / 35,644 | 0.162 / 0.193 / 0.217 / 0.236 | 0.066 / 0.079 / 0.091 / 0.092 | 0.147 / 0.152 / 0.154 / 0.155 | 0.448 / 0.493 / 0.533 / 0.541 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 12,996 / 15,519 / 17,471 / 18,421 | 0.196 / 0.270 / 0.367 / 0.456 | 0.027 / 0.035 / 0.042 / 0.056 | 0.161 / 0.174 / 0.188 / 0.202 | 0.601 / 0.694 / 0.788 / 0.829 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,254 / 1,869 / 2,167 / 2,247 | 0.210 / 0.355 / 0.486 / 0.541 | 0.052 / 0.062 / 0.066 / 0.074 | 0.121 / 0.140 / 0.156 / 0.159 | 0.332 / 0.404 / 0.427 / 0.433 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 1,347 / 1,493 / 1,493 / 1,507 | 0.183 / 0.204 / 0.204 / 0.237 | 0.083 / 0.092 / 0.092 / 0.096 | 0.234 / 0.236 / 0.236 / 0.236 | 0.927 / 0.969 / 0.969 / 0.965 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 29,017 / 29,767 / 29,954 / 30,095 | 0.123 / 0.133 / 0.149 / 0.187 | 0.348 / 0.357 / 0.360 / 0.366 | 0.261 / 0.262 / 0.262 / 0.263 | 0.502 / 0.504 / 0.505 / 0.508 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 3,523 / 3,698 / 3,747 / 3,828 | 0.153 / 0.177 / 0.248 / 0.419 | 0.296 / 0.302 / 0.305 / 0.301 | 0.285 / 0.282 / 0.282 / 0.282 | 0.105 / 0.103 / 0.104 / 0.104 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | + +
+ +**Total BEV Center Distance mAP (eval range = 90.0 - 121.0m): 0.4305** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 17,510 | 13,091 / 15,339 / 15,923 / 16,104 | 0.619 / 0.771 / 0.809 / 0.819 | 0.702 / 0.793 / 0.814 / 0.817 | 0.191 / 0.155 / 0.149 / 0.149 | +| truck | 14,707 | 7,125 / 9,993 / 12,024 / 13,200 | 0.277 / 0.528 / 0.694 / 0.807 | 0.497 / 0.664 / 0.763 / 0.820 | 0.289 / 0.208 / 0.163 / 0.147 | +| bus | 2,997 | 1,245 / 1,804 / 2,146 / 2,394 | 0.247 / 0.449 / 0.597 / 0.721 | 0.460 / 0.610 / 0.714 / 0.790 | 0.296 / 0.089 / 0.089 / 0.092 | +| bicycle | 566 | 365 / 416 / 433 / 442 | 0.277 / 0.348 / 0.413 / 0.437 | 0.471 / 0.512 / 0.543 / 0.559 | 0.186 / 0.186 / 0.186 / 0.186 | +| pedestrian | 16,580 | 15,043 / 15,274 / 15,345 / 15,488 | 0.735 / 0.753 / 0.761 / 0.776 | 0.750 / 0.758 / 0.762 / 0.770 | 0.150 / 0.154 / 0.154 / 0.154 | +| traffic_cone | 769 | 328 / 334 / 342 / 349 | 0.044 / 0.046 / 0.052 / 0.072 | 0.240 / 0.243 / 0.247 / 0.269 | 0.226 / 0.239 / 0.239 / 0.241 | +| barrier | 566 | 0 / 0 / 0 / 0 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / nan / nan | nan / nan / nan / nan | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 1,926 / 1,926 / 1,926 / 1,926 | 0.195 / 0.221 / 0.235 / 0.243 | 0.042 / 0.050 / 0.054 / 0.056 | 0.176 / 0.179 / 0.181 / 0.181 | 0.518 / 0.547 / 0.559 / 0.562 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 1,617 / 1,617 / 1,617 / 1,617 | 0.222 / 0.315 / 0.394 / 0.540 | 0.027 / 0.030 / 0.034 / 0.038 | 0.173 / 0.189 / 0.200 / 0.218 | 0.586 / 0.608 / 0.642 / 0.646 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 329 / 329 / 329 / 329 | 0.218 / 0.307 / 0.411 / 0.537 | 0.017 / 0.022 / 0.122 / 0.259 | 0.128 / 0.140 / 0.164 / 0.186 | 0.151 / 0.192 / 0.223 / 0.225 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 62 / 62 / 62 / 62 | 0.200 / 0.244 / 0.330 / 0.432 | 0.138 / 0.147 / 0.138 / 0.157 | 0.205 / 0.214 / 0.245 / 0.243 | 0.974 / 1.101 / 1.171 / 1.156 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 1,823 / 1,823 / 1,823 / 1,823 | 0.131 / 0.139 / 0.151 / 0.202 | 0.286 / 0.288 / 0.292 / 0.301 | 0.275 / 0.275 / 0.275 / 0.276 | 0.557 / 0.559 / 0.560 / 0.565 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 84 / 84 / 84 / 84 | 0.188 / 0.202 / 0.339 / 0.692 | 0.710 / 0.717 / 0.717 / 0.692 | 0.332 / 0.332 / 0.331 / 0.328 | 0.216 / 0.215 / 0.214 / 0.216 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 7,179 / 7,179 / 7,179 / 7,179 | 0.204 / 0.239 / 0.258 / 0.269 | 0.052 / 0.063 / 0.068 / 0.070 | 0.178 / 0.182 / 0.184 / 0.184 | 0.600 / 0.624 / 0.640 / 0.644 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 6,029 / 6,029 / 6,029 / 6,029 | 0.235 / 0.343 / 0.451 / 0.615 | 0.036 / 0.036 / 0.041 / 0.046 | 0.184 / 0.200 / 0.213 / 0.232 | 0.689 / 0.702 / 0.732 / 0.734 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,228 / 1,228 / 1,228 / 1,228 | 0.247 / 0.353 / 0.496 / 0.652 | 0.025 / 0.030 / 0.173 / 0.350 | 0.153 / 0.163 / 0.189 / 0.214 | 0.261 / 0.274 / 0.304 / 0.291 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 232 / 232 / 232 / 232 | 0.204 / 0.255 / 0.311 / 0.412 | 0.205 / 0.202 / 0.190 / 0.198 | 0.200 / 0.212 / 0.230 / 0.229 | 1.006 / 1.144 / 1.176 / 1.165 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 6,797 / 6,797 / 6,797 / 6,797 | 0.136 / 0.145 / 0.161 / 0.222 | 0.318 / 0.322 / 0.326 / 0.338 | 0.275 / 0.275 / 0.275 / 0.276 | 0.571 / 0.572 / 0.573 / 0.579 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 315 / 315 / 315 / 315 | 0.193 / 0.219 / 0.355 / 0.669 | 0.700 / 0.716 / 0.733 / 0.728 | 0.330 / 0.331 / 0.330 / 0.329 | 0.193 / 0.193 / 0.192 / 0.194 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 11,669 / 13,699 / 14,162 / 14,222 | 0.210 / 0.263 / 0.292 / 0.308 | 0.056 / 0.074 / 0.083 / 0.086 | 0.181 / 0.186 / 0.188 / 0.188 | 0.637 / 0.675 / 0.705 / 0.710 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 6,142 / 8,634 / 10,294 / 11,220 | 0.233 / 0.352 / 0.492 / 0.687 | 0.030 / 0.036 / 0.043 / 0.052 | 0.181 / 0.202 / 0.222 / 0.245 | 0.661 / 0.738 / 0.793 / 0.816 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,070 / 1,642 / 1,922 / 2,115 | 0.230 / 0.369 / 0.535 / 0.722 | 0.017 / 0.032 / 0.182 / 0.383 | 0.134 / 0.177 / 0.211 / 0.240 | 0.231 / 0.285 / 0.340 / 0.332 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 229 / 249 / 264 / 272 | 0.201 / 0.241 / 0.303 / 0.401 | 0.109 / 0.121 / 0.117 / 0.140 | 0.201 / 0.209 / 0.231 / 0.228 | 0.974 / 1.092 / 1.142 / 1.119 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 12,114 / 12,134 / 12,203 / 12,326 | 0.139 / 0.148 / 0.165 / 0.231 | 0.334 / 0.334 / 0.339 / 0.351 | 0.276 / 0.276 / 0.276 / 0.276 | 0.579 / 0.580 / 0.582 / 0.588 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 173 / 163 / 166 / 178 | 0.191 / 0.199 / 0.324 / 0.706 | 0.751 / 0.738 / 0.734 / 0.702 | 0.330 / 0.326 / 0.327 / 0.322 | 0.222 / 0.226 / 0.226 / 0.224 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | nan / nan / nan / nan | + +
+ +**Total BEV Center Distance mAP (eval range = 0.0 - 121.0m): 0.6108** + +| class_name | GTs | num_match@0.5/1.0/2.0/4.0 | AP@0.5/1.0/2.0/4.0 | max_f1@0.5/1.0/2.0/4.0 | optimal_conf@0.5/1.0/2.0/4.0 | +| :---- | ---: | :---- | :---- | :---- | :---- | +| car | 109,660 | 93,520 / 101,025 / 103,706 / 104,529 | 0.802 / 0.886 / 0.911 / 0.921 | 0.845 / 0.892 / 0.904 / 0.908 | 0.249 / 0.190 / 0.174 / 0.174 | +| truck | 56,273 | 36,404 / 44,119 / 49,571 / 52,276 | 0.522 / 0.703 / 0.828 / 0.883 | 0.670 / 0.782 / 0.854 / 0.885 | 0.297 / 0.243 / 0.172 / 0.152 | +| bus | 9,883 | 6,080 / 7,596 / 8,398 / 8,732 | 0.506 / 0.672 / 0.770 / 0.813 | 0.646 / 0.752 / 0.819 / 0.844 | 0.364 / 0.113 / 0.112 / 0.110 | +| bicycle | 6,644 | 5,519 / 5,717 / 5,746 / 5,766 | 0.688 / 0.721 / 0.727 / 0.731 | 0.744 / 0.760 / 0.762 / 0.766 | 0.217 / 0.217 / 0.217 / 0.217 | +| pedestrian | 124,160 | 116,214 / 117,494 / 117,954 / 118,429 | 0.864 / 0.877 / 0.887 / 0.892 | 0.848 / 0.856 / 0.862 / 0.866 | 0.154 / 0.152 / 0.154 / 0.154 | +| traffic_cone | 20,477 | 13,832 / 14,670 / 15,020 / 15,315 | 0.335 / 0.365 / 0.387 / 0.410 | 0.518 / 0.536 / 0.550 / 0.562 | 0.166 / 0.145 / 0.151 / 0.147 | +| barrier | 4,422 | 0 / 0 / 1 / 1 | 0.000 / 0.000 / 0.000 / 0.000 | nan / nan / 0.000 / 0.000 | nan / nan / 0.044 / 0.044 | + +
+TP error — default (recall @0.10) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 12,062 / 12,062 / 12,062 / 12,062 | 0.123 / 0.135 / 0.139 / 0.146 | 0.028 / 0.032 / 0.034 / 0.035 | 0.118 / 0.120 / 0.121 / 0.121 | 0.357 / 0.372 / 0.378 / 0.381 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 6,190 / 6,190 / 6,190 / 6,190 | 0.170 / 0.214 / 0.262 / 0.300 | 0.020 / 0.022 / 0.024 / 0.026 | 0.136 / 0.146 / 0.154 / 0.159 | 0.456 / 0.487 / 0.518 / 0.528 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 1,087 / 1,087 / 1,087 / 1,087 | 0.170 / 0.206 / 0.244 / 0.272 | 0.021 / 0.024 / 0.040 / 0.064 | 0.113 / 0.120 / 0.127 / 0.132 | 0.296 / 0.319 / 0.332 / 0.334 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 730 / 730 / 730 / 730 | 0.139 / 0.147 / 0.151 / 0.159 | 0.113 / 0.114 / 0.114 / 0.115 | 0.210 / 0.211 / 0.212 / 0.212 | 0.751 / 0.767 / 0.771 / 0.771 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 13,657 / 13,657 / 13,657 / 13,657 | 0.110 / 0.112 / 0.118 / 0.132 | 0.261 / 0.263 / 0.265 / 0.267 | 0.237 / 0.237 / 0.237 / 0.237 | 0.448 / 0.449 / 0.449 / 0.451 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 2,252 / 2,252 / 2,252 / 2,252 | 0.139 / 0.156 / 0.228 / 0.373 | 0.437 / 0.444 / 0.450 / 0.445 | 0.310 / 0.309 / 0.309 / 0.310 | 0.107 / 0.106 / 0.106 / 0.106 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — medium (recall @0.40) + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 44,960 / 44,960 / 44,960 / 44,960 | 0.134 / 0.149 / 0.156 / 0.165 | 0.033 / 0.038 / 0.040 / 0.042 | 0.124 / 0.128 / 0.129 / 0.129 | 0.397 / 0.415 / 0.423 / 0.425 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 23,071 / 23,071 / 23,071 / 23,071 | 0.181 / 0.238 / 0.300 / 0.355 | 0.023 / 0.025 / 0.028 / 0.030 | 0.144 / 0.155 / 0.165 / 0.172 | 0.526 / 0.559 / 0.593 / 0.603 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 4,052 / 4,052 / 4,052 / 4,052 | 0.177 / 0.235 / 0.293 / 0.335 | 0.025 / 0.029 / 0.055 / 0.091 | 0.119 / 0.128 / 0.138 / 0.145 | 0.339 / 0.359 / 0.372 / 0.372 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 2,724 / 2,724 / 2,724 / 2,724 | 0.150 / 0.160 / 0.165 / 0.178 | 0.114 / 0.116 / 0.116 / 0.117 | 0.218 / 0.220 / 0.221 / 0.221 | 0.792 / 0.810 / 0.816 / 0.815 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 50,905 / 50,905 / 50,905 / 50,905 | 0.114 / 0.119 / 0.127 / 0.147 | 0.275 / 0.277 / 0.280 / 0.284 | 0.242 / 0.242 / 0.243 / 0.243 | 0.466 / 0.466 / 0.467 / 0.469 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 8,395 / 8,395 / 8,395 / 8,395 | 0.149 / 0.175 / 0.255 / 0.420 | 0.495 / 0.501 / 0.503 / 0.499 | 0.312 / 0.311 / 0.310 / 0.311 | 0.103 / 0.102 / 0.102 / 0.102 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 0 / 0 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | 1.000 / 1.000 / 1.000 / 1.000 | + +
+ +
+TP error — optimal + +| class_name | num_match@0.5/1.0/2.0/4.0 | ATE@0.5/1.0/2.0/4.0 | AOE@0.5/1.0/2.0/4.0 | ASE@0.5/1.0/2.0/4.0 | AVE@0.5/1.0/2.0/4.0 | AEE@0.5/1.0/2.0/4.0 | +| :---- | :---- | :---- | :---- | :---- | :---- | :---- | +| car | 87,998 / 94,984 / 96,896 / 97,260 | 0.151 / 0.181 / 0.198 / 0.212 | 0.049 / 0.061 / 0.068 / 0.069 | 0.135 / 0.141 / 0.142 / 0.143 | 0.462 / 0.500 / 0.521 / 0.524 | 1.000 / 1.000 / 1.000 / 1.000 | +| truck | 33,659 / 40,156 / 45,350 / 47,490 | 0.188 / 0.263 / 0.365 / 0.464 | 0.024 / 0.029 / 0.036 / 0.043 | 0.149 / 0.164 / 0.181 / 0.195 | 0.573 / 0.640 / 0.711 / 0.736 | 1.000 / 1.000 / 1.000 / 1.000 | +| bus | 5,437 / 7,023 / 7,658 / 7,906 | 0.181 / 0.278 / 0.370 / 0.436 | 0.027 / 0.038 / 0.078 / 0.134 | 0.120 / 0.141 / 0.156 / 0.166 | 0.350 / 0.389 / 0.406 / 0.403 | 1.000 / 1.000 / 1.000 / 1.000 | +| bicycle | 4,534 / 4,634 / 4,650 / 4,672 | 0.152 / 0.163 / 0.168 / 0.186 | 0.113 / 0.114 / 0.115 / 0.117 | 0.219 / 0.220 / 0.222 / 0.222 | 0.798 / 0.814 / 0.820 / 0.819 | 1.000 / 1.000 / 1.000 / 1.000 | +| pedestrian | 103,181 / 104,432 / 104,866 / 105,408 | 0.121 / 0.129 / 0.144 / 0.177 | 0.304 / 0.308 / 0.311 / 0.318 | 0.248 / 0.248 / 0.248 / 0.249 | 0.485 / 0.485 / 0.485 / 0.489 | 1.000 / 1.000 / 1.000 / 1.000 | +| traffic_cone | 10,052 / 11,003 / 11,088 / 11,468 | 0.145 / 0.171 / 0.247 / 0.412 | 0.482 / 0.495 / 0.495 / 0.494 | 0.312 / 0.311 / 0.310 / 0.311 | 0.103 / 0.102 / 0.102 / 0.102 | 1.000 / 1.000 / 1.000 / 1.000 | +| barrier | 0 / 0 / 1 / 1 | nan / nan / 1.529 / 1.529 | nan / nan / 0.078 / 0.078 | nan / nan / 0.856 / 0.856 | nan / nan / 0.125 / 0.125 | nan / nan / 1.000 / 1.000 | + +
+ +
+ +--- + ### BEVFusion-LiDAR JPNTaxi_base/2.8.1
From b55f2b5148dec0427bdd62df67a21bf02a5cd1d6 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 14:58:45 +0900 Subject: [PATCH 36/46] Update configs --- .../docs/BEVFusion-L/v2/j6gen2_base.md | 30 ++++++++++++------- .../docs/BEVFusion-L/v2/jpntaxi_base.md | 29 +++++++++++------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md index 71abf3e98..9603dfcf3 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md @@ -633,30 +633,38 @@
Changes -- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with j6gen2 base dataset and intensity. +- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with j6gen2 base dataset and intensity, where `gen2_base` is finetuned from `gen1_base`. +- Update the training batch size from `16` to `24`. +- Add `RotatedBEVIOULoss` with the small weight: `0.10`.
Artifacts - Deployed onnx and ROS parameter files (for internal) - - [WebAuto]() - - [model-zoo]() - - [Google drive]() + - [WebAuto](https://evaluation.ci.tier4.jp/evaluation/mlpackages/46f8188d-e3be-4f2f-b989-fd27002610d7/releases/8338373d-b716-4e5b-96ce-369416dc607c?project_id=zWhWRzei) + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/j6gen2_base/v2.8.2/deployment.zip) + - [Google drive](https://drive.google.com/file/d/163A76vsc2MbknUvAth4i-vwrH4HkwHwL/view?usp=drive_link) - Logs (for internal) - - [model-zoo]() - - [Google drive]() + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/j6gen2_base/v2.8.2/logs.zip) + - [Google drive](https://drive.google.com/file/d/1DxASlXdVr14cnPAB1WLZeFNRPF4tkGtS/view?usp=drive_link) - Pytorch Best checkpoints: - - [model-zoo]() - - [Google drive]() - + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/j6gen2_base/v2.8.2/best_epoch_50.pth) + - [Google drive](https://drive.google.com/file/d/1rkZSiB9x4GOFVz8AMqxcV5XVF4NESjVB/view?usp=drive_link) +- Pretraining weights: + - Gen2_base + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen2_base/v2.8.2/best_epoch_50.pth) + - [Google drive](https://drive.google.com/file/d/1rkKiMiwzR91_k-rxC1fdS8K1mxtxcXw2/view?usp=drive_link) + - Gen1_base + - [model-zoo](https://drive.google.com/file/d/1rMvCuOYIrxam7jKRvSL2fdURakHLuL8O/view?usp=drive_link) + - [Google drive](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen2_base/v2.8.2/best_epoch_25.pth)
Training configs -- [Config file path]() -- Train time: NVIDIA H200 140GB * 8 * 50 epochs = 39 hours +- [Config file path](https://github.com/tier4/AWML/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py) +- Train time: NVIDIA H200 140GB * 8 * 50 epochs ~= 40 hours - Batch size: 8*24 = 192 - Training Dataset (frames: 63,813): - j6gen2: db_j6gen2_v1 + db_j6gen2_v2 + db_j6gen2_v3 + db_j6gen2_v4 + db_j6gen2_v5 + db_j6gen2_v6 + db_j6gen2_v7 + db_j6gen2_v8 + db_j6gen2_v9 + db_j6gen2_v10 + db_j6gen2_v11 + db_j6gen2_v12 (51,208 frames) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md index 3446b3fb3..bec31e17b 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md @@ -207,30 +207,39 @@
Changes -- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with JPNTaxi_base dataset and intensity. +- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with j6gen2 base dataset and intensity, where `gen2_base` is finetuned from `gen1_base`. +- Update the training batch size from `16` to `24`. +- Add `RotatedBEVIOULoss` with the small weight: `0.10`.
Artifacts - Deployed onnx and ROS parameter files (for internal) - - [WebAuto]() - - [model-zoo]() - - [Google drive]() + - [WebAuto](https://evaluation.ci.tier4.jp/evaluation/mlpackages/46f8188d-e3be-4f2f-b989-fd27002610d7/releases/77cc91a2-93e2-48ad-88ef-b102f4977b29?project_id=zWhWRzei) + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/jpntaxi_base/v2.8.2/deployment.zip) + - [Google drive](https://drive.google.com/file/d/13KocLQ4STmbt61vVaWvlOLSSlMbgJmtC/view?usp=drive_link) - Logs (for internal) - - [model-zoo]() - - [Google drive]() + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/jpntaxi_base/v2.8.2/logs.zip) + - [Google drive](https://drive.google.com/file/d/1D18S65mrvEnL-z-hGGipTKBIZn0cQPmc/view?usp=drive_link) - Pytorch Best checkpoints: - - [model-zoo]() - - [Google drive]() + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/jpntaxi_base/v2.8.2/best_epoch_29.pth) + - [Google drive](https://drive.google.com/file/d/1y9na-K4zAwn8ohoXcXePRXoiKWzfNxA0/view?usp=drive_link) +- Pretraining weights: + - Gen2_base + - [model-zoo](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen2_base/v2.8.2/best_epoch_50.pth) + - [Google drive](https://drive.google.com/file/d/1rkKiMiwzR91_k-rxC1fdS8K1mxtxcXw2/view?usp=drive_link) + - Gen1_base + - [model-zoo](https://drive.google.com/file/d/1rMvCuOYIrxam7jKRvSL2fdURakHLuL8O/view?usp=drive_link) + - [Google drive](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen2_base/v2.8.2/best_epoch_25.pth)
Training configs -- [Config file path]() -- Train time: NVIDIA H200 140GB * 8 * 30 epochs = 24 hours +- [Config file path](https://github.com/tier4/AWML/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py) +- Train time: NVIDIA H200 140GB * 8 * 30 epochs ~= 24 hours - Batch size: 24*8 = 192 - Training Dataset (frames: 58,068): - jpntaxi: db_jpntaxi_v1 + db_jpntaxi_v2 + db_jpntaxi_v4 From 19fd5f4680f560f3f2678b9b7ff53a644c22ee5f Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 15:06:20 +0900 Subject: [PATCH 37/46] Update configs --- .../default/schedulers/default_50e_8xb24_adamw_cosine.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py index 3d74060f1..b082a2a01 100644 --- a/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py +++ b/projects/BEVFusion/configs/t4dataset/default/schedulers/default_50e_8xb24_adamw_cosine.py @@ -10,7 +10,7 @@ param_scheduler = [ # learning rate scheduler - # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 5 + # During the first (max_epochs * 0.10) epochs, learning rate increases from 0 to lr * 10 # during the next epochs, learning rate decreases from lr * 10 to # lr * 1e-4 dict( @@ -32,7 +32,7 @@ convert_to_iter_based=True, ), # momentum scheduler - # During the first (max_epochs * 0.10) epochs, momentum increases from 0 to 0.85 / 0.95 + # During the first (0.10 * max_epochs) epochs, momentum increases from 0 to 0.85 / 0.95 # during the next epochs, momentum increases from 0.85 / 0.95 to 1 dict( type="CosineAnnealingMomentum", From 061654620b57b3f1f1ba9287526aae9328efb626 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 15:07:03 +0900 Subject: [PATCH 38/46] Update configs --- projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md index 9603dfcf3..253aefba3 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md @@ -635,6 +635,7 @@ - Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with j6gen2 base dataset and intensity, where `gen2_base` is finetuned from `gen1_base`. - Update the training batch size from `16` to `24`. +- Update the training epochs from `30` to `50`. - Add `RotatedBEVIOULoss` with the small weight: `0.10`.
From 45f7ebbbadc384e717233d97925e902f7fe156d0 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 15:08:03 +0900 Subject: [PATCH 39/46] Update configs --- ...fusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py index c9e8cfde9..a5edc5c76 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m.py @@ -16,7 +16,7 @@ info_directory_path = "info/user_name/" experiment_group_name = "bevfusion_lidar/gen1_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m_iou_loss" +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_gen1_base_120m" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter From b019b0a7492e0060b3978da2cbcb26939d5ca60b Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 15:08:56 +0900 Subject: [PATCH 40/46] Update configs --- ...ion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py | 2 +- ...fusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py | 2 +- ...sion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py index a1771a474..3a3895549 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py @@ -16,7 +16,7 @@ info_directory_path = "info/user_name/" experiment_group_name = "bevfusion_lidar/jpntaxi_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m_iou_loss" +experiment_name = "lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py index 153782915..5d520584b 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m.py @@ -16,7 +16,7 @@ info_directory_path = "info/user_name/" experiment_group_name = "bevfusion_lidar/gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou_loss_more_epochs" +experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_gen2_base_120m_iou" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter diff --git a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py index 4b4a7f6fe..c14b694ec 100644 --- a/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py +++ b/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py @@ -16,7 +16,7 @@ info_directory_path = "info/user_name/" experiment_group_name = "bevfusion_lidar/j6gen2_base/" + _base_.dataset_type -experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m_iou_loss" +experiment_name = "lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m" work_dir = "work_dirs/" + experiment_group_name + "/" + experiment_name # model parameter From d9307d3a00e6de15501cd3e67d513004dd36f8eb Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 17:38:08 +0900 Subject: [PATCH 41/46] Update configs --- .../detection3d/datasets/transforms/object_min_points_filter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py b/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py index 97b4649e3..207cead42 100644 --- a/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py +++ b/autoware_ml/detection3d/datasets/transforms/object_min_points_filter.py @@ -87,7 +87,7 @@ def transform(self, input_dict: dict) -> dict: gt_bboxes_3d = input_dict["gt_bboxes_3d"] # Get radius of each bev center - bbox_bev_centers = np.linalg.norm(gt_bboxes_3d.bev[:, :2]) + bbox_bev_centers = np.linalg.norm(gt_bboxes_3d.bev[:, :2], axis=1) bev_radius_mask = (bbox_bev_centers >= self.range_radius[0]) and (bbox_bev_centers < self.range_radius[1]) out_of_range_gt_masks = ~bev_radius_mask From 43038cdfc5d59f7f5b01a1bdab2eb3d162edc54d Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 17:39:15 +0900 Subject: [PATCH 42/46] Update configs --- projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md | 2 +- projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md index 253aefba3..31ca0110d 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md @@ -658,7 +658,7 @@ - [Google drive](https://drive.google.com/file/d/1rkKiMiwzR91_k-rxC1fdS8K1mxtxcXw2/view?usp=drive_link) - Gen1_base - [model-zoo](https://drive.google.com/file/d/1rMvCuOYIrxam7jKRvSL2fdURakHLuL8O/view?usp=drive_link) - - [Google drive](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen2_base/v2.8.2/best_epoch_25.pth) + - [Google drive](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen1_base/v2.8.2/best_epoch_25.pth)
diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md index bec31e17b..0a809c840 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md @@ -231,7 +231,7 @@ - [Google drive](https://drive.google.com/file/d/1rkKiMiwzR91_k-rxC1fdS8K1mxtxcXw2/view?usp=drive_link) - Gen1_base - [model-zoo](https://drive.google.com/file/d/1rMvCuOYIrxam7jKRvSL2fdURakHLuL8O/view?usp=drive_link) - - [Google drive](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen2_base/v2.8.2/best_epoch_25.pth) + - [Google drive](https://download.autoware-ml-model-zoo.tier4.jp/autoware-ml/models/bevfusion/bevfusion-l/gen1_base/v2.8.2/best_epoch_25.pth)
From 0ce86775a4d7c59d1c8749cd23d9a8d7ba98f768 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 17:40:35 +0900 Subject: [PATCH 43/46] Update configs --- projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md | 2 +- projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md index 31ca0110d..2dc248195 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/j6gen2_base.md @@ -664,7 +664,7 @@
Training configs -- [Config file path](https://github.com/tier4/AWML/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py) +- [Config file path](https://github.com/tier4/AWML/blob/main/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_50e_8xb24_j6gen2_base_120m.py) - Train time: NVIDIA H200 140GB * 8 * 50 epochs ~= 40 hours - Batch size: 8*24 = 192 - Training Dataset (frames: 63,813): diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md index 0a809c840..e20a9d81e 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md @@ -238,7 +238,7 @@
Training configs -- [Config file path](https://github.com/tier4/AWML/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py) +- [Config file path](https://github.com/tier4/AWML/blob/main/projects/BEVFusion/configs/t4dataset/BEVFusion-L/bevfusion_lidar_voxel_second_secfpn_30e_8xb24_jpntaxi_base_120m.py) - Train time: NVIDIA H200 140GB * 8 * 30 epochs ~= 24 hours - Batch size: 24*8 = 192 - Training Dataset (frames: 58,068): From fcc1a643fcc9314964ec13c26111a1b4149c9530 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 17:41:06 +0900 Subject: [PATCH 44/46] Update configs --- projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md index e20a9d81e..a9d22c0cd 100644 --- a/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md +++ b/projects/BEVFusion/docs/BEVFusion-L/v2/jpntaxi_base.md @@ -207,7 +207,7 @@
Changes -- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with j6gen2 base dataset and intensity, where `gen2_base` is finetuned from `gen1_base`. +- Finetune from `BEVFusion-LiDAR gen2_base/2.8.2` with jpntaxi_base base dataset and intensity, where `gen2_base` is finetuned from `gen1_base`. - Update the training batch size from `16` to `24`. - Add `RotatedBEVIOULoss` with the small weight: `0.10`.
From 5f918ffd717847c9f7b11b19332bf7b13cb08c48 Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 17:41:35 +0900 Subject: [PATCH 45/46] Update configs --- autoware_ml/configs/detection3d/dataset/t4dataset/base.py | 2 +- autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_ml/configs/detection3d/dataset/t4dataset/base.py b/autoware_ml/configs/detection3d/dataset/t4dataset/base.py index 7f4be6293..faf7eb43a 100644 --- a/autoware_ml/configs/detection3d/dataset/t4dataset/base.py +++ b/autoware_ml/configs/detection3d/dataset/t4dataset/base.py @@ -45,7 +45,7 @@ "db_j6_v5", ] -# TODO (KokSeang): This will be removed to avoid repeatitive computation +# TODO (KokSeang): This will be removed to avoid repetitive computation # Dataset set, test info files, and enable/disable evaluation of prefix dataset_test_groups = { "j6gen2_base": ("t4dataset_j6gen2_base_infos_test.pkl", False), diff --git a/autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py b/autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py index bbea675a7..99cca2e3e 100644 --- a/autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py +++ b/autoware_ml/configs/detection3d/dataset/t4dataset/gen1_base.py @@ -28,7 +28,7 @@ "db_j6_v5", ] -# TODO (KokSeang): This will be removed to avoid repeatitive computation +# TODO (KokSeang): This will be removed to avoid repetitive computation # Dataset set, test info files, and enable/disable evaluation of prefix dataset_test_groups = { "gen1_base": ("t4dataset_gen1_base_infos_test.pkl", True), From 45521cbfbe21d8266abdea632463e8d111a0328f Mon Sep 17 00:00:00 2001 From: Kok Seang Tan Date: Tue, 18 Aug 2026 17:42:33 +0900 Subject: [PATCH 46/46] Update configs --- projects/BEVFusion/bevfusion/losses.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/projects/BEVFusion/bevfusion/losses.py b/projects/BEVFusion/bevfusion/losses.py index 3b8cda5e1..b7f51842e 100644 --- a/projects/BEVFusion/bevfusion/losses.py +++ b/projects/BEVFusion/bevfusion/losses.py @@ -3,11 +3,9 @@ import torch import torch.nn as nn -from mmcv.ops.diff_iou_rotated import oriented_box_intersection_2d from mmdet3d.registry import MODELS -from mmdet.models.losses.utils import weight_reduce_loss, weighted_loss +from mmdet.models.losses.utils import weighted_loss from torch import Tensor -from torch.nn import functional as F @weighted_loss