Copy disabled (too large)
Download .txt
Showing preview only (31,947K chars total). Download the full file to get everything.
Repository: adept-thu/MomAD
Branch: main
Commit: da7539578bc1
Files: 1700
Total size: 46.0 MB
Directory structure:
gitextract_ijrumtl_/
├── .gitignore
├── LICENSE
├── README.md
├── close_loop/
│ ├── SparseDrive_MomAD/
│ │ ├── adzoo/
│ │ │ └── sparsedrive/
│ │ │ ├── configs/
│ │ │ │ ├── momad_small_b2d_stage1.py
│ │ │ │ ├── momad_small_b2d_stage2_multiplan.py
│ │ │ │ ├── momad_small_b2d_stage2_singleplan.py
│ │ │ │ ├── sparsedrive_small_b2d_stage1.py
│ │ │ │ ├── sparsedrive_small_b2d_stage2_cmd_singleplan.py
│ │ │ │ └── sparsedrive_small_b2d_stage2_targetpoint_multiplan.py
│ │ │ ├── dist_train.sh
│ │ │ ├── scripts/
│ │ │ │ ├── create_data.sh
│ │ │ │ ├── kmeans.sh
│ │ │ │ ├── test.sh
│ │ │ │ ├── test_roboAD.sh
│ │ │ │ ├── train.sh
│ │ │ │ ├── train_6s.sh
│ │ │ │ ├── train_roboAD.sh
│ │ │ │ └── visualize.sh
│ │ │ ├── tools/
│ │ │ │ ├── benchmark.py
│ │ │ │ ├── data_converter/
│ │ │ │ │ ├── B2D_converter.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── nuscenes_converter.py
│ │ │ │ │ ├── nuscenes_converter_1_10.py
│ │ │ │ │ ├── nuscenes_converter_6s.py
│ │ │ │ │ └── nuscenes_converter_hrad_planing_scene.py
│ │ │ │ ├── dist_test.sh
│ │ │ │ ├── dist_train.sh
│ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ ├── kmeans/
│ │ │ │ │ ├── kmeans_det.py
│ │ │ │ │ ├── kmeans_map.py
│ │ │ │ │ ├── kmeans_motion.py
│ │ │ │ │ └── kmeans_plan.py
│ │ │ │ ├── test.py
│ │ │ │ ├── train.py
│ │ │ │ ├── train_single.py
│ │ │ │ └── visualization/
│ │ │ │ ├── bev_render.py
│ │ │ │ └── cam_render.py
│ │ │ └── train.py
│ │ ├── leaderboard/
│ │ │ ├── .pylintrc
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── docs/
│ │ │ │ ├── Gemfile
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── _config.yml
│ │ │ │ ├── _includes/
│ │ │ │ │ ├── footer.html
│ │ │ │ │ ├── google-analytics.html
│ │ │ │ │ ├── head.html
│ │ │ │ │ ├── navbar.html
│ │ │ │ │ ├── read_time.html
│ │ │ │ │ └── scripts.html
│ │ │ │ ├── _layouts/
│ │ │ │ │ ├── default.html
│ │ │ │ │ ├── home.html
│ │ │ │ │ ├── page.html
│ │ │ │ │ └── post.html
│ │ │ │ ├── _sass/
│ │ │ │ │ └── styles.scss
│ │ │ │ ├── about.html
│ │ │ │ ├── assets/
│ │ │ │ │ ├── main.scss
│ │ │ │ │ ├── scripts.js
│ │ │ │ │ └── vendor/
│ │ │ │ │ ├── bootstrap/
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ └── bootstrap.css
│ │ │ │ │ │ └── js/
│ │ │ │ │ │ ├── bootstrap.bundle.js
│ │ │ │ │ │ └── bootstrap.js
│ │ │ │ │ ├── fontawesome-free/
│ │ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ ├── all.css
│ │ │ │ │ │ │ ├── brands.css
│ │ │ │ │ │ │ ├── fontawesome.css
│ │ │ │ │ │ │ ├── regular.css
│ │ │ │ │ │ │ ├── solid.css
│ │ │ │ │ │ │ ├── svg-with-js.css
│ │ │ │ │ │ │ └── v4-shims.css
│ │ │ │ │ │ ├── js/
│ │ │ │ │ │ │ ├── all.js
│ │ │ │ │ │ │ ├── brands.js
│ │ │ │ │ │ │ ├── conflict-detection.js
│ │ │ │ │ │ │ ├── fontawesome.js
│ │ │ │ │ │ │ ├── regular.js
│ │ │ │ │ │ │ ├── solid.js
│ │ │ │ │ │ │ └── v4-shims.js
│ │ │ │ │ │ ├── less/
│ │ │ │ │ │ │ ├── _animated.less
│ │ │ │ │ │ │ ├── _bordered-pulled.less
│ │ │ │ │ │ │ ├── _core.less
│ │ │ │ │ │ │ ├── _fixed-width.less
│ │ │ │ │ │ │ ├── _icons.less
│ │ │ │ │ │ │ ├── _larger.less
│ │ │ │ │ │ │ ├── _list.less
│ │ │ │ │ │ │ ├── _mixins.less
│ │ │ │ │ │ │ ├── _rotated-flipped.less
│ │ │ │ │ │ │ ├── _screen-reader.less
│ │ │ │ │ │ │ ├── _shims.less
│ │ │ │ │ │ │ ├── _stacked.less
│ │ │ │ │ │ │ ├── _variables.less
│ │ │ │ │ │ │ ├── brands.less
│ │ │ │ │ │ │ ├── fontawesome.less
│ │ │ │ │ │ │ ├── regular.less
│ │ │ │ │ │ │ ├── solid.less
│ │ │ │ │ │ │ └── v4-shims.less
│ │ │ │ │ │ └── scss/
│ │ │ │ │ │ ├── _animated.scss
│ │ │ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ │ │ ├── _core.scss
│ │ │ │ │ │ ├── _fixed-width.scss
│ │ │ │ │ │ ├── _icons.scss
│ │ │ │ │ │ ├── _larger.scss
│ │ │ │ │ │ ├── _list.scss
│ │ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ │ │ ├── _screen-reader.scss
│ │ │ │ │ │ ├── _shims.scss
│ │ │ │ │ │ ├── _stacked.scss
│ │ │ │ │ │ ├── _variables.scss
│ │ │ │ │ │ ├── brands.scss
│ │ │ │ │ │ ├── fontawesome.scss
│ │ │ │ │ │ ├── regular.scss
│ │ │ │ │ │ ├── solid.scss
│ │ │ │ │ │ └── v4-shims.scss
│ │ │ │ │ ├── jquery/
│ │ │ │ │ │ ├── jquery.js
│ │ │ │ │ │ └── jquery.slim.js
│ │ │ │ │ └── startbootstrap-clean-blog/
│ │ │ │ │ ├── js/
│ │ │ │ │ │ └── jqBootstrapValidation.js
│ │ │ │ │ └── scss/
│ │ │ │ │ ├── _bootstrap-overrides.scss
│ │ │ │ │ ├── _contact.scss
│ │ │ │ │ ├── _footer.scss
│ │ │ │ │ ├── _global.scss
│ │ │ │ │ ├── _masthead.scss
│ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ ├── _navbar.scss
│ │ │ │ │ ├── _post.scss
│ │ │ │ │ ├── _variables.scss
│ │ │ │ │ └── clean-blog.scss
│ │ │ │ ├── contact.html
│ │ │ │ ├── get_started.html
│ │ │ │ ├── gulpfile.js
│ │ │ │ ├── index.html
│ │ │ │ ├── jekyll-theme-clean-blog.gemspec
│ │ │ │ ├── leaderboard.html
│ │ │ │ ├── posts/
│ │ │ │ │ └── index.html
│ │ │ │ └── submit.html
│ │ │ ├── leaderboard/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── autoagents/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agent_wrapper.py
│ │ │ │ │ ├── autonomous_agent.py
│ │ │ │ │ ├── dummy_agent.py
│ │ │ │ │ ├── human_agent.py
│ │ │ │ │ ├── human_agent_config.txt
│ │ │ │ │ ├── npc_agent.py
│ │ │ │ │ ├── ros1_agent.py
│ │ │ │ │ ├── ros2_agent.py
│ │ │ │ │ └── ros_base_agent.py
│ │ │ │ ├── envs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── sensor_interface.py
│ │ │ │ ├── leaderboard_evaluator.py
│ │ │ │ ├── scenarios/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── route_scenario.py
│ │ │ │ │ └── scenario_manager.py
│ │ │ │ └── utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── checkpoint_tools.py
│ │ │ │ ├── parked_vehicles.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── route_indexer.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ └── statistics_manager.py
│ │ │ ├── requirements.txt
│ │ │ ├── run_leaderboard.sh
│ │ │ ├── scripts/
│ │ │ │ ├── Dockerfile.master
│ │ │ │ ├── Dockerfile.ros
│ │ │ │ ├── agent_entrypoint.sh
│ │ │ │ ├── code_check_and_formatting.sh
│ │ │ │ ├── make_docker.sh
│ │ │ │ ├── manage_scenarios.py
│ │ │ │ ├── merge_statistics.py
│ │ │ │ ├── pretty_print_json.py
│ │ │ │ ├── route_creator.py
│ │ │ │ ├── route_displayer.py
│ │ │ │ ├── route_summarizer.py
│ │ │ │ ├── run_evaluation.sh
│ │ │ │ ├── run_evaluation_debug.sh
│ │ │ │ ├── run_evaluation_multi_admlp.sh
│ │ │ │ ├── run_evaluation_multi_tcp.sh
│ │ │ │ ├── run_evaluation_multi_uniad.sh
│ │ │ │ ├── run_evaluation_multi_uniad_tiny.sh
│ │ │ │ ├── run_evaluation_multi_vad.sh
│ │ │ │ ├── run_evalutaion_multi_sparsedrive.sh
│ │ │ │ ├── scenario_creator.py
│ │ │ │ ├── scenario_orderer.py
│ │ │ │ └── weather_creator.py
│ │ │ └── team_code/
│ │ │ ├── pid_controller.py
│ │ │ ├── planner.py
│ │ │ ├── sparsedrive_b2d_agent.py
│ │ │ ├── uniad_b2d_agent.py
│ │ │ ├── vad_b2d_agent.py
│ │ │ └── vad_b2d_agent_visualize.py
│ │ ├── mmdet3d_plugin/
│ │ │ ├── __init__.py
│ │ │ ├── apis/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── mmdet_train.py
│ │ │ │ ├── test.py
│ │ │ │ └── train.py
│ │ │ ├── core/
│ │ │ │ ├── box3d.py
│ │ │ │ └── evaluation/
│ │ │ │ ├── __init__.py
│ │ │ │ └── eval_hooks.py
│ │ │ ├── datasets/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── b2d_3d_dataset.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── detection/
│ │ │ │ │ │ └── nuscenes_styled_eval_utils.py
│ │ │ │ │ ├── map/
│ │ │ │ │ │ ├── AP.py
│ │ │ │ │ │ ├── distance.py
│ │ │ │ │ │ └── vector_eval.py
│ │ │ │ │ ├── motion/
│ │ │ │ │ │ ├── motion_eval_uniad.py
│ │ │ │ │ │ └── motion_utils.py
│ │ │ │ │ └── planning/
│ │ │ │ │ └── planning_eval.py
│ │ │ │ ├── map_utils/
│ │ │ │ │ ├── nuscmap_extractor.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── nuscenes_3d_dataset.py
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── augment.py
│ │ │ │ │ ├── loading.py
│ │ │ │ │ ├── transform.py
│ │ │ │ │ └── vectorize.py
│ │ │ │ ├── samplers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── distributed_sampler.py
│ │ │ │ │ ├── group_in_batch_sampler.py
│ │ │ │ │ ├── group_sampler.py
│ │ │ │ │ └── sampler.py
│ │ │ │ └── utils.py
│ │ │ ├── models/
│ │ │ │ ├── MomAD.py
│ │ │ │ ├── MomAD_head.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── attention.py
│ │ │ │ ├── base_target.py
│ │ │ │ ├── blocks.py
│ │ │ │ ├── detection3d/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── decoder.py
│ │ │ │ │ ├── detection3d_blocks.py
│ │ │ │ │ ├── detection3d_head.py
│ │ │ │ │ ├── losses.py
│ │ │ │ │ └── target.py
│ │ │ │ ├── grid_mask.py
│ │ │ │ ├── instance_bank.py
│ │ │ │ ├── map/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── decoder.py
│ │ │ │ │ ├── loss.py
│ │ │ │ │ ├── map_blocks.py
│ │ │ │ │ ├── match_cost.py
│ │ │ │ │ └── target.py
│ │ │ │ ├── motion/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── decoder.py
│ │ │ │ │ ├── instance_queue.py
│ │ │ │ │ ├── motion_blocks.py
│ │ │ │ │ ├── motion_planning_cls_head.py
│ │ │ │ │ ├── motion_planning_head.py
│ │ │ │ │ ├── motion_planning_head_MomAD.py
│ │ │ │ │ └── target.py
│ │ │ │ ├── sparsedrive.py
│ │ │ │ └── sparsedrive_head.py
│ │ │ └── ops/
│ │ │ ├── __init__.py
│ │ │ ├── deformable_aggregation.py
│ │ │ ├── setup.py
│ │ │ └── src/
│ │ │ ├── deformable_aggregation.cpp
│ │ │ └── deformable_aggregation_cuda.cu
│ │ ├── requirement.txt
│ │ ├── scenario_runner/
│ │ │ ├── .pylintrc
│ │ │ ├── .readthedocs.yml
│ │ │ ├── CARLA_VER
│ │ │ ├── Dockerfile
│ │ │ ├── Docs/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CODE_OF_CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── FAQ.md
│ │ │ │ ├── agent_evaluation.md
│ │ │ │ ├── coding_standard.md
│ │ │ │ ├── creating_new_scenario.md
│ │ │ │ ├── extra.css
│ │ │ │ ├── getting_scenariorunner.md
│ │ │ │ ├── getting_started.md
│ │ │ │ ├── index.md
│ │ │ │ ├── list_of_scenarios.md
│ │ │ │ ├── metrics_module.md
│ │ │ │ ├── openscenario_support.md
│ │ │ │ ├── requirements.txt
│ │ │ │ └── ros_agent.md
│ │ │ ├── Jenkinsfile
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── manual_control.py
│ │ │ ├── metrics_manager.py
│ │ │ ├── mkdocs.yml
│ │ │ ├── no_rendering_mode.py
│ │ │ ├── requirements.txt
│ │ │ ├── scenario_runner.py
│ │ │ └── srunner/
│ │ │ ├── __init__.py
│ │ │ ├── autoagents/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent_wrapper.py
│ │ │ │ ├── autonomous_agent.py
│ │ │ │ ├── dummy_agent.py
│ │ │ │ ├── human_agent.py
│ │ │ │ ├── human_agent_config.txt
│ │ │ │ ├── npc_agent.py
│ │ │ │ ├── ros_agent.py
│ │ │ │ └── sensor_interface.py
│ │ │ ├── examples/
│ │ │ │ ├── ActorFlow.xml
│ │ │ │ ├── CatalogExample.xosc
│ │ │ │ ├── ChangeLane.xml
│ │ │ │ ├── ChangingWeather.xosc
│ │ │ │ ├── ControlLoss.xml
│ │ │ │ ├── CutIn.xml
│ │ │ │ ├── CyclistCrossing.xosc
│ │ │ │ ├── FollowLeadingVehicle.xml
│ │ │ │ ├── FollowLeadingVehicle.xosc
│ │ │ │ ├── FreeRide.xml
│ │ │ │ ├── HighwayCutIn.xml
│ │ │ │ ├── IntersectionCollisionAvoidance.xosc
│ │ │ │ ├── LaneChangeSimple.xosc
│ │ │ │ ├── LeadingVehicle.xml
│ │ │ │ ├── NoSignalJunction.xml
│ │ │ │ ├── ObjectCrossing.xml
│ │ │ │ ├── OppositeDirection.xml
│ │ │ │ ├── OscControllerExample.xosc
│ │ │ │ ├── PedestrianCrossingFront.xosc
│ │ │ │ ├── RouteObstacles.xml
│ │ │ │ ├── RunningRedLight.xml
│ │ │ │ ├── SignalizedJunctionLeftTurn.xml
│ │ │ │ ├── SignalizedJunctionRightTurn.xml
│ │ │ │ ├── Slalom.xosc
│ │ │ │ ├── VehicleOpensDoor.xml
│ │ │ │ ├── VehicleTurning.xml
│ │ │ │ └── catalogs/
│ │ │ │ ├── ControllerCatalog.xosc
│ │ │ │ ├── EnvironmentCatalog.xosc
│ │ │ │ ├── ManeuverCatalog.xosc
│ │ │ │ ├── MiscObjectCatalog.xosc
│ │ │ │ ├── PedestrianCatalog.xosc
│ │ │ │ └── VehicleCatalog.xosc
│ │ │ ├── metrics/
│ │ │ │ ├── examples/
│ │ │ │ │ ├── basic_metric.py
│ │ │ │ │ ├── criteria_filter.py
│ │ │ │ │ ├── distance_between_vehicles.py
│ │ │ │ │ └── distance_to_lane_center.py
│ │ │ │ └── tools/
│ │ │ │ ├── metrics_log.py
│ │ │ │ └── metrics_parser.py
│ │ │ ├── openscenario/
│ │ │ │ ├── 0.9.x/
│ │ │ │ │ ├── OpenSCENARIO_Catalog.xsd
│ │ │ │ │ ├── OpenSCENARIO_TypeDefs.xsd
│ │ │ │ │ ├── OpenSCENARIO_v0.9.1.xsd
│ │ │ │ │ └── migration0_9_1to1_0.xslt
│ │ │ │ └── OpenSCENARIO.xsd
│ │ │ ├── scenarioconfigs/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── openscenario_configuration.py
│ │ │ │ ├── route_scenario_configuration.py
│ │ │ │ └── scenario_configuration.py
│ │ │ ├── scenariomanager/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actorcontrols/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── actor_control.py
│ │ │ │ │ ├── basic_control.py
│ │ │ │ │ ├── carla_autopilot.py
│ │ │ │ │ ├── external_control.py
│ │ │ │ │ ├── npc_vehicle_control.py
│ │ │ │ │ ├── pedestrian_control.py
│ │ │ │ │ ├── simple_vehicle_control.py
│ │ │ │ │ ├── vehicle_longitudinal_control.py
│ │ │ │ │ └── visualizer.py
│ │ │ │ ├── carla_data_provider.py
│ │ │ │ ├── lights_sim.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── scenario_manager.py
│ │ │ │ ├── scenarioatomics/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── atomic_behaviors.py
│ │ │ │ │ ├── atomic_criteria.py
│ │ │ │ │ └── atomic_trigger_conditions.py
│ │ │ │ ├── timer.py
│ │ │ │ ├── traffic_events.py
│ │ │ │ ├── watchdog.py
│ │ │ │ └── weather_sim.py
│ │ │ ├── scenarios/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actor_flow.py
│ │ │ │ ├── background_activity.py
│ │ │ │ ├── background_activity_parametrizer.py
│ │ │ │ ├── basic_scenario.py
│ │ │ │ ├── blocked_intersection.py
│ │ │ │ ├── change_lane.py
│ │ │ │ ├── construction_crash_vehicle.py
│ │ │ │ ├── control_loss.py
│ │ │ │ ├── cross_bicycle_flow.py
│ │ │ │ ├── cut_in.py
│ │ │ │ ├── cut_in_with_static_vehicle.py
│ │ │ │ ├── follow_leading_vehicle.py
│ │ │ │ ├── freeride.py
│ │ │ │ ├── green_traffic_light.py
│ │ │ │ ├── hard_break.py
│ │ │ │ ├── highway_cut_in.py
│ │ │ │ ├── invading_turn.py
│ │ │ │ ├── left_turn_enter_flow.py
│ │ │ │ ├── maneuver_opposite_direction.py
│ │ │ │ ├── no_signal_junction_crossing.py
│ │ │ │ ├── object_crash_intersection.py
│ │ │ │ ├── object_crash_vehicle.py
│ │ │ │ ├── open_scenario.py
│ │ │ │ ├── opposite_vehicle_taking_priority.py
│ │ │ │ ├── other_leading_vehicle.py
│ │ │ │ ├── parking_cut_in.py
│ │ │ │ ├── parking_exit.py
│ │ │ │ ├── pedestrian_crossing.py
│ │ │ │ ├── route_obstacles.py
│ │ │ │ ├── route_scenario.py
│ │ │ │ ├── sequentially_lane_change.py
│ │ │ │ ├── signalized_junction_left_turn.py
│ │ │ │ ├── signalized_junction_right_turn.py
│ │ │ │ ├── t_junction.py
│ │ │ │ ├── vanilla_turn.py
│ │ │ │ ├── vehicle_opens_door.py
│ │ │ │ └── yield_to_emergency_vehicle.py
│ │ │ ├── tests/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── carla_mocks/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agents/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── navigation/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── basic_agent.py
│ │ │ │ │ │ │ ├── behavior_agent.py
│ │ │ │ │ │ │ ├── behavior_types.py
│ │ │ │ │ │ │ ├── controller.py
│ │ │ │ │ │ │ ├── global_route_planner.py
│ │ │ │ │ │ │ └── local_planner.py
│ │ │ │ │ │ └── tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── misc.py
│ │ │ │ │ └── carla.py
│ │ │ │ └── test_xosc_load.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── background_manager.py
│ │ │ │ ├── openscenario_parser.py
│ │ │ │ ├── py_trees_port.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ ├── scenario_helper.py
│ │ │ │ └── scenario_parser.py
│ │ │ └── utilities/
│ │ │ └── code_check_and_formatting.sh
│ │ └── tools/
│ │ ├── ability_benchmark.py
│ │ ├── check_carla.md
│ │ ├── clean_carla.sh
│ │ ├── data_collect.py
│ │ ├── download_mini.sh
│ │ ├── efficiency_smoothness_benchmark.py
│ │ ├── gen_hdmap.py
│ │ ├── generate_video.py
│ │ ├── merge_route_json.py
│ │ ├── split_xml.py
│ │ ├── utils.py
│ │ └── visualize.py
│ ├── VAD_MomAD/
│ │ ├── Bench2DriveZoo/
│ │ │ ├── adzoo/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bevformer/
│ │ │ │ │ ├── analysis_tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── analyze_logs.py
│ │ │ │ │ │ ├── benchmark.py
│ │ │ │ │ │ ├── get_params.py
│ │ │ │ │ │ └── visual.py
│ │ │ │ │ ├── apis/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── mmdet_train.py
│ │ │ │ │ │ ├── test.py
│ │ │ │ │ │ └── train.py
│ │ │ │ │ ├── configs/
│ │ │ │ │ │ ├── _base_/
│ │ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ │ ├── coco_instance.py
│ │ │ │ │ │ │ │ ├── kitti-3d-3class.py
│ │ │ │ │ │ │ │ ├── kitti-3d-car.py
│ │ │ │ │ │ │ │ ├── lyft-3d.py
│ │ │ │ │ │ │ │ ├── nuim_instance.py
│ │ │ │ │ │ │ │ ├── nus-3d.py
│ │ │ │ │ │ │ │ ├── nus-mono3d.py
│ │ │ │ │ │ │ │ ├── range100_lyft-3d.py
│ │ │ │ │ │ │ │ ├── s3dis-3d-5class.py
│ │ │ │ │ │ │ │ ├── s3dis_seg-3d-13class.py
│ │ │ │ │ │ │ │ ├── scannet-3d-18class.py
│ │ │ │ │ │ │ │ ├── scannet_seg-3d-20class.py
│ │ │ │ │ │ │ │ ├── sunrgbd-3d-10class.py
│ │ │ │ │ │ │ │ ├── waymoD5-3d-3class.py
│ │ │ │ │ │ │ │ └── waymoD5-3d-car.py
│ │ │ │ │ │ │ ├── default_runtime.py
│ │ │ │ │ │ │ ├── models/
│ │ │ │ │ │ │ │ ├── 3dssd.py
│ │ │ │ │ │ │ │ ├── cascade_mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ │ ├── centerpoint_01voxel_second_secfpn_nus.py
│ │ │ │ │ │ │ │ ├── centerpoint_02pillar_second_secfpn_nus.py
│ │ │ │ │ │ │ │ ├── fcos3d.py
│ │ │ │ │ │ │ │ ├── groupfree3d.py
│ │ │ │ │ │ │ │ ├── h3dnet.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_fpn_lyft.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_fpn_nus.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_fpn_range100_lyft.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_kitti.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_waymo.py
│ │ │ │ │ │ │ │ ├── hv_second_secfpn_kitti.py
│ │ │ │ │ │ │ │ ├── hv_second_secfpn_waymo.py
│ │ │ │ │ │ │ │ ├── imvotenet_image.py
│ │ │ │ │ │ │ │ ├── mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ │ ├── paconv_cuda_ssg.py
│ │ │ │ │ │ │ │ ├── paconv_ssg.py
│ │ │ │ │ │ │ │ ├── parta2.py
│ │ │ │ │ │ │ │ ├── pointnet2_msg.py
│ │ │ │ │ │ │ │ ├── pointnet2_ssg.py
│ │ │ │ │ │ │ │ └── votenet.py
│ │ │ │ │ │ │ └── schedules/
│ │ │ │ │ │ │ ├── cosine.py
│ │ │ │ │ │ │ ├── cyclic_20e.py
│ │ │ │ │ │ │ ├── cyclic_40e.py
│ │ │ │ │ │ │ ├── mmdet_schedule_1x.py
│ │ │ │ │ │ │ ├── schedule_2x.py
│ │ │ │ │ │ │ ├── schedule_3x.py
│ │ │ │ │ │ │ ├── seg_cosine_150e.py
│ │ │ │ │ │ │ ├── seg_cosine_200e.py
│ │ │ │ │ │ │ └── seg_cosine_50e.py
│ │ │ │ │ │ ├── bevformer/
│ │ │ │ │ │ │ ├── bevformer_base.py
│ │ │ │ │ │ │ ├── bevformer_base_b2d.py
│ │ │ │ │ │ │ ├── bevformer_tiny.py
│ │ │ │ │ │ │ └── bevformer_tiny_b2d.py
│ │ │ │ │ │ ├── bevformer_fp16/
│ │ │ │ │ │ │ └── bevformer_tiny_fp16.py
│ │ │ │ │ │ ├── bevformerv2/
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-24ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-48ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-base-24ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-base-48ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t2-24ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t2-48ep.py
│ │ │ │ │ │ │ └── bevformerv2-r50-t8-24ep.py
│ │ │ │ │ │ └── datasets/
│ │ │ │ │ │ ├── custom_lyft-3d.py
│ │ │ │ │ │ ├── custom_nus-3d.py
│ │ │ │ │ │ └── custom_waymo-3d.py
│ │ │ │ │ ├── create_data.py
│ │ │ │ │ ├── data_converter/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── create_gt_database.py
│ │ │ │ │ │ ├── indoor_converter.py
│ │ │ │ │ │ ├── kitti_converter.py
│ │ │ │ │ │ ├── kitti_data_utils.py
│ │ │ │ │ │ ├── lyft_converter.py
│ │ │ │ │ │ ├── lyft_data_fixer.py
│ │ │ │ │ │ ├── nuimage_converter.py
│ │ │ │ │ │ ├── nuscenes_converter.py
│ │ │ │ │ │ ├── s3dis_data_utils.py
│ │ │ │ │ │ ├── scannet_data_utils.py
│ │ │ │ │ │ ├── sunrgbd_data_utils.py
│ │ │ │ │ │ └── waymo_converter.py
│ │ │ │ │ ├── dist_test.sh
│ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ ├── fp16/
│ │ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ │ └── train.py
│ │ │ │ │ ├── misc/
│ │ │ │ │ │ ├── browse_dataset.py
│ │ │ │ │ │ ├── print_config.py
│ │ │ │ │ │ └── visualize_results.py
│ │ │ │ │ ├── mmdet3d_plugin/
│ │ │ │ │ │ ├── bevformer/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── apis/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── mmdet_train.py
│ │ │ │ │ │ │ │ ├── test.py
│ │ │ │ │ │ │ │ └── train.py
│ │ │ │ │ │ │ └── hooks/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ └── custom_hooks.py
│ │ │ │ │ │ ├── dd3d/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── nuscenes.py
│ │ │ │ │ │ │ │ └── transform_utils.py
│ │ │ │ │ │ │ ├── layers/
│ │ │ │ │ │ │ │ ├── iou_loss.py
│ │ │ │ │ │ │ │ ├── normalization.py
│ │ │ │ │ │ │ │ └── smooth_l1_loss.py
│ │ │ │ │ │ │ ├── modeling/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── core.py
│ │ │ │ │ │ │ │ ├── disentangled_box3d_loss.py
│ │ │ │ │ │ │ │ ├── fcos2d.py
│ │ │ │ │ │ │ │ ├── fcos3d.py
│ │ │ │ │ │ │ │ ├── nuscenes_dd3d.py
│ │ │ │ │ │ │ │ └── prepare_targets.py
│ │ │ │ │ │ │ ├── structures/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── boxes3d.py
│ │ │ │ │ │ │ │ ├── image_list.py
│ │ │ │ │ │ │ │ ├── pose.py
│ │ │ │ │ │ │ │ └── transform3d.py
│ │ │ │ │ │ │ └── utils/
│ │ │ │ │ │ │ ├── comm.py
│ │ │ │ │ │ │ ├── geometry.py
│ │ │ │ │ │ │ ├── tasks.py
│ │ │ │ │ │ │ ├── tensor2d.py
│ │ │ │ │ │ │ └── visualization.py
│ │ │ │ │ │ └── models/
│ │ │ │ │ │ └── hooks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── hooks.py
│ │ │ │ │ ├── model_converters/
│ │ │ │ │ │ ├── convert_votenet_checkpoints.py
│ │ │ │ │ │ ├── publish_model.py
│ │ │ │ │ │ └── regnet2mmdet.py
│ │ │ │ │ ├── test.py
│ │ │ │ │ └── train.py
│ │ │ │ ├── sparsedrive/
│ │ │ │ │ ├── configs/
│ │ │ │ │ │ ├── sparsedrive_small_b2d_stage1.py
│ │ │ │ │ │ ├── sparsedrive_small_b2d_stage2.py
│ │ │ │ │ │ ├── sparsedrive_small_stage1.py
│ │ │ │ │ │ └── sparsedrive_small_stage2.py
│ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ ├── scripts/
│ │ │ │ │ │ ├── create_data.sh
│ │ │ │ │ │ ├── kmeans.sh
│ │ │ │ │ │ ├── test.sh
│ │ │ │ │ │ ├── test_roboAD.sh
│ │ │ │ │ │ ├── train.sh
│ │ │ │ │ │ ├── train_6s.sh
│ │ │ │ │ │ ├── train_roboAD.sh
│ │ │ │ │ │ └── visualize.sh
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── benchmark.py
│ │ │ │ │ │ ├── data_converter/
│ │ │ │ │ │ │ ├── B2D_converter.py
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── nuscenes_converter.py
│ │ │ │ │ │ │ ├── nuscenes_converter_1_10.py
│ │ │ │ │ │ │ ├── nuscenes_converter_6s.py
│ │ │ │ │ │ │ └── nuscenes_converter_hrad_planing_scene.py
│ │ │ │ │ │ ├── dist_test.sh
│ │ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ │ │ ├── kmeans/
│ │ │ │ │ │ │ ├── kmeans_det.py
│ │ │ │ │ │ │ ├── kmeans_map.py
│ │ │ │ │ │ │ ├── kmeans_motion.py
│ │ │ │ │ │ │ └── kmeans_plan.py
│ │ │ │ │ │ ├── test.py
│ │ │ │ │ │ ├── train.py
│ │ │ │ │ │ ├── train_single.py
│ │ │ │ │ │ └── visualization/
│ │ │ │ │ │ ├── bev_render.py
│ │ │ │ │ │ └── cam_render.py
│ │ │ │ │ └── train.py
│ │ │ │ ├── uniad/
│ │ │ │ │ ├── analysis_tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── analyze_logs.py
│ │ │ │ │ │ ├── benchmark.py
│ │ │ │ │ │ └── visualize/
│ │ │ │ │ │ ├── render/
│ │ │ │ │ │ │ ├── base_render.py
│ │ │ │ │ │ │ ├── bev_render.py
│ │ │ │ │ │ │ └── cam_render.py
│ │ │ │ │ │ ├── run.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── configs/
│ │ │ │ │ │ ├── _base_/
│ │ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ │ └── nus-3d.py
│ │ │ │ │ │ │ └── default_runtime.py
│ │ │ │ │ │ ├── stage1_track_map/
│ │ │ │ │ │ │ ├── base_track_map.py
│ │ │ │ │ │ │ ├── base_track_map_b2d.py
│ │ │ │ │ │ │ └── tiny_track_map_b2d.py
│ │ │ │ │ │ └── stage2_e2e/
│ │ │ │ │ │ ├── base_e2e.py
│ │ │ │ │ │ ├── base_e2e_b2d.py
│ │ │ │ │ │ └── tiny_e2e_b2d.py
│ │ │ │ │ ├── data_converter/
│ │ │ │ │ │ ├── create_data.py
│ │ │ │ │ │ ├── uniad_create_data.sh
│ │ │ │ │ │ └── uniad_nuscenes_converter.py
│ │ │ │ │ ├── test.py
│ │ │ │ │ ├── test_utils.py
│ │ │ │ │ ├── train.py
│ │ │ │ │ ├── uniad_dist_eval.sh
│ │ │ │ │ ├── uniad_dist_train.sh
│ │ │ │ │ └── uniad_vis_result.sh
│ │ │ │ └── vad/
│ │ │ │ ├── analysis_tools/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── analyze_logs.py
│ │ │ │ │ ├── benchmark.py
│ │ │ │ │ ├── get_flops.py
│ │ │ │ │ ├── get_params.py
│ │ │ │ │ └── visualization.py
│ │ │ │ ├── apis/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── mmdet_train.py
│ │ │ │ │ ├── test.py
│ │ │ │ │ └── train.py
│ │ │ │ ├── configs/
│ │ │ │ │ ├── VAD/
│ │ │ │ │ │ ├── MomAD_base_e2e_b2d.py
│ │ │ │ │ │ ├── VAD_base_e2e.py
│ │ │ │ │ │ ├── VAD_base_e2e_b2d.py
│ │ │ │ │ │ └── VAD_tiny_e2e.py
│ │ │ │ │ ├── _base_/
│ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ ├── coco_instance.py
│ │ │ │ │ │ │ ├── kitti-3d-3class.py
│ │ │ │ │ │ │ ├── kitti-3d-car.py
│ │ │ │ │ │ │ ├── lyft-3d.py
│ │ │ │ │ │ │ ├── nuim_instance.py
│ │ │ │ │ │ │ ├── nus-3d.py
│ │ │ │ │ │ │ ├── nus-mono3d.py
│ │ │ │ │ │ │ ├── range100_lyft-3d.py
│ │ │ │ │ │ │ ├── s3dis-3d-5class.py
│ │ │ │ │ │ │ ├── s3dis_seg-3d-13class.py
│ │ │ │ │ │ │ ├── scannet-3d-18class.py
│ │ │ │ │ │ │ ├── scannet_seg-3d-20class.py
│ │ │ │ │ │ │ ├── sunrgbd-3d-10class.py
│ │ │ │ │ │ │ ├── waymoD5-3d-3class.py
│ │ │ │ │ │ │ └── waymoD5-3d-car.py
│ │ │ │ │ │ ├── default_runtime.py
│ │ │ │ │ │ ├── models/
│ │ │ │ │ │ │ ├── 3dssd.py
│ │ │ │ │ │ │ ├── cascade_mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ ├── centerpoint_01voxel_second_secfpn_nus.py
│ │ │ │ │ │ │ ├── centerpoint_02pillar_second_secfpn_nus.py
│ │ │ │ │ │ │ ├── fcos3d.py
│ │ │ │ │ │ │ ├── groupfree3d.py
│ │ │ │ │ │ │ ├── h3dnet.py
│ │ │ │ │ │ │ ├── hv_pointpillars_fpn_lyft.py
│ │ │ │ │ │ │ ├── hv_pointpillars_fpn_nus.py
│ │ │ │ │ │ │ ├── hv_pointpillars_fpn_range100_lyft.py
│ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_kitti.py
│ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_waymo.py
│ │ │ │ │ │ │ ├── hv_second_secfpn_kitti.py
│ │ │ │ │ │ │ ├── hv_second_secfpn_waymo.py
│ │ │ │ │ │ │ ├── imvotenet_image.py
│ │ │ │ │ │ │ ├── mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ ├── paconv_cuda_ssg.py
│ │ │ │ │ │ │ ├── paconv_ssg.py
│ │ │ │ │ │ │ ├── parta2.py
│ │ │ │ │ │ │ ├── pointnet2_msg.py
│ │ │ │ │ │ │ ├── pointnet2_ssg.py
│ │ │ │ │ │ │ └── votenet.py
│ │ │ │ │ │ └── schedules/
│ │ │ │ │ │ ├── cosine.py
│ │ │ │ │ │ ├── cyclic_20e.py
│ │ │ │ │ │ ├── cyclic_40e.py
│ │ │ │ │ │ ├── mmdet_schedule_1x.py
│ │ │ │ │ │ ├── schedule_2x.py
│ │ │ │ │ │ ├── schedule_3x.py
│ │ │ │ │ │ ├── seg_cosine_150e.py
│ │ │ │ │ │ ├── seg_cosine_200e.py
│ │ │ │ │ │ └── seg_cosine_50e.py
│ │ │ │ │ └── datasets/
│ │ │ │ │ ├── custom_lyft-3d.py
│ │ │ │ │ ├── custom_nus-3d.py
│ │ │ │ │ └── custom_waymo-3d.py
│ │ │ │ ├── create_data.py
│ │ │ │ ├── data_converter/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── create_gt_database.py
│ │ │ │ │ └── vad_nuscenes_converter.py
│ │ │ │ ├── dist_test.sh
│ │ │ │ ├── dist_train.sh
│ │ │ │ ├── dist_train_momad.sh
│ │ │ │ ├── misc/
│ │ │ │ │ ├── browse_dataset.py
│ │ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ │ ├── print_config.py
│ │ │ │ │ └── visualize_results.py
│ │ │ │ ├── model_converters/
│ │ │ │ │ ├── convert_votenet_checkpoints.py
│ │ │ │ │ ├── publish_model.py
│ │ │ │ │ └── regnet2mmdet.py
│ │ │ │ ├── test.py
│ │ │ │ ├── train.py
│ │ │ │ └── train_momad.py
│ │ │ ├── docs/
│ │ │ │ ├── CONVERT_GUIDE.md
│ │ │ │ ├── DATA_PREP.md
│ │ │ │ ├── EVAL_IN_CARLA.md
│ │ │ │ ├── INSTALL.md
│ │ │ │ └── TRAIN_EVAL.md
│ │ │ ├── mmcv/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── core/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── anchor/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── anchor_3d_generator.py
│ │ │ │ │ │ ├── anchor_generator.py
│ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ ├── point_generator.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── bbox/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── assigners/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── assign_result.py
│ │ │ │ │ │ │ ├── base_assigner.py
│ │ │ │ │ │ │ ├── hungarian_assigner.py
│ │ │ │ │ │ │ ├── hungarian_assigner_3d.py
│ │ │ │ │ │ │ ├── hungarian_assigner_3d_track.py
│ │ │ │ │ │ │ └── map_hungarian_assigner_3d.py
│ │ │ │ │ │ ├── box_np_ops.py
│ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ ├── coder/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_bbox_coder.py
│ │ │ │ │ │ │ ├── detr3d_track_coder.py
│ │ │ │ │ │ │ ├── fut_nms_free_coder.py
│ │ │ │ │ │ │ ├── map_nms_free_coder.py
│ │ │ │ │ │ │ └── nms_free_coder.py
│ │ │ │ │ │ ├── iou_calculators/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ │ ├── iou2d_calculator.py
│ │ │ │ │ │ │ └── iou3d_calculator.py
│ │ │ │ │ │ ├── match_costs/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ │ └── match_cost.py
│ │ │ │ │ │ ├── samplers/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_sampler.py
│ │ │ │ │ │ │ ├── pseudo_sampler.py
│ │ │ │ │ │ │ └── sampling_result.py
│ │ │ │ │ │ ├── structures/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_box3d.py
│ │ │ │ │ │ │ ├── box_3d_mode.py
│ │ │ │ │ │ │ ├── cam_box3d.py
│ │ │ │ │ │ │ ├── coord_3d_mode.py
│ │ │ │ │ │ │ ├── depth_box3d.py
│ │ │ │ │ │ │ ├── lidar_box3d.py
│ │ │ │ │ │ │ ├── nuscenes_box.py
│ │ │ │ │ │ │ └── utils.py
│ │ │ │ │ │ ├── transforms.py
│ │ │ │ │ │ └── util.py
│ │ │ │ │ ├── evaluation/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bbox_overlaps.py
│ │ │ │ │ │ ├── class_names.py
│ │ │ │ │ │ ├── eval_hooks.py
│ │ │ │ │ │ ├── indoor_eval.py
│ │ │ │ │ │ ├── kitti_utils/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── eval.py
│ │ │ │ │ │ │ └── rotate_iou.py
│ │ │ │ │ │ ├── lyft_eval.py
│ │ │ │ │ │ ├── mean_ap.py
│ │ │ │ │ │ ├── metric_motion.py
│ │ │ │ │ │ ├── metrics.py
│ │ │ │ │ │ ├── recall.py
│ │ │ │ │ │ ├── seg_eval.py
│ │ │ │ │ │ └── waymo_utils/
│ │ │ │ │ │ └── prediction_kitti_to_waymo.py
│ │ │ │ │ ├── mask/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── mask_target.py
│ │ │ │ │ │ ├── structures.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── points/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base_points.py
│ │ │ │ │ │ ├── cam_points.py
│ │ │ │ │ │ ├── depth_points.py
│ │ │ │ │ │ └── lidar_points.py
│ │ │ │ │ ├── post_processing/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bbox_nms.py
│ │ │ │ │ │ ├── box3d_nms.py
│ │ │ │ │ │ └── merge_augs.py
│ │ │ │ │ ├── utils/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── dist_utils.py
│ │ │ │ │ │ ├── gaussian.py
│ │ │ │ │ │ └── misc.py
│ │ │ │ │ ├── visualization/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── image.py
│ │ │ │ │ ├── visualizer/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── image_vis.py
│ │ │ │ │ │ ├── open3d_vis.py
│ │ │ │ │ │ └── show_result.py
│ │ │ │ │ └── voxel/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ └── voxel_generator.py
│ │ │ │ ├── datasets/
│ │ │ │ │ ├── B2D_dataset.py
│ │ │ │ │ ├── B2D_e2e_dataset.py
│ │ │ │ │ ├── B2D_sparsedrive_dataset.py
│ │ │ │ │ ├── B2D_vad_dataset.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── api_wrappers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── coco_api.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ ├── coco.py
│ │ │ │ │ ├── custom.py
│ │ │ │ │ ├── custom_3d.py
│ │ │ │ │ ├── custom_nuscenes_dataset.py
│ │ │ │ │ ├── custom_nuscenes_dataset_v2.py
│ │ │ │ │ ├── data_utils/
│ │ │ │ │ │ ├── data_utils.py
│ │ │ │ │ │ ├── rasterize.py
│ │ │ │ │ │ ├── trajectory_api.py
│ │ │ │ │ │ └── vector_map.py
│ │ │ │ │ ├── dataset_wrappers.py
│ │ │ │ │ ├── dd3d_nuscenes_dataset.py
│ │ │ │ │ ├── eval_utils/
│ │ │ │ │ │ ├── eval_utils.py
│ │ │ │ │ │ ├── map_api.py
│ │ │ │ │ │ ├── metric_utils.py
│ │ │ │ │ │ ├── nuscenes_eval.py
│ │ │ │ │ │ └── nuscenes_eval_motion.py
│ │ │ │ │ ├── lyft_dataset.py
│ │ │ │ │ ├── map_utils/
│ │ │ │ │ │ ├── mean_ap.py
│ │ │ │ │ │ ├── struct.py
│ │ │ │ │ │ ├── tpfp.py
│ │ │ │ │ │ └── tpfp_chamfer.py
│ │ │ │ │ ├── nuscenes_dataset.py
│ │ │ │ │ ├── nuscenes_e2e_dataset.py
│ │ │ │ │ ├── nuscenes_eval.py
│ │ │ │ │ ├── nuscenes_mono_dataset.py
│ │ │ │ │ ├── nuscenes_styled_eval_utils.py
│ │ │ │ │ ├── nuscenes_vad_dataset.py
│ │ │ │ │ ├── nuscnes_eval.py
│ │ │ │ │ ├── pipelines/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── augment.py
│ │ │ │ │ │ ├── compose.py
│ │ │ │ │ │ ├── data_augment_utils.py
│ │ │ │ │ │ ├── formating.py
│ │ │ │ │ │ ├── loading.py
│ │ │ │ │ │ ├── occflow_label.py
│ │ │ │ │ │ ├── test_time_aug.py
│ │ │ │ │ │ ├── transforms.py
│ │ │ │ │ │ ├── transforms_3d.py
│ │ │ │ │ │ └── vectorize.py
│ │ │ │ │ ├── prepare_B2D.py
│ │ │ │ │ ├── samplers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── distributed_sampler.py
│ │ │ │ │ │ ├── group_sampler.py
│ │ │ │ │ │ └── sampler.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ ├── vad_custom_nuscenes_eval.py
│ │ │ │ │ └── vis_utils.py
│ │ │ │ ├── fileio/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── file_client.py
│ │ │ │ │ ├── handlers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── json_handler.py
│ │ │ │ │ │ └── pickle_handler.py
│ │ │ │ │ ├── io.py
│ │ │ │ │ └── parse.py
│ │ │ │ ├── image/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── colorspace.py
│ │ │ │ │ ├── geometric.py
│ │ │ │ │ ├── io.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ └── photometric.py
│ │ │ │ ├── layers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── aspp.py
│ │ │ │ │ ├── batch_norm.py
│ │ │ │ │ ├── blocks.py
│ │ │ │ │ ├── csrc/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── ROIAlignRotated/
│ │ │ │ │ │ │ ├── ROIAlignRotated.h
│ │ │ │ │ │ │ ├── ROIAlignRotated_cpu.cpp
│ │ │ │ │ │ │ └── ROIAlignRotated_cuda.cu
│ │ │ │ │ │ ├── box_iou_rotated/
│ │ │ │ │ │ │ ├── box_iou_rotated.h
│ │ │ │ │ │ │ ├── box_iou_rotated_cpu.cpp
│ │ │ │ │ │ │ ├── box_iou_rotated_cuda.cu
│ │ │ │ │ │ │ └── box_iou_rotated_utils.h
│ │ │ │ │ │ ├── cocoeval/
│ │ │ │ │ │ │ ├── cocoeval.cpp
│ │ │ │ │ │ │ └── cocoeval.h
│ │ │ │ │ │ ├── cuda_version.cu
│ │ │ │ │ │ ├── deformable/
│ │ │ │ │ │ │ ├── deform_conv.h
│ │ │ │ │ │ │ ├── deform_conv_cuda.cu
│ │ │ │ │ │ │ └── deform_conv_cuda_kernel.cu
│ │ │ │ │ │ ├── nms_rotated/
│ │ │ │ │ │ │ ├── nms_rotated.h
│ │ │ │ │ │ │ ├── nms_rotated_cpu.cpp
│ │ │ │ │ │ │ └── nms_rotated_cuda.cu
│ │ │ │ │ │ └── vision.cpp
│ │ │ │ │ ├── deform_conv.py
│ │ │ │ │ ├── losses.py
│ │ │ │ │ ├── mask_ops.py
│ │ │ │ │ ├── nms.py
│ │ │ │ │ ├── roi_align.py
│ │ │ │ │ ├── roi_align_rotated.py
│ │ │ │ │ ├── rotated_boxes.py
│ │ │ │ │ ├── shape_spec.py
│ │ │ │ │ └── wrappers.py
│ │ │ │ ├── losses/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── dice_loss.py
│ │ │ │ │ ├── focal_loss.py
│ │ │ │ │ ├── fvcore_smooth_l1_loss.py
│ │ │ │ │ ├── occflow_loss.py
│ │ │ │ │ ├── planning_loss.py
│ │ │ │ │ ├── track_loss.py
│ │ │ │ │ └── traj_loss.py
│ │ │ │ ├── metrics/
│ │ │ │ │ ├── classification.py
│ │ │ │ │ ├── compositional.py
│ │ │ │ │ ├── distributed.py
│ │ │ │ │ ├── metric.py
│ │ │ │ │ ├── reduction.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── modeling/
│ │ │ │ │ └── postprocessing.py
│ │ │ │ ├── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── backbones/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base_module.py
│ │ │ │ │ │ ├── resnet.py
│ │ │ │ │ │ ├── vgg.py
│ │ │ │ │ │ └── vovnet.py
│ │ │ │ │ ├── bricks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── activation.py
│ │ │ │ │ │ ├── conv.py
│ │ │ │ │ │ ├── conv_module.py
│ │ │ │ │ │ ├── drop.py
│ │ │ │ │ │ ├── norm.py
│ │ │ │ │ │ ├── padding.py
│ │ │ │ │ │ ├── plugin.py
│ │ │ │ │ │ ├── registry.py
│ │ │ │ │ │ ├── transformer.py
│ │ │ │ │ │ └── wrappers.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ ├── dense_heads/
│ │ │ │ │ │ ├── MomAD_head.py
│ │ │ │ │ │ ├── VAD_head.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── anchor3d_head.py
│ │ │ │ │ │ ├── anchor_free_head.py
│ │ │ │ │ │ ├── anchor_head.py
│ │ │ │ │ │ ├── base_dense_head.py
│ │ │ │ │ │ ├── bev_head.py
│ │ │ │ │ │ ├── bevformer_head.py
│ │ │ │ │ │ ├── dense_test_mixins.py
│ │ │ │ │ │ ├── detr_head.py
│ │ │ │ │ │ ├── free_anchor3d_head.py
│ │ │ │ │ │ ├── ga_rpn_head.py
│ │ │ │ │ │ ├── guided_anchor_head.py
│ │ │ │ │ │ ├── motion_head.py
│ │ │ │ │ │ ├── motion_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_motion_head.py
│ │ │ │ │ │ │ ├── modules.py
│ │ │ │ │ │ │ ├── motion_deformable_attn.py
│ │ │ │ │ │ │ ├── motion_optimization.py
│ │ │ │ │ │ │ └── motion_utils.py
│ │ │ │ │ │ ├── occ_head.py
│ │ │ │ │ │ ├── occ_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── metrics.py
│ │ │ │ │ │ │ ├── modules.py
│ │ │ │ │ │ │ └── utils.py
│ │ │ │ │ │ ├── panseg_head.py
│ │ │ │ │ │ ├── planning_head.py
│ │ │ │ │ │ ├── planning_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── collision_optimization.py
│ │ │ │ │ │ │ ├── metric_stp3.py
│ │ │ │ │ │ │ └── planning_metrics.py
│ │ │ │ │ │ ├── rpn_head.py
│ │ │ │ │ │ ├── seg_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── seg_assigner.py
│ │ │ │ │ │ │ ├── seg_deformable_transformer.py
│ │ │ │ │ │ │ ├── seg_detr_head.py
│ │ │ │ │ │ │ ├── seg_mask_head.py
│ │ │ │ │ │ │ └── seg_utils.py
│ │ │ │ │ │ ├── track_head.py
│ │ │ │ │ │ ├── track_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── modules.py
│ │ │ │ │ │ │ ├── track_instance.py
│ │ │ │ │ │ │ └── tracker.py
│ │ │ │ │ │ └── train_mixins.py
│ │ │ │ │ ├── detectors/
│ │ │ │ │ │ ├── MomAD.py
│ │ │ │ │ │ ├── SpMomAD.py
│ │ │ │ │ │ ├── VAD.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── bevformer.py
│ │ │ │ │ │ ├── bevformerV2.py
│ │ │ │ │ │ ├── bevformer_fp16.py
│ │ │ │ │ │ ├── mvx_two_stage.py
│ │ │ │ │ │ ├── single_stage.py
│ │ │ │ │ │ ├── single_stage_mono3d.py
│ │ │ │ │ │ ├── sparsedrive.py
│ │ │ │ │ │ ├── uniad_e2e.py
│ │ │ │ │ │ └── uniad_track.py
│ │ │ │ │ ├── losses/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── focal_loss.py
│ │ │ │ │ │ ├── iou_loss.py
│ │ │ │ │ │ ├── smooth_l1_loss.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── modules/
│ │ │ │ │ │ ├── VAD_transformer.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── custom_base_transformer_layer.py
│ │ │ │ │ │ ├── decoder.py
│ │ │ │ │ │ ├── encoder.py
│ │ │ │ │ │ ├── group_attention.py
│ │ │ │ │ │ ├── multi_scale_deformable_attn_function.py
│ │ │ │ │ │ ├── spatial_cross_attention.py
│ │ │ │ │ │ ├── temporal_self_attention.py
│ │ │ │ │ │ ├── transformer.py
│ │ │ │ │ │ ├── transformerV2.py
│ │ │ │ │ │ └── vote_module.py
│ │ │ │ │ ├── necks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── fpn.py
│ │ │ │ │ ├── opt/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── adamw.py
│ │ │ │ │ ├── roi_heads/
│ │ │ │ │ │ └── mask_heads/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── fused_semantic_head.py
│ │ │ │ │ ├── segmentors/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── base.py
│ │ │ │ │ ├── utils/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ ├── functional.py
│ │ │ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ │ │ ├── grid_mask.py
│ │ │ │ │ │ ├── positional_encoding.py
│ │ │ │ │ │ ├── res_layer.py
│ │ │ │ │ │ ├── transformer.py
│ │ │ │ │ │ └── weight_init.py
│ │ │ │ │ └── vad_utils/
│ │ │ │ │ ├── CD_loss.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── map_utils.py
│ │ │ │ │ ├── plan_loss.py
│ │ │ │ │ └── traj_lr_warmup.py
│ │ │ │ ├── ops/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── csrc/
│ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ ├── box_iou_rotated_utils.hpp
│ │ │ │ │ │ │ ├── cuda/
│ │ │ │ │ │ │ │ ├── assign_score_withk_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── ball_query_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── bbox_overlaps_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── border_align_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── box_iou_rotated_cuda.cuh
│ │ │ │ │ │ │ │ ├── carafe_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── carafe_naive_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── common_cuda_helper.hpp
│ │ │ │ │ │ │ │ ├── correlation_cuda.cuh
│ │ │ │ │ │ │ │ ├── deform_conv_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── deform_roi_pool_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── furthest_point_sample_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── gather_points_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── group_points_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── iou3d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── knn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── masked_conv2d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── modulated_deform_conv_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── ms_deform_attn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── nms_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── nms_rotated_cuda.cuh
│ │ │ │ │ │ │ │ ├── points_in_boxes_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── psamask_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roi_align_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roi_align_rotated_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roi_pool_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roiaware_pool3d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roipoint_pool3d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── scatter_points_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── sigmoid_focal_loss_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── softmax_focal_loss_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── sync_bn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── three_interpolate_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── three_nn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── tin_shift_cuda_kernel.cuh
│ │ │ │ │ │ │ │ └── voxelization_cuda_kernel.cuh
│ │ │ │ │ │ │ ├── pytorch_cpp_helper.hpp
│ │ │ │ │ │ │ ├── pytorch_cuda_helper.hpp
│ │ │ │ │ │ │ └── pytorch_device_registry.hpp
│ │ │ │ │ │ └── pytorch/
│ │ │ │ │ │ ├── assign_score_withk.cpp
│ │ │ │ │ │ ├── ball_query.cpp
│ │ │ │ │ │ ├── bbox_overlaps.cpp
│ │ │ │ │ │ ├── border_align.cpp
│ │ │ │ │ │ ├── box_iou_rotated.cpp
│ │ │ │ │ │ ├── carafe.cpp
│ │ │ │ │ │ ├── carafe_naive.cpp
│ │ │ │ │ │ ├── contour_expand.cpp
│ │ │ │ │ │ ├── corner_pool.cpp
│ │ │ │ │ │ ├── correlation.cpp
│ │ │ │ │ │ ├── cpu/
│ │ │ │ │ │ │ ├── box_iou_rotated.cpp
│ │ │ │ │ │ │ ├── deform_conv.cpp
│ │ │ │ │ │ │ ├── modulated_deform_conv.cpp
│ │ │ │ │ │ │ ├── nms.cpp
│ │ │ │ │ │ │ ├── nms_rotated.cpp
│ │ │ │ │ │ │ ├── pixel_group.cpp
│ │ │ │ │ │ │ ├── points_in_boxes.cpp
│ │ │ │ │ │ │ ├── psamask.cpp
│ │ │ │ │ │ │ ├── roi_align.cpp
│ │ │ │ │ │ │ ├── roi_align_rotated.cpp
│ │ │ │ │ │ │ └── voxelization.cpp
│ │ │ │ │ │ ├── cuda/
│ │ │ │ │ │ │ ├── assign_score_withk_cuda.cu
│ │ │ │ │ │ │ ├── ball_query_cuda.cu
│ │ │ │ │ │ │ ├── bbox_overlaps_cuda.cu
│ │ │ │ │ │ │ ├── border_align_cuda.cu
│ │ │ │ │ │ │ ├── box_iou_rotated_cuda.cu
│ │ │ │ │ │ │ ├── carafe_cuda.cu
│ │ │ │ │ │ │ ├── carafe_naive_cuda.cu
│ │ │ │ │ │ │ ├── correlation_cuda.cu
│ │ │ │ │ │ │ ├── cudabind.cpp
│ │ │ │ │ │ │ ├── deform_conv_cuda.cu
│ │ │ │ │ │ │ ├── deform_roi_pool_cuda.cu
│ │ │ │ │ │ │ ├── focal_loss_cuda.cu
│ │ │ │ │ │ │ ├── furthest_point_sample_cuda.cu
│ │ │ │ │ │ │ ├── fused_bias_leakyrelu_cuda.cu
│ │ │ │ │ │ │ ├── gather_points_cuda.cu
│ │ │ │ │ │ │ ├── group_points_cuda.cu
│ │ │ │ │ │ │ ├── iou3d_cuda.cu
│ │ │ │ │ │ │ ├── knn_cuda.cu
│ │ │ │ │ │ │ ├── masked_conv2d_cuda.cu
│ │ │ │ │ │ │ ├── modulated_deform_conv_cuda.cu
│ │ │ │ │ │ │ ├── ms_deform_attn_cuda.cu
│ │ │ │ │ │ │ ├── nms_cuda.cu
│ │ │ │ │ │ │ ├── nms_rotated_cuda.cu
│ │ │ │ │ │ │ ├── points_in_boxes_cuda.cu
│ │ │ │ │ │ │ ├── psamask_cuda.cu
│ │ │ │ │ │ │ ├── roi_align_cuda.cu
│ │ │ │ │ │ │ ├── roi_align_rotated_cuda.cu
│ │ │ │ │ │ │ ├── roi_pool_cuda.cu
│ │ │ │ │ │ │ ├── roiaware_pool3d_cuda.cu
│ │ │ │ │ │ │ ├── roipoint_pool3d_cuda.cu
│ │ │ │ │ │ │ ├── scatter_points_cuda.cu
│ │ │ │ │ │ │ ├── sync_bn_cuda.cu
│ │ │ │ │ │ │ ├── three_interpolate_cuda.cu
│ │ │ │ │ │ │ ├── three_nn_cuda.cu
│ │ │ │ │ │ │ ├── tin_shift_cuda.cu
│ │ │ │ │ │ │ ├── upfirdn2d_kernel.cu
│ │ │ │ │ │ │ └── voxelization_cuda.cu
│ │ │ │ │ │ ├── deform_conv.cpp
│ │ │ │ │ │ ├── deform_roi_pool.cpp
│ │ │ │ │ │ ├── focal_loss.cpp
│ │ │ │ │ │ ├── furthest_point_sample.cpp
│ │ │ │ │ │ ├── fused_bias_leakyrelu.cpp
│ │ │ │ │ │ ├── gather_points.cpp
│ │ │ │ │ │ ├── group_points.cpp
│ │ │ │ │ │ ├── info.cpp
│ │ │ │ │ │ ├── iou3d.cpp
│ │ │ │ │ │ ├── knn.cpp
│ │ │ │ │ │ ├── masked_conv2d.cpp
│ │ │ │ │ │ ├── modulated_deform_conv.cpp
│ │ │ │ │ │ ├── ms_deform_attn.cpp
│ │ │ │ │ │ ├── nms.cpp
│ │ │ │ │ │ ├── nms_rotated.cpp
│ │ │ │ │ │ ├── pixel_group.cpp
│ │ │ │ │ │ ├── points_in_boxes.cpp
│ │ │ │ │ │ ├── psamask.cpp
│ │ │ │ │ │ ├── pybind.cpp
│ │ │ │ │ │ ├── roi_align.cpp
│ │ │ │ │ │ ├── roi_align_rotated.cpp
│ │ │ │ │ │ ├── roi_pool.cpp
│ │ │ │ │ │ ├── roiaware_pool3d.cpp
│ │ │ │ │ │ ├── roipoint_pool3d.cpp
│ │ │ │ │ │ ├── scatter_points.cpp
│ │ │ │ │ │ ├── sync_bn.cpp
│ │ │ │ │ │ ├── three_interpolate.cpp
│ │ │ │ │ │ ├── three_nn.cpp
│ │ │ │ │ │ ├── tin_shift.cpp
│ │ │ │ │ │ ├── upfirdn2d.cpp
│ │ │ │ │ │ └── voxelization.cpp
│ │ │ │ │ ├── deform_conv.py
│ │ │ │ │ ├── focal_loss.py
│ │ │ │ │ ├── iou3d.py
│ │ │ │ │ ├── iou3d_det/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── iou3d_utils.py
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── iou3d.cpp
│ │ │ │ │ │ └── iou3d_kernel.cu
│ │ │ │ │ ├── masked_conv.py
│ │ │ │ │ ├── modulated_deform_conv.py
│ │ │ │ │ ├── multi_scale_deform_attn.py
│ │ │ │ │ ├── nms.py
│ │ │ │ │ ├── roi_align.py
│ │ │ │ │ ├── roiaware_pool3d/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── points_in_boxes.py
│ │ │ │ │ │ ├── roiaware_pool3d.py
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── points_in_boxes_cpu.cpp
│ │ │ │ │ │ ├── points_in_boxes_cuda.cu
│ │ │ │ │ │ ├── roiaware_pool3d.cpp
│ │ │ │ │ │ └── roiaware_pool3d_kernel.cu
│ │ │ │ │ └── voxelize.py
│ │ │ │ ├── optims/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── adamw.py
│ │ │ │ │ └── optimizer.py
│ │ │ │ ├── parallel/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── collate.py
│ │ │ │ │ ├── data_container.py
│ │ │ │ │ ├── registry.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── runner/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── base_runner.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ ├── epoch_based_runner.py
│ │ │ │ │ └── hooks/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── checkpoint.py
│ │ │ │ │ ├── evaluation.py
│ │ │ │ │ ├── hook.py
│ │ │ │ │ ├── iter_timer.py
│ │ │ │ │ ├── logger/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── tensorboard.py
│ │ │ │ │ │ └── text.py
│ │ │ │ │ ├── lr_updater.py
│ │ │ │ │ ├── optimizer.py
│ │ │ │ │ ├── sampler_seed.py
│ │ │ │ │ └── vad_hooks.py
│ │ │ │ ├── structures/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── boxes.py
│ │ │ │ │ ├── image_list.py
│ │ │ │ │ ├── instances.py
│ │ │ │ │ ├── keypoints.py
│ │ │ │ │ ├── masks.py
│ │ │ │ │ └── rotated_boxes.py
│ │ │ │ └── utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bricks.py
│ │ │ │ ├── checkpoint.py
│ │ │ │ ├── collect_env.py
│ │ │ │ ├── config.py
│ │ │ │ ├── contextmanagers.py
│ │ │ │ ├── ext_loader.py
│ │ │ │ ├── fp16_utils.py
│ │ │ │ ├── grid_mask.py
│ │ │ │ ├── hub.py
│ │ │ │ ├── log_buffer.py
│ │ │ │ ├── logger.py
│ │ │ │ ├── logging.py
│ │ │ │ ├── memory.py
│ │ │ │ ├── misc.py
│ │ │ │ ├── path.py
│ │ │ │ ├── position_embedding.py
│ │ │ │ ├── priority.py
│ │ │ │ ├── progressbar.py
│ │ │ │ ├── registry.py
│ │ │ │ ├── runner_utils.py
│ │ │ │ ├── timer.py
│ │ │ │ ├── util_mixins.py
│ │ │ │ ├── version_utils.py
│ │ │ │ └── visual.py
│ │ │ ├── requirements.txt
│ │ │ └── team_code/
│ │ │ ├── pid_controller.py
│ │ │ ├── planner.py
│ │ │ ├── sparsedrive_b2d_agent.py
│ │ │ ├── uniad_b2d_agent.py
│ │ │ ├── vad_b2d_agent.py
│ │ │ └── vad_b2d_agent_visualize.py
│ │ ├── docs/
│ │ │ ├── anno.md
│ │ │ ├── bench2drive_base_1000.json
│ │ │ ├── bench2drive_full+sup_13638.json
│ │ │ └── bench2drive_mini_10.json
│ │ ├── leaderboard/
│ │ │ ├── .pylintrc
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── docs/
│ │ │ │ ├── Gemfile
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── _config.yml
│ │ │ │ ├── _includes/
│ │ │ │ │ ├── footer.html
│ │ │ │ │ ├── google-analytics.html
│ │ │ │ │ ├── head.html
│ │ │ │ │ ├── navbar.html
│ │ │ │ │ ├── read_time.html
│ │ │ │ │ └── scripts.html
│ │ │ │ ├── _layouts/
│ │ │ │ │ ├── default.html
│ │ │ │ │ ├── home.html
│ │ │ │ │ ├── page.html
│ │ │ │ │ └── post.html
│ │ │ │ ├── _sass/
│ │ │ │ │ └── styles.scss
│ │ │ │ ├── about.html
│ │ │ │ ├── assets/
│ │ │ │ │ ├── main.scss
│ │ │ │ │ ├── scripts.js
│ │ │ │ │ └── vendor/
│ │ │ │ │ ├── bootstrap/
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ └── bootstrap.css
│ │ │ │ │ │ └── js/
│ │ │ │ │ │ ├── bootstrap.bundle.js
│ │ │ │ │ │ └── bootstrap.js
│ │ │ │ │ ├── fontawesome-free/
│ │ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ ├── all.css
│ │ │ │ │ │ │ ├── brands.css
│ │ │ │ │ │ │ ├── fontawesome.css
│ │ │ │ │ │ │ ├── regular.css
│ │ │ │ │ │ │ ├── solid.css
│ │ │ │ │ │ │ ├── svg-with-js.css
│ │ │ │ │ │ │ └── v4-shims.css
│ │ │ │ │ │ ├── js/
│ │ │ │ │ │ │ ├── all.js
│ │ │ │ │ │ │ ├── brands.js
│ │ │ │ │ │ │ ├── conflict-detection.js
│ │ │ │ │ │ │ ├── fontawesome.js
│ │ │ │ │ │ │ ├── regular.js
│ │ │ │ │ │ │ ├── solid.js
│ │ │ │ │ │ │ └── v4-shims.js
│ │ │ │ │ │ ├── less/
│ │ │ │ │ │ │ ├── _animated.less
│ │ │ │ │ │ │ ├── _bordered-pulled.less
│ │ │ │ │ │ │ ├── _core.less
│ │ │ │ │ │ │ ├── _fixed-width.less
│ │ │ │ │ │ │ ├── _icons.less
│ │ │ │ │ │ │ ├── _larger.less
│ │ │ │ │ │ │ ├── _list.less
│ │ │ │ │ │ │ ├── _mixins.less
│ │ │ │ │ │ │ ├── _rotated-flipped.less
│ │ │ │ │ │ │ ├── _screen-reader.less
│ │ │ │ │ │ │ ├── _shims.less
│ │ │ │ │ │ │ ├── _stacked.less
│ │ │ │ │ │ │ ├── _variables.less
│ │ │ │ │ │ │ ├── brands.less
│ │ │ │ │ │ │ ├── fontawesome.less
│ │ │ │ │ │ │ ├── regular.less
│ │ │ │ │ │ │ ├── solid.less
│ │ │ │ │ │ │ └── v4-shims.less
│ │ │ │ │ │ └── scss/
│ │ │ │ │ │ ├── _animated.scss
│ │ │ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ │ │ ├── _core.scss
│ │ │ │ │ │ ├── _fixed-width.scss
│ │ │ │ │ │ ├── _icons.scss
│ │ │ │ │ │ ├── _larger.scss
│ │ │ │ │ │ ├── _list.scss
│ │ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ │ │ ├── _screen-reader.scss
│ │ │ │ │ │ ├── _shims.scss
│ │ │ │ │ │ ├── _stacked.scss
│ │ │ │ │ │ ├── _variables.scss
│ │ │ │ │ │ ├── brands.scss
│ │ │ │ │ │ ├── fontawesome.scss
│ │ │ │ │ │ ├── regular.scss
│ │ │ │ │ │ ├── solid.scss
│ │ │ │ │ │ └── v4-shims.scss
│ │ │ │ │ ├── jquery/
│ │ │ │ │ │ ├── jquery.js
│ │ │ │ │ │ └── jquery.slim.js
│ │ │ │ │ └── startbootstrap-clean-blog/
│ │ │ │ │ ├── js/
│ │ │ │ │ │ └── jqBootstrapValidation.js
│ │ │ │ │ └── scss/
│ │ │ │ │ ├── _bootstrap-overrides.scss
│ │ │ │ │ ├── _contact.scss
│ │ │ │ │ ├── _footer.scss
│ │ │ │ │ ├── _global.scss
│ │ │ │ │ ├── _masthead.scss
│ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ ├── _navbar.scss
│ │ │ │ │ ├── _post.scss
│ │ │ │ │ ├── _variables.scss
│ │ │ │ │ └── clean-blog.scss
│ │ │ │ ├── contact.html
│ │ │ │ ├── get_started.html
│ │ │ │ ├── gulpfile.js
│ │ │ │ ├── index.html
│ │ │ │ ├── jekyll-theme-clean-blog.gemspec
│ │ │ │ ├── leaderboard.html
│ │ │ │ ├── posts/
│ │ │ │ │ └── index.html
│ │ │ │ └── submit.html
│ │ │ ├── leaderboard/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── autoagents/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agent_wrapper.py
│ │ │ │ │ ├── autonomous_agent.py
│ │ │ │ │ ├── dummy_agent.py
│ │ │ │ │ ├── human_agent.py
│ │ │ │ │ ├── human_agent_config.txt
│ │ │ │ │ ├── npc_agent.py
│ │ │ │ │ ├── ros1_agent.py
│ │ │ │ │ ├── ros2_agent.py
│ │ │ │ │ └── ros_base_agent.py
│ │ │ │ ├── envs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── sensor_interface.py
│ │ │ │ ├── leaderboard_evaluator.py
│ │ │ │ ├── scenarios/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── route_scenario.py
│ │ │ │ │ └── scenario_manager.py
│ │ │ │ └── utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── checkpoint_tools.py
│ │ │ │ ├── parked_vehicles.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── route_indexer.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ └── statistics_manager.py
│ │ │ ├── requirements.txt
│ │ │ ├── run_leaderboard.sh
│ │ │ ├── scripts/
│ │ │ │ ├── Dockerfile.master
│ │ │ │ ├── Dockerfile.ros
│ │ │ │ ├── agent_entrypoint.sh
│ │ │ │ ├── code_check_and_formatting.sh
│ │ │ │ ├── make_docker.sh
│ │ │ │ ├── manage_scenarios.py
│ │ │ │ ├── merge_statistics.py
│ │ │ │ ├── pretty_print_json.py
│ │ │ │ ├── route_creator.py
│ │ │ │ ├── route_displayer.py
│ │ │ │ ├── route_summarizer.py
│ │ │ │ ├── run_evaluation.sh
│ │ │ │ ├── run_evaluation_debug.sh
│ │ │ │ ├── run_evaluation_multi_admlp.sh
│ │ │ │ ├── run_evaluation_multi_tcp.sh
│ │ │ │ ├── run_evaluation_multi_uniad.sh
│ │ │ │ ├── run_evaluation_multi_uniad_tiny.sh
│ │ │ │ ├── run_evaluation_multi_vad.sh
│ │ │ │ ├── run_evalutaion_multi_sparsedrive.sh
│ │ │ │ ├── scenario_creator.py
│ │ │ │ ├── scenario_orderer.py
│ │ │ │ └── weather_creator.py
│ │ │ └── team_code/
│ │ │ ├── pid_controller.py
│ │ │ ├── planner.py
│ │ │ ├── uniad_b2d_agent.py
│ │ │ ├── vad_b2d_agent.py
│ │ │ └── vad_b2d_agent_visualize.py
│ │ ├── scenario_runner/
│ │ │ ├── .pylintrc
│ │ │ ├── .readthedocs.yml
│ │ │ ├── CARLA_VER
│ │ │ ├── Dockerfile
│ │ │ ├── Docs/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CODE_OF_CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── FAQ.md
│ │ │ │ ├── agent_evaluation.md
│ │ │ │ ├── coding_standard.md
│ │ │ │ ├── creating_new_scenario.md
│ │ │ │ ├── extra.css
│ │ │ │ ├── getting_scenariorunner.md
│ │ │ │ ├── getting_started.md
│ │ │ │ ├── index.md
│ │ │ │ ├── list_of_scenarios.md
│ │ │ │ ├── metrics_module.md
│ │ │ │ ├── openscenario_support.md
│ │ │ │ ├── requirements.txt
│ │ │ │ └── ros_agent.md
│ │ │ ├── Jenkinsfile
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── manual_control.py
│ │ │ ├── metrics_manager.py
│ │ │ ├── mkdocs.yml
│ │ │ ├── no_rendering_mode.py
│ │ │ ├── requirements.txt
│ │ │ ├── scenario_runner.py
│ │ │ └── srunner/
│ │ │ ├── __init__.py
│ │ │ ├── autoagents/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent_wrapper.py
│ │ │ │ ├── autonomous_agent.py
│ │ │ │ ├── dummy_agent.py
│ │ │ │ ├── human_agent.py
│ │ │ │ ├── human_agent_config.txt
│ │ │ │ ├── npc_agent.py
│ │ │ │ ├── ros_agent.py
│ │ │ │ └── sensor_interface.py
│ │ │ ├── examples/
│ │ │ │ ├── ActorFlow.xml
│ │ │ │ ├── CatalogExample.xosc
│ │ │ │ ├── ChangeLane.xml
│ │ │ │ ├── ChangingWeather.xosc
│ │ │ │ ├── ControlLoss.xml
│ │ │ │ ├── CutIn.xml
│ │ │ │ ├── CyclistCrossing.xosc
│ │ │ │ ├── FollowLeadingVehicle.xml
│ │ │ │ ├── FollowLeadingVehicle.xosc
│ │ │ │ ├── FreeRide.xml
│ │ │ │ ├── HighwayCutIn.xml
│ │ │ │ ├── IntersectionCollisionAvoidance.xosc
│ │ │ │ ├── LaneChangeSimple.xosc
│ │ │ │ ├── LeadingVehicle.xml
│ │ │ │ ├── NoSignalJunction.xml
│ │ │ │ ├── ObjectCrossing.xml
│ │ │ │ ├── OppositeDirection.xml
│ │ │ │ ├── OscControllerExample.xosc
│ │ │ │ ├── PedestrianCrossingFront.xosc
│ │ │ │ ├── RouteObstacles.xml
│ │ │ │ ├── RunningRedLight.xml
│ │ │ │ ├── SignalizedJunctionLeftTurn.xml
│ │ │ │ ├── SignalizedJunctionRightTurn.xml
│ │ │ │ ├── Slalom.xosc
│ │ │ │ ├── VehicleOpensDoor.xml
│ │ │ │ ├── VehicleTurning.xml
│ │ │ │ └── catalogs/
│ │ │ │ ├── ControllerCatalog.xosc
│ │ │ │ ├── EnvironmentCatalog.xosc
│ │ │ │ ├── ManeuverCatalog.xosc
│ │ │ │ ├── MiscObjectCatalog.xosc
│ │ │ │ ├── PedestrianCatalog.xosc
│ │ │ │ └── VehicleCatalog.xosc
│ │ │ ├── metrics/
│ │ │ │ ├── examples/
│ │ │ │ │ ├── basic_metric.py
│ │ │ │ │ ├── criteria_filter.py
│ │ │ │ │ ├── distance_between_vehicles.py
│ │ │ │ │ └── distance_to_lane_center.py
│ │ │ │ └── tools/
│ │ │ │ ├── metrics_log.py
│ │ │ │ └── metrics_parser.py
│ │ │ ├── openscenario/
│ │ │ │ ├── 0.9.x/
│ │ │ │ │ ├── OpenSCENARIO_Catalog.xsd
│ │ │ │ │ ├── OpenSCENARIO_TypeDefs.xsd
│ │ │ │ │ ├── OpenSCENARIO_v0.9.1.xsd
│ │ │ │ │ └── migration0_9_1to1_0.xslt
│ │ │ │ └── OpenSCENARIO.xsd
│ │ │ ├── scenarioconfigs/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── openscenario_configuration.py
│ │ │ │ ├── route_scenario_configuration.py
│ │ │ │ └── scenario_configuration.py
│ │ │ ├── scenariomanager/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actorcontrols/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── actor_control.py
│ │ │ │ │ ├── basic_control.py
│ │ │ │ │ ├── carla_autopilot.py
│ │ │ │ │ ├── external_control.py
│ │ │ │ │ ├── npc_vehicle_control.py
│ │ │ │ │ ├── pedestrian_control.py
│ │ │ │ │ ├── simple_vehicle_control.py
│ │ │ │ │ ├── vehicle_longitudinal_control.py
│ │ │ │ │ └── visualizer.py
│ │ │ │ ├── carla_data_provider.py
│ │ │ │ ├── lights_sim.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── scenario_manager.py
│ │ │ │ ├── scenarioatomics/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── atomic_behaviors.py
│ │ │ │ │ ├── atomic_criteria.py
│ │ │ │ │ └── atomic_trigger_conditions.py
│ │ │ │ ├── timer.py
│ │ │ │ ├── traffic_events.py
│ │ │ │ ├── watchdog.py
│ │ │ │ └── weather_sim.py
│ │ │ ├── scenarios/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actor_flow.py
│ │ │ │ ├── background_activity.py
│ │ │ │ ├── background_activity_parametrizer.py
│ │ │ │ ├── basic_scenario.py
│ │ │ │ ├── blocked_intersection.py
│ │ │ │ ├── change_lane.py
│ │ │ │ ├── construction_crash_vehicle.py
│ │ │ │ ├── control_loss.py
│ │ │ │ ├── cross_bicycle_flow.py
│ │ │ │ ├── cut_in.py
│ │ │ │ ├── cut_in_with_static_vehicle.py
│ │ │ │ ├── follow_leading_vehicle.py
│ │ │ │ ├── freeride.py
│ │ │ │ ├── green_traffic_light.py
│ │ │ │ ├── hard_break.py
│ │ │ │ ├── highway_cut_in.py
│ │ │ │ ├── invading_turn.py
│ │ │ │ ├── left_turn_enter_flow.py
│ │ │ │ ├── maneuver_opposite_direction.py
│ │ │ │ ├── no_signal_junction_crossing.py
│ │ │ │ ├── object_crash_intersection.py
│ │ │ │ ├── object_crash_vehicle.py
│ │ │ │ ├── open_scenario.py
│ │ │ │ ├── opposite_vehicle_taking_priority.py
│ │ │ │ ├── other_leading_vehicle.py
│ │ │ │ ├── parking_cut_in.py
│ │ │ │ ├── parking_exit.py
│ │ │ │ ├── pedestrian_crossing.py
│ │ │ │ ├── route_obstacles.py
│ │ │ │ ├── route_scenario.py
│ │ │ │ ├── sequentially_lane_change.py
│ │ │ │ ├── signalized_junction_left_turn.py
│ │ │ │ ├── signalized_junction_right_turn.py
│ │ │ │ ├── t_junction.py
│ │ │ │ ├── vanilla_turn.py
│ │ │ │ ├── vehicle_opens_door.py
│ │ │ │ └── yield_to_emergency_vehicle.py
│ │ │ ├── tests/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── carla_mocks/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agents/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── navigation/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── basic_agent.py
│ │ │ │ │ │ │ ├── behavior_agent.py
│ │ │ │ │ │ │ ├── behavior_types.py
│ │ │ │ │ │ │ ├── controller.py
│ │ │ │ │ │ │ ├── global_route_planner.py
│ │ │ │ │ │ │ └── local_planner.py
│ │ │ │ │ │ └── tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── misc.py
│ │ │ │ │ └── carla.py
│ │ │ │ └── test_xosc_load.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── background_manager.py
│ │ │ │ ├── openscenario_parser.py
│ │ │ │ ├── py_trees_port.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ ├── scenario_helper.py
│ │ │ │ └── scenario_parser.py
│ │ │ └── utilities/
│ │ │ └── code_check_and_formatting.sh
│ │ └── tools/
│ │ ├── ability_benchmark.py
│ │ ├── check_carla.md
│ │ ├── clean_carla.sh
│ │ ├── data_collect.py
│ │ ├── download_mini.sh
│ │ ├── efficiency_smoothness_benchmark.py
│ │ ├── gen_hdmap.py
│ │ ├── generate_video.py
│ │ ├── merge_route_json.py
│ │ ├── split_xml.py
│ │ ├── utils.py
│ │ └── visualize.py
│ └── quick_start.md
└── open_loop/
├── docs/
│ └── quick_start.md
├── nuscenes_infos_val_hrad_planing_scene.pkl
├── projects/
│ ├── configs/
│ │ ├── MomAD_small_stage1_roboAD.py
│ │ ├── MomAD_small_stage2_roboAD.py
│ │ ├── MomAD_small_stage2_roboAD_6s.py
│ │ ├── MomAD_small_trainval_1_10_stage1_test.py
│ │ ├── sparsedrive_small_stage1.py
│ │ ├── sparsedrive_small_stage1_roboAD.py
│ │ ├── sparsedrive_small_stage2.py
│ │ ├── sparsedrive_small_stage2_6s.py
│ │ └── sparsedrive_small_trainval_1_10_stage1_test.py
│ └── mmdet3d_plugin/
│ ├── __init__.py
│ ├── apis/
│ │ ├── __init__.py
│ │ ├── mmdet_train.py
│ │ ├── test.py
│ │ └── train.py
│ ├── core/
│ │ ├── box3d.py
│ │ └── evaluation/
│ │ ├── __init__.py
│ │ └── eval_hooks.py
│ ├── datasets/
│ │ ├── __init__.py
│ │ ├── builder.py
│ │ ├── evaluation/
│ │ │ ├── __init__.py
│ │ │ ├── map/
│ │ │ │ ├── AP.py
│ │ │ │ ├── distance.py
│ │ │ │ └── vector_eval.py
│ │ │ ├── motion/
│ │ │ │ ├── motion_eval_uniad.py
│ │ │ │ └── motion_utils.py
│ │ │ └── planning/
│ │ │ ├── planning_eval.py
│ │ │ ├── planning_eval_roboAD.py
│ │ │ └── planning_eval_roboAD_6s.py
│ │ ├── map_utils/
│ │ │ ├── nuscmap_extractor.py
│ │ │ └── utils.py
│ │ ├── nuscenes_3d_dataset.py
│ │ ├── nuscenes_3d_dataset_roboAD.py
│ │ ├── nuscenes_3d_dataset_roboAD_6s.py
│ │ ├── pipelines/
│ │ │ ├── __init__.py
│ │ │ ├── augment.py
│ │ │ ├── loading.py
│ │ │ ├── transform.py
│ │ │ └── vectorize.py
│ │ ├── samplers/
│ │ │ ├── __init__.py
│ │ │ ├── distributed_sampler.py
│ │ │ ├── group_in_batch_sampler.py
│ │ │ ├── group_sampler.py
│ │ │ └── sampler.py
│ │ └── utils.py
│ ├── models/
│ │ ├── __init__.py
│ │ ├── attention.py
│ │ ├── base_target.py
│ │ ├── blocks.py
│ │ ├── detection3d/
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── detection3d_blocks.py
│ │ │ ├── detection3d_head.py
│ │ │ ├── detection3d_head_roboAD.py
│ │ │ ├── feature_enhance.py
│ │ │ ├── losses.py
│ │ │ └── target.py
│ │ ├── grid_mask.py
│ │ ├── instance_bank.py
│ │ ├── map/
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── loss.py
│ │ │ ├── map_blocks.py
│ │ │ ├── match_cost.py
│ │ │ └── target.py
│ │ ├── motion/
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── instance_queue.py
│ │ │ ├── motion_blocks.py
│ │ │ ├── motion_planning_head.py
│ │ │ ├── motion_planning_head_roboAD.py
│ │ │ ├── motion_planning_head_roboAD_6s.py
│ │ │ ├── next_token_prediction.py
│ │ │ └── target.py
│ │ ├── sparsedrive.py
│ │ └── sparsedrive_head.py
│ └── ops/
│ ├── __init__.py
│ ├── deformable_aggregation.py
│ ├── setup.py
│ └── src/
│ ├── deformable_aggregation.cpp
│ └── deformable_aggregation_cuda.cu
├── requirement.txt
├── scripts/
│ ├── create_data.sh
│ ├── kmeans.sh
│ ├── test.sh
│ ├── test_roboAD.sh
│ ├── train.sh
│ ├── train_6s.sh
│ ├── train_roboAD.sh
│ └── visualize.sh
├── test.py
├── tools/
│ ├── benchmark.py
│ ├── data_converter/
│ │ ├── __init__.py
│ │ ├── nuscenes_converter.py
│ │ ├── nuscenes_converter_1_10.py
│ │ ├── nuscenes_converter_6s.py
│ │ └── nuscenes_converter_hrad_planing_scene.py
│ ├── dist_test.sh
│ ├── dist_train.sh
│ ├── fuse_conv_bn.py
│ ├── kmeans/
│ │ ├── kmeans_det.py
│ │ ├── kmeans_map.py
│ │ ├── kmeans_motion.py
│ │ └── kmeans_plan.py
│ ├── test.py
│ ├── train.py
│ ├── train_single.py
│ └── visualization/
│ ├── bev_render.py
│ ├── cam_render.py
│ └── visualize.py
└── visualize.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.pyc
*.npy
*.pth
*.whl
*.swp
data/
ckpt/
work_dirs*/
dist_test/
vis/
val/
lib/
*.egg-info
build/
__pycache__/
*.so
job_scripts/
temp_ops/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2024 swc-17
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# [CVPR2025] Don't Shake the Wheel: Momentum-Aware Planning in End-to-End Autonomous Driving
<div align="justify">
This is the official repository of [**MomAD**](https://arxiv.org/abs/2503.03125).
:fire: Our work has been accepted by CVPR 2025!
</div>
<div align="center">
<img src="open_loop/vis_5(3).png" />
</div>
## Abstract
<div align="justify">
End-to-end autonomous driving frameworks facilitate seamless integration of perception and planning but often rely on one-shot trajectory prediction, lacking temporal consistency and long-horizon awareness. This limitation can lead to unstable control, undesirable shifts, and vulnerability to occlusions in single-frame perception. In this work, we propose the Momentum-Aware Driving (MomAD) framework to address these issues by introducing trajectory momentum and perception momentum to stabilize and refine trajectory prediction. MomAD consists of two key components: (1) Topological Trajectory Matching (TTM), which uses Hausdorff Distance to align predictions with prior paths and ensure temporal coherence, and (2) Momentum Planning Interactor (MPI), which cross-attends the planning query with historical spatial-temporal context. Additionally, an encoder-decoder module introduces feature perturbations to increase robustness against perception noise. To quantify planning stability, we propose the Trajectory Prediction Consistency (TPC) metric, showing that MomAD achieves long-term consistency (>3s) on the nuScenes dataset. We further curate the challenging Turning-nuScenes validation set, focused on turning scenarios, where MomAD surpasses state-of-the-art methods, highlighting its enhanced stability and responsiveness in dynamic driving conditions.
</div>
<div align="justify">
:fire: Contributions:
* **Momentum Planning Concept.** We propose the concept of momentum planning in multi-modal trajectory planning, drawing an analogy to human driving behavior. We provide theoretical evidence to demonstrate the effectiveness of our momentum planning in addressing temporal consistency in end-to-end autonomous driving
* **MomAD Framework.** We propose MomAD, an end-to-end autonomous driving framework that employs momentum planning. It optimizes current trajectory planning by integrating historical planning guidance, significantly improving trajectory consistency and stability in autonomous driving.
* **Turning NuScenes Validation Dataset.** We create the Turning-nuScenes val dataset, derived from the nuScenes full validation dataset. This new dataset focuses on turning scenarios, providing a specialized benchmark for evaluating the performance of autonomous driving systems in complex driving situations.
* **Trajectory Prediction Consistency (TPC) Metric.** We introduce the TPC metric to quantitatively assess the consistency of trajectory predictions in existing end-to-end autonomous driving methods, addressing a critical gap in the evaluation of trajectory planning.
* **Performance Evaluation.** Through extensive experiments on the nuScenes dataset, we demonstrate that MomAD significantly outperforms SOTA methods in terms of trajectory consistency and stability, highlighting its effectiveness in tackling challenges within autonomous driving planning. We evaluated the results of long trajectory predictions, specifically at 4, 5, and 6 seconds, which are critical for ensuring the stability of autonomous driving systems.
</div>
## Method
<center>
<img style="border-radius: 0.3125em;
box-shadow: 0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.08);"
src="main.png" width="1000">
<br>
<div style="color:orange; border-bottom: 1px solid #d9d9d9;
display: inline-block;
color: #999;
padding: 2px;">The overall architecture of MomAD. MomAD, as a multi-model trajectory end-to-end autonomous driving method, first encodes multi-view images into feature maps, then learns a sparse scene representation through sparse perception, and finally performs a momentum-guided motion planner to accomplish the planning task. The momentum planning module integrates historical planning to inform current planning, effectively addressing the issue of maximum score deviation in multi-modal trajectories.</div>
</center>
## Results in paper
### Open-loop mertics
- Planning results on [nuScenes](https://github.com/nutonomy/nuscenes-devkit).
- MomAD 3s stage2: [ckpt](https://huggingface.co/ZI-YING/MomAD_nuScenes_stage2_planing_3s)
| Method | Backbone | L2 (m) 1s | L2 (m) 2s | L2 (m) 3s | L2 (m) Avg | Col. (%) 1s | Col. (%) 2s | Col. (%) 3s | Col. (%) Avg | TPC (m) 1s | TPC (m) 2s | TPC (m) 3s | TPC (m) Avg | FPS |
| :---: | :---:| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |:---: |
| UniAD | ResNet101 | 0.45 | 0.70 | 1.04 |0.73 | 0.62 | 0.58 | 0.63 | 0.61 |0.41 | 0.68 | 0.97 | 0.68 |1.8 (A100)|
SparseDrive |ResNet50| **0.29** | 0.58 | 0.96 | 0.61 | **0.01** | **0.05** | 0.18 | **0.08** | **0.30** | 0.57 | 0.85 | 0.57 | **9.0 (4090)**|
**MomAD (Ours)** | ResNet50 | 0.31 | **0.57** | **0.91** | **0.60** | **0.01** | **0.05** | **0.22** | 0.09 | **0.30** | **0.53** | **0.78** | **0.54** | 7.8 (4090) |
- Planning results for long trajectory prediction on [nuScenes](https://github.com/nutonomy/nuscenes-devkit). We train 10 epochs on 6s trajectories and test on 6s trajectories.
| Method | L2 (m) 4s | L2 (m) 5s | L2 (m) 6s | Col. (%) 4s | Col. (%) 5s | Col. (%) 6s | TPC (m) 4s | TPC (m) 5s | TPC (m) 6s |
| :---: | :---:| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
SparseDrive | 1.75|2.32|2.95| 0.87| 1.54| 2.33| 1.33| 1.66| 1.99|
**MomAD (Ours)** | **1.67**| **1.98**| **2.45**| **0.83**| **1.43**| **2.13**| **1.19**| **1.45**| **1.61**|
- Planning results on the Turning-nuScenes validation dataset [Turning-nuScenes ](/open_loop/nuscenes_infos_val_hrad_planing_scene.pkl). We train 10 epochs on 6s trajectories and test on 6s trajectories.
| Method |L2 (m) 1s | L2 (m) 2s | L2 (m) 3s | Col. (%) 1s | Col. (%) 2s | Col. (%) 3s | TPC (m) 1s | TPC (m) 2s | TPC (m) 3s |
| :---: | :---:| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
SparseDrive |0.35 | 0.77 | 1.46 | 0.86 | 0.04 | 0.17 | 0.98 | 0.40 | 0.34 | 0.70 | 1.33 | 0.79|
**MomAD (Ours)** | 0.33| 0.70| 1.24| 0.76| 0.03| 0.13| 0.79| 0.32| 0.32| 0.54| 1.05| 0.63|
### Close-loop mertics (**weight** and **pkl**)
- Open-loop and Closed-loop Results of E2E-AD Methods in Bench2Drive (V0.0.3)} under base training set. `mmt' denotes the extension of VAD on Multi-modal Trajectory. * denotes our re-implementation. The metircs momad used follows [Bench2Drive](https://github.com/Thinklab-SJTU/Bench2Drive)
- The **weight(stage-1)**, **data pkl** and**kmenas** of MomAD in Bench2Drive:[**MomAD**](https://pan.baidu.com/s/1qBVdpXUohfveU8au9ShAyg?pwd=u36f)
<table border="1">
<thead>
<tr>
<th rowspan="2">Method</th>
<th colspan="1">Open-loop Metric</th>
<th colspan="4">Closed-loop Metric</th>
</tr>
<tr>
<th>Avg. L2 ↓</th>
<th>DS ↑</th>
<th>SR(%) ↑</th>
<th>Effi ↑</th>
<th>Comf ↑</th>
</tr>
</thead>
<tbody>
<tr>
<td>VAD</td>
<td>0.91</td>
<td>42.35</td>
<td>15.00</td>
<td>157.94</td>
<td>46.01</td>
</tr>
<tr>
<td>VAD mmt*</td>
<td>0.89</td>
<td>42.87</td>
<td>15.91</td>
<td>158.12</td>
<td>47.22</td>
</tr>
<tr>
<td>Our MomAD (Euclidean)</td>
<td>0.84</td>
<td>46.12</td>
<td>17.45</td>
<td>173.35</td>
<td>50.98</td>
</tr>
<tr>
<td>Our MomAD</td>
<td>0.85</td>
<td>45.35</td>
<td>17.44</td>
<td>162.09</td>
<td>49.34</td>
</tr>
<tr>
<td>SparcDrive*</td>
<td>0.87</td>
<td>44.54</td>
<td>16.71</td>
<td>170.21</td>
<td>48.63</td>
</tr>
<tr>
<td>Our MomAD (Euclidean)</td>
<td>0.84</td>
<td>46.12</td>
<td>17.45</td>
<td>173.35</td>
<td>50.98</td>
</tr>
<tr>
<td>Our MomAD</td>
<td>0.82</td>
<td>47.91</td>
<td>18.11</td>
<td>174.91</td>
<td>51.20</td>
</tr>
</tbody>
</table>
### Close_loop Vis
<p align="left">
<img src = "./close_loop/video_show.gif" width="60%">
</p>
### Robustness evaluation
- Robustness analysis on [nuScenes-C](https://github.com/thu-ml/3D_Corruptions_AD)
<table border="1">
<thead>
<tr>
<th rowspan="2">Setting</th>
<th rowspan="2">Method</th>
<th colspan="2">Detection</th>
<th colspan="1">Tracking</th>
<th colspan="1">Mapping</th>
<th colspan="1">Motion</th>
<th colspan="3">Planning</th>
</tr>
<tr>
<th>mAP ↑</th>
<th>NDS ↑</th>
<th>AMOTA ↑</th>
<th>mAP ↑</th>
<th>mADE ↓</th>
<th>L2 ↓</th>
<th>Col. ↓</th>
<th>TPC ↓</th>
</tr>
</thead>
<tbody>
<tr>
<td>Clean</td>
<td>SparseDrive</td>
<td>0.418</td>
<td>0.525</td>
<td>0.386</td>
<td>55.1</td>
<td>0.62</td>
<td>0.61</td>
<td>0.08</td>
<td>0.57</td>
</tr>
<tr>
<td>Clean</td>
<td>Our MomAD</td>
<td>0.423</td>
<td>0.531</td>
<td>0.391</td>
<td>55.9</td>
<td>0.61</td>
<td>0.60</td>
<td>0.09</td>
<td>0.54</td>
</tr>
<tr>
<td>Snow</td>
<td>SparseDrive</td>
<td>0.091</td>
<td>0.111</td>
<td>0.102</td>
<td>16.0</td>
<td>0.98</td>
<td>0.88</td>
<td>0.32</td>
<td>0.82</td>
</tr>
<tr>
<td>Snow</td>
<td>Our MomAD</td>
<td>0.154</td>
<td>0.173</td>
<td>0.166</td>
<td>20.9</td>
<td>0.76</td>
<td>0.73</td>
<td>0.16</td>
<td>0.68</td>
</tr>
<tr>
<td>Fog</td>
<td>SparseDrive</td>
<td>0.141</td>
<td>0.159</td>
<td>0.154</td>
<td>18.8</td>
<td>0.91</td>
<td>0.86</td>
<td>0.41</td>
<td>0.80</td>
</tr>
<tr>
<td>Fog</td>
<td>Our MomAD</td>
<td>0.197</td>
<td>0.197</td>
<td>0.206</td>
<td>24.9</td>
<td>0.73</td>
<td>0.71</td>
<td>0.18</td>
<td>0.67</td>
</tr>
<tr>
<td>Rain</td>
<td>SparseDrive</td>
<td>0.128</td>
<td>0.140</td>
<td>0.193</td>
<td>19.4</td>
<td>0.97</td>
<td>0.93</td>
<td>0.46</td>
<td>0.92</td>
</tr>
<tr>
<td>Rain</td>
<td>Our MomAD</td>
<td>0.207</td>
<td>0.213</td>
<td>0.266</td>
<td>25.2</td>
<td>0.76</td>
<td>0.71</td>
<td>0.21</td>
<td>0.71</td>
</tr>
</tbody>
</table>
## Trajectory Prediction Consistency (TPC) metric
To evaluate the planning stability of MomAD, we propose a new [Trajectory Prediction Consistency (TPC) metric](/open_loop/projects/mmdet3d_plugin/datasets/evaluation/planning/planning_eval_roboAD_6s.py) to measure consistency between predicted and historical trajectories.
## How to generate a 6s nuScenes trajectory dataset?
```
python tools/data_converter/nuscenes_converter_6s.py nuscenes \
--root-path ./data/nuscenes \
--canbus ./data/nuscenes \
--out-dir ./data/infos/ \
--extra-tag nuscenes \
--version v1.0
```
## Quick Start
[Quick Start for Open_loop](open_loop/docs/quick_start.md)
[Quick start for Close_loop](close_loop/quick_start.md)
## Citation
If you find MomAD is useful in your research or applications, please consider giving us a star 🌟 and citing it by the following BibTeX entry.
```
@article{song2025momad,
title={Don't Shake the Wheel: Momentum-Aware Planning in End-to-End Autonomous Driving},
author={Ziying Song and Caiyan Jia and Lin Liu and Hongyu Pan and Yongchang Zhang and Junming Wang and Xingyu Zhang and Shaoqing Xu and Lei Yang and Yadan Luo},
year={2025},
eprint={2503.03125},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2503.03125},
}
```
## Acknowledgement
- [SparseDrive](https://github.com/swc-17/SparseDrive)
- [UniAD](https://github.com/OpenDriveLab/UniAD)
- [VAD](https://github.com/hustvl/VAD)
- [mmdet3d](https://github.com/open-mmlab/mmdetection3d)
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/momad_small_b2d_stage1.py
================================================
# ================ base config ===================
plugin = True
plugin_dir = "mmdet3d_plugin/"
dist_params = dict(backend="nccl")
log_level = "INFO"
work_dir = None
total_batch_size = 64
num_gpus = 8
batch_size = total_batch_size // num_gpus
num_iters_per_epoch = int(234769 // (num_gpus * batch_size))
num_epochs = 10
checkpoint_epoch_interval = 2
checkpoint_config = dict(
interval=num_iters_per_epoch * checkpoint_epoch_interval
)
log_config = dict(
interval=51,
hooks=[
dict(type="TextLoggerHook", by_epoch=False),
dict(type="TensorboardLoggerHook"),
],
)
load_from = None
resume_from = None
workflow = [("train", 1)]
fp16 = dict(loss_scale=32.0)
input_shape = (704, 384)
# ================== model ========================
class_names = [
'car',
'van',
'truck',
'bicycle',
'traffic_sign',
'traffic_cone',
'traffic_light',
'pedestrian',
'others',
]
map_class_names = [
'Broken',
'Solid',
'SolidSolid',
# 'Center',
# 'TrafficLight',
# 'StopSign',
]
NameMapping = {
#=================vehicle=================
# bicycle
'vehicle.bh.crossbike': 'bicycle',
"vehicle.diamondback.century": 'bicycle',
"vehicle.gazelle.omafiets": 'bicycle',
# car
"vehicle.chevrolet.impala": 'car',
"vehicle.dodge.charger_2020": 'car',
"vehicle.dodge.charger_police": 'car',
"vehicle.dodge.charger_police_2020": 'car',
"vehicle.lincoln.mkz_2017": 'car',
"vehicle.lincoln.mkz_2020": 'car',
"vehicle.mini.cooper_s_2021": 'car',
"vehicle.mercedes.coupe_2020": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.nissan.patrol_2021": 'car',
"vehicle.audi.tt": 'car',
"vehicle.audi.etron": 'car',
"vehicle.ford.crown": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.tesla.model3": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/FordCrown/SM_FordCrown_parked.SM_FordCrown_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Charger/SM_ChargerParked.SM_ChargerParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Lincoln/SM_LincolnParked.SM_LincolnParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/MercedesCCC/SM_MercedesCCC_Parked.SM_MercedesCCC_Parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Mini2021/SM_Mini2021_parked.SM_Mini2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/NissanPatrol2021/SM_NissanPatrol2021_parked.SM_NissanPatrol2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/TeslaM3/SM_TeslaM3_parked.SM_TeslaM3_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": 'car',
# bus
# van
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": "van",
"vehicle.ford.ambulance": "van",
# truck
"vehicle.carlamotors.firetruck": 'truck',
#=========================================
#=================traffic sign============
# traffic.speed_limit
"traffic.speed_limit.30": 'traffic_sign',
"traffic.speed_limit.40": 'traffic_sign',
"traffic.speed_limit.50": 'traffic_sign',
"traffic.speed_limit.60": 'traffic_sign',
"traffic.speed_limit.90": 'traffic_sign',
"traffic.speed_limit.120": 'traffic_sign',
"traffic.stop": 'traffic_sign',
"traffic.yield": 'traffic_sign',
"traffic.traffic_light": 'traffic_light',
#=========================================
#===================Construction===========
"static.prop.warningconstruction" : 'traffic_cone',
"static.prop.warningaccident": 'traffic_cone',
"static.prop.trafficwarning": "traffic_cone",
#===================Construction===========
"static.prop.constructioncone": 'traffic_cone',
#=================pedestrian==============
"walker.pedestrian.0001": 'pedestrian',
"walker.pedestrian.0004": 'pedestrian',
"walker.pedestrian.0005": 'pedestrian',
"walker.pedestrian.0007": 'pedestrian',
"walker.pedestrian.0013": 'pedestrian',
"walker.pedestrian.0014": 'pedestrian',
"walker.pedestrian.0017": 'pedestrian',
"walker.pedestrian.0018": 'pedestrian',
"walker.pedestrian.0019": 'pedestrian',
"walker.pedestrian.0020": 'pedestrian',
"walker.pedestrian.0022": 'pedestrian',
"walker.pedestrian.0025": 'pedestrian',
"walker.pedestrian.0035": 'pedestrian',
"walker.pedestrian.0041": 'pedestrian',
"walker.pedestrian.0046": 'pedestrian',
"walker.pedestrian.0047": 'pedestrian',
# ==========================================
"static.prop.dirtdebris01": 'others',
"static.prop.dirtdebris02": 'others',
}
num_classes = len(class_names)
num_map_classes = len(map_class_names)
roi_size = (30, 60)
num_sample = 20
fut_ts = 6
fut_mode = 6
ego_fut_ts = 6
ego_fut_mode = 6
num_cmd = 6
queue_length = 4 # history + current
embed_dims = 256
num_groups = 8
num_decoder = 6
num_single_frame_decoder = 1
num_single_frame_decoder_map = 1
use_deformable_func = True # mmdet3d_plugin/ops/setup.py needs to be executed
strides = [4, 8, 16, 32]
num_levels = len(strides)
num_depth_layers = 3
drop_out = 0.1
temporal = True
temporal_map = True
decouple_attn = True
decouple_attn_map = False
decouple_attn_motion = True
with_quality_estimation = True
task_config = dict(
with_det=True,
with_map=True,
with_motion_plan=False,
)
model = dict(
type="MomAD",
use_grid_mask=True,
use_deformable_func=use_deformable_func,
img_backbone=dict(
type="ResNet",
depth=50,
num_stages=4,
frozen_stages=-1,
norm_eval=False,
style="pytorch",
with_cp=True,
out_indices=(0, 1, 2, 3),
norm_cfg=dict(type="BN", requires_grad=True),
pretrained="ckpt/resnet50-19c8e357.pth",
),
img_neck=dict(
type="FPN",
num_outs=num_levels,
start_level=0,
out_channels=embed_dims,
add_extra_convs="on_output",
relu_before_extra_convs=True,
in_channels=[256, 512, 1024, 2048],
),
depth_branch=dict( # for auxiliary supervision only
type="DenseDepthNet",
embed_dims=embed_dims,
num_depth_layers=num_depth_layers,
loss_weight=0.2,
),
head=dict(
type="SparseDriveHead",
task_config=task_config,
det_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn,
instance_bank=dict(
type="InstanceBank",
num_anchor=900,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_det_900.npy",
anchor_handler=dict(type="SparseBox3DKeyPointsGenerator"),
num_temp_instances=600 if temporal else -1,
confidence_decay=0.9,
feat_grad=False,
),
anchor_encoder=dict(
type="SparseBox3DEncoder",
vel_dims=3,
embed_dims=[128, 32, 32, 64] if decouple_attn else 256,
mode="cat" if decouple_attn else "add",
output_fc=not decouple_attn,
in_loops=1,
out_loops=4 if decouple_attn else 2,
),
num_single_frame_decoder=num_single_frame_decoder,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder)
)[2:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparseBox3DKeyPointsGenerator",
num_learnable_pts=6,
fix_scale=[
[0, 0, 0],
[0.45, 0, 0],
[-0.45, 0, 0],
[0, 0.45, 0],
[0, -0.45, 0],
[0, 0, 0.45],
[0, 0, -0.45],
],
),
),
refine_layer=dict(
type="SparseBox3DRefinementModule",
embed_dims=embed_dims,
num_cls=num_classes,
refine_yaw=True,
with_quality_estimation=with_quality_estimation,
),
sampler=dict(
type="SparseBox3DTarget",
num_dn_groups=0,
num_temp_dn_groups=0,
dn_noise_scale=[2.0] * 3 + [0.5] * 7,
max_dn_gt=32,
add_neg_dn=True,
cls_weight=2.0,
box_weight=0.25,
reg_weights=[2.0] * 3 + [0.5] * 3 + [0.0] * 4,
cls_wise_reg_weights={
class_names.index("traffic_cone"): [
2.0,
2.0,
2.0,
1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
1.0,
],
},
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=2.0,
),
loss_reg=dict(
type="SparseBox3DLoss",
loss_box=dict(type="L1Loss", loss_weight=0.25),
loss_centerness=dict(type="CrossEntropyLoss", use_sigmoid=True),
loss_yawness=dict(type="GaussianFocalLoss"),
# cls_allow_reverse=[class_names.index("barrier")],
),
decoder=dict(type="SparseBox3DDecoder"),
reg_weights=[2.0] * 3 + [1.0] * 7,
),
map_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn_map,
instance_bank=dict(
type="InstanceBank",
num_anchor=100,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_map_100.npy",
anchor_handler=dict(type="SparsePoint3DKeyPointsGenerator"),
num_temp_instances=0 if temporal_map else -1,
confidence_decay=0.9,
feat_grad=True,
),
anchor_encoder=dict(
type="SparsePoint3DEncoder",
embed_dims=embed_dims,
num_sample=num_sample,
),
num_single_frame_decoder=num_single_frame_decoder_map,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder_map
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder_map)
)[:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal_map
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparsePoint3DKeyPointsGenerator",
embed_dims=embed_dims,
num_sample=num_sample,
num_learnable_pts=3,
fix_height=(0, 0.25, -0.25, 0.5, -0.5),
ground_height=-1.84, # ground height in lidar frame
),
),
refine_layer=dict(
type="SparsePoint3DRefinementModule",
embed_dims=embed_dims,
num_sample=num_sample,
num_cls=num_map_classes,
),
sampler=dict(
type="SparsePoint3DTarget",
assigner=dict(
type='HungarianLinesAssigner',
cost=dict(
type='MapQueriesCost',
cls_cost=dict(type='FocalLossCost', weight=1.0),
reg_cost=dict(type='LinesL1Cost', weight=10.0, beta=0.01, permute=True),
),
),
num_cls=num_map_classes,
num_sample=num_sample,
roi_size=roi_size,
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0,
),
loss_reg=dict(
type="SparseLineLoss",
loss_line=dict(
type='LinesL1Loss',
loss_weight=10.0,
beta=0.01,
),
num_sample=num_sample,
roi_size=roi_size,
),
decoder=dict(
type="SparsePoint3DDecoder",
score_threshold=0.5,
),
reg_weights=[1.0] * 40,
gt_cls_key="gt_map_labels",
gt_reg_key="gt_map_pts",
gt_id_key="map_instance_id",
with_instance_id=False,
task_prefix='map',
),
motion_plan_head=dict(
type='MomADMotionPlanningHead',
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
motion_anchor=f'data/kmeans/kmeans_motion_{fut_mode}.npy',
plan_anchor=f'data/kmeans/kmeans_plan_{ego_fut_mode}.npy',
embed_dims=embed_dims,
decouple_attn=decouple_attn_motion,
instance_queue=dict(
type="InstanceQueue",
embed_dims=embed_dims,
queue_length=queue_length,
tracking_threshold=0.2,
feature_map_scale=(input_shape[1]/strides[-1], input_shape[0]/strides[-1]),
),
operation_order=(
[
"temp_gnn",
"gnn",
"norm",
"cross_gnn",
"norm",
"ffn",
"norm",
] * 3 +
[
"refine",
]
),
temp_graph_model=dict(
type="MultiheadAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
cross_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 2,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
refine_layer=dict(
type="MotionPlanningRefinementModule",
embed_dims=embed_dims,
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
),
motion_sampler=dict(
type="MotionTarget",
),
motion_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.2
),
motion_loss_reg=dict(type='L1Loss', loss_weight=0.2),
planning_sampler=dict(
type="PlanningTarget",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
),
plan_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.5,
),
plan_loss_reg=dict(type='L1Loss', loss_weight=1.0),
plan_loss_status=dict(type='L1Loss', loss_weight=1.0),
motion_decoder=dict(type="SparseBox3DMotionDecoder"),
planning_decoder=dict(
type="HierarchicalPlanningDecoder",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_rescore=True,
),
num_det=50,
num_map=10,
),
),
)
# ================== data ========================
dataset_type = "B2D3DDataset"
data_root = "data/bench2drive/"
anno_root = "data/infos/"
file_client_args = dict(backend="disk")
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True
)
train_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(
type="DenseDepthMapGenerator",
downsample=strides[:num_depth_layers],
),
dict(type="BBoxRotation"),
dict(type="PhotoMetricDistortionMultiViewImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=False,
normalize=False,
sample_num=num_sample,
permute=True,
),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
"gt_depth",
"focal",
"gt_bboxes_3d",
"gt_labels_3d",
'gt_map_labels',
'gt_map_pts',
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
'ego_status',
'ego_his_trajs',
],
meta_keys=["T_global", "T_global_inv", "timestamp", "instance_id"],
),
]
test_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
'ego_status',
'gt_ego_fut_cmd',
'ego_his_trajs',
],
meta_keys=["T_global", "T_global_inv", "timestamp"],
),
]
eval_pipeline = [
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=True,
normalize=False,
),
dict(
type='Collect',
keys=[
'vectors',
"gt_bboxes_3d",
"gt_labels_3d",
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
# 'fut_boxes'
],
meta_keys=['token', 'timestamp']
),
]
input_modality = dict(
use_lidar=False,
use_camera=True,
use_radar=False,
use_map=False,
use_external=False,
)
data_basic_config = dict(
type=dataset_type,
data_root=data_root,
classes=class_names,
map_classes=map_class_names,
name_mapping=NameMapping,
modality=input_modality,
sample_interval=5,
past_frames=6,
future_frames=6,
)
eval_config = dict(
**data_basic_config,
ann_file=anno_root + 'b2d_infos_val.pkl',
pipeline=eval_pipeline,
test_mode=True,
)
data_aug_conf = {
"resize_lim": (0.40, 0.47),
"final_dim": input_shape[::-1],
"bot_pct_lim": (0.0, 0.0),
"rot_lim": (-5.4, 5.4),
"H": 900,
"W": 1600,
"rand_flip": True,
"rot3d_range": [0, 0],
}
data = dict(
samples_per_gpu=batch_size,
workers_per_gpu=batch_size,
train=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_train.pkl",
pipeline=train_pipeline,
test_mode=False,
data_aug_conf=data_aug_conf,
with_seq_flag=True,
sequences_split_num=5,
keep_consistent_seq_aug=True,
),
val=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
test=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
)
# ================== training ========================
optimizer = dict(
type="AdamW",
lr=3e-4,
weight_decay=0.001,
paramwise_cfg=dict(
custom_keys={
"img_backbone": dict(lr_mult=0.1),
}
),
)
optimizer_config = dict(grad_clip=dict(max_norm=25, norm_type=2))
lr_config = dict(
policy="CosineAnnealing",
warmup="linear",
warmup_iters=500,
warmup_ratio=1.0 / 3,
min_lr_ratio=1e-3,
)
runner = dict(
type="IterBasedRunner",
max_iters=num_iters_per_epoch * num_epochs,
)
# ================== eval ========================
eval_mode = dict(
with_det=True,
with_tracking=False,
with_map=False,
with_motion=False,
with_planning=False,
tracking_threshold=0.2,
motion_threshhold=0.2,
)
evaluation = dict(
interval=num_iters_per_epoch*checkpoint_epoch_interval,
eval_mode=eval_mode,
)
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/momad_small_b2d_stage2_multiplan.py
================================================
# ================ base config ===================
version = "mini"
version = "base"
length = {'base': 234769, 'mini': 1933}
plugin = True
plugin_dir = "mmdet3d_plugin/"
dist_params = dict(backend="nccl")
log_level = "INFO"
work_dir = None
total_batch_size = 48
num_gpus = 8
batch_size = total_batch_size // num_gpus
num_iters_per_epoch = int(length[version] // (num_gpus * batch_size))
num_epochs = 6
checkpoint_epoch_interval = 2
checkpoint_config = dict(
interval=num_iters_per_epoch * checkpoint_epoch_interval
)
log_config = dict(
interval=51,
hooks=[
dict(type="TextLoggerHook", by_epoch=False),
dict(type="TensorboardLoggerHook"),
],
)
load_from = None
resume_from = None
workflow = [("train", 1)]
fp16 = dict(loss_scale=32.0)
input_shape = (704, 384)
# ================== model ========================
class_names = [
'car',
'van',
'truck',
'bicycle',
'traffic_sign',
'traffic_cone',
'traffic_light',
'pedestrian',
'others',
]
map_class_names = [
'Broken',
'Solid',
'SolidSolid',
# 'Center',
# 'TrafficLight',
# 'StopSign',
]
NameMapping = {
#=================vehicle=================
# bicycle
'vehicle.bh.crossbike': 'bicycle',
"vehicle.diamondback.century": 'bicycle',
"vehicle.gazelle.omafiets": 'bicycle',
# car
"vehicle.chevrolet.impala": 'car',
"vehicle.dodge.charger_2020": 'car',
"vehicle.dodge.charger_police": 'car',
"vehicle.dodge.charger_police_2020": 'car',
"vehicle.lincoln.mkz_2017": 'car',
"vehicle.lincoln.mkz_2020": 'car',
"vehicle.mini.cooper_s_2021": 'car',
"vehicle.mercedes.coupe_2020": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.nissan.patrol_2021": 'car',
"vehicle.audi.tt": 'car',
"vehicle.audi.etron": 'car',
"vehicle.ford.crown": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.tesla.model3": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/FordCrown/SM_FordCrown_parked.SM_FordCrown_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Charger/SM_ChargerParked.SM_ChargerParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Lincoln/SM_LincolnParked.SM_LincolnParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/MercedesCCC/SM_MercedesCCC_Parked.SM_MercedesCCC_Parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Mini2021/SM_Mini2021_parked.SM_Mini2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/NissanPatrol2021/SM_NissanPatrol2021_parked.SM_NissanPatrol2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/TeslaM3/SM_TeslaM3_parked.SM_TeslaM3_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": 'car',
# bus
# van
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": "van",
"vehicle.ford.ambulance": "van",
# truck
"vehicle.carlamotors.firetruck": 'truck',
#=========================================
#=================traffic sign============
# traffic.speed_limit
"traffic.speed_limit.30": 'traffic_sign',
"traffic.speed_limit.40": 'traffic_sign',
"traffic.speed_limit.50": 'traffic_sign',
"traffic.speed_limit.60": 'traffic_sign',
"traffic.speed_limit.90": 'traffic_sign',
"traffic.speed_limit.120": 'traffic_sign',
"traffic.stop": 'traffic_sign',
"traffic.yield": 'traffic_sign',
"traffic.traffic_light": 'traffic_light',
#=========================================
#===================Construction===========
"static.prop.warningconstruction" : 'traffic_cone',
"static.prop.warningaccident": 'traffic_cone',
"static.prop.trafficwarning": "traffic_cone",
#===================Construction===========
"static.prop.constructioncone": 'traffic_cone',
#=================pedestrian==============
"walker.pedestrian.0001": 'pedestrian',
"walker.pedestrian.0004": 'pedestrian',
"walker.pedestrian.0005": 'pedestrian',
"walker.pedestrian.0007": 'pedestrian',
"walker.pedestrian.0013": 'pedestrian',
"walker.pedestrian.0014": 'pedestrian',
"walker.pedestrian.0017": 'pedestrian',
"walker.pedestrian.0018": 'pedestrian',
"walker.pedestrian.0019": 'pedestrian',
"walker.pedestrian.0020": 'pedestrian',
"walker.pedestrian.0022": 'pedestrian',
"walker.pedestrian.0025": 'pedestrian',
"walker.pedestrian.0035": 'pedestrian',
"walker.pedestrian.0041": 'pedestrian',
"walker.pedestrian.0046": 'pedestrian',
"walker.pedestrian.0047": 'pedestrian',
# ==========================================
"static.prop.dirtdebris01": 'others',
"static.prop.dirtdebris02": 'others',
}
num_classes = len(class_names)
num_map_classes = len(map_class_names)
roi_size = (30, 60)
num_sample = 20
fut_ts = 6
fut_mode = 6
ego_fut_ts = 6
ego_fut_mode = 6
num_cmd = 1
queue_length = 4 # history + current
embed_dims = 256
num_groups = 8
num_decoder = 6
num_single_frame_decoder = 1
num_single_frame_decoder_map = 1
use_deformable_func = True # mmdet3d_plugin/ops/setup.py needs to be executed
strides = [4, 8, 16, 32]
num_levels = len(strides)
num_depth_layers = 3
drop_out = 0.1
temporal = True
temporal_map = True
decouple_attn = True
decouple_attn_map = False
decouple_attn_motion = True
with_quality_estimation = True
task_config = dict(
with_det=True,
with_map=True,
with_motion_plan=True,
)
model = dict(
type="MomAD",
use_grid_mask=True,
use_deformable_func=use_deformable_func,
img_backbone=dict(
type="ResNet",
depth=50,
num_stages=4,
frozen_stages=-1,
norm_eval=False,
style="pytorch",
with_cp=True,
out_indices=(0, 1, 2, 3),
norm_cfg=dict(type="BN", requires_grad=True),
pretrained="ckpt/resnet50-19c8e357.pth",
),
img_neck=dict(
type="FPN",
num_outs=num_levels,
start_level=0,
out_channels=embed_dims,
add_extra_convs="on_output",
relu_before_extra_convs=True,
in_channels=[256, 512, 1024, 2048],
),
# depth_branch=dict( # for auxiliary supervision only
# type="DenseDepthNet",
# embed_dims=embed_dims,
# num_depth_layers=num_depth_layers,
# loss_weight=0.2,
# ),
head=dict(
type="SparseDriveHead",
task_config=task_config,
det_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn,
instance_bank=dict(
type="InstanceBank",
num_anchor=900,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_det_900.npy",
anchor_handler=dict(type="SparseBox3DKeyPointsGenerator"),
num_temp_instances=600 if temporal else -1,
confidence_decay=0.9,
feat_grad=False,
),
anchor_encoder=dict(
type="SparseBox3DEncoder",
vel_dims=3,
embed_dims=[128, 32, 32, 64] if decouple_attn else 256,
mode="cat" if decouple_attn else "add",
output_fc=not decouple_attn,
in_loops=1,
out_loops=4 if decouple_attn else 2,
),
num_single_frame_decoder=num_single_frame_decoder,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder)
)[2:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparseBox3DKeyPointsGenerator",
num_learnable_pts=6,
fix_scale=[
[0, 0, 0],
[0.45, 0, 0],
[-0.45, 0, 0],
[0, 0.45, 0],
[0, -0.45, 0],
[0, 0, 0.45],
[0, 0, -0.45],
],
),
),
refine_layer=dict(
type="SparseBox3DRefinementModule",
embed_dims=embed_dims,
num_cls=num_classes,
refine_yaw=True,
with_quality_estimation=with_quality_estimation,
),
sampler=dict(
type="SparseBox3DTarget",
num_dn_groups=0,
num_temp_dn_groups=0,
dn_noise_scale=[2.0] * 3 + [0.5] * 7,
max_dn_gt=32,
add_neg_dn=True,
cls_weight=2.0,
box_weight=0.25,
reg_weights=[2.0] * 3 + [0.5] * 3 + [0.0] * 4,
cls_wise_reg_weights={
class_names.index("traffic_cone"): [
2.0,
2.0,
2.0,
1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
1.0,
],
},
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=2.0,
),
loss_reg=dict(
type="SparseBox3DLoss",
loss_box=dict(type="L1Loss", loss_weight=0.25),
loss_centerness=dict(type="CrossEntropyLoss", use_sigmoid=True),
loss_yawness=dict(type="GaussianFocalLoss"),
# cls_allow_reverse=[class_names.index("barrier")],
),
decoder=dict(type="SparseBox3DDecoder"),
reg_weights=[2.0] * 3 + [1.0] * 7,
),
map_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn_map,
instance_bank=dict(
type="InstanceBank",
num_anchor=100,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_map_100.npy",
anchor_handler=dict(type="SparsePoint3DKeyPointsGenerator"),
num_temp_instances=0 if temporal_map else -1,
confidence_decay=0.9,
feat_grad=True,
),
anchor_encoder=dict(
type="SparsePoint3DEncoder",
embed_dims=embed_dims,
num_sample=num_sample,
),
num_single_frame_decoder=num_single_frame_decoder_map,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder_map
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder_map)
)[:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal_map
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparsePoint3DKeyPointsGenerator",
embed_dims=embed_dims,
num_sample=num_sample,
num_learnable_pts=3,
fix_height=(0, 0.25, -0.25, 0.5, -0.5),
ground_height=-1.84, # ground height in lidar frame
),
),
refine_layer=dict(
type="SparsePoint3DRefinementModule",
embed_dims=embed_dims,
num_sample=num_sample,
num_cls=num_map_classes,
),
sampler=dict(
type="SparsePoint3DTarget",
assigner=dict(
type='HungarianLinesAssigner',
cost=dict(
type='MapQueriesCost',
cls_cost=dict(type='FocalLossCost', weight=1.0),
reg_cost=dict(type='LinesL1Cost', weight=10.0, beta=0.01, permute=True),
),
),
num_cls=num_map_classes,
num_sample=num_sample,
roi_size=roi_size,
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0,
),
loss_reg=dict(
type="SparseLineLoss",
loss_line=dict(
type='LinesL1Loss',
loss_weight=10.0,
beta=0.01,
),
num_sample=num_sample,
roi_size=roi_size,
),
decoder=dict(
type="SparsePoint3DDecoder",
score_threshold=0.5,
),
reg_weights=[1.0] * 40,
gt_cls_key="gt_map_labels",
gt_reg_key="gt_map_pts",
gt_id_key="map_instance_id",
with_instance_id=False,
task_prefix='map',
),
motion_plan_head=dict(
type='MomADMotionPlanningHead',
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
motion_anchor=f'data/kmeans/kmeans_motion_{fut_mode}.npy',
plan_anchor=None,
# plan_anchor=f'data/kmeans/kmeans_plan_{ego_fut_mode}_b2d.npy',
embed_dims=embed_dims,
decouple_attn=decouple_attn_motion,
instance_queue=dict(
type="InstanceQueue",
embed_dims=embed_dims,
queue_length=queue_length,
frame_rate=1,
tracking_threshold=0.2,
feature_map_scale=(input_shape[1]/strides[-1], input_shape[0]/strides[-1]),
use_ego_status=False,
use_tp=['near',],
),
operation_order=(
[
"temp_gnn",
"gnn",
"norm",
"cross_gnn",
"norm",
"ffn",
"norm",
] * 3 +
[
"refine",
]
),
temp_graph_model=dict(
type="MultiheadAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
cross_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 2,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
refine_layer=dict(
type="MotionPlanningRefinementModule",
embed_dims=embed_dims,
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_gru=False,
),
motion_sampler=dict(
type="MotionTarget",
),
motion_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.2
),
motion_loss_reg=dict(type='L1Loss', loss_weight=0.2),
planning_sampler=dict(
type="PlanningTarget",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
),
plan_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.5,
),
plan_loss_reg=dict(type='L1Loss', loss_weight=1.0),
plan_loss_status=dict(type='L1Loss', loss_weight=1.0),
motion_decoder=dict(type="SparseBox3DMotionDecoder"),
planning_decoder=dict(
type="HierarchicalPlanningDecoder",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_rescore=True,
),
num_det=50,
num_map=10,
),
),
)
# ================== data ========================
dataset_type = "B2D3DDataset"
data_root = "data/bench2drive/"
anno_root = "data/infos/" if version == 'base' else "data/infos/mini/"
file_client_args = dict(backend="disk")
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True
)
train_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
# dict(
# type="DenseDepthMapGenerator",
# downsample=strides[:num_depth_layers],
# ),
dict(type="BBoxRotation"),
dict(type="PhotoMetricDistortionMultiViewImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=False,
normalize=False,
sample_num=num_sample,
permute=True,
),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
# "gt_depth",
"focal",
"gt_bboxes_3d",
"gt_labels_3d",
'gt_map_labels',
'gt_map_pts',
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
'ego_status',
#'ego_his_trajs',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp", "instance_id"],
),
]
test_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
#
# 'ego_status',
#'ego_his_trajs',
'gt_ego_fut_cmd',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp"],
),
]
eval_pipeline = [
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=True,
normalize=False,
),
dict(
type='Collect',
keys=[
'vectors',
"gt_bboxes_3d",
"gt_labels_3d",
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
# 'fut_boxes'
],
meta_keys=['token', 'timestamp']
),
]
input_modality = dict(
use_lidar=False,
use_camera=True,
use_radar=False,
use_map=False,
use_external=False,
)
data_basic_config = dict(
type=dataset_type,
data_root=data_root,
classes=class_names,
map_classes=map_class_names,
name_mapping=NameMapping,
modality=input_modality,
sample_interval=5,
past_frames=6,
future_frames=6,
use_cmd=num_cmd>1,
)
eval_config = dict(
**data_basic_config,
ann_file=anno_root + 'b2d_infos_val.pkl',
pipeline=eval_pipeline,
test_mode=True,
)
data_aug_conf = {
"resize_lim": (0.40, 0.47),
"final_dim": input_shape[::-1],
"bot_pct_lim": (0.0, 0.0),
"rot_lim": (-5.4, 5.4),
"H": 900,
"W": 1600,
"rand_flip": True,
"rot3d_range": [0, 0],
}
data = dict(
samples_per_gpu=batch_size,
workers_per_gpu=batch_size,
train=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_train.pkl",
pipeline=train_pipeline,
test_mode=False,
data_aug_conf=data_aug_conf,
with_seq_flag=True,
sequences_split_num=5,
keep_consistent_seq_aug=True,
),
val=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
test=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
)
# ================== training ========================
optimizer = dict(
type="AdamW",
lr=2e-4,
weight_decay=0.001,
paramwise_cfg=dict(
custom_keys={
"img_backbone": dict(lr_mult=0.1),
}
),
)
optimizer_config = dict(grad_clip=dict(max_norm=25, norm_type=2))
lr_config = dict(
policy="CosineAnnealing",
warmup="linear",
warmup_iters=500,
warmup_ratio=1.0 / 3,
min_lr_ratio=1e-3,
)
runner = dict(
type="IterBasedRunner",
max_iters=num_iters_per_epoch * num_epochs,
)
# ================== eval ========================
eval_mode = dict(
with_det=True,
with_tracking=False,
with_map=False,
with_motion=False,
with_planning=True,
tracking_threshold=0.2,
motion_threshhold=0.2,
)
evaluation = dict(
interval=num_iters_per_epoch*checkpoint_epoch_interval,
eval_mode=eval_mode,
)
# ================== pretrained model ========================
# load_from = 'http://svcspawner.bcloud-beijing.hobot.cc/user/homespace/wenchao.sun/plat_gpu/sparsedrive_small_b2d_stage1_20e-20240903-225131.954333/output/work_dirs/latest.pth'
load_from = "ckpt/sparsedrive_small_b2d_stage1.pth"
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/momad_small_b2d_stage2_singleplan.py
================================================
# ================ base config ===================
version = "mini"
version = "base"
length = {'base': 234769, 'mini': 1933}
plugin = True
plugin_dir = "mmdet3d_plugin/"
dist_params = dict(backend="nccl")
log_level = "INFO"
work_dir = None
total_batch_size = 48
num_gpus = 8
batch_size = total_batch_size // num_gpus
num_iters_per_epoch = int(length[version] // (num_gpus * batch_size))
num_epochs = 6
checkpoint_epoch_interval = 2
checkpoint_config = dict(
interval=num_iters_per_epoch * checkpoint_epoch_interval
)
log_config = dict(
interval=51,
hooks=[
dict(type="TextLoggerHook", by_epoch=False),
dict(type="TensorboardLoggerHook"),
],
)
load_from = None
resume_from = None
workflow = [("train", 1)]
fp16 = dict(loss_scale=32.0)
input_shape = (704, 384)
# ================== model ========================
class_names = [
'car',
'van',
'truck',
'bicycle',
'traffic_sign',
'traffic_cone',
'traffic_light',
'pedestrian',
'others',
]
map_class_names = [
'Broken',
'Solid',
'SolidSolid',
# 'Center',
# 'TrafficLight',
# 'StopSign',
]
NameMapping = {
#=================vehicle=================
# bicycle
'vehicle.bh.crossbike': 'bicycle',
"vehicle.diamondback.century": 'bicycle',
"vehicle.gazelle.omafiets": 'bicycle',
# car
"vehicle.chevrolet.impala": 'car',
"vehicle.dodge.charger_2020": 'car',
"vehicle.dodge.charger_police": 'car',
"vehicle.dodge.charger_police_2020": 'car',
"vehicle.lincoln.mkz_2017": 'car',
"vehicle.lincoln.mkz_2020": 'car',
"vehicle.mini.cooper_s_2021": 'car',
"vehicle.mercedes.coupe_2020": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.nissan.patrol_2021": 'car',
"vehicle.audi.tt": 'car',
"vehicle.audi.etron": 'car',
"vehicle.ford.crown": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.tesla.model3": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/FordCrown/SM_FordCrown_parked.SM_FordCrown_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Charger/SM_ChargerParked.SM_ChargerParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Lincoln/SM_LincolnParked.SM_LincolnParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/MercedesCCC/SM_MercedesCCC_Parked.SM_MercedesCCC_Parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Mini2021/SM_Mini2021_parked.SM_Mini2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/NissanPatrol2021/SM_NissanPatrol2021_parked.SM_NissanPatrol2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/TeslaM3/SM_TeslaM3_parked.SM_TeslaM3_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": 'car',
# bus
# van
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": "van",
"vehicle.ford.ambulance": "van",
# truck
"vehicle.carlamotors.firetruck": 'truck',
#=========================================
#=================traffic sign============
# traffic.speed_limit
"traffic.speed_limit.30": 'traffic_sign',
"traffic.speed_limit.40": 'traffic_sign',
"traffic.speed_limit.50": 'traffic_sign',
"traffic.speed_limit.60": 'traffic_sign',
"traffic.speed_limit.90": 'traffic_sign',
"traffic.speed_limit.120": 'traffic_sign',
"traffic.stop": 'traffic_sign',
"traffic.yield": 'traffic_sign',
"traffic.traffic_light": 'traffic_light',
#=========================================
#===================Construction===========
"static.prop.warningconstruction" : 'traffic_cone',
"static.prop.warningaccident": 'traffic_cone',
"static.prop.trafficwarning": "traffic_cone",
#===================Construction===========
"static.prop.constructioncone": 'traffic_cone',
#=================pedestrian==============
"walker.pedestrian.0001": 'pedestrian',
"walker.pedestrian.0004": 'pedestrian',
"walker.pedestrian.0005": 'pedestrian',
"walker.pedestrian.0007": 'pedestrian',
"walker.pedestrian.0013": 'pedestrian',
"walker.pedestrian.0014": 'pedestrian',
"walker.pedestrian.0017": 'pedestrian',
"walker.pedestrian.0018": 'pedestrian',
"walker.pedestrian.0019": 'pedestrian',
"walker.pedestrian.0020": 'pedestrian',
"walker.pedestrian.0022": 'pedestrian',
"walker.pedestrian.0025": 'pedestrian',
"walker.pedestrian.0035": 'pedestrian',
"walker.pedestrian.0041": 'pedestrian',
"walker.pedestrian.0046": 'pedestrian',
"walker.pedestrian.0047": 'pedestrian',
# ==========================================
"static.prop.dirtdebris01": 'others',
"static.prop.dirtdebris02": 'others',
}
num_classes = len(class_names)
num_map_classes = len(map_class_names)
roi_size = (30, 60)
num_sample = 20
fut_ts = 6
fut_mode = 6
ego_fut_ts = 6
ego_fut_mode = 6
num_cmd = 1
queue_length = 4 # history + current
embed_dims = 256
num_groups = 8
num_decoder = 6
num_single_frame_decoder = 1
num_single_frame_decoder_map = 1
use_deformable_func = True # mmdet3d_plugin/ops/setup.py needs to be executed
strides = [4, 8, 16, 32]
num_levels = len(strides)
num_depth_layers = 3
drop_out = 0.1
temporal = True
temporal_map = True
decouple_attn = True
decouple_attn_map = False
decouple_attn_motion = True
with_quality_estimation = True
task_config = dict(
with_det=True,
with_map=True,
with_motion_plan=True,
)
model = dict(
type="MomAD",
use_grid_mask=True,
use_deformable_func=use_deformable_func,
img_backbone=dict(
type="ResNet",
depth=50,
num_stages=4,
frozen_stages=-1,
norm_eval=False,
style="pytorch",
with_cp=True,
out_indices=(0, 1, 2, 3),
norm_cfg=dict(type="BN", requires_grad=True),
pretrained="ckpt/resnet50-19c8e357.pth",
),
img_neck=dict(
type="FPN",
num_outs=num_levels,
start_level=0,
out_channels=embed_dims,
add_extra_convs="on_output",
relu_before_extra_convs=True,
in_channels=[256, 512, 1024, 2048],
),
# depth_branch=dict( # for auxiliary supervision only
# type="DenseDepthNet",
# embed_dims=embed_dims,
# num_depth_layers=num_depth_layers,
# loss_weight=0.2,
# ),
head=dict(
type="SparseDriveHead",
task_config=task_config,
det_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn,
instance_bank=dict(
type="InstanceBank",
num_anchor=900,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_det_900.npy",
anchor_handler=dict(type="SparseBox3DKeyPointsGenerator"),
num_temp_instances=600 if temporal else -1,
confidence_decay=0.9,
feat_grad=False,
),
anchor_encoder=dict(
type="SparseBox3DEncoder",
vel_dims=3,
embed_dims=[128, 32, 32, 64] if decouple_attn else 256,
mode="cat" if decouple_attn else "add",
output_fc=not decouple_attn,
in_loops=1,
out_loops=4 if decouple_attn else 2,
),
num_single_frame_decoder=num_single_frame_decoder,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder)
)[2:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparseBox3DKeyPointsGenerator",
num_learnable_pts=6,
fix_scale=[
[0, 0, 0],
[0.45, 0, 0],
[-0.45, 0, 0],
[0, 0.45, 0],
[0, -0.45, 0],
[0, 0, 0.45],
[0, 0, -0.45],
],
),
),
refine_layer=dict(
type="SparseBox3DRefinementModule",
embed_dims=embed_dims,
num_cls=num_classes,
refine_yaw=True,
with_quality_estimation=with_quality_estimation,
),
sampler=dict(
type="SparseBox3DTarget",
num_dn_groups=0,
num_temp_dn_groups=0,
dn_noise_scale=[2.0] * 3 + [0.5] * 7,
max_dn_gt=32,
add_neg_dn=True,
cls_weight=2.0,
box_weight=0.25,
reg_weights=[2.0] * 3 + [0.5] * 3 + [0.0] * 4,
cls_wise_reg_weights={
class_names.index("traffic_cone"): [
2.0,
2.0,
2.0,
1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
1.0,
],
},
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=2.0,
),
loss_reg=dict(
type="SparseBox3DLoss",
loss_box=dict(type="L1Loss", loss_weight=0.25),
loss_centerness=dict(type="CrossEntropyLoss", use_sigmoid=True),
loss_yawness=dict(type="GaussianFocalLoss"),
# cls_allow_reverse=[class_names.index("barrier")],
),
decoder=dict(type="SparseBox3DDecoder"),
reg_weights=[2.0] * 3 + [1.0] * 7,
),
map_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn_map,
instance_bank=dict(
type="InstanceBank",
num_anchor=100,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_map_100.npy",
anchor_handler=dict(type="SparsePoint3DKeyPointsGenerator"),
num_temp_instances=0 if temporal_map else -1,
confidence_decay=0.9,
feat_grad=True,
),
anchor_encoder=dict(
type="SparsePoint3DEncoder",
embed_dims=embed_dims,
num_sample=num_sample,
),
num_single_frame_decoder=num_single_frame_decoder_map,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder_map
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder_map)
)[:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal_map
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparsePoint3DKeyPointsGenerator",
embed_dims=embed_dims,
num_sample=num_sample,
num_learnable_pts=3,
fix_height=(0, 0.25, -0.25, 0.5, -0.5),
ground_height=-1.84, # ground height in lidar frame
),
),
refine_layer=dict(
type="SparsePoint3DRefinementModule",
embed_dims=embed_dims,
num_sample=num_sample,
num_cls=num_map_classes,
),
sampler=dict(
type="SparsePoint3DTarget",
assigner=dict(
type='HungarianLinesAssigner',
cost=dict(
type='MapQueriesCost',
cls_cost=dict(type='FocalLossCost', weight=1.0),
reg_cost=dict(type='LinesL1Cost', weight=10.0, beta=0.01, permute=True),
),
),
num_cls=num_map_classes,
num_sample=num_sample,
roi_size=roi_size,
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0,
),
loss_reg=dict(
type="SparseLineLoss",
loss_line=dict(
type='LinesL1Loss',
loss_weight=10.0,
beta=0.01,
),
num_sample=num_sample,
roi_size=roi_size,
),
decoder=dict(
type="SparsePoint3DDecoder",
score_threshold=0.5,
),
reg_weights=[1.0] * 40,
gt_cls_key="gt_map_labels",
gt_reg_key="gt_map_pts",
gt_id_key="map_instance_id",
with_instance_id=False,
task_prefix='map',
),
motion_plan_head=dict(
type='MomADMotionPlanningHead',
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
motion_anchor=f'data/kmeans/kmeans_motion_{fut_mode}.npy',
plan_anchor=None,
# plan_anchor=f'data/kmeans/kmeans_plan_{ego_fut_mode}_b2d.npy',
embed_dims=embed_dims,
decouple_attn=decouple_attn_motion,
instance_queue=dict(
type="InstanceQueue",
embed_dims=embed_dims,
queue_length=queue_length,
frame_rate=1,
tracking_threshold=0.2,
feature_map_scale=(input_shape[1]/strides[-1], input_shape[0]/strides[-1]),
use_ego_status=False,
use_tp=['near',],
),
operation_order=(
[
"temp_gnn",
"gnn",
"norm",
"cross_gnn",
"norm",
"ffn",
"norm",
] * 3 +
[
"refine",
]
),
temp_graph_model=dict(
type="MultiheadAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
cross_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 2,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
refine_layer=dict(
type="MotionPlanningRefinementModule",
embed_dims=embed_dims,
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_gru=False,
),
motion_sampler=dict(
type="MotionTarget",
),
motion_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.2
),
motion_loss_reg=dict(type='L1Loss', loss_weight=0.2),
planning_sampler=dict(
type="PlanningTarget",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
),
plan_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.5,
),
plan_loss_reg=dict(type='L1Loss', loss_weight=1.0),
plan_loss_status=dict(type='L1Loss', loss_weight=1.0),
motion_decoder=dict(type="SparseBox3DMotionDecoder"),
planning_decoder=dict(
type="HierarchicalPlanningDecoder",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_rescore=True,
),
num_det=50,
num_map=10,
),
),
)
# ================== data ========================
dataset_type = "B2D3DDataset"
data_root = "data/bench2drive/"
anno_root = "data/infos/" if version == 'base' else "data/infos/mini/"
file_client_args = dict(backend="disk")
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True
)
train_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
# dict(
# type="DenseDepthMapGenerator",
# downsample=strides[:num_depth_layers],
# ),
dict(type="BBoxRotation"),
dict(type="PhotoMetricDistortionMultiViewImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=False,
normalize=False,
sample_num=num_sample,
permute=True,
),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
# "gt_depth",
"focal",
"gt_bboxes_3d",
"gt_labels_3d",
'gt_map_labels',
'gt_map_pts',
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
'ego_status',
'ego_his_trajs',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp", "instance_id"],
),
]
test_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
'ego_status',
'ego_his_trajs',
'gt_ego_fut_cmd',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp"],
),
]
eval_pipeline = [
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=True,
normalize=False,
),
dict(
type='Collect',
keys=[
'vectors',
"gt_bboxes_3d",
"gt_labels_3d",
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
# 'fut_boxes'
],
meta_keys=['token', 'timestamp']
),
]
input_modality = dict(
use_lidar=False,
use_camera=True,
use_radar=False,
use_map=False,
use_external=False,
)
data_basic_config = dict(
type=dataset_type,
data_root=data_root,
classes=class_names,
map_classes=map_class_names,
name_mapping=NameMapping,
modality=input_modality,
sample_interval=5,
past_frames=6,
future_frames=6,
use_cmd=num_cmd>1,
)
eval_config = dict(
**data_basic_config,
ann_file=anno_root + 'b2d_infos_val.pkl',
pipeline=eval_pipeline,
test_mode=True,
)
data_aug_conf = {
"resize_lim": (0.40, 0.47),
"final_dim": input_shape[::-1],
"bot_pct_lim": (0.0, 0.0),
"rot_lim": (-5.4, 5.4),
"H": 900,
"W": 1600,
"rand_flip": True,
"rot3d_range": [0, 0],
}
data = dict(
samples_per_gpu=batch_size,
workers_per_gpu=batch_size,
train=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_train.pkl",
pipeline=train_pipeline,
test_mode=False,
data_aug_conf=data_aug_conf,
with_seq_flag=True,
sequences_split_num=5,
keep_consistent_seq_aug=True,
),
val=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
test=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
)
# ================== training ========================
optimizer = dict(
type="AdamW",
lr=2e-4,
weight_decay=0.001,
paramwise_cfg=dict(
custom_keys={
"img_backbone": dict(lr_mult=0.1),
}
),
)
optimizer_config = dict(grad_clip=dict(max_norm=25, norm_type=2))
lr_config = dict(
policy="CosineAnnealing",
warmup="linear",
warmup_iters=500,
warmup_ratio=1.0 / 3,
min_lr_ratio=1e-3,
)
runner = dict(
type="IterBasedRunner",
max_iters=num_iters_per_epoch * num_epochs,
)
# ================== eval ========================
eval_mode = dict(
with_det=True,
with_tracking=False,
with_map=False,
with_motion=False,
with_planning=True,
tracking_threshold=0.2,
motion_threshhold=0.2,
)
evaluation = dict(
interval=num_iters_per_epoch*checkpoint_epoch_interval,
eval_mode=eval_mode,
)
# ================== pretrained model ========================
# load_from = 'http://svcspawner.bcloud-beijing.hobot.cc/user/homespace/wenchao.sun/plat_gpu/sparsedrive_small_b2d_stage1_20e-20240903-225131.954333/output/work_dirs/latest.pth'
load_from = "ckpt/sparsedrive_small_b2d_stage1.pth"
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/sparsedrive_small_b2d_stage1.py
================================================
# ================ base config ===================
plugin = True
plugin_dir = "mmdet3d_plugin/"
dist_params = dict(backend="nccl")
log_level = "INFO"
work_dir = None
total_batch_size = 64
num_gpus = 8
batch_size = total_batch_size // num_gpus
num_iters_per_epoch = int(234769 // (num_gpus * batch_size))
num_epochs = 10
checkpoint_epoch_interval = 2
checkpoint_config = dict(
interval=num_iters_per_epoch * checkpoint_epoch_interval
)
log_config = dict(
interval=51,
hooks=[
dict(type="TextLoggerHook", by_epoch=False),
dict(type="TensorboardLoggerHook"),
],
)
load_from = None
resume_from = None
workflow = [("train", 1)]
fp16 = dict(loss_scale=32.0)
input_shape = (704, 384)
# ================== model ========================
class_names = [
'car',
'van',
'truck',
'bicycle',
'traffic_sign',
'traffic_cone',
'traffic_light',
'pedestrian',
'others',
]
map_class_names = [
'Broken',
'Solid',
'SolidSolid',
# 'Center',
# 'TrafficLight',
# 'StopSign',
]
NameMapping = {
#=================vehicle=================
# bicycle
'vehicle.bh.crossbike': 'bicycle',
"vehicle.diamondback.century": 'bicycle',
"vehicle.gazelle.omafiets": 'bicycle',
# car
"vehicle.chevrolet.impala": 'car',
"vehicle.dodge.charger_2020": 'car',
"vehicle.dodge.charger_police": 'car',
"vehicle.dodge.charger_police_2020": 'car',
"vehicle.lincoln.mkz_2017": 'car',
"vehicle.lincoln.mkz_2020": 'car',
"vehicle.mini.cooper_s_2021": 'car',
"vehicle.mercedes.coupe_2020": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.nissan.patrol_2021": 'car',
"vehicle.audi.tt": 'car',
"vehicle.audi.etron": 'car',
"vehicle.ford.crown": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.tesla.model3": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/FordCrown/SM_FordCrown_parked.SM_FordCrown_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Charger/SM_ChargerParked.SM_ChargerParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Lincoln/SM_LincolnParked.SM_LincolnParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/MercedesCCC/SM_MercedesCCC_Parked.SM_MercedesCCC_Parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Mini2021/SM_Mini2021_parked.SM_Mini2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/NissanPatrol2021/SM_NissanPatrol2021_parked.SM_NissanPatrol2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/TeslaM3/SM_TeslaM3_parked.SM_TeslaM3_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": 'car',
# bus
# van
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": "van",
"vehicle.ford.ambulance": "van",
# truck
"vehicle.carlamotors.firetruck": 'truck',
#=========================================
#=================traffic sign============
# traffic.speed_limit
"traffic.speed_limit.30": 'traffic_sign',
"traffic.speed_limit.40": 'traffic_sign',
"traffic.speed_limit.50": 'traffic_sign',
"traffic.speed_limit.60": 'traffic_sign',
"traffic.speed_limit.90": 'traffic_sign',
"traffic.speed_limit.120": 'traffic_sign',
"traffic.stop": 'traffic_sign',
"traffic.yield": 'traffic_sign',
"traffic.traffic_light": 'traffic_light',
#=========================================
#===================Construction===========
"static.prop.warningconstruction" : 'traffic_cone',
"static.prop.warningaccident": 'traffic_cone',
"static.prop.trafficwarning": "traffic_cone",
#===================Construction===========
"static.prop.constructioncone": 'traffic_cone',
#=================pedestrian==============
"walker.pedestrian.0001": 'pedestrian',
"walker.pedestrian.0004": 'pedestrian',
"walker.pedestrian.0005": 'pedestrian',
"walker.pedestrian.0007": 'pedestrian',
"walker.pedestrian.0013": 'pedestrian',
"walker.pedestrian.0014": 'pedestrian',
"walker.pedestrian.0017": 'pedestrian',
"walker.pedestrian.0018": 'pedestrian',
"walker.pedestrian.0019": 'pedestrian',
"walker.pedestrian.0020": 'pedestrian',
"walker.pedestrian.0022": 'pedestrian',
"walker.pedestrian.0025": 'pedestrian',
"walker.pedestrian.0035": 'pedestrian',
"walker.pedestrian.0041": 'pedestrian',
"walker.pedestrian.0046": 'pedestrian',
"walker.pedestrian.0047": 'pedestrian',
# ==========================================
"static.prop.dirtdebris01": 'others',
"static.prop.dirtdebris02": 'others',
}
num_classes = len(class_names)
num_map_classes = len(map_class_names)
roi_size = (30, 60)
num_sample = 20
fut_ts = 6
fut_mode = 6
ego_fut_ts = 6
ego_fut_mode = 6
num_cmd = 6
queue_length = 4 # history + current
embed_dims = 256
num_groups = 8
num_decoder = 6
num_single_frame_decoder = 1
num_single_frame_decoder_map = 1
use_deformable_func = True # mmdet3d_plugin/ops/setup.py needs to be executed
strides = [4, 8, 16, 32]
num_levels = len(strides)
num_depth_layers = 3
drop_out = 0.1
temporal = True
temporal_map = True
decouple_attn = True
decouple_attn_map = False
decouple_attn_motion = True
with_quality_estimation = True
task_config = dict(
with_det=True,
with_map=True,
with_motion_plan=False,
)
model = dict(
type="SparseDrive",
use_grid_mask=True,
use_deformable_func=use_deformable_func,
img_backbone=dict(
type="ResNet",
depth=50,
num_stages=4,
frozen_stages=-1,
norm_eval=False,
style="pytorch",
with_cp=True,
out_indices=(0, 1, 2, 3),
norm_cfg=dict(type="BN", requires_grad=True),
pretrained="ckpt/resnet50-19c8e357.pth",
),
img_neck=dict(
type="FPN",
num_outs=num_levels,
start_level=0,
out_channels=embed_dims,
add_extra_convs="on_output",
relu_before_extra_convs=True,
in_channels=[256, 512, 1024, 2048],
),
depth_branch=dict( # for auxiliary supervision only
type="DenseDepthNet",
embed_dims=embed_dims,
num_depth_layers=num_depth_layers,
loss_weight=0.2,
),
head=dict(
type="SparseDriveHead",
task_config=task_config,
det_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn,
instance_bank=dict(
type="InstanceBank",
num_anchor=900,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_det_900.npy",
anchor_handler=dict(type="SparseBox3DKeyPointsGenerator"),
num_temp_instances=600 if temporal else -1,
confidence_decay=0.9,
feat_grad=False,
),
anchor_encoder=dict(
type="SparseBox3DEncoder",
vel_dims=3,
embed_dims=[128, 32, 32, 64] if decouple_attn else 256,
mode="cat" if decouple_attn else "add",
output_fc=not decouple_attn,
in_loops=1,
out_loops=4 if decouple_attn else 2,
),
num_single_frame_decoder=num_single_frame_decoder,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder)
)[2:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparseBox3DKeyPointsGenerator",
num_learnable_pts=6,
fix_scale=[
[0, 0, 0],
[0.45, 0, 0],
[-0.45, 0, 0],
[0, 0.45, 0],
[0, -0.45, 0],
[0, 0, 0.45],
[0, 0, -0.45],
],
),
),
refine_layer=dict(
type="SparseBox3DRefinementModule",
embed_dims=embed_dims,
num_cls=num_classes,
refine_yaw=True,
with_quality_estimation=with_quality_estimation,
),
sampler=dict(
type="SparseBox3DTarget",
num_dn_groups=0,
num_temp_dn_groups=0,
dn_noise_scale=[2.0] * 3 + [0.5] * 7,
max_dn_gt=32,
add_neg_dn=True,
cls_weight=2.0,
box_weight=0.25,
reg_weights=[2.0] * 3 + [0.5] * 3 + [0.0] * 4,
cls_wise_reg_weights={
class_names.index("traffic_cone"): [
2.0,
2.0,
2.0,
1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
1.0,
],
},
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=2.0,
),
loss_reg=dict(
type="SparseBox3DLoss",
loss_box=dict(type="L1Loss", loss_weight=0.25),
loss_centerness=dict(type="CrossEntropyLoss", use_sigmoid=True),
loss_yawness=dict(type="GaussianFocalLoss"),
# cls_allow_reverse=[class_names.index("barrier")],
),
decoder=dict(type="SparseBox3DDecoder"),
reg_weights=[2.0] * 3 + [1.0] * 7,
),
map_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn_map,
instance_bank=dict(
type="InstanceBank",
num_anchor=100,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_map_100.npy",
anchor_handler=dict(type="SparsePoint3DKeyPointsGenerator"),
num_temp_instances=0 if temporal_map else -1,
confidence_decay=0.9,
feat_grad=True,
),
anchor_encoder=dict(
type="SparsePoint3DEncoder",
embed_dims=embed_dims,
num_sample=num_sample,
),
num_single_frame_decoder=num_single_frame_decoder_map,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder_map
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder_map)
)[:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal_map
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparsePoint3DKeyPointsGenerator",
embed_dims=embed_dims,
num_sample=num_sample,
num_learnable_pts=3,
fix_height=(0, 0.25, -0.25, 0.5, -0.5),
ground_height=-1.84, # ground height in lidar frame
),
),
refine_layer=dict(
type="SparsePoint3DRefinementModule",
embed_dims=embed_dims,
num_sample=num_sample,
num_cls=num_map_classes,
),
sampler=dict(
type="SparsePoint3DTarget",
assigner=dict(
type='HungarianLinesAssigner',
cost=dict(
type='MapQueriesCost',
cls_cost=dict(type='FocalLossCost', weight=1.0),
reg_cost=dict(type='LinesL1Cost', weight=10.0, beta=0.01, permute=True),
),
),
num_cls=num_map_classes,
num_sample=num_sample,
roi_size=roi_size,
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0,
),
loss_reg=dict(
type="SparseLineLoss",
loss_line=dict(
type='LinesL1Loss',
loss_weight=10.0,
beta=0.01,
),
num_sample=num_sample,
roi_size=roi_size,
),
decoder=dict(
type="SparsePoint3DDecoder",
score_threshold=0.5,
),
reg_weights=[1.0] * 40,
gt_cls_key="gt_map_labels",
gt_reg_key="gt_map_pts",
gt_id_key="map_instance_id",
with_instance_id=False,
task_prefix='map',
),
motion_plan_head=dict(
type='MotionPlanningHead',
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
motion_anchor=f'data/kmeans/kmeans_motion_{fut_mode}.npy',
plan_anchor=f'data/kmeans/kmeans_plan_{ego_fut_mode}.npy',
embed_dims=embed_dims,
decouple_attn=decouple_attn_motion,
instance_queue=dict(
type="InstanceQueue",
embed_dims=embed_dims,
queue_length=queue_length,
tracking_threshold=0.2,
feature_map_scale=(input_shape[1]/strides[-1], input_shape[0]/strides[-1]),
),
operation_order=(
[
"temp_gnn",
"gnn",
"norm",
"cross_gnn",
"norm",
"ffn",
"norm",
] * 3 +
[
"refine",
]
),
temp_graph_model=dict(
type="MultiheadAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
cross_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 2,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
refine_layer=dict(
type="MotionPlanningRefinementModule",
embed_dims=embed_dims,
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
),
motion_sampler=dict(
type="MotionTarget",
),
motion_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.2
),
motion_loss_reg=dict(type='L1Loss', loss_weight=0.2),
planning_sampler=dict(
type="PlanningTarget",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
),
plan_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.5,
),
plan_loss_reg=dict(type='L1Loss', loss_weight=1.0),
plan_loss_status=dict(type='L1Loss', loss_weight=1.0),
motion_decoder=dict(type="SparseBox3DMotionDecoder"),
planning_decoder=dict(
type="HierarchicalPlanningDecoder",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_rescore=True,
),
num_det=50,
num_map=10,
),
),
)
# ================== data ========================
dataset_type = "B2D3DDataset"
data_root = "data/bench2drive/"
anno_root = "data/infos/"
file_client_args = dict(backend="disk")
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True
)
train_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(
type="DenseDepthMapGenerator",
downsample=strides[:num_depth_layers],
),
dict(type="BBoxRotation"),
dict(type="PhotoMetricDistortionMultiViewImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=False,
normalize=False,
sample_num=num_sample,
permute=True,
),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
"gt_depth",
"focal",
"gt_bboxes_3d",
"gt_labels_3d",
'gt_map_labels',
'gt_map_pts',
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
'ego_status',
],
meta_keys=["T_global", "T_global_inv", "timestamp", "instance_id"],
),
]
test_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
'ego_status',
'gt_ego_fut_cmd',
],
meta_keys=["T_global", "T_global_inv", "timestamp"],
),
]
eval_pipeline = [
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=True,
normalize=False,
),
dict(
type='Collect',
keys=[
'vectors',
"gt_bboxes_3d",
"gt_labels_3d",
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
# 'fut_boxes'
],
meta_keys=['token', 'timestamp']
),
]
input_modality = dict(
use_lidar=False,
use_camera=True,
use_radar=False,
use_map=False,
use_external=False,
)
data_basic_config = dict(
type=dataset_type,
data_root=data_root,
classes=class_names,
map_classes=map_class_names,
name_mapping=NameMapping,
modality=input_modality,
sample_interval=5,
past_frames=2,
future_frames=6,
)
eval_config = dict(
**data_basic_config,
ann_file=anno_root + 'b2d_infos_val.pkl',
pipeline=eval_pipeline,
test_mode=True,
)
data_aug_conf = {
"resize_lim": (0.40, 0.47),
"final_dim": input_shape[::-1],
"bot_pct_lim": (0.0, 0.0),
"rot_lim": (-5.4, 5.4),
"H": 900,
"W": 1600,
"rand_flip": True,
"rot3d_range": [0, 0],
}
data = dict(
samples_per_gpu=batch_size,
workers_per_gpu=batch_size,
train=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_train.pkl",
pipeline=train_pipeline,
test_mode=False,
data_aug_conf=data_aug_conf,
with_seq_flag=True,
sequences_split_num=5,
keep_consistent_seq_aug=True,
),
val=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
test=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
)
# ================== training ========================
optimizer = dict(
type="AdamW",
lr=3e-4,
weight_decay=0.001,
paramwise_cfg=dict(
custom_keys={
"img_backbone": dict(lr_mult=0.1),
}
),
)
optimizer_config = dict(grad_clip=dict(max_norm=25, norm_type=2))
lr_config = dict(
policy="CosineAnnealing",
warmup="linear",
warmup_iters=500,
warmup_ratio=1.0 / 3,
min_lr_ratio=1e-3,
)
runner = dict(
type="IterBasedRunner",
max_iters=num_iters_per_epoch * num_epochs,
)
# ================== eval ========================
eval_mode = dict(
with_det=True,
with_tracking=False,
with_map=False,
with_motion=False,
with_planning=False,
tracking_threshold=0.2,
motion_threshhold=0.2,
)
evaluation = dict(
interval=num_iters_per_epoch*checkpoint_epoch_interval,
eval_mode=eval_mode,
)
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/sparsedrive_small_b2d_stage2_cmd_singleplan.py
================================================
# ================ base config ===================
version = "mini"
version = "base"
length = {'base': 234769, 'mini': 1933}
plugin = True
plugin_dir = "mmdet3d_plugin/"
dist_params = dict(backend="nccl")
log_level = "INFO"
work_dir = None
total_batch_size = 16
num_gpus = 8
batch_size = total_batch_size // num_gpus
num_iters_per_epoch = int(length[version] // (num_gpus * batch_size))
num_epochs = 10
checkpoint_epoch_interval = 2
checkpoint_config = dict(
interval=num_iters_per_epoch * checkpoint_epoch_interval
)
log_config = dict(
interval=51,
hooks=[
dict(type="TextLoggerHook", by_epoch=False),
dict(type="TensorboardLoggerHook"),
],
)
load_from = None
resume_from = None
workflow = [("train", 1)]
fp16 = dict(loss_scale=32.0)
input_shape = (704, 384)
# ================== model ========================
class_names = [
'car',
'van',
'truck',
'bicycle',
'traffic_sign',
'traffic_cone',
'traffic_light',
'pedestrian',
'others',
]
map_class_names = [
'Broken',
'Solid',
'SolidSolid',
# 'Center',
# 'TrafficLight',
# 'StopSign',
]
NameMapping = {
#=================vehicle=================
# bicycle
'vehicle.bh.crossbike': 'bicycle',
"vehicle.diamondback.century": 'bicycle',
"vehicle.gazelle.omafiets": 'bicycle',
# car
"vehicle.chevrolet.impala": 'car',
"vehicle.dodge.charger_2020": 'car',
"vehicle.dodge.charger_police": 'car',
"vehicle.dodge.charger_police_2020": 'car',
"vehicle.lincoln.mkz_2017": 'car',
"vehicle.lincoln.mkz_2020": 'car',
"vehicle.mini.cooper_s_2021": 'car',
"vehicle.mercedes.coupe_2020": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.nissan.patrol_2021": 'car',
"vehicle.audi.tt": 'car',
"vehicle.audi.etron": 'car',
"vehicle.ford.crown": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.tesla.model3": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/FordCrown/SM_FordCrown_parked.SM_FordCrown_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Charger/SM_ChargerParked.SM_ChargerParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Lincoln/SM_LincolnParked.SM_LincolnParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/MercedesCCC/SM_MercedesCCC_Parked.SM_MercedesCCC_Parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Mini2021/SM_Mini2021_parked.SM_Mini2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/NissanPatrol2021/SM_NissanPatrol2021_parked.SM_NissanPatrol2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/TeslaM3/SM_TeslaM3_parked.SM_TeslaM3_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": 'car',
# bus
# van
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": "van",
"vehicle.ford.ambulance": "van",
# truck
"vehicle.carlamotors.firetruck": 'truck',
#=========================================
#=================traffic sign============
# traffic.speed_limit
"traffic.speed_limit.30": 'traffic_sign',
"traffic.speed_limit.40": 'traffic_sign',
"traffic.speed_limit.50": 'traffic_sign',
"traffic.speed_limit.60": 'traffic_sign',
"traffic.speed_limit.90": 'traffic_sign',
"traffic.speed_limit.120": 'traffic_sign',
"traffic.stop": 'traffic_sign',
"traffic.yield": 'traffic_sign',
"traffic.traffic_light": 'traffic_light',
#=========================================
#===================Construction===========
"static.prop.warningconstruction" : 'traffic_cone',
"static.prop.warningaccident": 'traffic_cone',
"static.prop.trafficwarning": "traffic_cone",
#===================Construction===========
"static.prop.constructioncone": 'traffic_cone',
#=================pedestrian==============
"walker.pedestrian.0001": 'pedestrian',
"walker.pedestrian.0004": 'pedestrian',
"walker.pedestrian.0005": 'pedestrian',
"walker.pedestrian.0007": 'pedestrian',
"walker.pedestrian.0013": 'pedestrian',
"walker.pedestrian.0014": 'pedestrian',
"walker.pedestrian.0017": 'pedestrian',
"walker.pedestrian.0018": 'pedestrian',
"walker.pedestrian.0019": 'pedestrian',
"walker.pedestrian.0020": 'pedestrian',
"walker.pedestrian.0022": 'pedestrian',
"walker.pedestrian.0025": 'pedestrian',
"walker.pedestrian.0035": 'pedestrian',
"walker.pedestrian.0041": 'pedestrian',
"walker.pedestrian.0046": 'pedestrian',
"walker.pedestrian.0047": 'pedestrian',
# ==========================================
"static.prop.dirtdebris01": 'others',
"static.prop.dirtdebris02": 'others',
}
num_classes = len(class_names)
num_map_classes = len(map_class_names)
roi_size = (30, 60)
num_sample = 20
fut_ts = 6
fut_mode = 6
ego_fut_ts = 6
ego_fut_mode = 6
num_cmd = 1
queue_length = 4 # history + current
embed_dims = 256
num_groups = 8
num_decoder = 6
num_single_frame_decoder = 1
num_single_frame_decoder_map = 1
use_deformable_func = True # mmdet3d_plugin/ops/setup.py needs to be executed
strides = [4, 8, 16, 32]
num_levels = len(strides)
num_depth_layers = 3
drop_out = 0.1
temporal = True
temporal_map = True
decouple_attn = True
decouple_attn_map = False
decouple_attn_motion = True
with_quality_estimation = True
task_config = dict(
with_det=True,
with_map=True,
with_motion_plan=True,
)
model = dict(
type="SparseDrive",
use_grid_mask=True,
use_deformable_func=use_deformable_func,
img_backbone=dict(
type="ResNet",
depth=50,
num_stages=4,
frozen_stages=-1,
norm_eval=False,
style="pytorch",
with_cp=True,
out_indices=(0, 1, 2, 3),
norm_cfg=dict(type="BN", requires_grad=True),
pretrained="ckpt/resnet50-19c8e357.pth",
),
img_neck=dict(
type="FPN",
num_outs=num_levels,
start_level=0,
out_channels=embed_dims,
add_extra_convs="on_output",
relu_before_extra_convs=True,
in_channels=[256, 512, 1024, 2048],
),
# depth_branch=dict( # for auxiliary supervision only
# type="DenseDepthNet",
# embed_dims=embed_dims,
# num_depth_layers=num_depth_layers,
# loss_weight=0.2,
# ),
head=dict(
type="SparseDriveHead",
task_config=task_config,
det_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn,
instance_bank=dict(
type="InstanceBank",
num_anchor=900,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_det_900.npy",
anchor_handler=dict(type="SparseBox3DKeyPointsGenerator"),
num_temp_instances=600 if temporal else -1,
confidence_decay=0.9,
feat_grad=False,
),
anchor_encoder=dict(
type="SparseBox3DEncoder",
vel_dims=3,
embed_dims=[128, 32, 32, 64] if decouple_attn else 256,
mode="cat" if decouple_attn else "add",
output_fc=not decouple_attn,
in_loops=1,
out_loops=4 if decouple_attn else 2,
),
num_single_frame_decoder=num_single_frame_decoder,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder)
)[2:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparseBox3DKeyPointsGenerator",
num_learnable_pts=6,
fix_scale=[
[0, 0, 0],
[0.45, 0, 0],
[-0.45, 0, 0],
[0, 0.45, 0],
[0, -0.45, 0],
[0, 0, 0.45],
[0, 0, -0.45],
],
),
),
refine_layer=dict(
type="SparseBox3DRefinementModule",
embed_dims=embed_dims,
num_cls=num_classes,
refine_yaw=True,
with_quality_estimation=with_quality_estimation,
),
sampler=dict(
type="SparseBox3DTarget",
num_dn_groups=0,
num_temp_dn_groups=0,
dn_noise_scale=[2.0] * 3 + [0.5] * 7,
max_dn_gt=32,
add_neg_dn=True,
cls_weight=2.0,
box_weight=0.25,
reg_weights=[2.0] * 3 + [0.5] * 3 + [0.0] * 4,
cls_wise_reg_weights={
class_names.index("traffic_cone"): [
2.0,
2.0,
2.0,
1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
1.0,
],
},
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=2.0,
),
loss_reg=dict(
type="SparseBox3DLoss",
loss_box=dict(type="L1Loss", loss_weight=0.25),
loss_centerness=dict(type="CrossEntropyLoss", use_sigmoid=True),
loss_yawness=dict(type="GaussianFocalLoss"),
# cls_allow_reverse=[class_names.index("barrier")],
),
decoder=dict(type="SparseBox3DDecoder"),
reg_weights=[2.0] * 3 + [1.0] * 7,
),
map_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn_map,
instance_bank=dict(
type="InstanceBank",
num_anchor=100,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_map_100.npy",
anchor_handler=dict(type="SparsePoint3DKeyPointsGenerator"),
num_temp_instances=0 if temporal_map else -1,
confidence_decay=0.9,
feat_grad=True,
),
anchor_encoder=dict(
type="SparsePoint3DEncoder",
embed_dims=embed_dims,
num_sample=num_sample,
),
num_single_frame_decoder=num_single_frame_decoder_map,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder_map
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder_map)
)[:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal_map
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparsePoint3DKeyPointsGenerator",
embed_dims=embed_dims,
num_sample=num_sample,
num_learnable_pts=3,
fix_height=(0, 0.25, -0.25, 0.5, -0.5),
ground_height=-1.84, # ground height in lidar frame
),
),
refine_layer=dict(
type="SparsePoint3DRefinementModule",
embed_dims=embed_dims,
num_sample=num_sample,
num_cls=num_map_classes,
),
sampler=dict(
type="SparsePoint3DTarget",
assigner=dict(
type='HungarianLinesAssigner',
cost=dict(
type='MapQueriesCost',
cls_cost=dict(type='FocalLossCost', weight=1.0),
reg_cost=dict(type='LinesL1Cost', weight=10.0, beta=0.01, permute=True),
),
),
num_cls=num_map_classes,
num_sample=num_sample,
roi_size=roi_size,
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0,
),
loss_reg=dict(
type="SparseLineLoss",
loss_line=dict(
type='LinesL1Loss',
loss_weight=10.0,
beta=0.01,
),
num_sample=num_sample,
roi_size=roi_size,
),
decoder=dict(
type="SparsePoint3DDecoder",
score_threshold=0.5,
),
reg_weights=[1.0] * 40,
gt_cls_key="gt_map_labels",
gt_reg_key="gt_map_pts",
gt_id_key="map_instance_id",
with_instance_id=False,
task_prefix='map',
),
motion_plan_head=dict(
type='MotionPlanningHead',
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
motion_anchor=f'data/kmeans/kmeans_motion_{fut_mode}.npy',
plan_anchor=None,
#plan_anchor=f'data/kmeans/kmeans_plan_{ego_fut_mode}.npy',
embed_dims=embed_dims,
decouple_attn=decouple_attn_motion,
instance_queue=dict(
type="InstanceQueue",
embed_dims=embed_dims,
queue_length=queue_length,
frame_rate=1,
tracking_threshold=0.2,
feature_map_scale=(input_shape[1]/strides[-1], input_shape[0]/strides[-1]),
use_ego_status=False,
use_tp=['near',],
),
operation_order=(
[
"temp_gnn",
"gnn",
"norm",
"cross_gnn",
"norm",
"ffn",
"norm",
] * 3 +
[
"refine",
]
),
temp_graph_model=dict(
type="MultiheadAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
cross_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 2,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
refine_layer=dict(
type="MotionPlanningRefinementModule",
embed_dims=embed_dims,
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_gru=False,
),
motion_sampler=dict(
type="MotionTarget",
),
motion_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.2
),
motion_loss_reg=dict(type='L1Loss', loss_weight=0.2),
planning_sampler=dict(
type="PlanningTarget",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
),
plan_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.5,
),
plan_loss_reg=dict(type='L1Loss', loss_weight=1.0),
plan_loss_status=dict(type='L1Loss', loss_weight=1.0),
motion_decoder=dict(type="SparseBox3DMotionDecoder"),
planning_decoder=dict(
type="HierarchicalPlanningDecoder",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_rescore=True,
),
num_det=50,
num_map=10,
),
),
)
# ================== data ========================
dataset_type = "B2D3DDataset"
data_root = "data/bench2drive/"
anno_root = "data/infos/" if version == 'base' else "data/infos/mini/"
file_client_args = dict(backend="disk")
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True
)
train_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
# dict(
# type="DenseDepthMapGenerator",
# downsample=strides[:num_depth_layers],
# ),
dict(type="BBoxRotation"),
dict(type="PhotoMetricDistortionMultiViewImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=False,
normalize=False,
sample_num=num_sample,
permute=True,
),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
# "gt_depth",
"focal",
"gt_bboxes_3d",
"gt_labels_3d",
'gt_map_labels',
'gt_map_pts',
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
'ego_status',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp", "instance_id"],
),
]
test_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
'ego_status',
'gt_ego_fut_cmd',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp"],
),
]
eval_pipeline = [
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=True,
normalize=False,
),
dict(
type='Collect',
keys=[
'vectors',
"gt_bboxes_3d",
"gt_labels_3d",
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
# 'fut_boxes'
],
meta_keys=['token', 'timestamp']
),
]
input_modality = dict(
use_lidar=False,
use_camera=True,
use_radar=False,
use_map=False,
use_external=False,
)
data_basic_config = dict(
type=dataset_type,
data_root=data_root,
classes=class_names,
map_classes=map_class_names,
name_mapping=NameMapping,
modality=input_modality,
sample_interval=5,
past_frames=2,
future_frames=6,
use_cmd=num_cmd>1,
)
eval_config = dict(
**data_basic_config,
ann_file=anno_root + 'b2d_infos_val.pkl',
pipeline=eval_pipeline,
test_mode=True,
)
data_aug_conf = {
"resize_lim": (0.40, 0.47),
"final_dim": input_shape[::-1],
"bot_pct_lim": (0.0, 0.0),
"rot_lim": (-5.4, 5.4),
"H": 900,
"W": 1600,
"rand_flip": True,
"rot3d_range": [0, 0],
}
data = dict(
samples_per_gpu=batch_size,
workers_per_gpu=batch_size,
train=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_train.pkl",
pipeline=train_pipeline,
test_mode=False,
data_aug_conf=data_aug_conf,
with_seq_flag=True,
sequences_split_num=5,
keep_consistent_seq_aug=True,
),
val=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
test=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
)
# ================== training ========================
optimizer = dict(
type="AdamW",
lr=2e-4,
weight_decay=0.001,
paramwise_cfg=dict(
custom_keys={
"img_backbone": dict(lr_mult=0.1),
}
),
)
optimizer_config = dict(grad_clip=dict(max_norm=25, norm_type=2))
lr_config = dict(
policy="CosineAnnealing",
warmup="linear",
warmup_iters=500,
warmup_ratio=1.0 / 3,
min_lr_ratio=1e-3,
)
runner = dict(
type="IterBasedRunner",
max_iters=num_iters_per_epoch * num_epochs,
)
# ================== eval ========================
eval_mode = dict(
with_det=True,
with_tracking=False,
with_map=False,
with_motion=False,
with_planning=True,
tracking_threshold=0.2,
motion_threshhold=0.2,
)
evaluation = dict(
interval=num_iters_per_epoch*checkpoint_epoch_interval,
eval_mode=eval_mode,
)
# ================== pretrained model ========================
# load_from = 'http://svcspawner.bcloud-beijing.hobot.cc/user/homespace/wenchao.sun/plat_gpu/sparsedrive_small_b2d_stage1_20e-20240903-225131.954333/output/work_dirs/latest.pth'
load_from = "ckpt/sparsedrive_small_b2d_stage1.pth"
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/sparsedrive_small_b2d_stage2_targetpoint_multiplan.py
================================================
# ================ base config ===================
version = "mini"
version = "base"
length = {'base': 234769, 'mini': 1933}
plugin = True
plugin_dir = "mmdet3d_plugin/"
dist_params = dict(backend="nccl")
log_level = "INFO"
work_dir = None
total_batch_size = 16
num_gpus = 8
batch_size = total_batch_size // num_gpus
num_iters_per_epoch = int(length[version] // (num_gpus * batch_size))
num_epochs = 10
checkpoint_epoch_interval = 2
checkpoint_config = dict(
interval=num_iters_per_epoch * checkpoint_epoch_interval
)
log_config = dict(
interval=51,
hooks=[
dict(type="TextLoggerHook", by_epoch=False),
dict(type="TensorboardLoggerHook"),
],
)
load_from = None
resume_from = None
workflow = [("train", 1)]
fp16 = dict(loss_scale=32.0)
input_shape = (704, 384)
# ================== model ========================
class_names = [
'car',
'van',
'truck',
'bicycle',
'traffic_sign',
'traffic_cone',
'traffic_light',
'pedestrian',
'others',
]
map_class_names = [
'Broken',
'Solid',
'SolidSolid',
# 'Center',
# 'TrafficLight',
# 'StopSign',
]
NameMapping = {
#=================vehicle=================
# bicycle
'vehicle.bh.crossbike': 'bicycle',
"vehicle.diamondback.century": 'bicycle',
"vehicle.gazelle.omafiets": 'bicycle',
# car
"vehicle.chevrolet.impala": 'car',
"vehicle.dodge.charger_2020": 'car',
"vehicle.dodge.charger_police": 'car',
"vehicle.dodge.charger_police_2020": 'car',
"vehicle.lincoln.mkz_2017": 'car',
"vehicle.lincoln.mkz_2020": 'car',
"vehicle.mini.cooper_s_2021": 'car',
"vehicle.mercedes.coupe_2020": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.nissan.patrol_2021": 'car',
"vehicle.audi.tt": 'car',
"vehicle.audi.etron": 'car',
"vehicle.ford.crown": 'car',
"vehicle.ford.mustang": 'car',
"vehicle.tesla.model3": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/FordCrown/SM_FordCrown_parked.SM_FordCrown_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Charger/SM_ChargerParked.SM_ChargerParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Lincoln/SM_LincolnParked.SM_LincolnParked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/MercedesCCC/SM_MercedesCCC_Parked.SM_MercedesCCC_Parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/Mini2021/SM_Mini2021_parked.SM_Mini2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/NissanPatrol2021/SM_NissanPatrol2021_parked.SM_NissanPatrol2021_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/TeslaM3/SM_TeslaM3_parked.SM_TeslaM3_parked": 'car',
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": 'car',
# bus
# van
"/Game/Carla/Static/Car/4Wheeled/ParkedVehicles/VolkswagenT2/SM_VolkswagenT2_2021_Parked.SM_VolkswagenT2_2021_Parked": "van",
"vehicle.ford.ambulance": "van",
# truck
"vehicle.carlamotors.firetruck": 'truck',
#=========================================
#=================traffic sign============
# traffic.speed_limit
"traffic.speed_limit.30": 'traffic_sign',
"traffic.speed_limit.40": 'traffic_sign',
"traffic.speed_limit.50": 'traffic_sign',
"traffic.speed_limit.60": 'traffic_sign',
"traffic.speed_limit.90": 'traffic_sign',
"traffic.speed_limit.120": 'traffic_sign',
"traffic.stop": 'traffic_sign',
"traffic.yield": 'traffic_sign',
"traffic.traffic_light": 'traffic_light',
#=========================================
#===================Construction===========
"static.prop.warningconstruction" : 'traffic_cone',
"static.prop.warningaccident": 'traffic_cone',
"static.prop.trafficwarning": "traffic_cone",
#===================Construction===========
"static.prop.constructioncone": 'traffic_cone',
#=================pedestrian==============
"walker.pedestrian.0001": 'pedestrian',
"walker.pedestrian.0004": 'pedestrian',
"walker.pedestrian.0005": 'pedestrian',
"walker.pedestrian.0007": 'pedestrian',
"walker.pedestrian.0013": 'pedestrian',
"walker.pedestrian.0014": 'pedestrian',
"walker.pedestrian.0017": 'pedestrian',
"walker.pedestrian.0018": 'pedestrian',
"walker.pedestrian.0019": 'pedestrian',
"walker.pedestrian.0020": 'pedestrian',
"walker.pedestrian.0022": 'pedestrian',
"walker.pedestrian.0025": 'pedestrian',
"walker.pedestrian.0035": 'pedestrian',
"walker.pedestrian.0041": 'pedestrian',
"walker.pedestrian.0046": 'pedestrian',
"walker.pedestrian.0047": 'pedestrian',
# ==========================================
"static.prop.dirtdebris01": 'others',
"static.prop.dirtdebris02": 'others',
}
num_classes = len(class_names)
num_map_classes = len(map_class_names)
roi_size = (30, 60)
num_sample = 20
fut_ts = 6
fut_mode = 6
ego_fut_ts = 6
ego_fut_mode = 6
num_cmd = 1
queue_length = 4 # history + current
embed_dims = 256
num_groups = 8
num_decoder = 6
num_single_frame_decoder = 1
num_single_frame_decoder_map = 1
use_deformable_func = True # mmdet3d_plugin/ops/setup.py needs to be executed
strides = [4, 8, 16, 32]
num_levels = len(strides)
num_depth_layers = 3
drop_out = 0.1
temporal = True
temporal_map = True
decouple_attn = True
decouple_attn_map = False
decouple_attn_motion = True
with_quality_estimation = True
task_config = dict(
with_det=True,
with_map=True,
with_motion_plan=True,
)
model = dict(
type="SparseDrive",
use_grid_mask=True,
use_deformable_func=use_deformable_func,
img_backbone=dict(
type="ResNet",
depth=50,
num_stages=4,
frozen_stages=-1,
norm_eval=False,
style="pytorch",
with_cp=True,
out_indices=(0, 1, 2, 3),
norm_cfg=dict(type="BN", requires_grad=True),
pretrained="ckpt/resnet50-19c8e357.pth",
),
img_neck=dict(
type="FPN",
num_outs=num_levels,
start_level=0,
out_channels=embed_dims,
add_extra_convs="on_output",
relu_before_extra_convs=True,
in_channels=[256, 512, 1024, 2048],
),
# depth_branch=dict( # for auxiliary supervision only
# type="DenseDepthNet",
# embed_dims=embed_dims,
# num_depth_layers=num_depth_layers,
# loss_weight=0.2,
# ),
head=dict(
type="SparseDriveHead",
task_config=task_config,
det_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn,
instance_bank=dict(
type="InstanceBank",
num_anchor=900,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_det_900.npy",
anchor_handler=dict(type="SparseBox3DKeyPointsGenerator"),
num_temp_instances=600 if temporal else -1,
confidence_decay=0.9,
feat_grad=False,
),
anchor_encoder=dict(
type="SparseBox3DEncoder",
vel_dims=3,
embed_dims=[128, 32, 32, 64] if decouple_attn else 256,
mode="cat" if decouple_attn else "add",
output_fc=not decouple_attn,
in_loops=1,
out_loops=4 if decouple_attn else 2,
),
num_single_frame_decoder=num_single_frame_decoder,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder)
)[2:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparseBox3DKeyPointsGenerator",
num_learnable_pts=6,
fix_scale=[
[0, 0, 0],
[0.45, 0, 0],
[-0.45, 0, 0],
[0, 0.45, 0],
[0, -0.45, 0],
[0, 0, 0.45],
[0, 0, -0.45],
],
),
),
refine_layer=dict(
type="SparseBox3DRefinementModule",
embed_dims=embed_dims,
num_cls=num_classes,
refine_yaw=True,
with_quality_estimation=with_quality_estimation,
),
sampler=dict(
type="SparseBox3DTarget",
num_dn_groups=0,
num_temp_dn_groups=0,
dn_noise_scale=[2.0] * 3 + [0.5] * 7,
max_dn_gt=32,
add_neg_dn=True,
cls_weight=2.0,
box_weight=0.25,
reg_weights=[2.0] * 3 + [0.5] * 3 + [0.0] * 4,
cls_wise_reg_weights={
class_names.index("traffic_cone"): [
2.0,
2.0,
2.0,
1.0,
1.0,
1.0,
0.0,
0.0,
1.0,
1.0,
],
},
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=2.0,
),
loss_reg=dict(
type="SparseBox3DLoss",
loss_box=dict(type="L1Loss", loss_weight=0.25),
loss_centerness=dict(type="CrossEntropyLoss", use_sigmoid=True),
loss_yawness=dict(type="GaussianFocalLoss"),
# cls_allow_reverse=[class_names.index("barrier")],
),
decoder=dict(type="SparseBox3DDecoder"),
reg_weights=[2.0] * 3 + [1.0] * 7,
),
map_head=dict(
type="Sparse4DHead",
cls_threshold_to_reg=0.05,
decouple_attn=decouple_attn_map,
instance_bank=dict(
type="InstanceBank",
num_anchor=100,
embed_dims=embed_dims,
anchor="data/kmeans/kmeans_map_100.npy",
anchor_handler=dict(type="SparsePoint3DKeyPointsGenerator"),
num_temp_instances=0 if temporal_map else -1,
confidence_decay=0.9,
feat_grad=True,
),
anchor_encoder=dict(
type="SparsePoint3DEncoder",
embed_dims=embed_dims,
num_sample=num_sample,
),
num_single_frame_decoder=num_single_frame_decoder_map,
operation_order=(
[
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* num_single_frame_decoder_map
+ [
"temp_gnn",
"gnn",
"norm",
"deformable",
"ffn",
"norm",
"refine",
]
* (num_decoder - num_single_frame_decoder_map)
)[:],
temp_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
)
if temporal_map
else None,
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_map else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims * 2,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 4,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
deformable_model=dict(
type="DeformableFeatureAggregation",
embed_dims=embed_dims,
num_groups=num_groups,
num_levels=num_levels,
num_cams=6,
attn_drop=0.15,
use_deformable_func=use_deformable_func,
use_camera_embed=True,
residual_mode="cat",
kps_generator=dict(
type="SparsePoint3DKeyPointsGenerator",
embed_dims=embed_dims,
num_sample=num_sample,
num_learnable_pts=3,
fix_height=(0, 0.25, -0.25, 0.5, -0.5),
ground_height=-1.84, # ground height in lidar frame
),
),
refine_layer=dict(
type="SparsePoint3DRefinementModule",
embed_dims=embed_dims,
num_sample=num_sample,
num_cls=num_map_classes,
),
sampler=dict(
type="SparsePoint3DTarget",
assigner=dict(
type='HungarianLinesAssigner',
cost=dict(
type='MapQueriesCost',
cls_cost=dict(type='FocalLossCost', weight=1.0),
reg_cost=dict(type='LinesL1Cost', weight=10.0, beta=0.01, permute=True),
),
),
num_cls=num_map_classes,
num_sample=num_sample,
roi_size=roi_size,
),
loss_cls=dict(
type="FocalLoss",
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=1.0,
),
loss_reg=dict(
type="SparseLineLoss",
loss_line=dict(
type='LinesL1Loss',
loss_weight=10.0,
beta=0.01,
),
num_sample=num_sample,
roi_size=roi_size,
),
decoder=dict(
type="SparsePoint3DDecoder",
score_threshold=0.5,
),
reg_weights=[1.0] * 40,
gt_cls_key="gt_map_labels",
gt_reg_key="gt_map_pts",
gt_id_key="map_instance_id",
with_instance_id=False,
task_prefix='map',
),
motion_plan_head=dict(
type='MotionPlanningHead',
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
motion_anchor=f'data/kmeans/kmeans_motion_{fut_mode}.npy',
plan_anchor=None,
# plan_anchor=f'data/kmeans/kmeans_plan_{ego_fut_mode}_b2d.npy',
embed_dims=embed_dims,
decouple_attn=decouple_attn_motion,
instance_queue=dict(
type="InstanceQueue",
embed_dims=embed_dims,
queue_length=queue_length,
frame_rate=1,
tracking_threshold=0.2,
feature_map_scale=(input_shape[1]/strides[-1], input_shape[0]/strides[-1]),
use_ego_status=False,
use_tp=['near',],
),
operation_order=(
[
"temp_gnn",
"gnn",
"norm",
"cross_gnn",
"norm",
"ffn",
"norm",
] * 3 +
[
"refine",
]
),
temp_graph_model=dict(
type="MultiheadAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims if not decouple_attn_motion else embed_dims * 2,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
cross_graph_model=dict(
type="MultiheadFlashAttention",
embed_dims=embed_dims,
num_heads=num_groups,
batch_first=True,
dropout=drop_out,
),
norm_layer=dict(type="LN", normalized_shape=embed_dims),
ffn=dict(
type="AsymmetricFFN",
in_channels=embed_dims,
pre_norm=dict(type="LN"),
embed_dims=embed_dims,
feedforward_channels=embed_dims * 2,
num_fcs=2,
ffn_drop=drop_out,
act_cfg=dict(type="ReLU", inplace=True),
),
refine_layer=dict(
type="MotionPlanningRefinementModule",
embed_dims=embed_dims,
fut_ts=fut_ts,
fut_mode=fut_mode,
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_gru=False,
),
motion_sampler=dict(
type="MotionTarget",
),
motion_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.2
),
motion_loss_reg=dict(type='L1Loss', loss_weight=0.2),
planning_sampler=dict(
type="PlanningTarget",
ego_fut_ts=ego_fut_ts,#6
ego_fut_mode=ego_fut_mode,#6
num_cmd=num_cmd,#1
),
plan_loss_cls=dict(
type='FocalLoss',
use_sigmoid=True,
gamma=2.0,
alpha=0.25,
loss_weight=0.5,
),
plan_loss_reg=dict(type='L1Loss', loss_weight=1.0),
plan_loss_status=dict(type='L1Loss', loss_weight=1.0),
motion_decoder=dict(type="SparseBox3DMotionDecoder"),
planning_decoder=dict(
type="HierarchicalPlanningDecoder",
ego_fut_ts=ego_fut_ts,
ego_fut_mode=ego_fut_mode,
num_cmd=num_cmd,
use_rescore=True,
),
num_det=50,
num_map=10,
),
),
)
# ================== data ========================
dataset_type = "B2D3DDataset"
data_root = "data/bench2drive/"
anno_root = "data/infos/" if version == 'base' else "data/infos/mini/"
file_client_args = dict(backend="disk")
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True
)
train_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
# dict(
# type="DenseDepthMapGenerator",
# downsample=strides[:num_depth_layers],
# ),
dict(type="BBoxRotation"),
dict(type="PhotoMetricDistortionMultiViewImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=False,
normalize=False,
sample_num=num_sample,
permute=True,
),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
# "gt_depth",
"focal",
"gt_bboxes_3d",
"gt_labels_3d",
'gt_map_labels',
'gt_map_pts',
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
'ego_status',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp", "instance_id"],
),
]
test_pipeline = [
dict(type="LoadMultiViewImageFromFiles", to_float32=True),
dict(type="ResizeCropFlipImage"),
dict(type="NormalizeMultiviewImage", **img_norm_cfg),
dict(type="NuScenesSparse4DAdaptor"),
dict(
type="Collect",
keys=[
"img",
"timestamp",
"projection_mat",
"image_wh",
'ego_status',
'gt_ego_fut_cmd',
'tp_near',
'tp_far',
],
meta_keys=["T_global", "T_global_inv", "timestamp"],
),
]
eval_pipeline = [
dict(
type="CircleObjectRangeFilter",
class_dist_thred=[55] * len(class_names),
),
dict(type="InstanceNameFilter", classes=class_names),
dict(
type='VectorizeMap',
roi_size=roi_size,
simplify=True,
normalize=False,
),
dict(
type='Collect',
keys=[
'vectors',
"gt_bboxes_3d",
"gt_labels_3d",
'gt_agent_fut_trajs',
'gt_agent_fut_masks',
'gt_ego_fut_trajs',
'gt_ego_fut_masks',
'gt_ego_fut_cmd',
# 'fut_boxes'
],
meta_keys=['token', 'timestamp']
),
]
input_modality = dict(
use_lidar=False,
use_camera=True,
use_radar=False,
use_map=False,
use_external=False,
)
data_basic_config = dict(
type=dataset_type,
data_root=data_root,
classes=class_names,
map_classes=map_class_names,
name_mapping=NameMapping,
modality=input_modality,
sample_interval=5,
past_frames=2,
future_frames=6,
use_cmd=num_cmd>1,
)
eval_config = dict(
**data_basic_config,
ann_file=anno_root + 'b2d_infos_val.pkl',
pipeline=eval_pipeline,
test_mode=True,
)
data_aug_conf = {
"resize_lim": (0.40, 0.47),
"final_dim": input_shape[::-1],
"bot_pct_lim": (0.0, 0.0),
"rot_lim": (-5.4, 5.4),
"H": 900,
"W": 1600,
"rand_flip": True,
"rot3d_range": [0, 0],
}
data = dict(
samples_per_gpu=batch_size,
workers_per_gpu=batch_size,
train=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_train.pkl",
pipeline=train_pipeline,
test_mode=False,
data_aug_conf=data_aug_conf,
with_seq_flag=True,
sequences_split_num=5,
keep_consistent_seq_aug=True,
),
val=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
test=dict(
**data_basic_config,
ann_file=anno_root + "b2d_infos_val.pkl",
pipeline=test_pipeline,
data_aug_conf=data_aug_conf,
test_mode=True,
eval_config=eval_config,
),
)
# ================== training ========================
optimizer = dict(
type="AdamW",
lr=2e-4,
weight_decay=0.001,
paramwise_cfg=dict(
custom_keys={
"img_backbone": dict(lr_mult=0.1),
}
),
)
optimizer_config = dict(grad_clip=dict(max_norm=25, norm_type=2))
lr_config = dict(
policy="CosineAnnealing",
warmup="linear",
warmup_iters=500,
warmup_ratio=1.0 / 3,
min_lr_ratio=1e-3,
)
runner = dict(
type="IterBasedRunner",
max_iters=num_iters_per_epoch * num_epochs,
)
# ================== eval ========================
eval_mode = dict(
with_det=True,
with_tracking=False,
with_map=False,
with_motion=False,
with_planning=True,
tracking_threshold=0.2,
motion_threshhold=0.2,
)
evaluation = dict(
interval=num_iters_per_epoch*checkpoint_epoch_interval,
eval_mode=eval_mode,
)
# ================== pretrained model ========================
# load_from = 'http://svcspawner.bcloud-beijing.hobot.cc/user/homespace/wenchao.sun/plat_gpu/sparsedrive_small_b2d_stage1_20e-20240903-225131.954333/output/work_dirs/latest.pth'
load_from = "ckpt/sparsedrive_small_b2d_stage1.pth"
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/dist_train.sh
================================================
#!/usr/bin/env bash
CONFIG=$1
GPUS=$2
PORT=${PORT:-28512}
PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \
$(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3} --deterministic
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/create_data.sh
================================================
export PYTHONPATH="$(dirname $0)/..":$PYTHONPATH
#python tools/data_converter/B2D_converter.py nuscenes \
## --root-path ./data/nuscenes \
# --canbus ./data/nuscenes \
# --out-dir ./data/infos/ \
# --extra-tag nuscenes \
# --version v1.0
python adzoo/sparsedrive/tools/data_converter/B2D_converter.py
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/kmeans.sh
================================================
python tools/kmeans/kmeans_det.py
python tools/kmeans/kmeans_map.py
python tools/kmeans/kmeans_motion.py
python tools/kmeans/kmeans_plan.py
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/test.sh
================================================
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7\
bash ./tools/dist_test.sh \
projects/configs/sparsedrive_small_stage2.py \
work_dirs/sparsedrive_small_stage2/iter_5860.pth \
8 \
--deterministic \
--eval bbox
# --result_file ./work_dirs/sparsedrive_small_stage2/results.pkl
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/test_roboAD.sh
================================================
# bash ./tools/dist_test.sh \
# projects/configs/sparsedrive_small_stage2.py \
# ckpt/sparsedrive_stage2.pth \
# 8 \
# --deterministic \
# --ev/data/songziying/workspace/SparseDrive/scriptsal bbox
# # --result_file ./work_dirs/sparsedrive_small_stage2/results.pkl
bash ./tools/dist_test.sh \
projects/configs/sparsedrive_small_stage2_roboAD_6s.py \
work_dirs/sparsedrive_small_stage2_roboAD_6s/iter_5860.pth\
1 \
--deterministic \
--eval bbox
# --result_file ./work_dirs/sparsedrive_small_stage2_roboAD/results.pkl
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/train.sh
================================================
## stage1
# bash ./tools/dist_train.sh \
# projects/configs/sparsedrive_small_trainval_1_10_stage1_test.py \
# 1 \
# --deterministic
# stage2
bash ./adzoo/sparsedrive/tools/dist_train.sh \
./adzoo/sparsedrive/configs/sparsedrive_small_stage2.py \
8 \
--deterministic
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/train_6s.sh
================================================
## stage1
# bash ./tools/dist_train.sh \
# projects/configs/sparsedrive_small_trainval_1_10_stage1_test.py \
# 1 \
# --deterministic
# stage2
bash ./tools/dist_train.sh \
projects/configs/sparsedrive_small_stage2_6s.py \
8 \
--deterministic
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/train_roboAD.sh
================================================
## stage1
# bash ./tools/dist_train.sh \
# projects/configs/sparsedrive_small_stage1_roboAD.py \
# 1 \
# --deterministic
## stage2
# bash ./tools/dist_train.sh \
# projects/configs/sparsedrive_small_stage2_roboAD.py \
# 8 \
# --deterministic
bash ./tools/dist_train.sh \
projects/configs/sparsedrive_small_stage2_roboAD_6s.py \
8 \
--deterministic
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/visualize.sh
================================================
export PYTHONPATH="$(dirname $0)/..":$PYTHONPATH
python tools/visualization/visualize.py \
projects/configs/sparsedrive_small_stage2.py \
--result-path work_dirs/sparsedrive_small_stage2/results.pkl
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/benchmark.py
================================================
# Copyright (c) OpenMMLab. All rights reserved.
import argparse
import time
import torch
from mmcv import Config
from mmcv.parallel import MMDataParallel
from mmcv.runner import load_checkpoint, wrap_fp16_model
import sys
sys.path.append('.')
from projects.mmdet3d_plugin.datasets.builder import build_dataloader
from projects.mmdet3d_plugin.datasets import custom_build_dataset
from mmdet.models import build_detector
from mmcv.cnn.utils.flops_counter import add_flops_counting_methods
from mmcv.parallel import scatter
def parse_args():
parser = argparse.ArgumentParser(description='MMDet benchmark a model')
parser.add_argument('config', help='test config file path')
parser.add_argument('--checkpoint', default=None, help='checkpoint file')
parser.add_argument('--samples', default=1000, help='samples to benchmark')
parser.add_argument(
'--log-interval', default=50, help='interval of logging')
parser.add_argument(
'--fuse-conv-bn',
action='store_true',
help='Whether to fuse conv and bn, this will slightly increase'
'the inference speed')
args = parser.parse_args()
return args
def get_max_memory(model):
device = getattr(model, 'output_device', None)
mem = torch.cuda.max_memory_allocated(device=device)
mem_mb = torch.tensor([mem / (1024 * 1024)],
dtype=torch.int,
device=device)
return mem_mb.item()
def main():
args = parse_args()
get_flops_params(args)
get_mem_fps(args)
def get_mem_fps(args):
cfg = Config.fromfile(args.config)
# set cudnn_benchmark
if cfg.get('cudnn_benchmark', False):
torch.backends.cudnn.benchmark = True
cfg.model.pretrained = None
cfg.data.test.test_mode = True
# build the dataloader
# TODO: support multiple images per gpu (only minor changes are needed)
print(cfg.data.test)
dataset = custom_build_dataset(cfg.data.test)
data_loader = build_dataloader(
dataset,
samples_per_gpu=1,
workers_per_gpu=cfg.data.workers_per_gpu,
dist=False,
shuffle=False)
# build the model and load checkpoint
cfg.model.train_cfg = None
model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg'))
fp16_cfg = cfg.get('fp16', None)
if fp16_cfg is not None:
wrap_fp16_model(model)
if args.checkpoint is not None:
load_checkpoint(model, args.checkpoint, map_location='cpu')
# if args.fuse_conv_bn:
# model = fuse_module(model)
model = MMDataParallel(model, device_ids=[0])
model.eval()
# the first several iterations may be very slow so skip them
num_warmup = 5
pure_inf_time = 0
# benchmark with several samples and take the average
max_memory = 0
for i, data in enumerate(data_loader):
# torch.cuda.synchronize()
with torch.no_grad():
start_time = time.perf_counter()
model(return_loss=False, rescale=True, **data)
torch.cuda.synchronize()
elapsed = time.perf_counter() - start_time
max_memory = max(max_memory, get_max_memory(model))
if i >= num_warmup:
pure_inf_time += elapsed
if (i + 1) % args.log_interval == 0:
fps = (i + 1 - num_warmup) / pure_inf_time
print(f'Done image [{i + 1:<3}/ {args.samples}], '
f'fps: {fps:.1f} img / s, '
f"gpu mem: {max_memory} M")
if (i + 1) == args.samples:
pure_inf_time += elapsed
fps = (i + 1 - num_warmup) / pure_inf_time
print(f'Overall fps: {fps:.1f} img / s')
break
def get_flops_params(args):
gpu_id = 0
cfg = Config.fromfile(args.config)
dataset = custom_build_dataset(cfg.data.val)
dataloader = build_dataloader(
dataset,
samples_per_gpu=1,
workers_per_gpu=0,
dist=False,
shuffle=False,
)
data_iter = dataloader.__iter__()
data = next(data_iter)
data = scatter(data, [gpu_id])[0]
cfg.model.train_cfg = None
model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg'))
fp16_cfg = cfg.get('fp16', None)
if fp16_cfg is not None:
wrap_fp16_model(model)
if args.checkpoint is not None:
load_checkpoint(model, args.checkpoint, map_location='cpu')
model = model.cuda(gpu_id)
model.eval()
bilinear_flops = 11
num_key_pts_det = (
cfg.model["head"]['det_head']["deformable_model"]["kps_generator"]["num_learnable_pts"]
+ len(cfg.model["head"]['det_head']["deformable_model"]["kps_generator"]["fix_scale"])
)
deformable_agg_flops_det = (
cfg.num_decoder
* cfg.embed_dims
* cfg.num_levels
* cfg.model["head"]['det_head']["instance_bank"]["num_anchor"]
* cfg.model["head"]['det_head']["deformable_model"]["num_cams"]
* num_key_pts_det
* bilinear_flops
)
num_key_pts_map = (
cfg.model["head"]['map_head']["deformable_model"]["kps_generator"]["num_learnable_pts"]
+ len(cfg.model["head"]['map_head']["deformable_model"]["kps_generator"]["fix_height"])
) * cfg.model["head"]['map_head']["deformable_model"]["kps_generator"]["num_sample"]
deformable_agg_flops_map = (
cfg.num_decoder
* cfg.embed_dims
* cfg.num_levels
* cfg.model["head"]['map_head']["instance_bank"]["num_anchor"]
* cfg.model["head"]['map_head']["deformable_model"]["num_cams"]
* num_key_pts_map
* bilinear_flops
)
deformable_agg_flops = deformable_agg_flops_det + deformable_agg_flops_map
for module in ["total", "img_backbone", "img_neck", "head"]:
if module != "total":
flops_model = add_flops_counting_methods(getattr(model, module))
else:
flops_model = add_flops_counting_methods(model)
flops_model.eval()
flops_model.start_flops_count()
if module == "img_backbone":
flops_model(data["img"].flatten(0, 1))
elif module == "img_neck":
flops_model(model.img_backbone(data["img"].flatten(0, 1)))
elif module == "head":
flops_model(model.extract_feat(data["img"], metas=data), data)
else:
flops_model(**data)
flops_count, params_count = flops_model.compute_average_flops_cost()
flops_count *= flops_model.__batch_counter__
flops_model.stop_flops_count()
if module == "head" or module == "total":
flops_count += deformable_agg_flops
if module == "total":
total_flops = flops_count
total_params = params_count
print(
f"{module:<13} complexity: "
f"FLOPs={flops_count/ 10.**9:>8.4f} G / {flops_count/total_flops*100:>6.2f}%, "
f"Params={params_count/10**6:>8.4f} M / {params_count/total_params*100:>6.2f}%."
)
if __name__ == '__main__':
main()
================================================
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/B2D_converter.py
================================================
import os
from os.path import join
import gzip, json, pickle
import numpy as np
from pyquaternion import Quaternion
from tqdm import tqdm
import copy
# from vis_utils import calculate_cube_vertices,calculate_occlusion_stats,edges,DIS_CAR_SAVE
import cv2
import multiprocessing
import argparse
from shapely.geometry import LineString
# All data in the Bench2Drive dataset are in the left-handed coordinate system.
# This code converts all coordinate systems (world coordinate system, vehicle coordinate system,
# camera coordinate system, and lidar coordinate system) to the right-handed coordinate system
# consistent with the nuscenes dataset.
DATAROOT = 'data/bench2drive'
MAP_ROOT = 'data/bench2drive/maps'
OUT_DIR = 'data/infos'
# split_file = 'data/bench2drive/bench2drive_mini_train_val_split.json'
split_file = 'data/splits/bench2drive_base_train_val_split.json'
MAP_CLASSES = [
'Broken',
'Solid',
'SolidSolid',
'Center',
'TrafficLight',
'StopSign',
]
point_cloud_range = [-15.0, -30.0, -2.0, 15.0, 30.0, 2.0]
MAX_DISTANCE = 75 # Filter bounding boxes that are too far from the vehicle
FILTER_Z_SHRESHOLD = 10 # Filter bounding boxes that are too high/low from the vehicle
FILTER_INVISINLE = True # Filter bounding boxes based on visibility
NUM_VISIBLE_SHRESHOLD = 1 # Filter bounding boxes with fewer visible vertices than this value
NUM_OUTPOINT_SHRESHOLD = 7 # Filter bounding boxes where the number of vertices outside the frame is greater than this value in all cameras
CAMERAS = ['CAM_FRONT', 'CAM_FRONT_RIGHT', 'CAM_FRONT_LEFT', 'CAM_BACK', 'CAM_BACK_LEFT', 'CAM_BACK_RIGHT']
CAMERA_TO_FOLDER_MAP = {'CAM_FRONT':'rgb_front', 'CAM_FRONT_LEFT':'rgb_front_left', 'CAM_FRONT_RIGHT':'rgb_front_right', 'CAM_BACK':'rgb_back', 'CAM_BACK_LEFT':'rgb_back_left', 'CAM_BACK_RIGHT':'rgb_back_right'}
stand_to_ue4_rotate = np.array([[ 0, 0, 1, 0],
[ 1, 0, 0, 0],
[ 0,-1, 0, 0],
[ 0, 0, 0, 1]])
lidar_to_righthand_ego = np.array([[ 0, 1, 0, 0],
[ -1, 0, 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
lefthand_ego_to_lidar = np.array([[ 0, 1, 0, 0],
[ 1, 0, 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
left2right = np.eye(4)
left2right[1,1] = -1
WINDOW_HEIGHT = 900
WINDOW_WIDTH = 1600
def point_in_canvas_hw(pos):
"""Return true if point is in canvas"""
if (pos[0] >= 0) and (pos[0] < WINDOW_HEIGHT) and (pos[1] >= 0) and (pos[1] < WINDOW_WIDTH):
return True
return False
def calculate_cube_vertices(center, extent):
cx, cy, cz = center
x, y, z = extent
vertices = [
(cx + x, cy + y, cz + z),
(cx + x, cy + y, cz - z),
(cx + x, cy - y, cz + z),
(cx + x, cy - y, cz - z),
(cx - x, cy + y, cz + z),
(cx - x, cy + y, cz - z),
(cx - x, cy - y, cz + z),
(cx - x, cy - y, cz - z)
]
return vertices
def calculate_occlusion_stats(bbox_points, depth, depth_map, max_render_depth):
""" Draws each vertex in vertices_pos2d if it is in front of the camera
The color is based on whether the object is occluded or not.
Returns the number of visible vertices and the number of vertices outside the camera.
"""
num_visible_vertices = 0
num_invisible_vertices = 0
num_vertices_outside_camera = 0
points = []
for i in range(len(bbox_points)):
x_2d = bbox_points[i][0]
y_2d = bbox_points[i][1]
point_depth = depth[i]
# if the point is in front of the camera but not too far away
if max_render_depth > point_depth > 0 and point_in_canvas_hw((y_2d, x_2d)):
#is_occluded_v = point_is_occluded_vectorized([[y_2d, x_2d]], point_depth, depth_map)
is_occluded = point_is_occluded(
(y_2d, x_2d), point_depth, depth_map)
if is_occluded:
vertex_color = (0,0,255) # bgr, red
num_invisible_vertices += 1
else:
num_visible_vertices += 1
vertex_color = (0,255,0) # bgr, green
points.append((x_2d, y_2d, vertex_color))
else:
num_vertices_outside_camera += 1
return num_visible_vertices, num_invisible_vertices, num_vertices_outside_camera, points
def point_is_occluded(point, vertex_depth, depth_map):
""" Checks whether or not the four pixels directly around the given point has less depth than the given vertex depth
If True, this means that the point is occluded.
"""
y, x = map(int, point)
from itertools import product
neigbours = product((1, -1), repeat=2)
is_occluded = []
for dy, dx in neigbours:
if point_in_canvas_hw((dy+y, dx+x)):
# If the depth map says the pixel is closer to the camera than the actual vertex
if depth_map[y+dy, x+dx] < vertex_depth:
is_occluded.append(True)
else:
is_occluded.append(False)
# Only say point is occluded if all four neighbours are closer to camera than vertex
return all(is_occluded)
def apply_trans(vec,world2ego):
vec = np.concatenate((vec,np.array([1])))
t = world2ego @ vec
return t[0:3]
def get_pose_matrix(dic):
new_matrix = np.zeros((4,4))
new_matrix[0:3,0:3] = Quaternion(axis=[0, 0, 1], radians=dic['theta']-np.pi/2).rotation_matrix
new_matrix[0,3] = dic['x']
new_matrix[1,3] = dic['y']
new_matrix[3,3] = 1
return new_matrix
def get_npc2world(npc):
for key in ['world2vehicle','world2ego','world2sign','world2ped']:
if key in npc.keys():
npc2world = np.linalg.inv(np.array(npc[key]))
yaw_from_matrix = np.arctan2(npc2world[1,0], npc2world[0,0])
yaw = npc['rotation'][-1] / 180 * np.pi
if abs(yaw-yaw_from_matrix)> 0.01:
npc2world[0:3,0:3] = Quaternion(axis=[0, 0, 1], radians=yaw).rotation_matrix
npc2world = left2right @ npc2world @ left2right
return npc2world
npc2world = np.eye(4)
npc2world[0:3,0:3] = Quaternion(axis=[0, 0, 1], radians=npc['rotation'][-1]/180*np.pi).rotation_matrix
npc2world[0:3,3] = np.array(npc['location'])
return left2right @ npc2world @ left2right
def get_global_trigger_vertex(center,extent,yaw_in_degree):
x,y = center[0],-center[1]
dx,dy = extent[0],extent[1]
yaw_in_radians = -yaw_in_degree/180*np.pi
vertex_in_self = np.array([[ dx, dy],
[-dx, dy],
[-dx,-dy],
[ dx,-dy]])
rotate_matrix = np.array([[np.cos(yaw_in_radians),-np.sin(yaw_in_radians)],
[np.sin(yaw_in_radians), np.cos(yaw_in_radians)]])
rotated_vertex = (rotate_matrix @ vertex_in_self.T).T
vertex_in_global = np.array([[x,y]]).repeat(4,axis=0) + rotated_vertex
return vertex_in_global
def get_image_point(loc, K, w2c):
point = np.array([loc[0], loc[1], loc[2], 1])
point_camera = np.dot(w2c, point)
point_camera = point_camera[0:3]
depth = point_camera[2]
point_img = np.dot(K, point_camera)
point_img[0] /= point_img[2]
point_img[1] /= point_img[2]
return point_img[0:2], depth
def get_action(index):
Discrete_Actions_DICT = {
0: (0, 0, 1, False),
1: (0.7, -0.5, 0, False),
2: (0.7, -0.3, 0, False),
3: (0.7, -0.2, 0, False),
4: (0.7, -0.1, 0, False),
5: (0.7, 0, 0, False),
6: (0.7, 0.1, 0, False),
7: (0.7, 0.2, 0, False),
8: (0.7, 0.3, 0, False),
9: (0.7, 0.5, 0, False),
10: (0.3, -0.7, 0, False),
11: (0.3, -0.5, 0, False),
12: (0.3, -0.3, 0, False),
13: (0.3, -0.2, 0, False),
14: (0.3, -0.1, 0, False),
15: (0.3, 0, 0, False),
16: (0.3, 0.1, 0, False),
17: (0.3, 0.2, 0, False),
18: (0.3, 0.3, 0, False),
19: (0.3, 0.5, 0, False),
20: (0.3, 0.7, 0, False),
21: (0, -1, 0, False),
22: (0, -0.6, 0, False),
23: (0, -0.3, 0, False),
24: (0, -0.1, 0, False),
25: (1, 0, 0, False),
26: (0, 0.1, 0, False),
27: (0, 0.3, 0, False),
28: (0, 0.6, 0, False),
29: (0, 1.0, 0, False),
30: (0.5, -0.5, 0, True),
31: (0.5, -0.3, 0, True),
32: (0.5, -0.2, 0, True),
33: (0.5, -0.1, 0, True),
34: (0.5, 0, 0, True),
35: (0.5, 0.1, 0, True),
36: (0.5, 0.2, 0, True),
37: (0.5, 0.3, 0, True),
38: (0.5, 0.5, 0, True),
}
throttle, steer, brake, reverse = Discrete_Actions_DICT[index]
return throttle, steer, brake
def gengrate_map(map_root):
map_infos = {}
for file_name in os.listdir(map_root):
if '.npz' in file_name:
map_info = dict(np.load(join(map_root,file_name), allow_pickle=True)['arr'])
town_name = file_name.split('_')[0]
map_infos[town_name] = {}
lane_points = []
lane_types = []
lane_sample_points = []
trigger_volumes_points = []
trigger_volumes_types = []
trigger_volumes_sample_points = []
for road_id, road in map_info.items():
for lane_id, lane in road.items():
if lane_id == 'Trigger_Volumes':
for single_trigger_volume in lane:
points = np.array(single_trigger_volume['Points'])
points[:,1] *= -1 #left2right
trigger_volumes_points.append(points)
trigger_volumes_sample_points.append(points.mean(axis=0))
trigger_volumes_types.append(single_trigger_volume['Type'])
else:
for single_lane in lane:
points = np.array([raw_point[0] for raw_point in single_lane['Points']])
points[:,1] *= -1
lane_points.append(points)
lane_types.append(single_lane['Type'])
lane_lenth = points.shape[0]
if lane_lenth % 50 != 0:
devide_points = [50*i for i in range(lane_lenth//50+1)]
else:
devide_points = [50*i for i in range(lane_lenth//50)]
devide_points.append(lane_lenth-1)
lane_sample_points_tmp = points[devide_points]
lane_sample_points.append(lane_sample_points_tmp)
map_infos[town_name]['lane_points'] = lane_points
map_infos[town_name]['lane_sample_points'] = lane_sample_points
map_infos[town_name]['lane_types'] = lane_types
map_infos[town_name]['trigger_volumes_points'] = trigger_volumes_points
map_infos[town_name]['trigger_volumes_sample_points'] = trigger_volumes_sample_points
map_infos[town_name]['trigger_volumes_types'] = trigger_volumes_types
with open(join(OUT_DIR,'b2d_map_infos.pkl'),'wb') as f:
pickle.dump(map_infos,f)
return map_infos
def preprocess(folder_list,idx,tmp_dir,train_or_val,map_infos):
data_root = DATAROOT
cameras = CAMERAS
final_data = []
if idx == 0:
folders = tqdm(folder_list)
else:
folders = folder_list
for folder_name in folders:
print(folder_name)
folder_path = join(data_root, folder_name)
last_position_dict = {}
for ann_name in sorted(os.listdir(join(folder_path,'anno')),key= lambda x: int(x.split('.')[0])):
if idx == 0:
print(ann_name)
position_dict = {}
frame_data = {}
cam_gray_depth = {}
with gzip.open(join(folder_path,'anno',ann_name), 'rt', encoding='utf-8') as gz_file:
anno = json.load(gz_file)
frame_data['folder'] = folder_name
frame_data['town_name'] = folder_name.split('/')[1].split('_')[1]
frame_data['command_far_xy'] = np.array([anno['x_command_far'],-anno['y_command_far']])
frame_data['command_far'] = anno['command_far']
frame_data['command_near_xy'] = np.array([anno['x_command_near'],-anno['y_command_near']])
frame_data['command_near'] = anno['command_near']
frame_data['frame_idx'] = int(ann_name.split('.')[0])
frame_data['timestamp'] = int(ann_name.split('.')[0]) / 10 * 1e6 # consistent with nusc
frame_data['token'] = folder_name + '_' + str(int(ann_name.split('.')[0])).zfill(4)
frame_data['ego_yaw'] = -np.nan_to_num(anno['theta'],nan=np.pi)+np.pi/2
frame_data['ego_translation'] = np.array([anno['x'],-anno['y'],0])
frame_data['ego_vel'] = np.array([anno['speed'],0,0])
frame_data['ego_accel'] = np.array([anno['acceleration'][0],-anno['acceleration'][1],anno['acceleration'][2]])
frame_data['ego_rotation_rate'] = -np.array(anno['angular_velocity'])
frame_data['ego_size'] = np.array([anno['bounding_boxes'][0]['extent'][1],anno['bounding_boxes'][0]['extent'][0],anno['bounding_boxes'][0]['extent'][2]])*2
world2ego = left2right @ anno['bounding_boxes'][0]['world2ego'] @ left2right
frame_data['world2ego'] = world2ego
if frame_data['frame_idx'] == 0:
expert_file_path = join(folder_path,'expert_assessment','-0001.npz')
else:
expert_file_path = join(folder_path,'expert_assessment',str(frame_data['frame_idx']-1).zfill(5)+'.npz')
expert_data = np.load(expert_file_path,allow_pickle=True)['arr_0']
action_id = expert_data[-1]
# value = expert_data[-2]
# expert_feature = expert_data[:-2]
throttle, steer, brake = get_action(action_id)
frame_data['brake'] = brake
frame_data['throttle'] = throttle
frame_data['steer'] = steer
#frame_data['action_id'] = action_id
#frame_data['value'] = value
#frame_data['expert_feature'] = expert_feature
###get sensor infos###
sensor_infos = {}
for cam in CAMERAS:
sensor_infos[cam] = {}
sensor_infos[cam]['cam2ego'] = left2right @ np.array(anno['sensors'][cam]['cam2ego']) @ stand_to_ue4_rotate
sensor_infos[cam]['intrinsic'] = np.array(anno['sensors'][cam]['intrinsic'])
sensor_infos[cam]['world2cam'] = np.linalg.inv(stand_to_ue4_rotate) @ np.array(anno['sensors'][cam]['world2cam']) @left2right
sensor_infos[cam]['d
gitextract_ijrumtl_/
├── .gitignore
├── LICENSE
├── README.md
├── close_loop/
│ ├── SparseDrive_MomAD/
│ │ ├── adzoo/
│ │ │ └── sparsedrive/
│ │ │ ├── configs/
│ │ │ │ ├── momad_small_b2d_stage1.py
│ │ │ │ ├── momad_small_b2d_stage2_multiplan.py
│ │ │ │ ├── momad_small_b2d_stage2_singleplan.py
│ │ │ │ ├── sparsedrive_small_b2d_stage1.py
│ │ │ │ ├── sparsedrive_small_b2d_stage2_cmd_singleplan.py
│ │ │ │ └── sparsedrive_small_b2d_stage2_targetpoint_multiplan.py
│ │ │ ├── dist_train.sh
│ │ │ ├── scripts/
│ │ │ │ ├── create_data.sh
│ │ │ │ ├── kmeans.sh
│ │ │ │ ├── test.sh
│ │ │ │ ├── test_roboAD.sh
│ │ │ │ ├── train.sh
│ │ │ │ ├── train_6s.sh
│ │ │ │ ├── train_roboAD.sh
│ │ │ │ └── visualize.sh
│ │ │ ├── tools/
│ │ │ │ ├── benchmark.py
│ │ │ │ ├── data_converter/
│ │ │ │ │ ├── B2D_converter.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── nuscenes_converter.py
│ │ │ │ │ ├── nuscenes_converter_1_10.py
│ │ │ │ │ ├── nuscenes_converter_6s.py
│ │ │ │ │ └── nuscenes_converter_hrad_planing_scene.py
│ │ │ │ ├── dist_test.sh
│ │ │ │ ├── dist_train.sh
│ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ ├── kmeans/
│ │ │ │ │ ├── kmeans_det.py
│ │ │ │ │ ├── kmeans_map.py
│ │ │ │ │ ├── kmeans_motion.py
│ │ │ │ │ └── kmeans_plan.py
│ │ │ │ ├── test.py
│ │ │ │ ├── train.py
│ │ │ │ ├── train_single.py
│ │ │ │ └── visualization/
│ │ │ │ ├── bev_render.py
│ │ │ │ └── cam_render.py
│ │ │ └── train.py
│ │ ├── leaderboard/
│ │ │ ├── .pylintrc
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── docs/
│ │ │ │ ├── Gemfile
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── _config.yml
│ │ │ │ ├── _includes/
│ │ │ │ │ ├── footer.html
│ │ │ │ │ ├── google-analytics.html
│ │ │ │ │ ├── head.html
│ │ │ │ │ ├── navbar.html
│ │ │ │ │ ├── read_time.html
│ │ │ │ │ └── scripts.html
│ │ │ │ ├── _layouts/
│ │ │ │ │ ├── default.html
│ │ │ │ │ ├── home.html
│ │ │ │ │ ├── page.html
│ │ │ │ │ └── post.html
│ │ │ │ ├── _sass/
│ │ │ │ │ └── styles.scss
│ │ │ │ ├── about.html
│ │ │ │ ├── assets/
│ │ │ │ │ ├── main.scss
│ │ │ │ │ ├── scripts.js
│ │ │ │ │ └── vendor/
│ │ │ │ │ ├── bootstrap/
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ └── bootstrap.css
│ │ │ │ │ │ └── js/
│ │ │ │ │ │ ├── bootstrap.bundle.js
│ │ │ │ │ │ └── bootstrap.js
│ │ │ │ │ ├── fontawesome-free/
│ │ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ ├── all.css
│ │ │ │ │ │ │ ├── brands.css
│ │ │ │ │ │ │ ├── fontawesome.css
│ │ │ │ │ │ │ ├── regular.css
│ │ │ │ │ │ │ ├── solid.css
│ │ │ │ │ │ │ ├── svg-with-js.css
│ │ │ │ │ │ │ └── v4-shims.css
│ │ │ │ │ │ ├── js/
│ │ │ │ │ │ │ ├── all.js
│ │ │ │ │ │ │ ├── brands.js
│ │ │ │ │ │ │ ├── conflict-detection.js
│ │ │ │ │ │ │ ├── fontawesome.js
│ │ │ │ │ │ │ ├── regular.js
│ │ │ │ │ │ │ ├── solid.js
│ │ │ │ │ │ │ └── v4-shims.js
│ │ │ │ │ │ ├── less/
│ │ │ │ │ │ │ ├── _animated.less
│ │ │ │ │ │ │ ├── _bordered-pulled.less
│ │ │ │ │ │ │ ├── _core.less
│ │ │ │ │ │ │ ├── _fixed-width.less
│ │ │ │ │ │ │ ├── _icons.less
│ │ │ │ │ │ │ ├── _larger.less
│ │ │ │ │ │ │ ├── _list.less
│ │ │ │ │ │ │ ├── _mixins.less
│ │ │ │ │ │ │ ├── _rotated-flipped.less
│ │ │ │ │ │ │ ├── _screen-reader.less
│ │ │ │ │ │ │ ├── _shims.less
│ │ │ │ │ │ │ ├── _stacked.less
│ │ │ │ │ │ │ ├── _variables.less
│ │ │ │ │ │ │ ├── brands.less
│ │ │ │ │ │ │ ├── fontawesome.less
│ │ │ │ │ │ │ ├── regular.less
│ │ │ │ │ │ │ ├── solid.less
│ │ │ │ │ │ │ └── v4-shims.less
│ │ │ │ │ │ └── scss/
│ │ │ │ │ │ ├── _animated.scss
│ │ │ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ │ │ ├── _core.scss
│ │ │ │ │ │ ├── _fixed-width.scss
│ │ │ │ │ │ ├── _icons.scss
│ │ │ │ │ │ ├── _larger.scss
│ │ │ │ │ │ ├── _list.scss
│ │ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ │ │ ├── _screen-reader.scss
│ │ │ │ │ │ ├── _shims.scss
│ │ │ │ │ │ ├── _stacked.scss
│ │ │ │ │ │ ├── _variables.scss
│ │ │ │ │ │ ├── brands.scss
│ │ │ │ │ │ ├── fontawesome.scss
│ │ │ │ │ │ ├── regular.scss
│ │ │ │ │ │ ├── solid.scss
│ │ │ │ │ │ └── v4-shims.scss
│ │ │ │ │ ├── jquery/
│ │ │ │ │ │ ├── jquery.js
│ │ │ │ │ │ └── jquery.slim.js
│ │ │ │ │ └── startbootstrap-clean-blog/
│ │ │ │ │ ├── js/
│ │ │ │ │ │ └── jqBootstrapValidation.js
│ │ │ │ │ └── scss/
│ │ │ │ │ ├── _bootstrap-overrides.scss
│ │ │ │ │ ├── _contact.scss
│ │ │ │ │ ├── _footer.scss
│ │ │ │ │ ├── _global.scss
│ │ │ │ │ ├── _masthead.scss
│ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ ├── _navbar.scss
│ │ │ │ │ ├── _post.scss
│ │ │ │ │ ├── _variables.scss
│ │ │ │ │ └── clean-blog.scss
│ │ │ │ ├── contact.html
│ │ │ │ ├── get_started.html
│ │ │ │ ├── gulpfile.js
│ │ │ │ ├── index.html
│ │ │ │ ├── jekyll-theme-clean-blog.gemspec
│ │ │ │ ├── leaderboard.html
│ │ │ │ ├── posts/
│ │ │ │ │ └── index.html
│ │ │ │ └── submit.html
│ │ │ ├── leaderboard/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── autoagents/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agent_wrapper.py
│ │ │ │ │ ├── autonomous_agent.py
│ │ │ │ │ ├── dummy_agent.py
│ │ │ │ │ ├── human_agent.py
│ │ │ │ │ ├── human_agent_config.txt
│ │ │ │ │ ├── npc_agent.py
│ │ │ │ │ ├── ros1_agent.py
│ │ │ │ │ ├── ros2_agent.py
│ │ │ │ │ └── ros_base_agent.py
│ │ │ │ ├── envs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── sensor_interface.py
│ │ │ │ ├── leaderboard_evaluator.py
│ │ │ │ ├── scenarios/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── route_scenario.py
│ │ │ │ │ └── scenario_manager.py
│ │ │ │ └── utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── checkpoint_tools.py
│ │ │ │ ├── parked_vehicles.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── route_indexer.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ └── statistics_manager.py
│ │ │ ├── requirements.txt
│ │ │ ├── run_leaderboard.sh
│ │ │ ├── scripts/
│ │ │ │ ├── Dockerfile.master
│ │ │ │ ├── Dockerfile.ros
│ │ │ │ ├── agent_entrypoint.sh
│ │ │ │ ├── code_check_and_formatting.sh
│ │ │ │ ├── make_docker.sh
│ │ │ │ ├── manage_scenarios.py
│ │ │ │ ├── merge_statistics.py
│ │ │ │ ├── pretty_print_json.py
│ │ │ │ ├── route_creator.py
│ │ │ │ ├── route_displayer.py
│ │ │ │ ├── route_summarizer.py
│ │ │ │ ├── run_evaluation.sh
│ │ │ │ ├── run_evaluation_debug.sh
│ │ │ │ ├── run_evaluation_multi_admlp.sh
│ │ │ │ ├── run_evaluation_multi_tcp.sh
│ │ │ │ ├── run_evaluation_multi_uniad.sh
│ │ │ │ ├── run_evaluation_multi_uniad_tiny.sh
│ │ │ │ ├── run_evaluation_multi_vad.sh
│ │ │ │ ├── run_evalutaion_multi_sparsedrive.sh
│ │ │ │ ├── scenario_creator.py
│ │ │ │ ├── scenario_orderer.py
│ │ │ │ └── weather_creator.py
│ │ │ └── team_code/
│ │ │ ├── pid_controller.py
│ │ │ ├── planner.py
│ │ │ ├── sparsedrive_b2d_agent.py
│ │ │ ├── uniad_b2d_agent.py
│ │ │ ├── vad_b2d_agent.py
│ │ │ └── vad_b2d_agent_visualize.py
│ │ ├── mmdet3d_plugin/
│ │ │ ├── __init__.py
│ │ │ ├── apis/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── mmdet_train.py
│ │ │ │ ├── test.py
│ │ │ │ └── train.py
│ │ │ ├── core/
│ │ │ │ ├── box3d.py
│ │ │ │ └── evaluation/
│ │ │ │ ├── __init__.py
│ │ │ │ └── eval_hooks.py
│ │ │ ├── datasets/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── b2d_3d_dataset.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── evaluation/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── detection/
│ │ │ │ │ │ └── nuscenes_styled_eval_utils.py
│ │ │ │ │ ├── map/
│ │ │ │ │ │ ├── AP.py
│ │ │ │ │ │ ├── distance.py
│ │ │ │ │ │ └── vector_eval.py
│ │ │ │ │ ├── motion/
│ │ │ │ │ │ ├── motion_eval_uniad.py
│ │ │ │ │ │ └── motion_utils.py
│ │ │ │ │ └── planning/
│ │ │ │ │ └── planning_eval.py
│ │ │ │ ├── map_utils/
│ │ │ │ │ ├── nuscmap_extractor.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── nuscenes_3d_dataset.py
│ │ │ │ ├── pipelines/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── augment.py
│ │ │ │ │ ├── loading.py
│ │ │ │ │ ├── transform.py
│ │ │ │ │ └── vectorize.py
│ │ │ │ ├── samplers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── distributed_sampler.py
│ │ │ │ │ ├── group_in_batch_sampler.py
│ │ │ │ │ ├── group_sampler.py
│ │ │ │ │ └── sampler.py
│ │ │ │ └── utils.py
│ │ │ ├── models/
│ │ │ │ ├── MomAD.py
│ │ │ │ ├── MomAD_head.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── attention.py
│ │ │ │ ├── base_target.py
│ │ │ │ ├── blocks.py
│ │ │ │ ├── detection3d/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── decoder.py
│ │ │ │ │ ├── detection3d_blocks.py
│ │ │ │ │ ├── detection3d_head.py
│ │ │ │ │ ├── losses.py
│ │ │ │ │ └── target.py
│ │ │ │ ├── grid_mask.py
│ │ │ │ ├── instance_bank.py
│ │ │ │ ├── map/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── decoder.py
│ │ │ │ │ ├── loss.py
│ │ │ │ │ ├── map_blocks.py
│ │ │ │ │ ├── match_cost.py
│ │ │ │ │ └── target.py
│ │ │ │ ├── motion/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── decoder.py
│ │ │ │ │ ├── instance_queue.py
│ │ │ │ │ ├── motion_blocks.py
│ │ │ │ │ ├── motion_planning_cls_head.py
│ │ │ │ │ ├── motion_planning_head.py
│ │ │ │ │ ├── motion_planning_head_MomAD.py
│ │ │ │ │ └── target.py
│ │ │ │ ├── sparsedrive.py
│ │ │ │ └── sparsedrive_head.py
│ │ │ └── ops/
│ │ │ ├── __init__.py
│ │ │ ├── deformable_aggregation.py
│ │ │ ├── setup.py
│ │ │ └── src/
│ │ │ ├── deformable_aggregation.cpp
│ │ │ └── deformable_aggregation_cuda.cu
│ │ ├── requirement.txt
│ │ ├── scenario_runner/
│ │ │ ├── .pylintrc
│ │ │ ├── .readthedocs.yml
│ │ │ ├── CARLA_VER
│ │ │ ├── Dockerfile
│ │ │ ├── Docs/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CODE_OF_CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── FAQ.md
│ │ │ │ ├── agent_evaluation.md
│ │ │ │ ├── coding_standard.md
│ │ │ │ ├── creating_new_scenario.md
│ │ │ │ ├── extra.css
│ │ │ │ ├── getting_scenariorunner.md
│ │ │ │ ├── getting_started.md
│ │ │ │ ├── index.md
│ │ │ │ ├── list_of_scenarios.md
│ │ │ │ ├── metrics_module.md
│ │ │ │ ├── openscenario_support.md
│ │ │ │ ├── requirements.txt
│ │ │ │ └── ros_agent.md
│ │ │ ├── Jenkinsfile
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── manual_control.py
│ │ │ ├── metrics_manager.py
│ │ │ ├── mkdocs.yml
│ │ │ ├── no_rendering_mode.py
│ │ │ ├── requirements.txt
│ │ │ ├── scenario_runner.py
│ │ │ └── srunner/
│ │ │ ├── __init__.py
│ │ │ ├── autoagents/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent_wrapper.py
│ │ │ │ ├── autonomous_agent.py
│ │ │ │ ├── dummy_agent.py
│ │ │ │ ├── human_agent.py
│ │ │ │ ├── human_agent_config.txt
│ │ │ │ ├── npc_agent.py
│ │ │ │ ├── ros_agent.py
│ │ │ │ └── sensor_interface.py
│ │ │ ├── examples/
│ │ │ │ ├── ActorFlow.xml
│ │ │ │ ├── CatalogExample.xosc
│ │ │ │ ├── ChangeLane.xml
│ │ │ │ ├── ChangingWeather.xosc
│ │ │ │ ├── ControlLoss.xml
│ │ │ │ ├── CutIn.xml
│ │ │ │ ├── CyclistCrossing.xosc
│ │ │ │ ├── FollowLeadingVehicle.xml
│ │ │ │ ├── FollowLeadingVehicle.xosc
│ │ │ │ ├── FreeRide.xml
│ │ │ │ ├── HighwayCutIn.xml
│ │ │ │ ├── IntersectionCollisionAvoidance.xosc
│ │ │ │ ├── LaneChangeSimple.xosc
│ │ │ │ ├── LeadingVehicle.xml
│ │ │ │ ├── NoSignalJunction.xml
│ │ │ │ ├── ObjectCrossing.xml
│ │ │ │ ├── OppositeDirection.xml
│ │ │ │ ├── OscControllerExample.xosc
│ │ │ │ ├── PedestrianCrossingFront.xosc
│ │ │ │ ├── RouteObstacles.xml
│ │ │ │ ├── RunningRedLight.xml
│ │ │ │ ├── SignalizedJunctionLeftTurn.xml
│ │ │ │ ├── SignalizedJunctionRightTurn.xml
│ │ │ │ ├── Slalom.xosc
│ │ │ │ ├── VehicleOpensDoor.xml
│ │ │ │ ├── VehicleTurning.xml
│ │ │ │ └── catalogs/
│ │ │ │ ├── ControllerCatalog.xosc
│ │ │ │ ├── EnvironmentCatalog.xosc
│ │ │ │ ├── ManeuverCatalog.xosc
│ │ │ │ ├── MiscObjectCatalog.xosc
│ │ │ │ ├── PedestrianCatalog.xosc
│ │ │ │ └── VehicleCatalog.xosc
│ │ │ ├── metrics/
│ │ │ │ ├── examples/
│ │ │ │ │ ├── basic_metric.py
│ │ │ │ │ ├── criteria_filter.py
│ │ │ │ │ ├── distance_between_vehicles.py
│ │ │ │ │ └── distance_to_lane_center.py
│ │ │ │ └── tools/
│ │ │ │ ├── metrics_log.py
│ │ │ │ └── metrics_parser.py
│ │ │ ├── openscenario/
│ │ │ │ ├── 0.9.x/
│ │ │ │ │ ├── OpenSCENARIO_Catalog.xsd
│ │ │ │ │ ├── OpenSCENARIO_TypeDefs.xsd
│ │ │ │ │ ├── OpenSCENARIO_v0.9.1.xsd
│ │ │ │ │ └── migration0_9_1to1_0.xslt
│ │ │ │ └── OpenSCENARIO.xsd
│ │ │ ├── scenarioconfigs/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── openscenario_configuration.py
│ │ │ │ ├── route_scenario_configuration.py
│ │ │ │ └── scenario_configuration.py
│ │ │ ├── scenariomanager/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actorcontrols/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── actor_control.py
│ │ │ │ │ ├── basic_control.py
│ │ │ │ │ ├── carla_autopilot.py
│ │ │ │ │ ├── external_control.py
│ │ │ │ │ ├── npc_vehicle_control.py
│ │ │ │ │ ├── pedestrian_control.py
│ │ │ │ │ ├── simple_vehicle_control.py
│ │ │ │ │ ├── vehicle_longitudinal_control.py
│ │ │ │ │ └── visualizer.py
│ │ │ │ ├── carla_data_provider.py
│ │ │ │ ├── lights_sim.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── scenario_manager.py
│ │ │ │ ├── scenarioatomics/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── atomic_behaviors.py
│ │ │ │ │ ├── atomic_criteria.py
│ │ │ │ │ └── atomic_trigger_conditions.py
│ │ │ │ ├── timer.py
│ │ │ │ ├── traffic_events.py
│ │ │ │ ├── watchdog.py
│ │ │ │ └── weather_sim.py
│ │ │ ├── scenarios/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actor_flow.py
│ │ │ │ ├── background_activity.py
│ │ │ │ ├── background_activity_parametrizer.py
│ │ │ │ ├── basic_scenario.py
│ │ │ │ ├── blocked_intersection.py
│ │ │ │ ├── change_lane.py
│ │ │ │ ├── construction_crash_vehicle.py
│ │ │ │ ├── control_loss.py
│ │ │ │ ├── cross_bicycle_flow.py
│ │ │ │ ├── cut_in.py
│ │ │ │ ├── cut_in_with_static_vehicle.py
│ │ │ │ ├── follow_leading_vehicle.py
│ │ │ │ ├── freeride.py
│ │ │ │ ├── green_traffic_light.py
│ │ │ │ ├── hard_break.py
│ │ │ │ ├── highway_cut_in.py
│ │ │ │ ├── invading_turn.py
│ │ │ │ ├── left_turn_enter_flow.py
│ │ │ │ ├── maneuver_opposite_direction.py
│ │ │ │ ├── no_signal_junction_crossing.py
│ │ │ │ ├── object_crash_intersection.py
│ │ │ │ ├── object_crash_vehicle.py
│ │ │ │ ├── open_scenario.py
│ │ │ │ ├── opposite_vehicle_taking_priority.py
│ │ │ │ ├── other_leading_vehicle.py
│ │ │ │ ├── parking_cut_in.py
│ │ │ │ ├── parking_exit.py
│ │ │ │ ├── pedestrian_crossing.py
│ │ │ │ ├── route_obstacles.py
│ │ │ │ ├── route_scenario.py
│ │ │ │ ├── sequentially_lane_change.py
│ │ │ │ ├── signalized_junction_left_turn.py
│ │ │ │ ├── signalized_junction_right_turn.py
│ │ │ │ ├── t_junction.py
│ │ │ │ ├── vanilla_turn.py
│ │ │ │ ├── vehicle_opens_door.py
│ │ │ │ └── yield_to_emergency_vehicle.py
│ │ │ ├── tests/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── carla_mocks/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agents/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── navigation/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── basic_agent.py
│ │ │ │ │ │ │ ├── behavior_agent.py
│ │ │ │ │ │ │ ├── behavior_types.py
│ │ │ │ │ │ │ ├── controller.py
│ │ │ │ │ │ │ ├── global_route_planner.py
│ │ │ │ │ │ │ └── local_planner.py
│ │ │ │ │ │ └── tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── misc.py
│ │ │ │ │ └── carla.py
│ │ │ │ └── test_xosc_load.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── background_manager.py
│ │ │ │ ├── openscenario_parser.py
│ │ │ │ ├── py_trees_port.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ ├── scenario_helper.py
│ │ │ │ └── scenario_parser.py
│ │ │ └── utilities/
│ │ │ └── code_check_and_formatting.sh
│ │ └── tools/
│ │ ├── ability_benchmark.py
│ │ ├── check_carla.md
│ │ ├── clean_carla.sh
│ │ ├── data_collect.py
│ │ ├── download_mini.sh
│ │ ├── efficiency_smoothness_benchmark.py
│ │ ├── gen_hdmap.py
│ │ ├── generate_video.py
│ │ ├── merge_route_json.py
│ │ ├── split_xml.py
│ │ ├── utils.py
│ │ └── visualize.py
│ ├── VAD_MomAD/
│ │ ├── Bench2DriveZoo/
│ │ │ ├── adzoo/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bevformer/
│ │ │ │ │ ├── analysis_tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── analyze_logs.py
│ │ │ │ │ │ ├── benchmark.py
│ │ │ │ │ │ ├── get_params.py
│ │ │ │ │ │ └── visual.py
│ │ │ │ │ ├── apis/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── mmdet_train.py
│ │ │ │ │ │ ├── test.py
│ │ │ │ │ │ └── train.py
│ │ │ │ │ ├── configs/
│ │ │ │ │ │ ├── _base_/
│ │ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ │ ├── coco_instance.py
│ │ │ │ │ │ │ │ ├── kitti-3d-3class.py
│ │ │ │ │ │ │ │ ├── kitti-3d-car.py
│ │ │ │ │ │ │ │ ├── lyft-3d.py
│ │ │ │ │ │ │ │ ├── nuim_instance.py
│ │ │ │ │ │ │ │ ├── nus-3d.py
│ │ │ │ │ │ │ │ ├── nus-mono3d.py
│ │ │ │ │ │ │ │ ├── range100_lyft-3d.py
│ │ │ │ │ │ │ │ ├── s3dis-3d-5class.py
│ │ │ │ │ │ │ │ ├── s3dis_seg-3d-13class.py
│ │ │ │ │ │ │ │ ├── scannet-3d-18class.py
│ │ │ │ │ │ │ │ ├── scannet_seg-3d-20class.py
│ │ │ │ │ │ │ │ ├── sunrgbd-3d-10class.py
│ │ │ │ │ │ │ │ ├── waymoD5-3d-3class.py
│ │ │ │ │ │ │ │ └── waymoD5-3d-car.py
│ │ │ │ │ │ │ ├── default_runtime.py
│ │ │ │ │ │ │ ├── models/
│ │ │ │ │ │ │ │ ├── 3dssd.py
│ │ │ │ │ │ │ │ ├── cascade_mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ │ ├── centerpoint_01voxel_second_secfpn_nus.py
│ │ │ │ │ │ │ │ ├── centerpoint_02pillar_second_secfpn_nus.py
│ │ │ │ │ │ │ │ ├── fcos3d.py
│ │ │ │ │ │ │ │ ├── groupfree3d.py
│ │ │ │ │ │ │ │ ├── h3dnet.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_fpn_lyft.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_fpn_nus.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_fpn_range100_lyft.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_kitti.py
│ │ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_waymo.py
│ │ │ │ │ │ │ │ ├── hv_second_secfpn_kitti.py
│ │ │ │ │ │ │ │ ├── hv_second_secfpn_waymo.py
│ │ │ │ │ │ │ │ ├── imvotenet_image.py
│ │ │ │ │ │ │ │ ├── mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ │ ├── paconv_cuda_ssg.py
│ │ │ │ │ │ │ │ ├── paconv_ssg.py
│ │ │ │ │ │ │ │ ├── parta2.py
│ │ │ │ │ │ │ │ ├── pointnet2_msg.py
│ │ │ │ │ │ │ │ ├── pointnet2_ssg.py
│ │ │ │ │ │ │ │ └── votenet.py
│ │ │ │ │ │ │ └── schedules/
│ │ │ │ │ │ │ ├── cosine.py
│ │ │ │ │ │ │ ├── cyclic_20e.py
│ │ │ │ │ │ │ ├── cyclic_40e.py
│ │ │ │ │ │ │ ├── mmdet_schedule_1x.py
│ │ │ │ │ │ │ ├── schedule_2x.py
│ │ │ │ │ │ │ ├── schedule_3x.py
│ │ │ │ │ │ │ ├── seg_cosine_150e.py
│ │ │ │ │ │ │ ├── seg_cosine_200e.py
│ │ │ │ │ │ │ └── seg_cosine_50e.py
│ │ │ │ │ │ ├── bevformer/
│ │ │ │ │ │ │ ├── bevformer_base.py
│ │ │ │ │ │ │ ├── bevformer_base_b2d.py
│ │ │ │ │ │ │ ├── bevformer_tiny.py
│ │ │ │ │ │ │ └── bevformer_tiny_b2d.py
│ │ │ │ │ │ ├── bevformer_fp16/
│ │ │ │ │ │ │ └── bevformer_tiny_fp16.py
│ │ │ │ │ │ ├── bevformerv2/
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-24ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-48ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-base-24ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t1-base-48ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t2-24ep.py
│ │ │ │ │ │ │ ├── bevformerv2-r50-t2-48ep.py
│ │ │ │ │ │ │ └── bevformerv2-r50-t8-24ep.py
│ │ │ │ │ │ └── datasets/
│ │ │ │ │ │ ├── custom_lyft-3d.py
│ │ │ │ │ │ ├── custom_nus-3d.py
│ │ │ │ │ │ └── custom_waymo-3d.py
│ │ │ │ │ ├── create_data.py
│ │ │ │ │ ├── data_converter/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── create_gt_database.py
│ │ │ │ │ │ ├── indoor_converter.py
│ │ │ │ │ │ ├── kitti_converter.py
│ │ │ │ │ │ ├── kitti_data_utils.py
│ │ │ │ │ │ ├── lyft_converter.py
│ │ │ │ │ │ ├── lyft_data_fixer.py
│ │ │ │ │ │ ├── nuimage_converter.py
│ │ │ │ │ │ ├── nuscenes_converter.py
│ │ │ │ │ │ ├── s3dis_data_utils.py
│ │ │ │ │ │ ├── scannet_data_utils.py
│ │ │ │ │ │ ├── sunrgbd_data_utils.py
│ │ │ │ │ │ └── waymo_converter.py
│ │ │ │ │ ├── dist_test.sh
│ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ ├── fp16/
│ │ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ │ └── train.py
│ │ │ │ │ ├── misc/
│ │ │ │ │ │ ├── browse_dataset.py
│ │ │ │ │ │ ├── print_config.py
│ │ │ │ │ │ └── visualize_results.py
│ │ │ │ │ ├── mmdet3d_plugin/
│ │ │ │ │ │ ├── bevformer/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── apis/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── mmdet_train.py
│ │ │ │ │ │ │ │ ├── test.py
│ │ │ │ │ │ │ │ └── train.py
│ │ │ │ │ │ │ └── hooks/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ └── custom_hooks.py
│ │ │ │ │ │ ├── dd3d/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── nuscenes.py
│ │ │ │ │ │ │ │ └── transform_utils.py
│ │ │ │ │ │ │ ├── layers/
│ │ │ │ │ │ │ │ ├── iou_loss.py
│ │ │ │ │ │ │ │ ├── normalization.py
│ │ │ │ │ │ │ │ └── smooth_l1_loss.py
│ │ │ │ │ │ │ ├── modeling/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── core.py
│ │ │ │ │ │ │ │ ├── disentangled_box3d_loss.py
│ │ │ │ │ │ │ │ ├── fcos2d.py
│ │ │ │ │ │ │ │ ├── fcos3d.py
│ │ │ │ │ │ │ │ ├── nuscenes_dd3d.py
│ │ │ │ │ │ │ │ └── prepare_targets.py
│ │ │ │ │ │ │ ├── structures/
│ │ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ │ ├── boxes3d.py
│ │ │ │ │ │ │ │ ├── image_list.py
│ │ │ │ │ │ │ │ ├── pose.py
│ │ │ │ │ │ │ │ └── transform3d.py
│ │ │ │ │ │ │ └── utils/
│ │ │ │ │ │ │ ├── comm.py
│ │ │ │ │ │ │ ├── geometry.py
│ │ │ │ │ │ │ ├── tasks.py
│ │ │ │ │ │ │ ├── tensor2d.py
│ │ │ │ │ │ │ └── visualization.py
│ │ │ │ │ │ └── models/
│ │ │ │ │ │ └── hooks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── hooks.py
│ │ │ │ │ ├── model_converters/
│ │ │ │ │ │ ├── convert_votenet_checkpoints.py
│ │ │ │ │ │ ├── publish_model.py
│ │ │ │ │ │ └── regnet2mmdet.py
│ │ │ │ │ ├── test.py
│ │ │ │ │ └── train.py
│ │ │ │ ├── sparsedrive/
│ │ │ │ │ ├── configs/
│ │ │ │ │ │ ├── sparsedrive_small_b2d_stage1.py
│ │ │ │ │ │ ├── sparsedrive_small_b2d_stage2.py
│ │ │ │ │ │ ├── sparsedrive_small_stage1.py
│ │ │ │ │ │ └── sparsedrive_small_stage2.py
│ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ ├── scripts/
│ │ │ │ │ │ ├── create_data.sh
│ │ │ │ │ │ ├── kmeans.sh
│ │ │ │ │ │ ├── test.sh
│ │ │ │ │ │ ├── test_roboAD.sh
│ │ │ │ │ │ ├── train.sh
│ │ │ │ │ │ ├── train_6s.sh
│ │ │ │ │ │ ├── train_roboAD.sh
│ │ │ │ │ │ └── visualize.sh
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── benchmark.py
│ │ │ │ │ │ ├── data_converter/
│ │ │ │ │ │ │ ├── B2D_converter.py
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── nuscenes_converter.py
│ │ │ │ │ │ │ ├── nuscenes_converter_1_10.py
│ │ │ │ │ │ │ ├── nuscenes_converter_6s.py
│ │ │ │ │ │ │ └── nuscenes_converter_hrad_planing_scene.py
│ │ │ │ │ │ ├── dist_test.sh
│ │ │ │ │ │ ├── dist_train.sh
│ │ │ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ │ │ ├── kmeans/
│ │ │ │ │ │ │ ├── kmeans_det.py
│ │ │ │ │ │ │ ├── kmeans_map.py
│ │ │ │ │ │ │ ├── kmeans_motion.py
│ │ │ │ │ │ │ └── kmeans_plan.py
│ │ │ │ │ │ ├── test.py
│ │ │ │ │ │ ├── train.py
│ │ │ │ │ │ ├── train_single.py
│ │ │ │ │ │ └── visualization/
│ │ │ │ │ │ ├── bev_render.py
│ │ │ │ │ │ └── cam_render.py
│ │ │ │ │ └── train.py
│ │ │ │ ├── uniad/
│ │ │ │ │ ├── analysis_tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── analyze_logs.py
│ │ │ │ │ │ ├── benchmark.py
│ │ │ │ │ │ └── visualize/
│ │ │ │ │ │ ├── render/
│ │ │ │ │ │ │ ├── base_render.py
│ │ │ │ │ │ │ ├── bev_render.py
│ │ │ │ │ │ │ └── cam_render.py
│ │ │ │ │ │ ├── run.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── configs/
│ │ │ │ │ │ ├── _base_/
│ │ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ │ └── nus-3d.py
│ │ │ │ │ │ │ └── default_runtime.py
│ │ │ │ │ │ ├── stage1_track_map/
│ │ │ │ │ │ │ ├── base_track_map.py
│ │ │ │ │ │ │ ├── base_track_map_b2d.py
│ │ │ │ │ │ │ └── tiny_track_map_b2d.py
│ │ │ │ │ │ └── stage2_e2e/
│ │ │ │ │ │ ├── base_e2e.py
│ │ │ │ │ │ ├── base_e2e_b2d.py
│ │ │ │ │ │ └── tiny_e2e_b2d.py
│ │ │ │ │ ├── data_converter/
│ │ │ │ │ │ ├── create_data.py
│ │ │ │ │ │ ├── uniad_create_data.sh
│ │ │ │ │ │ └── uniad_nuscenes_converter.py
│ │ │ │ │ ├── test.py
│ │ │ │ │ ├── test_utils.py
│ │ │ │ │ ├── train.py
│ │ │ │ │ ├── uniad_dist_eval.sh
│ │ │ │ │ ├── uniad_dist_train.sh
│ │ │ │ │ └── uniad_vis_result.sh
│ │ │ │ └── vad/
│ │ │ │ ├── analysis_tools/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── analyze_logs.py
│ │ │ │ │ ├── benchmark.py
│ │ │ │ │ ├── get_flops.py
│ │ │ │ │ ├── get_params.py
│ │ │ │ │ └── visualization.py
│ │ │ │ ├── apis/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── mmdet_train.py
│ │ │ │ │ ├── test.py
│ │ │ │ │ └── train.py
│ │ │ │ ├── configs/
│ │ │ │ │ ├── VAD/
│ │ │ │ │ │ ├── MomAD_base_e2e_b2d.py
│ │ │ │ │ │ ├── VAD_base_e2e.py
│ │ │ │ │ │ ├── VAD_base_e2e_b2d.py
│ │ │ │ │ │ └── VAD_tiny_e2e.py
│ │ │ │ │ ├── _base_/
│ │ │ │ │ │ ├── datasets/
│ │ │ │ │ │ │ ├── coco_instance.py
│ │ │ │ │ │ │ ├── kitti-3d-3class.py
│ │ │ │ │ │ │ ├── kitti-3d-car.py
│ │ │ │ │ │ │ ├── lyft-3d.py
│ │ │ │ │ │ │ ├── nuim_instance.py
│ │ │ │ │ │ │ ├── nus-3d.py
│ │ │ │ │ │ │ ├── nus-mono3d.py
│ │ │ │ │ │ │ ├── range100_lyft-3d.py
│ │ │ │ │ │ │ ├── s3dis-3d-5class.py
│ │ │ │ │ │ │ ├── s3dis_seg-3d-13class.py
│ │ │ │ │ │ │ ├── scannet-3d-18class.py
│ │ │ │ │ │ │ ├── scannet_seg-3d-20class.py
│ │ │ │ │ │ │ ├── sunrgbd-3d-10class.py
│ │ │ │ │ │ │ ├── waymoD5-3d-3class.py
│ │ │ │ │ │ │ └── waymoD5-3d-car.py
│ │ │ │ │ │ ├── default_runtime.py
│ │ │ │ │ │ ├── models/
│ │ │ │ │ │ │ ├── 3dssd.py
│ │ │ │ │ │ │ ├── cascade_mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ ├── centerpoint_01voxel_second_secfpn_nus.py
│ │ │ │ │ │ │ ├── centerpoint_02pillar_second_secfpn_nus.py
│ │ │ │ │ │ │ ├── fcos3d.py
│ │ │ │ │ │ │ ├── groupfree3d.py
│ │ │ │ │ │ │ ├── h3dnet.py
│ │ │ │ │ │ │ ├── hv_pointpillars_fpn_lyft.py
│ │ │ │ │ │ │ ├── hv_pointpillars_fpn_nus.py
│ │ │ │ │ │ │ ├── hv_pointpillars_fpn_range100_lyft.py
│ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_kitti.py
│ │ │ │ │ │ │ ├── hv_pointpillars_secfpn_waymo.py
│ │ │ │ │ │ │ ├── hv_second_secfpn_kitti.py
│ │ │ │ │ │ │ ├── hv_second_secfpn_waymo.py
│ │ │ │ │ │ │ ├── imvotenet_image.py
│ │ │ │ │ │ │ ├── mask_rcnn_r50_fpn.py
│ │ │ │ │ │ │ ├── paconv_cuda_ssg.py
│ │ │ │ │ │ │ ├── paconv_ssg.py
│ │ │ │ │ │ │ ├── parta2.py
│ │ │ │ │ │ │ ├── pointnet2_msg.py
│ │ │ │ │ │ │ ├── pointnet2_ssg.py
│ │ │ │ │ │ │ └── votenet.py
│ │ │ │ │ │ └── schedules/
│ │ │ │ │ │ ├── cosine.py
│ │ │ │ │ │ ├── cyclic_20e.py
│ │ │ │ │ │ ├── cyclic_40e.py
│ │ │ │ │ │ ├── mmdet_schedule_1x.py
│ │ │ │ │ │ ├── schedule_2x.py
│ │ │ │ │ │ ├── schedule_3x.py
│ │ │ │ │ │ ├── seg_cosine_150e.py
│ │ │ │ │ │ ├── seg_cosine_200e.py
│ │ │ │ │ │ └── seg_cosine_50e.py
│ │ │ │ │ └── datasets/
│ │ │ │ │ ├── custom_lyft-3d.py
│ │ │ │ │ ├── custom_nus-3d.py
│ │ │ │ │ └── custom_waymo-3d.py
│ │ │ │ ├── create_data.py
│ │ │ │ ├── data_converter/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── create_gt_database.py
│ │ │ │ │ └── vad_nuscenes_converter.py
│ │ │ │ ├── dist_test.sh
│ │ │ │ ├── dist_train.sh
│ │ │ │ ├── dist_train_momad.sh
│ │ │ │ ├── misc/
│ │ │ │ │ ├── browse_dataset.py
│ │ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ │ ├── print_config.py
│ │ │ │ │ └── visualize_results.py
│ │ │ │ ├── model_converters/
│ │ │ │ │ ├── convert_votenet_checkpoints.py
│ │ │ │ │ ├── publish_model.py
│ │ │ │ │ └── regnet2mmdet.py
│ │ │ │ ├── test.py
│ │ │ │ ├── train.py
│ │ │ │ └── train_momad.py
│ │ │ ├── docs/
│ │ │ │ ├── CONVERT_GUIDE.md
│ │ │ │ ├── DATA_PREP.md
│ │ │ │ ├── EVAL_IN_CARLA.md
│ │ │ │ ├── INSTALL.md
│ │ │ │ └── TRAIN_EVAL.md
│ │ │ ├── mmcv/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── core/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── anchor/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── anchor_3d_generator.py
│ │ │ │ │ │ ├── anchor_generator.py
│ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ ├── point_generator.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── bbox/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── assigners/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── assign_result.py
│ │ │ │ │ │ │ ├── base_assigner.py
│ │ │ │ │ │ │ ├── hungarian_assigner.py
│ │ │ │ │ │ │ ├── hungarian_assigner_3d.py
│ │ │ │ │ │ │ ├── hungarian_assigner_3d_track.py
│ │ │ │ │ │ │ └── map_hungarian_assigner_3d.py
│ │ │ │ │ │ ├── box_np_ops.py
│ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ ├── coder/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_bbox_coder.py
│ │ │ │ │ │ │ ├── detr3d_track_coder.py
│ │ │ │ │ │ │ ├── fut_nms_free_coder.py
│ │ │ │ │ │ │ ├── map_nms_free_coder.py
│ │ │ │ │ │ │ └── nms_free_coder.py
│ │ │ │ │ │ ├── iou_calculators/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ │ ├── iou2d_calculator.py
│ │ │ │ │ │ │ └── iou3d_calculator.py
│ │ │ │ │ │ ├── match_costs/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ │ └── match_cost.py
│ │ │ │ │ │ ├── samplers/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_sampler.py
│ │ │ │ │ │ │ ├── pseudo_sampler.py
│ │ │ │ │ │ │ └── sampling_result.py
│ │ │ │ │ │ ├── structures/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_box3d.py
│ │ │ │ │ │ │ ├── box_3d_mode.py
│ │ │ │ │ │ │ ├── cam_box3d.py
│ │ │ │ │ │ │ ├── coord_3d_mode.py
│ │ │ │ │ │ │ ├── depth_box3d.py
│ │ │ │ │ │ │ ├── lidar_box3d.py
│ │ │ │ │ │ │ ├── nuscenes_box.py
│ │ │ │ │ │ │ └── utils.py
│ │ │ │ │ │ ├── transforms.py
│ │ │ │ │ │ └── util.py
│ │ │ │ │ ├── evaluation/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bbox_overlaps.py
│ │ │ │ │ │ ├── class_names.py
│ │ │ │ │ │ ├── eval_hooks.py
│ │ │ │ │ │ ├── indoor_eval.py
│ │ │ │ │ │ ├── kitti_utils/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── eval.py
│ │ │ │ │ │ │ └── rotate_iou.py
│ │ │ │ │ │ ├── lyft_eval.py
│ │ │ │ │ │ ├── mean_ap.py
│ │ │ │ │ │ ├── metric_motion.py
│ │ │ │ │ │ ├── metrics.py
│ │ │ │ │ │ ├── recall.py
│ │ │ │ │ │ ├── seg_eval.py
│ │ │ │ │ │ └── waymo_utils/
│ │ │ │ │ │ └── prediction_kitti_to_waymo.py
│ │ │ │ │ ├── mask/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── mask_target.py
│ │ │ │ │ │ ├── structures.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── points/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base_points.py
│ │ │ │ │ │ ├── cam_points.py
│ │ │ │ │ │ ├── depth_points.py
│ │ │ │ │ │ └── lidar_points.py
│ │ │ │ │ ├── post_processing/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── bbox_nms.py
│ │ │ │ │ │ ├── box3d_nms.py
│ │ │ │ │ │ └── merge_augs.py
│ │ │ │ │ ├── utils/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── dist_utils.py
│ │ │ │ │ │ ├── gaussian.py
│ │ │ │ │ │ └── misc.py
│ │ │ │ │ ├── visualization/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── image.py
│ │ │ │ │ ├── visualizer/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── image_vis.py
│ │ │ │ │ │ ├── open3d_vis.py
│ │ │ │ │ │ └── show_result.py
│ │ │ │ │ └── voxel/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ └── voxel_generator.py
│ │ │ │ ├── datasets/
│ │ │ │ │ ├── B2D_dataset.py
│ │ │ │ │ ├── B2D_e2e_dataset.py
│ │ │ │ │ ├── B2D_sparsedrive_dataset.py
│ │ │ │ │ ├── B2D_vad_dataset.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── api_wrappers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── coco_api.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ ├── coco.py
│ │ │ │ │ ├── custom.py
│ │ │ │ │ ├── custom_3d.py
│ │ │ │ │ ├── custom_nuscenes_dataset.py
│ │ │ │ │ ├── custom_nuscenes_dataset_v2.py
│ │ │ │ │ ├── data_utils/
│ │ │ │ │ │ ├── data_utils.py
│ │ │ │ │ │ ├── rasterize.py
│ │ │ │ │ │ ├── trajectory_api.py
│ │ │ │ │ │ └── vector_map.py
│ │ │ │ │ ├── dataset_wrappers.py
│ │ │ │ │ ├── dd3d_nuscenes_dataset.py
│ │ │ │ │ ├── eval_utils/
│ │ │ │ │ │ ├── eval_utils.py
│ │ │ │ │ │ ├── map_api.py
│ │ │ │ │ │ ├── metric_utils.py
│ │ │ │ │ │ ├── nuscenes_eval.py
│ │ │ │ │ │ └── nuscenes_eval_motion.py
│ │ │ │ │ ├── lyft_dataset.py
│ │ │ │ │ ├── map_utils/
│ │ │ │ │ │ ├── mean_ap.py
│ │ │ │ │ │ ├── struct.py
│ │ │ │ │ │ ├── tpfp.py
│ │ │ │ │ │ └── tpfp_chamfer.py
│ │ │ │ │ ├── nuscenes_dataset.py
│ │ │ │ │ ├── nuscenes_e2e_dataset.py
│ │ │ │ │ ├── nuscenes_eval.py
│ │ │ │ │ ├── nuscenes_mono_dataset.py
│ │ │ │ │ ├── nuscenes_styled_eval_utils.py
│ │ │ │ │ ├── nuscenes_vad_dataset.py
│ │ │ │ │ ├── nuscnes_eval.py
│ │ │ │ │ ├── pipelines/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── augment.py
│ │ │ │ │ │ ├── compose.py
│ │ │ │ │ │ ├── data_augment_utils.py
│ │ │ │ │ │ ├── formating.py
│ │ │ │ │ │ ├── loading.py
│ │ │ │ │ │ ├── occflow_label.py
│ │ │ │ │ │ ├── test_time_aug.py
│ │ │ │ │ │ ├── transforms.py
│ │ │ │ │ │ ├── transforms_3d.py
│ │ │ │ │ │ └── vectorize.py
│ │ │ │ │ ├── prepare_B2D.py
│ │ │ │ │ ├── samplers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── distributed_sampler.py
│ │ │ │ │ │ ├── group_sampler.py
│ │ │ │ │ │ └── sampler.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ ├── vad_custom_nuscenes_eval.py
│ │ │ │ │ └── vis_utils.py
│ │ │ │ ├── fileio/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── file_client.py
│ │ │ │ │ ├── handlers/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── json_handler.py
│ │ │ │ │ │ └── pickle_handler.py
│ │ │ │ │ ├── io.py
│ │ │ │ │ └── parse.py
│ │ │ │ ├── image/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── colorspace.py
│ │ │ │ │ ├── geometric.py
│ │ │ │ │ ├── io.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ └── photometric.py
│ │ │ │ ├── layers/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── aspp.py
│ │ │ │ │ ├── batch_norm.py
│ │ │ │ │ ├── blocks.py
│ │ │ │ │ ├── csrc/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── ROIAlignRotated/
│ │ │ │ │ │ │ ├── ROIAlignRotated.h
│ │ │ │ │ │ │ ├── ROIAlignRotated_cpu.cpp
│ │ │ │ │ │ │ └── ROIAlignRotated_cuda.cu
│ │ │ │ │ │ ├── box_iou_rotated/
│ │ │ │ │ │ │ ├── box_iou_rotated.h
│ │ │ │ │ │ │ ├── box_iou_rotated_cpu.cpp
│ │ │ │ │ │ │ ├── box_iou_rotated_cuda.cu
│ │ │ │ │ │ │ └── box_iou_rotated_utils.h
│ │ │ │ │ │ ├── cocoeval/
│ │ │ │ │ │ │ ├── cocoeval.cpp
│ │ │ │ │ │ │ └── cocoeval.h
│ │ │ │ │ │ ├── cuda_version.cu
│ │ │ │ │ │ ├── deformable/
│ │ │ │ │ │ │ ├── deform_conv.h
│ │ │ │ │ │ │ ├── deform_conv_cuda.cu
│ │ │ │ │ │ │ └── deform_conv_cuda_kernel.cu
│ │ │ │ │ │ ├── nms_rotated/
│ │ │ │ │ │ │ ├── nms_rotated.h
│ │ │ │ │ │ │ ├── nms_rotated_cpu.cpp
│ │ │ │ │ │ │ └── nms_rotated_cuda.cu
│ │ │ │ │ │ └── vision.cpp
│ │ │ │ │ ├── deform_conv.py
│ │ │ │ │ ├── losses.py
│ │ │ │ │ ├── mask_ops.py
│ │ │ │ │ ├── nms.py
│ │ │ │ │ ├── roi_align.py
│ │ │ │ │ ├── roi_align_rotated.py
│ │ │ │ │ ├── rotated_boxes.py
│ │ │ │ │ ├── shape_spec.py
│ │ │ │ │ └── wrappers.py
│ │ │ │ ├── losses/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── dice_loss.py
│ │ │ │ │ ├── focal_loss.py
│ │ │ │ │ ├── fvcore_smooth_l1_loss.py
│ │ │ │ │ ├── occflow_loss.py
│ │ │ │ │ ├── planning_loss.py
│ │ │ │ │ ├── track_loss.py
│ │ │ │ │ └── traj_loss.py
│ │ │ │ ├── metrics/
│ │ │ │ │ ├── classification.py
│ │ │ │ │ ├── compositional.py
│ │ │ │ │ ├── distributed.py
│ │ │ │ │ ├── metric.py
│ │ │ │ │ ├── reduction.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── modeling/
│ │ │ │ │ └── postprocessing.py
│ │ │ │ ├── models/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── backbones/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base_module.py
│ │ │ │ │ │ ├── resnet.py
│ │ │ │ │ │ ├── vgg.py
│ │ │ │ │ │ └── vovnet.py
│ │ │ │ │ ├── bricks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── activation.py
│ │ │ │ │ │ ├── conv.py
│ │ │ │ │ │ ├── conv_module.py
│ │ │ │ │ │ ├── drop.py
│ │ │ │ │ │ ├── norm.py
│ │ │ │ │ │ ├── padding.py
│ │ │ │ │ │ ├── plugin.py
│ │ │ │ │ │ ├── registry.py
│ │ │ │ │ │ ├── transformer.py
│ │ │ │ │ │ └── wrappers.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ ├── dense_heads/
│ │ │ │ │ │ ├── MomAD_head.py
│ │ │ │ │ │ ├── VAD_head.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── anchor3d_head.py
│ │ │ │ │ │ ├── anchor_free_head.py
│ │ │ │ │ │ ├── anchor_head.py
│ │ │ │ │ │ ├── base_dense_head.py
│ │ │ │ │ │ ├── bev_head.py
│ │ │ │ │ │ ├── bevformer_head.py
│ │ │ │ │ │ ├── dense_test_mixins.py
│ │ │ │ │ │ ├── detr_head.py
│ │ │ │ │ │ ├── free_anchor3d_head.py
│ │ │ │ │ │ ├── ga_rpn_head.py
│ │ │ │ │ │ ├── guided_anchor_head.py
│ │ │ │ │ │ ├── motion_head.py
│ │ │ │ │ │ ├── motion_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── base_motion_head.py
│ │ │ │ │ │ │ ├── modules.py
│ │ │ │ │ │ │ ├── motion_deformable_attn.py
│ │ │ │ │ │ │ ├── motion_optimization.py
│ │ │ │ │ │ │ └── motion_utils.py
│ │ │ │ │ │ ├── occ_head.py
│ │ │ │ │ │ ├── occ_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── metrics.py
│ │ │ │ │ │ │ ├── modules.py
│ │ │ │ │ │ │ └── utils.py
│ │ │ │ │ │ ├── panseg_head.py
│ │ │ │ │ │ ├── planning_head.py
│ │ │ │ │ │ ├── planning_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── collision_optimization.py
│ │ │ │ │ │ │ ├── metric_stp3.py
│ │ │ │ │ │ │ └── planning_metrics.py
│ │ │ │ │ │ ├── rpn_head.py
│ │ │ │ │ │ ├── seg_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── seg_assigner.py
│ │ │ │ │ │ │ ├── seg_deformable_transformer.py
│ │ │ │ │ │ │ ├── seg_detr_head.py
│ │ │ │ │ │ │ ├── seg_mask_head.py
│ │ │ │ │ │ │ └── seg_utils.py
│ │ │ │ │ │ ├── track_head.py
│ │ │ │ │ │ ├── track_head_plugin/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── modules.py
│ │ │ │ │ │ │ ├── track_instance.py
│ │ │ │ │ │ │ └── tracker.py
│ │ │ │ │ │ └── train_mixins.py
│ │ │ │ │ ├── detectors/
│ │ │ │ │ │ ├── MomAD.py
│ │ │ │ │ │ ├── SpMomAD.py
│ │ │ │ │ │ ├── VAD.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── bevformer.py
│ │ │ │ │ │ ├── bevformerV2.py
│ │ │ │ │ │ ├── bevformer_fp16.py
│ │ │ │ │ │ ├── mvx_two_stage.py
│ │ │ │ │ │ ├── single_stage.py
│ │ │ │ │ │ ├── single_stage_mono3d.py
│ │ │ │ │ │ ├── sparsedrive.py
│ │ │ │ │ │ ├── uniad_e2e.py
│ │ │ │ │ │ └── uniad_track.py
│ │ │ │ │ ├── losses/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── focal_loss.py
│ │ │ │ │ │ ├── iou_loss.py
│ │ │ │ │ │ ├── smooth_l1_loss.py
│ │ │ │ │ │ └── utils.py
│ │ │ │ │ ├── modules/
│ │ │ │ │ │ ├── VAD_transformer.py
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── custom_base_transformer_layer.py
│ │ │ │ │ │ ├── decoder.py
│ │ │ │ │ │ ├── encoder.py
│ │ │ │ │ │ ├── group_attention.py
│ │ │ │ │ │ ├── multi_scale_deformable_attn_function.py
│ │ │ │ │ │ ├── spatial_cross_attention.py
│ │ │ │ │ │ ├── temporal_self_attention.py
│ │ │ │ │ │ ├── transformer.py
│ │ │ │ │ │ ├── transformerV2.py
│ │ │ │ │ │ └── vote_module.py
│ │ │ │ │ ├── necks/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── fpn.py
│ │ │ │ │ ├── opt/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── adamw.py
│ │ │ │ │ ├── roi_heads/
│ │ │ │ │ │ └── mask_heads/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── fused_semantic_head.py
│ │ │ │ │ ├── segmentors/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── base.py
│ │ │ │ │ ├── utils/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── builder.py
│ │ │ │ │ │ ├── functional.py
│ │ │ │ │ │ ├── fuse_conv_bn.py
│ │ │ │ │ │ ├── grid_mask.py
│ │ │ │ │ │ ├── positional_encoding.py
│ │ │ │ │ │ ├── res_layer.py
│ │ │ │ │ │ ├── transformer.py
│ │ │ │ │ │ └── weight_init.py
│ │ │ │ │ └── vad_utils/
│ │ │ │ │ ├── CD_loss.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── map_utils.py
│ │ │ │ │ ├── plan_loss.py
│ │ │ │ │ └── traj_lr_warmup.py
│ │ │ │ ├── ops/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── csrc/
│ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ ├── box_iou_rotated_utils.hpp
│ │ │ │ │ │ │ ├── cuda/
│ │ │ │ │ │ │ │ ├── assign_score_withk_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── ball_query_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── bbox_overlaps_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── border_align_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── box_iou_rotated_cuda.cuh
│ │ │ │ │ │ │ │ ├── carafe_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── carafe_naive_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── common_cuda_helper.hpp
│ │ │ │ │ │ │ │ ├── correlation_cuda.cuh
│ │ │ │ │ │ │ │ ├── deform_conv_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── deform_roi_pool_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── furthest_point_sample_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── gather_points_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── group_points_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── iou3d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── knn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── masked_conv2d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── modulated_deform_conv_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── ms_deform_attn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── nms_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── nms_rotated_cuda.cuh
│ │ │ │ │ │ │ │ ├── points_in_boxes_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── psamask_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roi_align_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roi_align_rotated_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roi_pool_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roiaware_pool3d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── roipoint_pool3d_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── scatter_points_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── sigmoid_focal_loss_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── softmax_focal_loss_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── sync_bn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── three_interpolate_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── three_nn_cuda_kernel.cuh
│ │ │ │ │ │ │ │ ├── tin_shift_cuda_kernel.cuh
│ │ │ │ │ │ │ │ └── voxelization_cuda_kernel.cuh
│ │ │ │ │ │ │ ├── pytorch_cpp_helper.hpp
│ │ │ │ │ │ │ ├── pytorch_cuda_helper.hpp
│ │ │ │ │ │ │ └── pytorch_device_registry.hpp
│ │ │ │ │ │ └── pytorch/
│ │ │ │ │ │ ├── assign_score_withk.cpp
│ │ │ │ │ │ ├── ball_query.cpp
│ │ │ │ │ │ ├── bbox_overlaps.cpp
│ │ │ │ │ │ ├── border_align.cpp
│ │ │ │ │ │ ├── box_iou_rotated.cpp
│ │ │ │ │ │ ├── carafe.cpp
│ │ │ │ │ │ ├── carafe_naive.cpp
│ │ │ │ │ │ ├── contour_expand.cpp
│ │ │ │ │ │ ├── corner_pool.cpp
│ │ │ │ │ │ ├── correlation.cpp
│ │ │ │ │ │ ├── cpu/
│ │ │ │ │ │ │ ├── box_iou_rotated.cpp
│ │ │ │ │ │ │ ├── deform_conv.cpp
│ │ │ │ │ │ │ ├── modulated_deform_conv.cpp
│ │ │ │ │ │ │ ├── nms.cpp
│ │ │ │ │ │ │ ├── nms_rotated.cpp
│ │ │ │ │ │ │ ├── pixel_group.cpp
│ │ │ │ │ │ │ ├── points_in_boxes.cpp
│ │ │ │ │ │ │ ├── psamask.cpp
│ │ │ │ │ │ │ ├── roi_align.cpp
│ │ │ │ │ │ │ ├── roi_align_rotated.cpp
│ │ │ │ │ │ │ └── voxelization.cpp
│ │ │ │ │ │ ├── cuda/
│ │ │ │ │ │ │ ├── assign_score_withk_cuda.cu
│ │ │ │ │ │ │ ├── ball_query_cuda.cu
│ │ │ │ │ │ │ ├── bbox_overlaps_cuda.cu
│ │ │ │ │ │ │ ├── border_align_cuda.cu
│ │ │ │ │ │ │ ├── box_iou_rotated_cuda.cu
│ │ │ │ │ │ │ ├── carafe_cuda.cu
│ │ │ │ │ │ │ ├── carafe_naive_cuda.cu
│ │ │ │ │ │ │ ├── correlation_cuda.cu
│ │ │ │ │ │ │ ├── cudabind.cpp
│ │ │ │ │ │ │ ├── deform_conv_cuda.cu
│ │ │ │ │ │ │ ├── deform_roi_pool_cuda.cu
│ │ │ │ │ │ │ ├── focal_loss_cuda.cu
│ │ │ │ │ │ │ ├── furthest_point_sample_cuda.cu
│ │ │ │ │ │ │ ├── fused_bias_leakyrelu_cuda.cu
│ │ │ │ │ │ │ ├── gather_points_cuda.cu
│ │ │ │ │ │ │ ├── group_points_cuda.cu
│ │ │ │ │ │ │ ├── iou3d_cuda.cu
│ │ │ │ │ │ │ ├── knn_cuda.cu
│ │ │ │ │ │ │ ├── masked_conv2d_cuda.cu
│ │ │ │ │ │ │ ├── modulated_deform_conv_cuda.cu
│ │ │ │ │ │ │ ├── ms_deform_attn_cuda.cu
│ │ │ │ │ │ │ ├── nms_cuda.cu
│ │ │ │ │ │ │ ├── nms_rotated_cuda.cu
│ │ │ │ │ │ │ ├── points_in_boxes_cuda.cu
│ │ │ │ │ │ │ ├── psamask_cuda.cu
│ │ │ │ │ │ │ ├── roi_align_cuda.cu
│ │ │ │ │ │ │ ├── roi_align_rotated_cuda.cu
│ │ │ │ │ │ │ ├── roi_pool_cuda.cu
│ │ │ │ │ │ │ ├── roiaware_pool3d_cuda.cu
│ │ │ │ │ │ │ ├── roipoint_pool3d_cuda.cu
│ │ │ │ │ │ │ ├── scatter_points_cuda.cu
│ │ │ │ │ │ │ ├── sync_bn_cuda.cu
│ │ │ │ │ │ │ ├── three_interpolate_cuda.cu
│ │ │ │ │ │ │ ├── three_nn_cuda.cu
│ │ │ │ │ │ │ ├── tin_shift_cuda.cu
│ │ │ │ │ │ │ ├── upfirdn2d_kernel.cu
│ │ │ │ │ │ │ └── voxelization_cuda.cu
│ │ │ │ │ │ ├── deform_conv.cpp
│ │ │ │ │ │ ├── deform_roi_pool.cpp
│ │ │ │ │ │ ├── focal_loss.cpp
│ │ │ │ │ │ ├── furthest_point_sample.cpp
│ │ │ │ │ │ ├── fused_bias_leakyrelu.cpp
│ │ │ │ │ │ ├── gather_points.cpp
│ │ │ │ │ │ ├── group_points.cpp
│ │ │ │ │ │ ├── info.cpp
│ │ │ │ │ │ ├── iou3d.cpp
│ │ │ │ │ │ ├── knn.cpp
│ │ │ │ │ │ ├── masked_conv2d.cpp
│ │ │ │ │ │ ├── modulated_deform_conv.cpp
│ │ │ │ │ │ ├── ms_deform_attn.cpp
│ │ │ │ │ │ ├── nms.cpp
│ │ │ │ │ │ ├── nms_rotated.cpp
│ │ │ │ │ │ ├── pixel_group.cpp
│ │ │ │ │ │ ├── points_in_boxes.cpp
│ │ │ │ │ │ ├── psamask.cpp
│ │ │ │ │ │ ├── pybind.cpp
│ │ │ │ │ │ ├── roi_align.cpp
│ │ │ │ │ │ ├── roi_align_rotated.cpp
│ │ │ │ │ │ ├── roi_pool.cpp
│ │ │ │ │ │ ├── roiaware_pool3d.cpp
│ │ │ │ │ │ ├── roipoint_pool3d.cpp
│ │ │ │ │ │ ├── scatter_points.cpp
│ │ │ │ │ │ ├── sync_bn.cpp
│ │ │ │ │ │ ├── three_interpolate.cpp
│ │ │ │ │ │ ├── three_nn.cpp
│ │ │ │ │ │ ├── tin_shift.cpp
│ │ │ │ │ │ ├── upfirdn2d.cpp
│ │ │ │ │ │ └── voxelization.cpp
│ │ │ │ │ ├── deform_conv.py
│ │ │ │ │ ├── focal_loss.py
│ │ │ │ │ ├── iou3d.py
│ │ │ │ │ ├── iou3d_det/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── iou3d_utils.py
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── iou3d.cpp
│ │ │ │ │ │ └── iou3d_kernel.cu
│ │ │ │ │ ├── masked_conv.py
│ │ │ │ │ ├── modulated_deform_conv.py
│ │ │ │ │ ├── multi_scale_deform_attn.py
│ │ │ │ │ ├── nms.py
│ │ │ │ │ ├── roi_align.py
│ │ │ │ │ ├── roiaware_pool3d/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── points_in_boxes.py
│ │ │ │ │ │ ├── roiaware_pool3d.py
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── points_in_boxes_cpu.cpp
│ │ │ │ │ │ ├── points_in_boxes_cuda.cu
│ │ │ │ │ │ ├── roiaware_pool3d.cpp
│ │ │ │ │ │ └── roiaware_pool3d_kernel.cu
│ │ │ │ │ └── voxelize.py
│ │ │ │ ├── optims/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── adamw.py
│ │ │ │ │ └── optimizer.py
│ │ │ │ ├── parallel/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── collate.py
│ │ │ │ │ ├── data_container.py
│ │ │ │ │ ├── registry.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── runner/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── base_runner.py
│ │ │ │ │ ├── builder.py
│ │ │ │ │ ├── epoch_based_runner.py
│ │ │ │ │ └── hooks/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── checkpoint.py
│ │ │ │ │ ├── evaluation.py
│ │ │ │ │ ├── hook.py
│ │ │ │ │ ├── iter_timer.py
│ │ │ │ │ ├── logger/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── base.py
│ │ │ │ │ │ ├── tensorboard.py
│ │ │ │ │ │ └── text.py
│ │ │ │ │ ├── lr_updater.py
│ │ │ │ │ ├── optimizer.py
│ │ │ │ │ ├── sampler_seed.py
│ │ │ │ │ └── vad_hooks.py
│ │ │ │ ├── structures/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── boxes.py
│ │ │ │ │ ├── image_list.py
│ │ │ │ │ ├── instances.py
│ │ │ │ │ ├── keypoints.py
│ │ │ │ │ ├── masks.py
│ │ │ │ │ └── rotated_boxes.py
│ │ │ │ └── utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bricks.py
│ │ │ │ ├── checkpoint.py
│ │ │ │ ├── collect_env.py
│ │ │ │ ├── config.py
│ │ │ │ ├── contextmanagers.py
│ │ │ │ ├── ext_loader.py
│ │ │ │ ├── fp16_utils.py
│ │ │ │ ├── grid_mask.py
│ │ │ │ ├── hub.py
│ │ │ │ ├── log_buffer.py
│ │ │ │ ├── logger.py
│ │ │ │ ├── logging.py
│ │ │ │ ├── memory.py
│ │ │ │ ├── misc.py
│ │ │ │ ├── path.py
│ │ │ │ ├── position_embedding.py
│ │ │ │ ├── priority.py
│ │ │ │ ├── progressbar.py
│ │ │ │ ├── registry.py
│ │ │ │ ├── runner_utils.py
│ │ │ │ ├── timer.py
│ │ │ │ ├── util_mixins.py
│ │ │ │ ├── version_utils.py
│ │ │ │ └── visual.py
│ │ │ ├── requirements.txt
│ │ │ └── team_code/
│ │ │ ├── pid_controller.py
│ │ │ ├── planner.py
│ │ │ ├── sparsedrive_b2d_agent.py
│ │ │ ├── uniad_b2d_agent.py
│ │ │ ├── vad_b2d_agent.py
│ │ │ └── vad_b2d_agent_visualize.py
│ │ ├── docs/
│ │ │ ├── anno.md
│ │ │ ├── bench2drive_base_1000.json
│ │ │ ├── bench2drive_full+sup_13638.json
│ │ │ └── bench2drive_mini_10.json
│ │ ├── leaderboard/
│ │ │ ├── .pylintrc
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── docs/
│ │ │ │ ├── Gemfile
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── _config.yml
│ │ │ │ ├── _includes/
│ │ │ │ │ ├── footer.html
│ │ │ │ │ ├── google-analytics.html
│ │ │ │ │ ├── head.html
│ │ │ │ │ ├── navbar.html
│ │ │ │ │ ├── read_time.html
│ │ │ │ │ └── scripts.html
│ │ │ │ ├── _layouts/
│ │ │ │ │ ├── default.html
│ │ │ │ │ ├── home.html
│ │ │ │ │ ├── page.html
│ │ │ │ │ └── post.html
│ │ │ │ ├── _sass/
│ │ │ │ │ └── styles.scss
│ │ │ │ ├── about.html
│ │ │ │ ├── assets/
│ │ │ │ │ ├── main.scss
│ │ │ │ │ ├── scripts.js
│ │ │ │ │ └── vendor/
│ │ │ │ │ ├── bootstrap/
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ └── bootstrap.css
│ │ │ │ │ │ └── js/
│ │ │ │ │ │ ├── bootstrap.bundle.js
│ │ │ │ │ │ └── bootstrap.js
│ │ │ │ │ ├── fontawesome-free/
│ │ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ │ ├── css/
│ │ │ │ │ │ │ ├── all.css
│ │ │ │ │ │ │ ├── brands.css
│ │ │ │ │ │ │ ├── fontawesome.css
│ │ │ │ │ │ │ ├── regular.css
│ │ │ │ │ │ │ ├── solid.css
│ │ │ │ │ │ │ ├── svg-with-js.css
│ │ │ │ │ │ │ └── v4-shims.css
│ │ │ │ │ │ ├── js/
│ │ │ │ │ │ │ ├── all.js
│ │ │ │ │ │ │ ├── brands.js
│ │ │ │ │ │ │ ├── conflict-detection.js
│ │ │ │ │ │ │ ├── fontawesome.js
│ │ │ │ │ │ │ ├── regular.js
│ │ │ │ │ │ │ ├── solid.js
│ │ │ │ │ │ │ └── v4-shims.js
│ │ │ │ │ │ ├── less/
│ │ │ │ │ │ │ ├── _animated.less
│ │ │ │ │ │ │ ├── _bordered-pulled.less
│ │ │ │ │ │ │ ├── _core.less
│ │ │ │ │ │ │ ├── _fixed-width.less
│ │ │ │ │ │ │ ├── _icons.less
│ │ │ │ │ │ │ ├── _larger.less
│ │ │ │ │ │ │ ├── _list.less
│ │ │ │ │ │ │ ├── _mixins.less
│ │ │ │ │ │ │ ├── _rotated-flipped.less
│ │ │ │ │ │ │ ├── _screen-reader.less
│ │ │ │ │ │ │ ├── _shims.less
│ │ │ │ │ │ │ ├── _stacked.less
│ │ │ │ │ │ │ ├── _variables.less
│ │ │ │ │ │ │ ├── brands.less
│ │ │ │ │ │ │ ├── fontawesome.less
│ │ │ │ │ │ │ ├── regular.less
│ │ │ │ │ │ │ ├── solid.less
│ │ │ │ │ │ │ └── v4-shims.less
│ │ │ │ │ │ └── scss/
│ │ │ │ │ │ ├── _animated.scss
│ │ │ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ │ │ ├── _core.scss
│ │ │ │ │ │ ├── _fixed-width.scss
│ │ │ │ │ │ ├── _icons.scss
│ │ │ │ │ │ ├── _larger.scss
│ │ │ │ │ │ ├── _list.scss
│ │ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ │ │ ├── _screen-reader.scss
│ │ │ │ │ │ ├── _shims.scss
│ │ │ │ │ │ ├── _stacked.scss
│ │ │ │ │ │ ├── _variables.scss
│ │ │ │ │ │ ├── brands.scss
│ │ │ │ │ │ ├── fontawesome.scss
│ │ │ │ │ │ ├── regular.scss
│ │ │ │ │ │ ├── solid.scss
│ │ │ │ │ │ └── v4-shims.scss
│ │ │ │ │ ├── jquery/
│ │ │ │ │ │ ├── jquery.js
│ │ │ │ │ │ └── jquery.slim.js
│ │ │ │ │ └── startbootstrap-clean-blog/
│ │ │ │ │ ├── js/
│ │ │ │ │ │ └── jqBootstrapValidation.js
│ │ │ │ │ └── scss/
│ │ │ │ │ ├── _bootstrap-overrides.scss
│ │ │ │ │ ├── _contact.scss
│ │ │ │ │ ├── _footer.scss
│ │ │ │ │ ├── _global.scss
│ │ │ │ │ ├── _masthead.scss
│ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ ├── _navbar.scss
│ │ │ │ │ ├── _post.scss
│ │ │ │ │ ├── _variables.scss
│ │ │ │ │ └── clean-blog.scss
│ │ │ │ ├── contact.html
│ │ │ │ ├── get_started.html
│ │ │ │ ├── gulpfile.js
│ │ │ │ ├── index.html
│ │ │ │ ├── jekyll-theme-clean-blog.gemspec
│ │ │ │ ├── leaderboard.html
│ │ │ │ ├── posts/
│ │ │ │ │ └── index.html
│ │ │ │ └── submit.html
│ │ │ ├── leaderboard/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── autoagents/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agent_wrapper.py
│ │ │ │ │ ├── autonomous_agent.py
│ │ │ │ │ ├── dummy_agent.py
│ │ │ │ │ ├── human_agent.py
│ │ │ │ │ ├── human_agent_config.txt
│ │ │ │ │ ├── npc_agent.py
│ │ │ │ │ ├── ros1_agent.py
│ │ │ │ │ ├── ros2_agent.py
│ │ │ │ │ └── ros_base_agent.py
│ │ │ │ ├── envs/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── sensor_interface.py
│ │ │ │ ├── leaderboard_evaluator.py
│ │ │ │ ├── scenarios/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── route_scenario.py
│ │ │ │ │ └── scenario_manager.py
│ │ │ │ └── utils/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── checkpoint_tools.py
│ │ │ │ ├── parked_vehicles.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── route_indexer.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ └── statistics_manager.py
│ │ │ ├── requirements.txt
│ │ │ ├── run_leaderboard.sh
│ │ │ ├── scripts/
│ │ │ │ ├── Dockerfile.master
│ │ │ │ ├── Dockerfile.ros
│ │ │ │ ├── agent_entrypoint.sh
│ │ │ │ ├── code_check_and_formatting.sh
│ │ │ │ ├── make_docker.sh
│ │ │ │ ├── manage_scenarios.py
│ │ │ │ ├── merge_statistics.py
│ │ │ │ ├── pretty_print_json.py
│ │ │ │ ├── route_creator.py
│ │ │ │ ├── route_displayer.py
│ │ │ │ ├── route_summarizer.py
│ │ │ │ ├── run_evaluation.sh
│ │ │ │ ├── run_evaluation_debug.sh
│ │ │ │ ├── run_evaluation_multi_admlp.sh
│ │ │ │ ├── run_evaluation_multi_tcp.sh
│ │ │ │ ├── run_evaluation_multi_uniad.sh
│ │ │ │ ├── run_evaluation_multi_uniad_tiny.sh
│ │ │ │ ├── run_evaluation_multi_vad.sh
│ │ │ │ ├── run_evalutaion_multi_sparsedrive.sh
│ │ │ │ ├── scenario_creator.py
│ │ │ │ ├── scenario_orderer.py
│ │ │ │ └── weather_creator.py
│ │ │ └── team_code/
│ │ │ ├── pid_controller.py
│ │ │ ├── planner.py
│ │ │ ├── uniad_b2d_agent.py
│ │ │ ├── vad_b2d_agent.py
│ │ │ └── vad_b2d_agent_visualize.py
│ │ ├── scenario_runner/
│ │ │ ├── .pylintrc
│ │ │ ├── .readthedocs.yml
│ │ │ ├── CARLA_VER
│ │ │ ├── Dockerfile
│ │ │ ├── Docs/
│ │ │ │ ├── CHANGELOG.md
│ │ │ │ ├── CODE_OF_CONDUCT.md
│ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ ├── FAQ.md
│ │ │ │ ├── agent_evaluation.md
│ │ │ │ ├── coding_standard.md
│ │ │ │ ├── creating_new_scenario.md
│ │ │ │ ├── extra.css
│ │ │ │ ├── getting_scenariorunner.md
│ │ │ │ ├── getting_started.md
│ │ │ │ ├── index.md
│ │ │ │ ├── list_of_scenarios.md
│ │ │ │ ├── metrics_module.md
│ │ │ │ ├── openscenario_support.md
│ │ │ │ ├── requirements.txt
│ │ │ │ └── ros_agent.md
│ │ │ ├── Jenkinsfile
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── manual_control.py
│ │ │ ├── metrics_manager.py
│ │ │ ├── mkdocs.yml
│ │ │ ├── no_rendering_mode.py
│ │ │ ├── requirements.txt
│ │ │ ├── scenario_runner.py
│ │ │ └── srunner/
│ │ │ ├── __init__.py
│ │ │ ├── autoagents/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── agent_wrapper.py
│ │ │ │ ├── autonomous_agent.py
│ │ │ │ ├── dummy_agent.py
│ │ │ │ ├── human_agent.py
│ │ │ │ ├── human_agent_config.txt
│ │ │ │ ├── npc_agent.py
│ │ │ │ ├── ros_agent.py
│ │ │ │ └── sensor_interface.py
│ │ │ ├── examples/
│ │ │ │ ├── ActorFlow.xml
│ │ │ │ ├── CatalogExample.xosc
│ │ │ │ ├── ChangeLane.xml
│ │ │ │ ├── ChangingWeather.xosc
│ │ │ │ ├── ControlLoss.xml
│ │ │ │ ├── CutIn.xml
│ │ │ │ ├── CyclistCrossing.xosc
│ │ │ │ ├── FollowLeadingVehicle.xml
│ │ │ │ ├── FollowLeadingVehicle.xosc
│ │ │ │ ├── FreeRide.xml
│ │ │ │ ├── HighwayCutIn.xml
│ │ │ │ ├── IntersectionCollisionAvoidance.xosc
│ │ │ │ ├── LaneChangeSimple.xosc
│ │ │ │ ├── LeadingVehicle.xml
│ │ │ │ ├── NoSignalJunction.xml
│ │ │ │ ├── ObjectCrossing.xml
│ │ │ │ ├── OppositeDirection.xml
│ │ │ │ ├── OscControllerExample.xosc
│ │ │ │ ├── PedestrianCrossingFront.xosc
│ │ │ │ ├── RouteObstacles.xml
│ │ │ │ ├── RunningRedLight.xml
│ │ │ │ ├── SignalizedJunctionLeftTurn.xml
│ │ │ │ ├── SignalizedJunctionRightTurn.xml
│ │ │ │ ├── Slalom.xosc
│ │ │ │ ├── VehicleOpensDoor.xml
│ │ │ │ ├── VehicleTurning.xml
│ │ │ │ └── catalogs/
│ │ │ │ ├── ControllerCatalog.xosc
│ │ │ │ ├── EnvironmentCatalog.xosc
│ │ │ │ ├── ManeuverCatalog.xosc
│ │ │ │ ├── MiscObjectCatalog.xosc
│ │ │ │ ├── PedestrianCatalog.xosc
│ │ │ │ └── VehicleCatalog.xosc
│ │ │ ├── metrics/
│ │ │ │ ├── examples/
│ │ │ │ │ ├── basic_metric.py
│ │ │ │ │ ├── criteria_filter.py
│ │ │ │ │ ├── distance_between_vehicles.py
│ │ │ │ │ └── distance_to_lane_center.py
│ │ │ │ └── tools/
│ │ │ │ ├── metrics_log.py
│ │ │ │ └── metrics_parser.py
│ │ │ ├── openscenario/
│ │ │ │ ├── 0.9.x/
│ │ │ │ │ ├── OpenSCENARIO_Catalog.xsd
│ │ │ │ │ ├── OpenSCENARIO_TypeDefs.xsd
│ │ │ │ │ ├── OpenSCENARIO_v0.9.1.xsd
│ │ │ │ │ └── migration0_9_1to1_0.xslt
│ │ │ │ └── OpenSCENARIO.xsd
│ │ │ ├── scenarioconfigs/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── openscenario_configuration.py
│ │ │ │ ├── route_scenario_configuration.py
│ │ │ │ └── scenario_configuration.py
│ │ │ ├── scenariomanager/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actorcontrols/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── actor_control.py
│ │ │ │ │ ├── basic_control.py
│ │ │ │ │ ├── carla_autopilot.py
│ │ │ │ │ ├── external_control.py
│ │ │ │ │ ├── npc_vehicle_control.py
│ │ │ │ │ ├── pedestrian_control.py
│ │ │ │ │ ├── simple_vehicle_control.py
│ │ │ │ │ ├── vehicle_longitudinal_control.py
│ │ │ │ │ └── visualizer.py
│ │ │ │ ├── carla_data_provider.py
│ │ │ │ ├── lights_sim.py
│ │ │ │ ├── result_writer.py
│ │ │ │ ├── scenario_manager.py
│ │ │ │ ├── scenarioatomics/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── atomic_behaviors.py
│ │ │ │ │ ├── atomic_criteria.py
│ │ │ │ │ └── atomic_trigger_conditions.py
│ │ │ │ ├── timer.py
│ │ │ │ ├── traffic_events.py
│ │ │ │ ├── watchdog.py
│ │ │ │ └── weather_sim.py
│ │ │ ├── scenarios/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── actor_flow.py
│ │ │ │ ├── background_activity.py
│ │ │ │ ├── background_activity_parametrizer.py
│ │ │ │ ├── basic_scenario.py
│ │ │ │ ├── blocked_intersection.py
│ │ │ │ ├── change_lane.py
│ │ │ │ ├── construction_crash_vehicle.py
│ │ │ │ ├── control_loss.py
│ │ │ │ ├── cross_bicycle_flow.py
│ │ │ │ ├── cut_in.py
│ │ │ │ ├── cut_in_with_static_vehicle.py
│ │ │ │ ├── follow_leading_vehicle.py
│ │ │ │ ├── freeride.py
│ │ │ │ ├── green_traffic_light.py
│ │ │ │ ├── hard_break.py
│ │ │ │ ├── highway_cut_in.py
│ │ │ │ ├── invading_turn.py
│ │ │ │ ├── left_turn_enter_flow.py
│ │ │ │ ├── maneuver_opposite_direction.py
│ │ │ │ ├── no_signal_junction_crossing.py
│ │ │ │ ├── object_crash_intersection.py
│ │ │ │ ├── object_crash_vehicle.py
│ │ │ │ ├── open_scenario.py
│ │ │ │ ├── opposite_vehicle_taking_priority.py
│ │ │ │ ├── other_leading_vehicle.py
│ │ │ │ ├── parking_cut_in.py
│ │ │ │ ├── parking_exit.py
│ │ │ │ ├── pedestrian_crossing.py
│ │ │ │ ├── route_obstacles.py
│ │ │ │ ├── route_scenario.py
│ │ │ │ ├── sequentially_lane_change.py
│ │ │ │ ├── signalized_junction_left_turn.py
│ │ │ │ ├── signalized_junction_right_turn.py
│ │ │ │ ├── t_junction.py
│ │ │ │ ├── vanilla_turn.py
│ │ │ │ ├── vehicle_opens_door.py
│ │ │ │ └── yield_to_emergency_vehicle.py
│ │ │ ├── tests/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── carla_mocks/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── agents/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── navigation/
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── basic_agent.py
│ │ │ │ │ │ │ ├── behavior_agent.py
│ │ │ │ │ │ │ ├── behavior_types.py
│ │ │ │ │ │ │ ├── controller.py
│ │ │ │ │ │ │ ├── global_route_planner.py
│ │ │ │ │ │ │ └── local_planner.py
│ │ │ │ │ │ └── tools/
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── misc.py
│ │ │ │ │ └── carla.py
│ │ │ │ └── test_xosc_load.py
│ │ │ ├── tools/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── background_manager.py
│ │ │ │ ├── openscenario_parser.py
│ │ │ │ ├── py_trees_port.py
│ │ │ │ ├── route_manipulation.py
│ │ │ │ ├── route_parser.py
│ │ │ │ ├── scenario_helper.py
│ │ │ │ └── scenario_parser.py
│ │ │ └── utilities/
│ │ │ └── code_check_and_formatting.sh
│ │ └── tools/
│ │ ├── ability_benchmark.py
│ │ ├── check_carla.md
│ │ ├── clean_carla.sh
│ │ ├── data_collect.py
│ │ ├── download_mini.sh
│ │ ├── efficiency_smoothness_benchmark.py
│ │ ├── gen_hdmap.py
│ │ ├── generate_video.py
│ │ ├── merge_route_json.py
│ │ ├── split_xml.py
│ │ ├── utils.py
│ │ └── visualize.py
│ └── quick_start.md
└── open_loop/
├── docs/
│ └── quick_start.md
├── nuscenes_infos_val_hrad_planing_scene.pkl
├── projects/
│ ├── configs/
│ │ ├── MomAD_small_stage1_roboAD.py
│ │ ├── MomAD_small_stage2_roboAD.py
│ │ ├── MomAD_small_stage2_roboAD_6s.py
│ │ ├── MomAD_small_trainval_1_10_stage1_test.py
│ │ ├── sparsedrive_small_stage1.py
│ │ ├── sparsedrive_small_stage1_roboAD.py
│ │ ├── sparsedrive_small_stage2.py
│ │ ├── sparsedrive_small_stage2_6s.py
│ │ └── sparsedrive_small_trainval_1_10_stage1_test.py
│ └── mmdet3d_plugin/
│ ├── __init__.py
│ ├── apis/
│ │ ├── __init__.py
│ │ ├── mmdet_train.py
│ │ ├── test.py
│ │ └── train.py
│ ├── core/
│ │ ├── box3d.py
│ │ └── evaluation/
│ │ ├── __init__.py
│ │ └── eval_hooks.py
│ ├── datasets/
│ │ ├── __init__.py
│ │ ├── builder.py
│ │ ├── evaluation/
│ │ │ ├── __init__.py
│ │ │ ├── map/
│ │ │ │ ├── AP.py
│ │ │ │ ├── distance.py
│ │ │ │ └── vector_eval.py
│ │ │ ├── motion/
│ │ │ │ ├── motion_eval_uniad.py
│ │ │ │ └── motion_utils.py
│ │ │ └── planning/
│ │ │ ├── planning_eval.py
│ │ │ ├── planning_eval_roboAD.py
│ │ │ └── planning_eval_roboAD_6s.py
│ │ ├── map_utils/
│ │ │ ├── nuscmap_extractor.py
│ │ │ └── utils.py
│ │ ├── nuscenes_3d_dataset.py
│ │ ├── nuscenes_3d_dataset_roboAD.py
│ │ ├── nuscenes_3d_dataset_roboAD_6s.py
│ │ ├── pipelines/
│ │ │ ├── __init__.py
│ │ │ ├── augment.py
│ │ │ ├── loading.py
│ │ │ ├── transform.py
│ │ │ └── vectorize.py
│ │ ├── samplers/
│ │ │ ├── __init__.py
│ │ │ ├── distributed_sampler.py
│ │ │ ├── group_in_batch_sampler.py
│ │ │ ├── group_sampler.py
│ │ │ └── sampler.py
│ │ └── utils.py
│ ├── models/
│ │ ├── __init__.py
│ │ ├── attention.py
│ │ ├── base_target.py
│ │ ├── blocks.py
│ │ ├── detection3d/
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── detection3d_blocks.py
│ │ │ ├── detection3d_head.py
│ │ │ ├── detection3d_head_roboAD.py
│ │ │ ├── feature_enhance.py
│ │ │ ├── losses.py
│ │ │ └── target.py
│ │ ├── grid_mask.py
│ │ ├── instance_bank.py
│ │ ├── map/
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── loss.py
│ │ │ ├── map_blocks.py
│ │ │ ├── match_cost.py
│ │ │ └── target.py
│ │ ├── motion/
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── instance_queue.py
│ │ │ ├── motion_blocks.py
│ │ │ ├── motion_planning_head.py
│ │ │ ├── motion_planning_head_roboAD.py
│ │ │ ├── motion_planning_head_roboAD_6s.py
│ │ │ ├── next_token_prediction.py
│ │ │ └── target.py
│ │ ├── sparsedrive.py
│ │ └── sparsedrive_head.py
│ └── ops/
│ ├── __init__.py
│ ├── deformable_aggregation.py
│ ├── setup.py
│ └── src/
│ ├── deformable_aggregation.cpp
│ └── deformable_aggregation_cuda.cu
├── requirement.txt
├── scripts/
│ ├── create_data.sh
│ ├── kmeans.sh
│ ├── test.sh
│ ├── test_roboAD.sh
│ ├── train.sh
│ ├── train_6s.sh
│ ├── train_roboAD.sh
│ └── visualize.sh
├── test.py
├── tools/
│ ├── benchmark.py
│ ├── data_converter/
│ │ ├── __init__.py
│ │ ├── nuscenes_converter.py
│ │ ├── nuscenes_converter_1_10.py
│ │ ├── nuscenes_converter_6s.py
│ │ └── nuscenes_converter_hrad_planing_scene.py
│ ├── dist_test.sh
│ ├── dist_train.sh
│ ├── fuse_conv_bn.py
│ ├── kmeans/
│ │ ├── kmeans_det.py
│ │ ├── kmeans_map.py
│ │ ├── kmeans_motion.py
│ │ └── kmeans_plan.py
│ ├── test.py
│ ├── train.py
│ ├── train_single.py
│ └── visualization/
│ ├── bev_render.py
│ ├── cam_render.py
│ └── visualize.py
└── visualize.py
Showing preview only (936K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (11269 symbols across 924 files)
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/benchmark.py
function parse_args (line 17) | def parse_args():
function get_max_memory (line 33) | def get_max_memory(model):
function main (line 42) | def main():
function get_mem_fps (line 47) | def get_mem_fps(args):
function get_flops_params (line 112) | def get_flops_params(args):
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/B2D_converter.py
function point_in_canvas_hw (line 63) | def point_in_canvas_hw(pos):
function calculate_cube_vertices (line 69) | def calculate_cube_vertices(center, extent):
function calculate_occlusion_stats (line 84) | def calculate_occlusion_stats(bbox_points, depth, depth_map, max_render_...
function point_is_occluded (line 116) | def point_is_occluded(point, vertex_depth, depth_map):
function apply_trans (line 134) | def apply_trans(vec,world2ego):
function get_pose_matrix (line 139) | def get_pose_matrix(dic):
function get_npc2world (line 147) | def get_npc2world(npc):
function get_global_trigger_vertex (line 163) | def get_global_trigger_vertex(center,extent,yaw_in_degree):
function get_image_point (line 179) | def get_image_point(loc, K, w2c):
function get_action (line 189) | def get_action(index):
function gengrate_map (line 235) | def gengrate_map(map_root):
function preprocess (line 281) | def preprocess(folder_list,idx,tmp_dir,train_or_val,map_infos):
function get_map_anno (line 455) | def get_map_anno(ann_info, map_infos):
function generate_infos (line 509) | def generate_infos(folder_list,workers,train_or_val,tmp_dir, map_infos):
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter.py
function quart_to_rpy (line 41) | def quart_to_rpy(qua):
function locate_message (line 48) | def locate_message(utimes, utime):
function geom2anno (line 54) | def geom2anno(map_geoms):
function create_nuscenes_infos (line 70) | def create_nuscenes_infos(root_path,
function get_available_scenes (line 154) | def get_available_scenes(nusc):
function _fill_trainval_infos (line 194) | def _fill_trainval_infos(nusc,
function get_ego_status (line 419) | def get_ego_status(nusc, nusc_can_bus, sample):
function get_global_sensor_pose (line 441) | def get_global_sensor_pose(rec, nusc):
function obtain_sensor2top (line 453) | def obtain_sensor2top(nusc,
function nuscenes_data_prep (line 514) | def nuscenes_data_prep(root_path,
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter_1_10.py
function quart_to_rpy (line 41) | def quart_to_rpy(qua):
function locate_message (line 48) | def locate_message(utimes, utime):
function geom2anno (line 54) | def geom2anno(map_geoms):
function create_nuscenes_infos (line 70) | def create_nuscenes_infos(root_path,
function get_available_scenes (line 160) | def get_available_scenes(nusc):
function _fill_trainval_infos (line 200) | def _fill_trainval_infos(nusc,
function get_ego_status (line 431) | def get_ego_status(nusc, nusc_can_bus, sample):
function get_global_sensor_pose (line 453) | def get_global_sensor_pose(rec, nusc):
function obtain_sensor2top (line 465) | def obtain_sensor2top(nusc,
function nuscenes_data_prep (line 526) | def nuscenes_data_prep(root_path,
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter_6s.py
function quart_to_rpy (line 41) | def quart_to_rpy(qua):
function locate_message (line 48) | def locate_message(utimes, utime):
function geom2anno (line 54) | def geom2anno(map_geoms):
function create_nuscenes_infos (line 70) | def create_nuscenes_infos(root_path,
function get_available_scenes (line 154) | def get_available_scenes(nusc):
function _fill_trainval_infos (line 194) | def _fill_trainval_infos(nusc,
function get_ego_status (line 419) | def get_ego_status(nusc, nusc_can_bus, sample):
function get_global_sensor_pose (line 441) | def get_global_sensor_pose(rec, nusc):
function obtain_sensor2top (line 453) | def obtain_sensor2top(nusc,
function nuscenes_data_prep (line 514) | def nuscenes_data_prep(root_path,
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter_hrad_planing_scene.py
function quart_to_rpy (line 43) | def quart_to_rpy(qua):
function locate_message (line 50) | def locate_message(utimes, utime):
function geom2anno (line 56) | def geom2anno(map_geoms):
function create_nuscenes_infos (line 72) | def create_nuscenes_infos(root_path,
function get_available_scenes (line 157) | def get_available_scenes(nusc):
function _fill_trainval_infos (line 197) | def _fill_trainval_infos(nusc,
function get_ego_status (line 427) | def get_ego_status(nusc, nusc_can_bus, sample):
function get_global_sensor_pose (line 449) | def get_global_sensor_pose(rec, nusc):
function obtain_sensor2top (line 461) | def obtain_sensor2top(nusc,
function nuscenes_data_prep (line 522) | def nuscenes_data_prep(root_path,
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/fuse_conv_bn.py
function fuse_conv_bn (line 11) | def fuse_conv_bn(conv, bn):
function fuse_module (line 27) | def fuse_module(m):
function parse_args (line 48) | def parse_args():
function main (line 58) | def main():
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/kmeans/kmeans_motion.py
function get_fut_agent (line 119) | def get_fut_agent(idx, sample_rate, frames, data_infos):
function lidar2agent (line 160) | def lidar2agent(trajs_offset, boxes):
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/kmeans/kmeans_plan.py
function get_ego_trajs (line 19) | def get_ego_trajs(idx,sample_rate,past_frames,future_frames,data_infos):
function lidar2agent (line 51) | def lidar2agent(trajs_offset, boxes):
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/test.py
function parse_args (line 28) | def parse_args():
function main (line 125) | def main():
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/train.py
function parse_args (line 32) | def parse_args():
function main (line 118) | def main():
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/train_single.py
function parse_args (line 37) | def parse_args():
function main (line 123) | def main():
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/visualization/bev_render.py
function box3d_to_corners (line 10) | def box3d_to_corners(box3d):
class BEVRender (line 109) | class BEVRender:
method __init__ (line 110) | def __init__(
method reset_canvas (line 125) | def reset_canvas(self):
method render (line 132) | def render(
method save_fig (line 163) | def save_fig(self, filename):
method draw_detection_gt (line 169) | def draw_detection_gt(self, data):
method draw_detection_pred (line 192) | def draw_detection_pred(self, result):
method draw_track_pred (line 216) | def draw_track_pred(self, result):
method draw_motion_gt (line 250) | def draw_motion_gt(self, data):
method draw_motion_pred (line 276) | def draw_motion_pred(self, result, top_k=3):
method draw_map_gt (line 310) | def draw_map_gt(self, data):
method draw_map_pred (line 322) | def draw_map_pred(self, result):
method draw_planning_gt (line 336) | def draw_planning_gt(self, data):
method draw_planning_pred (line 351) | def draw_planning_pred(self, data, result, top_k=3):
method _render_traj (line 393) | def _render_traj(
method _render_sdc_car (line 416) | def _render_sdc_car(self):
method _render_legend (line 422) | def _render_legend(self):
method _render_command (line 427) | def _render_command(self, data):
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/visualization/cam_render.py
class CamRender (line 37) | class CamRender:
method __init__ (line 38) | def __init__(
method reset_canvas (line 47) | def reset_canvas(self):
method render (line 54) | def render(
method load_image (line 69) | def load_image(self, data_path, cam):
method update_image (line 79) | def update_image(self, image, index, cam):
method get_axis (line 87) | def get_axis(self, index):
method save_fig (line 91) | def save_fig(self, filename):
method render_image_data (line 97) | def render_image_data(self, data, index):
method draw_detection_pred (line 105) | def draw_detection_pred(self, data, result):
method draw_motion_pred (line 148) | def draw_motion_pred(self, data, result, points_per_step=10):
method draw_planning_pred (line 196) | def draw_planning_pred(self, data, result):
method _render_traj (line 259) | def _render_traj(self, traj_points, cam_intrinsic, j, color=(1, 0.5, 0...
FILE: close_loop/SparseDrive_MomAD/adzoo/sparsedrive/train.py
function parse_args (line 32) | def parse_args():
function main (line 118) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/bootstrap/js/bootstrap.bundle.js
function _defineProperties (line 14) | function _defineProperties(target, props) {
function _createClass (line 24) | function _createClass(Constructor, protoProps, staticProps) {
function _defineProperty (line 30) | function _defineProperty(obj, key, value) {
function _objectSpread (line 45) | function _objectSpread(target) {
function _inheritsLoose (line 64) | function _inheritsLoose(subClass, superClass) {
function toType (line 86) | function toType(obj) {
function getSpecialTransitionEndEvent (line 90) | function getSpecialTransitionEndEvent() {
function transitionEndEmulator (line 104) | function transitionEndEmulator(duration) {
function setTransitionEndSupport (line 119) | function setTransitionEndSupport() {
function Alert (line 260) | function Alert(element) {
function Button (line 428) | function Button(element) {
function Carousel (line 635) | function Carousel(element, config) {
function Collapse (line 1195) | function Collapse(element, config) {
function microtaskDebounce (line 1539) | function microtaskDebounce(fn) {
function taskDebounce (line 1553) | function taskDebounce(fn) {
function isFunction (line 1586) | function isFunction(functionToCheck) {
function getStyleComputedProperty (line 1598) | function getStyleComputedProperty(element, property) {
function getParentNode (line 1615) | function getParentNode(element) {
function getScrollParent (line 1629) | function getScrollParent(element) {
function isIE (line 1667) | function isIE(version) {
function getOffsetParent (line 1684) | function getOffsetParent(element) {
function isOffsetContainer (line 1713) | function isOffsetContainer(element) {
function getRoot (line 1729) | function getRoot(node) {
function findCommonOffsetParent (line 1745) | function findCommonOffsetParent(element1, element2) {
function getScroll (line 1789) | function getScroll(element) {
function includeScroll (line 1813) | function includeScroll(rect, element) {
function getBordersSize (line 1836) | function getBordersSize(styles, axis) {
function getSize (line 1843) | function getSize(axis, body, html, computedStyle) {
function getWindowSizes (line 1847) | function getWindowSizes(document) {
function defineProperties (line 1865) | function defineProperties(target, props) {
function getClientRect (line 1922) | function getClientRect(offsets) {
function getBoundingClientRect (line 1936) | function getBoundingClientRect(element) {
function getOffsetRectRelativeToArbitraryNode (line 1985) | function getOffsetRectRelativeToArbitraryNode(children, parent) {
function getViewportOffsetRectRelativeToArtbitraryNode (line 2037) | function getViewportOffsetRectRelativeToArtbitraryNode(element) {
function isFixed (line 2066) | function isFixed(element) {
function getFixedPositionOffsetParent (line 2089) | function getFixedPositionOffsetParent(element) {
function getBoundaries (line 2112) | function getBoundaries(popper, reference, padding, boundariesElement) {
function getArea (line 2166) | function getArea(_ref) {
function computeAutoPlacement (line 2182) | function computeAutoPlacement(placement, refRect, popper, reference, bou...
function getReferenceOffsets (line 2243) | function getReferenceOffsets(state, popper, reference) {
function getOuterSizes (line 2257) | function getOuterSizes(element) {
function getOppositePlacement (line 2276) | function getOppositePlacement(placement) {
function getPopperOffsets (line 2293) | function getPopperOffsets(popper, referenceOffsets, placement) {
function find (line 2331) | function find(arr, check) {
function findIndex (line 2350) | function findIndex(arr, prop, value) {
function runModifiers (line 2375) | function runModifiers(modifiers, data, ends) {
function update (line 2405) | function update() {
function isModifierEnabled (line 2457) | function isModifierEnabled(modifiers, modifierName) {
function getSupportedPropertyName (line 2472) | function getSupportedPropertyName(property) {
function destroy (line 2491) | function destroy() {
function getWindow (line 2521) | function getWindow(element) {
function attachToScrollParents (line 2526) | function attachToScrollParents(scrollParent, event, callback, scrollPare...
function setupEventListeners (line 2543) | function setupEventListeners(reference, options, state, updateBound) {
function enableEventListeners (line 2563) | function enableEventListeners() {
function removeEventListeners (line 2575) | function removeEventListeners(reference, state) {
function disableEventListeners (line 2599) | function disableEventListeners() {
function isNumeric (line 2613) | function isNumeric(n) {
function setStyles (line 2625) | function setStyles(element, styles) {
function setAttributes (line 2644) | function setAttributes(element, attributes) {
function applyStyle (line 2664) | function applyStyle(data) {
function applyStyleOnLoad (line 2693) | function applyStyleOnLoad(reference, popper, options, modifierOptions, s...
function getRoundedOffsets (line 2730) | function getRoundedOffsets(data, shouldRound) {
function computeStyle (line 2769) | function computeStyle(data, options) {
function isModifierRequired (line 2870) | function isModifierRequired(modifiers, requestingName, requestedName) {
function arrow (line 2895) | function arrow(data, options) {
function getOppositeVariation (line 2977) | function getOppositeVariation(variation) {
function clockwise (line 3032) | function clockwise(placement) {
function flip (line 3053) | function flip(data, options) {
function keepTogether (line 3143) | function keepTogether(data) {
function toValue (line 3177) | function toValue(str, measurement, popperOffsets, referenceOffsets) {
function parseOffset (line 3229) | function parseOffset(offset, popperOffsets, referenceOffsets, basePlacem...
function offset (line 3305) | function offset(data, _ref) {
function preventOverflow (line 3346) | function preventOverflow(data, options) {
function shift (line 3417) | function shift(data) {
function hide (line 3450) | function hide(data) {
function inner (line 3488) | function inner(data) {
function Popper (line 3939) | function Popper(reference, popper) {
function Dropdown (line 4169) | function Dropdown(element, config) {
function Modal (line 4674) | function Modal(element, config) {
function allowedAttribute (line 5247) | function allowedAttribute(attr, allowedAttributeList) {
function sanitizeHtml (line 5271) | function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
function Tooltip (line 5408) | function Tooltip(element, config) {
function Popover (line 6086) | function Popover() {
function ScrollSpy (line 6273) | function ScrollSpy(element, config) {
function Tab (line 6568) | function Tab(element) {
function Toast (line 6805) | function Toast(element, config) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/bootstrap/js/bootstrap.js
function _defineProperties (line 15) | function _defineProperties(target, props) {
function _createClass (line 25) | function _createClass(Constructor, protoProps, staticProps) {
function _defineProperty (line 31) | function _defineProperty(obj, key, value) {
function _objectSpread (line 46) | function _objectSpread(target) {
function _inheritsLoose (line 65) | function _inheritsLoose(subClass, superClass) {
function toType (line 87) | function toType(obj) {
function getSpecialTransitionEndEvent (line 91) | function getSpecialTransitionEndEvent() {
function transitionEndEmulator (line 105) | function transitionEndEmulator(duration) {
function setTransitionEndSupport (line 120) | function setTransitionEndSupport() {
function Alert (line 261) | function Alert(element) {
function Button (line 429) | function Button(element) {
function Carousel (line 636) | function Carousel(element, config) {
function Collapse (line 1196) | function Collapse(element, config) {
function Dropdown (line 1591) | function Dropdown(element, config) {
function Modal (line 2096) | function Modal(element, config) {
function allowedAttribute (line 2669) | function allowedAttribute(attr, allowedAttributeList) {
function sanitizeHtml (line 2693) | function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
function Tooltip (line 2830) | function Tooltip(element, config) {
function Popover (line 3508) | function Popover() {
function ScrollSpy (line 3695) | function ScrollSpy(element, config) {
function Tab (line 3990) | function Tab(element) {
function Toast (line 4227) | function Toast(element, config) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/all.js
function bunker (line 35) | function bunker(fn) {
function _defineProperty (line 45) | function _defineProperty(obj, key, value) {
function _objectSpread (line 60) | function _objectSpread(target) {
function defineIcons (line 86) | function defineIcons(prefix, icons) {
function bunker (line 588) | function bunker(fn) {
function _defineProperty (line 598) | function _defineProperty(obj, key, value) {
function _objectSpread (line 613) | function _objectSpread(target) {
function defineIcons (line 639) | function defineIcons(prefix, icons) {
function bunker (line 864) | function bunker(fn) {
function _defineProperty (line 874) | function _defineProperty(obj, key, value) {
function _objectSpread (line 889) | function _objectSpread(target) {
function defineIcons (line 915) | function defineIcons(prefix, icons) {
function _typeof (line 1918) | function _typeof(obj) {
function _classCallCheck (line 1932) | function _classCallCheck(instance, Constructor) {
function _defineProperties (line 1938) | function _defineProperties(target, props) {
function _createClass (line 1948) | function _createClass(Constructor, protoProps, staticProps) {
function _defineProperty (line 1954) | function _defineProperty(obj, key, value) {
function _objectSpread (line 1969) | function _objectSpread(target) {
function _slicedToArray (line 1988) | function _slicedToArray(arr, i) {
function _toConsumableArray (line 1992) | function _toConsumableArray(arr) {
function _arrayWithoutHoles (line 1996) | function _arrayWithoutHoles(arr) {
function _arrayWithHoles (line 2004) | function _arrayWithHoles(arr) {
function _iterableToArray (line 2008) | function _iterableToArray(iter) {
function _iterableToArrayLimit (line 2012) | function _iterableToArrayLimit(arr, i) {
function _nonIterableSpread (line 2038) | function _nonIterableSpread() {
function _nonIterableRest (line 2042) | function _nonIterableRest() {
function getAttrConfig (line 2134) | function getAttrConfig(attr) {
function coerce (line 2142) | function coerce(val) {
function domready (line 2213) | function domready (fn) {
function asyncFlush (line 2230) | function asyncFlush() {
function asyncCall (line 2241) | function asyncCall(callback, arg) {
function invokeResolver (line 2250) | function invokeResolver(resolver, promise) {
function invokeCallback (line 2266) | function invokeCallback(subscriber) {
function handleThenable (line 2294) | function handleThenable(promise, value) {
function resolve (line 2337) | function resolve(promise, value) {
function fulfill (line 2343) | function fulfill(promise, value) {
function reject (line 2351) | function reject(promise, reason) {
function publish (line 2359) | function publish(promise) {
function publishFulfillment (line 2363) | function publishFulfillment(promise) {
function publishRejection (line 2368) | function publishRejection(promise) {
function notifyRejectionHandled (line 2377) | function notifyRejectionHandled(promise) {
function P (line 2385) | function P(resolver) {
function resolver (line 2444) | function resolver(index) {
function isReserved (line 2517) | function isReserved(name) {
function bunker (line 2521) | function bunker(fn) {
function insertCss (line 2530) | function insertCss(css) {
function nextUniqueId (line 2554) | function nextUniqueId() {
function toArray (line 2564) | function toArray(obj) {
function classArray (line 2573) | function classArray(node) {
function getIconName (line 2582) | function getIconName(familyPrefix, cls) {
function htmlEscape (line 2593) | function htmlEscape(str) {
function joinAttributes (line 2596) | function joinAttributes(attributes) {
function joinStyles (line 2601) | function joinStyles(styles) {
function transformIsMeaningful (line 2606) | function transformIsMeaningful(transform) {
function transformForSvg (line 2609) | function transformForSvg(_ref) {
function transformForCss (line 2631) | function transformForCss(_ref2) {
function fillBlack (line 2661) | function fillBlack(abstract) {
function deGroup (line 2671) | function deGroup(abstract) {
function makeIconMasking (line 2679) | function makeIconMasking (_ref) {
function makeIconStandard (line 2751) | function makeIconStandard (_ref) {
function asIcon (line 2792) | function asIcon (_ref) {
function asSymbol (line 2819) | function asSymbol (_ref) {
function makeInlineSvgAbstract (line 2841) | function makeInlineSvgAbstract(params) {
function makeLayersTextAbstract (line 2909) | function makeLayersTextAbstract(params) {
function makeLayersCounterAbstract (line 2966) | function makeLayersCounterAbstract(params) {
function toHex (line 3076) | function toHex(unicode) {
function defineIcons (line 3087) | function defineIcons(prefix, icons) {
function byUnicode (line 3168) | function byUnicode(prefix, unicode) {
function byLigature (line 3171) | function byLigature(prefix, ligature) {
function byOldName (line 3174) | function byOldName(name) {
function getCanonicalIcon (line 3189) | function getCanonicalIcon(values) {
function iconFromMapping (line 3208) | function iconFromMapping(mapping, prefix, iconName) {
function toHtml (line 3218) | function toHtml(abstractNodes) {
function isWatched (line 3234) | function isWatched(node) {
function getMutator (line 3239) | function getMutator() {
function performOperationSync (line 3297) | function performOperationSync(op) {
function perform (line 3301) | function perform(mutations, callback) {
function disableObservation (line 3323) | function disableObservation() {
function enableObservation (line 3326) | function enableObservation() {
function observe (line 3330) | function observe(options) {
function disconnect (line 3381) | function disconnect() {
function styleParser (line 3386) | function styleParser (node) {
function classParser (line 3407) | function classParser (node) {
function transformParser (line 3495) | function transformParser (node) {
function symbolParser (line 3499) | function symbolParser (node) {
function attributesParser (line 3504) | function attributesParser (node) {
function maskParser (line 3526) | function maskParser (node) {
function blankMeta (line 3538) | function blankMeta() {
function parseMeta (line 3553) | function parseMeta(node) {
function MissingIcon (line 3579) | function MissingIcon(error) {
function asFoundIcon (line 3658) | function asFoundIcon(icon) {
function findIcon (line 3707) | function findIcon(iconName, prefix) {
function generateSvgReplacementMutation (line 3731) | function generateSvgReplacementMutation(node, nodeMeta) {
function generateLayersText (line 3763) | function generateLayersText(node, nodeMeta) {
function generateMutation (line 3792) | function generateMutation(node) {
function onTree (line 3802) | function onTree(root) {
function onNode (line 3872) | function onNode(node) {
function replaceForPosition (line 3881) | function replaceForPosition(node, position) {
function replace (line 3956) | function replace(node) {
function processable (line 3960) | function processable(node) {
function searchPseudoElements (line 3964) | function searchPseudoElements (root) {
function css (line 3984) | function css () {
function Library (line 4004) | function Library() {
function ensureCss (line 4052) | function ensureCss() {
function apiObject (line 4060) | function apiObject(val, abstractCreator) {
function findIconDefinition (line 4082) | function findIconDefinition(iconLookup) {
function resolveIcons (line 4090) | function resolveIcons(next) {
function bootstrap (line 4327) | function bootstrap() {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/brands.js
function bunker (line 35) | function bunker(fn) {
function _defineProperty (line 45) | function _defineProperty(obj, key, value) {
function _objectSpread (line 60) | function _objectSpread(target) {
function defineIcons (line 86) | function defineIcons(prefix, icons) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/conflict-detection.js
function _typeof (line 11) | function _typeof(obj) {
function _defineProperty (line 25) | function _defineProperty(obj, key, value) {
function _objectSpread (line 40) | function _objectSpread(target) {
function domready (line 94) | function domready (fn) {
function report (line 99) | function report (_ref) {
function createCommonjsModule (line 167) | function createCommonjsModule(fn, module) {
function safeAdd (line 183) | function safeAdd(x, y) {
function bitRotateLeft (line 197) | function bitRotateLeft(num, cnt) {
function md5cmn (line 213) | function md5cmn(q, a, b, x, s, t) {
function md5ff (line 230) | function md5ff(a, b, c, d, x, s, t) {
function md5gg (line 247) | function md5gg(a, b, c, d, x, s, t) {
function md5hh (line 264) | function md5hh(a, b, c, d, x, s, t) {
function md5ii (line 281) | function md5ii(a, b, c, d, x, s, t) {
function binlMD5 (line 293) | function binlMD5(x, len) {
function binl2rstr (line 392) | function binl2rstr(input) {
function rstr2binl (line 412) | function rstr2binl(input) {
function rstrMD5 (line 437) | function rstrMD5(s) {
function rstrHMACMD5 (line 449) | function rstrHMACMD5(key, data) {
function rstr2hex (line 477) | function rstr2hex(input) {
function str2rstrUTF8 (line 498) | function str2rstrUTF8(input) {
function rawMD5 (line 509) | function rawMD5(s) {
function hexMD5 (line 520) | function hexMD5(s) {
function rawHMACMD5 (line 532) | function rawHMACMD5(k, d) {
function hexHMACMD5 (line 544) | function hexHMACMD5(k, d) {
function md5 (line 559) | function md5(string, key, raw) {
function md5ForNode (line 583) | function md5ForNode(node) {
function pollUntil (line 605) | function pollUntil(_ref) {
function detectWebfontConflicts (line 647) | function detectWebfontConflicts() {
function detectSvgConflicts (line 765) | function detectSvgConflicts(currentScript) {
function setDoneResults (line 844) | function setDoneResults(_ref2) {
function conflictDetection (line 853) | function conflictDetection() {
function bunker (line 971) | function bunker(fn) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/fontawesome.js
function _typeof (line 8) | function _typeof(obj) {
function _classCallCheck (line 22) | function _classCallCheck(instance, Constructor) {
function _defineProperties (line 28) | function _defineProperties(target, props) {
function _createClass (line 38) | function _createClass(Constructor, protoProps, staticProps) {
function _defineProperty (line 44) | function _defineProperty(obj, key, value) {
function _objectSpread (line 59) | function _objectSpread(target) {
function _slicedToArray (line 78) | function _slicedToArray(arr, i) {
function _toConsumableArray (line 82) | function _toConsumableArray(arr) {
function _arrayWithoutHoles (line 86) | function _arrayWithoutHoles(arr) {
function _arrayWithHoles (line 94) | function _arrayWithHoles(arr) {
function _iterableToArray (line 98) | function _iterableToArray(iter) {
function _iterableToArrayLimit (line 102) | function _iterableToArrayLimit(arr, i) {
function _nonIterableSpread (line 128) | function _nonIterableSpread() {
function _nonIterableRest (line 132) | function _nonIterableRest() {
function getAttrConfig (line 224) | function getAttrConfig(attr) {
function coerce (line 232) | function coerce(val) {
function domready (line 303) | function domready (fn) {
function asyncFlush (line 320) | function asyncFlush() {
function asyncCall (line 331) | function asyncCall(callback, arg) {
function invokeResolver (line 340) | function invokeResolver(resolver, promise) {
function invokeCallback (line 356) | function invokeCallback(subscriber) {
function handleThenable (line 384) | function handleThenable(promise, value) {
function resolve (line 427) | function resolve(promise, value) {
function fulfill (line 433) | function fulfill(promise, value) {
function reject (line 441) | function reject(promise, reason) {
function publish (line 449) | function publish(promise) {
function publishFulfillment (line 453) | function publishFulfillment(promise) {
function publishRejection (line 458) | function publishRejection(promise) {
function notifyRejectionHandled (line 467) | function notifyRejectionHandled(promise) {
function P (line 475) | function P(resolver) {
function resolver (line 534) | function resolver(index) {
function isReserved (line 607) | function isReserved(name) {
function bunker (line 611) | function bunker(fn) {
function insertCss (line 620) | function insertCss(css) {
function nextUniqueId (line 644) | function nextUniqueId() {
function toArray (line 654) | function toArray(obj) {
function classArray (line 663) | function classArray(node) {
function getIconName (line 672) | function getIconName(familyPrefix, cls) {
function htmlEscape (line 683) | function htmlEscape(str) {
function joinAttributes (line 686) | function joinAttributes(attributes) {
function joinStyles (line 691) | function joinStyles(styles) {
function transformIsMeaningful (line 696) | function transformIsMeaningful(transform) {
function transformForSvg (line 699) | function transformForSvg(_ref) {
function transformForCss (line 721) | function transformForCss(_ref2) {
function fillBlack (line 751) | function fillBlack(abstract) {
function deGroup (line 761) | function deGroup(abstract) {
function makeIconMasking (line 769) | function makeIconMasking (_ref) {
function makeIconStandard (line 841) | function makeIconStandard (_ref) {
function asIcon (line 882) | function asIcon (_ref) {
function asSymbol (line 909) | function asSymbol (_ref) {
function makeInlineSvgAbstract (line 931) | function makeInlineSvgAbstract(params) {
function makeLayersTextAbstract (line 999) | function makeLayersTextAbstract(params) {
function makeLayersCounterAbstract (line 1056) | function makeLayersCounterAbstract(params) {
function toHex (line 1166) | function toHex(unicode) {
function defineIcons (line 1177) | function defineIcons(prefix, icons) {
function byUnicode (line 1258) | function byUnicode(prefix, unicode) {
function byLigature (line 1261) | function byLigature(prefix, ligature) {
function byOldName (line 1264) | function byOldName(name) {
function getCanonicalIcon (line 1279) | function getCanonicalIcon(values) {
function iconFromMapping (line 1298) | function iconFromMapping(mapping, prefix, iconName) {
function toHtml (line 1308) | function toHtml(abstractNodes) {
function isWatched (line 1324) | function isWatched(node) {
function getMutator (line 1329) | function getMutator() {
function performOperationSync (line 1387) | function performOperationSync(op) {
function perform (line 1391) | function perform(mutations, callback) {
function disableObservation (line 1413) | function disableObservation() {
function enableObservation (line 1416) | function enableObservation() {
function observe (line 1420) | function observe(options) {
function disconnect (line 1471) | function disconnect() {
function styleParser (line 1476) | function styleParser (node) {
function classParser (line 1497) | function classParser (node) {
function transformParser (line 1585) | function transformParser (node) {
function symbolParser (line 1589) | function symbolParser (node) {
function attributesParser (line 1594) | function attributesParser (node) {
function maskParser (line 1616) | function maskParser (node) {
function blankMeta (line 1628) | function blankMeta() {
function parseMeta (line 1643) | function parseMeta(node) {
function MissingIcon (line 1669) | function MissingIcon(error) {
function asFoundIcon (line 1748) | function asFoundIcon(icon) {
function findIcon (line 1797) | function findIcon(iconName, prefix) {
function generateSvgReplacementMutation (line 1821) | function generateSvgReplacementMutation(node, nodeMeta) {
function generateLayersText (line 1853) | function generateLayersText(node, nodeMeta) {
function generateMutation (line 1882) | function generateMutation(node) {
function onTree (line 1892) | function onTree(root) {
function onNode (line 1962) | function onNode(node) {
function replaceForPosition (line 1971) | function replaceForPosition(node, position) {
function replace (line 2046) | function replace(node) {
function processable (line 2050) | function processable(node) {
function searchPseudoElements (line 2054) | function searchPseudoElements (root) {
function css (line 2074) | function css () {
function Library (line 2094) | function Library() {
function ensureCss (line 2142) | function ensureCss() {
function apiObject (line 2150) | function apiObject(val, abstractCreator) {
function findIconDefinition (line 2172) | function findIconDefinition(iconLookup) {
function resolveIcons (line 2180) | function resolveIcons(next) {
function bootstrap (line 2417) | function bootstrap() {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/regular.js
function bunker (line 35) | function bunker(fn) {
function _defineProperty (line 45) | function _defineProperty(obj, key, value) {
function _objectSpread (line 60) | function _objectSpread(target) {
function defineIcons (line 86) | function defineIcons(prefix, icons) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/solid.js
function bunker (line 35) | function bunker(fn) {
function _defineProperty (line 45) | function _defineProperty(obj, key, value) {
function _objectSpread (line 60) | function _objectSpread(target) {
function defineIcons (line 86) | function defineIcons(prefix, icons) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/v4-shims.js
function bunker (line 38) | function bunker(fn) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/jquery/jquery.js
function DOMEval (line 98) | function DOMEval( code, node, doc ) {
function toType (line 128) | function toType( obj ) {
function isArrayLike (line 496) | function isArrayLike( obj ) {
function Sizzle (line 729) | function Sizzle( selector, context, results, seed ) {
function createCache (line 871) | function createCache() {
function markFunction (line 889) | function markFunction( fn ) {
function assert (line 898) | function assert( fn ) {
function addHandle (line 920) | function addHandle( attrs, handler ) {
function siblingCheck (line 935) | function siblingCheck( a, b ) {
function createInputPseudo (line 961) | function createInputPseudo( type ) {
function createButtonPseudo (line 972) | function createButtonPseudo( type ) {
function createDisabledPseudo (line 983) | function createDisabledPseudo( disabled ) {
function createPositionalPseudo (line 1039) | function createPositionalPseudo( fn ) {
function testContext (line 1062) | function testContext( context ) {
function setFilters (line 2150) | function setFilters() {}
function toSelector (line 2221) | function toSelector( tokens ) {
function addCombinator (line 2231) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 2295) | function elementMatcher( matchers ) {
function multipleContexts (line 2309) | function multipleContexts( selector, contexts, results ) {
function condense (line 2318) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 2339) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2432) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2490) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function nodeName (line 2826) | function nodeName( elem, name ) {
function winnow (line 2836) | function winnow( elements, qualifier, not ) {
function sibling (line 3131) | function sibling( cur, dir ) {
function createOptions (line 3218) | function createOptions( options ) {
function Identity (line 3443) | function Identity( v ) {
function Thrower (line 3446) | function Thrower( ex ) {
function adoptValue (line 3450) | function adoptValue( value, resolve, reject, noValue ) {
function resolve (line 3543) | function resolve( depth, deferred, handler, special ) {
function completed (line 3908) | function completed() {
function fcamelCase (line 4003) | function fcamelCase( all, letter ) {
function camelCase (line 4010) | function camelCase( string ) {
function Data (line 4027) | function Data() {
function getData (line 4196) | function getData( data ) {
function dataAttr (line 4221) | function dataAttr( elem, key, data ) {
function adjustCSS (line 4554) | function adjustCSS( elem, prop, valueParts, tween ) {
function getDefaultDisplay (line 4622) | function getDefaultDisplay( elem ) {
function showHide (line 4645) | function showHide( elements, show ) {
function getAll (line 4746) | function getAll( context, tag ) {
function setGlobalEval (line 4771) | function setGlobalEval( elems, refElements ) {
function buildFragment (line 4787) | function buildFragment( elems, context, scripts, selection, ignored ) {
function returnTrue (line 4908) | function returnTrue() {
function returnFalse (line 4912) | function returnFalse() {
function expectSync (line 4922) | function expectSync( elem, type ) {
function safeActiveElement (line 4929) | function safeActiveElement() {
function on (line 4935) | function on( elem, types, selector, data, fn, one ) {
function leverageNative (line 5420) | function leverageNative( el, type, expectSync ) {
function manipulationTarget (line 5791) | function manipulationTarget( elem, content ) {
function disableScript (line 5802) | function disableScript( elem ) {
function restoreScript (line 5806) | function restoreScript( elem ) {
function cloneCopyEvent (line 5816) | function cloneCopyEvent( src, dest ) {
function fixInput (line 5851) | function fixInput( src, dest ) {
function domManip (line 5864) | function domManip( collection, args, callback, ignored ) {
function remove (line 5956) | function remove( elem, selector, keepData ) {
function computeStyleTests (line 6249) | function computeStyleTests() {
function roundPixelMeasures (line 6293) | function roundPixelMeasures( measure ) {
function curCSS (line 6338) | function curCSS( elem, name, computed ) {
function addGetHookIf (line 6391) | function addGetHookIf( conditionFn, hookFn ) {
function vendorPropName (line 6416) | function vendorPropName( name ) {
function finalPropName (line 6431) | function finalPropName( name ) {
function setPositiveNumber (line 6457) | function setPositiveNumber( elem, value, subtract ) {
function boxModelAdjustment (line 6469) | function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, ...
function getWidthOrHeight (line 6537) | function getWidthOrHeight( elem, dimension, extra ) {
function Tween (line 6904) | function Tween( elem, options, prop, end, easing ) {
function schedule (line 7027) | function schedule() {
function createFxNow (line 7040) | function createFxNow() {
function genFx (line 7048) | function genFx( type, includeWidth ) {
function createTween (line 7068) | function createTween( value, prop, animation ) {
function defaultPrefilter (line 7082) | function defaultPrefilter( elem, props, opts ) {
function propFilter (line 7254) | function propFilter( props, specialEasing ) {
function Animation (line 7291) | function Animation( elem, properties, options ) {
function stripAndCollapse (line 8006) | function stripAndCollapse( value ) {
function getClass (line 8012) | function getClass( elem ) {
function classesToArray (line 8016) | function classesToArray( value ) {
function buildParams (line 8638) | function buildParams( prefix, obj, traditional, add ) {
function addToPrefiltersOrTransports (line 8792) | function addToPrefiltersOrTransports( structure ) {
function inspectPrefiltersOrTransports (line 8826) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
function ajaxExtend (line 8855) | function ajaxExtend( target, src ) {
function ajaxHandleResponses (line 8875) | function ajaxHandleResponses( s, jqXHR, responses ) {
function ajaxConvert (line 8933) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
function done (line 9448) | function done( status, nativeStatusText, responses, headers ) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/jquery/jquery.slim.js
function DOMEval (line 98) | function DOMEval( code, node, doc ) {
function toType (line 128) | function toType( obj ) {
function isArrayLike (line 496) | function isArrayLike( obj ) {
function Sizzle (line 729) | function Sizzle( selector, context, results, seed ) {
function createCache (line 871) | function createCache() {
function markFunction (line 889) | function markFunction( fn ) {
function assert (line 898) | function assert( fn ) {
function addHandle (line 920) | function addHandle( attrs, handler ) {
function siblingCheck (line 935) | function siblingCheck( a, b ) {
function createInputPseudo (line 961) | function createInputPseudo( type ) {
function createButtonPseudo (line 972) | function createButtonPseudo( type ) {
function createDisabledPseudo (line 983) | function createDisabledPseudo( disabled ) {
function createPositionalPseudo (line 1039) | function createPositionalPseudo( fn ) {
function testContext (line 1062) | function testContext( context ) {
function setFilters (line 2150) | function setFilters() {}
function toSelector (line 2221) | function toSelector( tokens ) {
function addCombinator (line 2231) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 2295) | function elementMatcher( matchers ) {
function multipleContexts (line 2309) | function multipleContexts( selector, contexts, results ) {
function condense (line 2318) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 2339) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2432) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2490) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function nodeName (line 2826) | function nodeName( elem, name ) {
function winnow (line 2836) | function winnow( elements, qualifier, not ) {
function sibling (line 3131) | function sibling( cur, dir ) {
function createOptions (line 3218) | function createOptions( options ) {
function Identity (line 3443) | function Identity( v ) {
function Thrower (line 3446) | function Thrower( ex ) {
function adoptValue (line 3450) | function adoptValue( value, resolve, reject, noValue ) {
function resolve (line 3543) | function resolve( depth, deferred, handler, special ) {
function completed (line 3908) | function completed() {
function fcamelCase (line 4003) | function fcamelCase( all, letter ) {
function camelCase (line 4010) | function camelCase( string ) {
function Data (line 4027) | function Data() {
function getData (line 4196) | function getData( data ) {
function dataAttr (line 4221) | function dataAttr( elem, key, data ) {
function adjustCSS (line 4554) | function adjustCSS( elem, prop, valueParts, tween ) {
function getDefaultDisplay (line 4622) | function getDefaultDisplay( elem ) {
function showHide (line 4645) | function showHide( elements, show ) {
function getAll (line 4746) | function getAll( context, tag ) {
function setGlobalEval (line 4771) | function setGlobalEval( elems, refElements ) {
function buildFragment (line 4787) | function buildFragment( elems, context, scripts, selection, ignored ) {
function returnTrue (line 4908) | function returnTrue() {
function returnFalse (line 4912) | function returnFalse() {
function expectSync (line 4922) | function expectSync( elem, type ) {
function safeActiveElement (line 4929) | function safeActiveElement() {
function on (line 4935) | function on( elem, types, selector, data, fn, one ) {
function leverageNative (line 5420) | function leverageNative( el, type, expectSync ) {
function manipulationTarget (line 5791) | function manipulationTarget( elem, content ) {
function disableScript (line 5802) | function disableScript( elem ) {
function restoreScript (line 5806) | function restoreScript( elem ) {
function cloneCopyEvent (line 5816) | function cloneCopyEvent( src, dest ) {
function fixInput (line 5851) | function fixInput( src, dest ) {
function domManip (line 5864) | function domManip( collection, args, callback, ignored ) {
function remove (line 5956) | function remove( elem, selector, keepData ) {
function computeStyleTests (line 6249) | function computeStyleTests() {
function roundPixelMeasures (line 6293) | function roundPixelMeasures( measure ) {
function curCSS (line 6338) | function curCSS( elem, name, computed ) {
function addGetHookIf (line 6391) | function addGetHookIf( conditionFn, hookFn ) {
function vendorPropName (line 6416) | function vendorPropName( name ) {
function finalPropName (line 6431) | function finalPropName( name ) {
function setPositiveNumber (line 6457) | function setPositiveNumber( elem, value, subtract ) {
function boxModelAdjustment (line 6469) | function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, ...
function getWidthOrHeight (line 6537) | function getWidthOrHeight( elem, dimension, extra ) {
function stripAndCollapse (line 7213) | function stripAndCollapse( value ) {
function getClass (line 7219) | function getClass( elem ) {
function classesToArray (line 7223) | function classesToArray( value ) {
function buildParams (line 7817) | function buildParams( prefix, obj, traditional, add ) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/js/jqBootstrapValidation.js
function regexFromString (line 900) | function regexFromString(inputstring) {
function executeFunctionByName (line 910) | function executeFunctionByName(functionName, context /*, args*/ ) {
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/agent_wrapper.py
class AgentError (line 52) | class AgentError(Exception):
method __init__ (line 57) | def __init__(self, message):
class TickRuntimeError (line 61) | class TickRuntimeError(Exception):
class AgentWrapperFactory (line 64) | class AgentWrapperFactory(object):
method get_wrapper (line 67) | def get_wrapper(agent):
function validate_sensor_configuration (line 74) | def validate_sensor_configuration(sensors, agent_track, selected_track):
class AgentWrapper (line 129) | class AgentWrapper(object):
method __init__ (line 137) | def __init__(self, agent):
method __call__ (line 143) | def __call__(self):
method _preprocess_sensor_spec (line 149) | def _preprocess_sensor_spec(self, sensor_spec):
method setup_sensors (line 238) | def setup_sensors(self, vehicle):
method cleanup (line 270) | def cleanup(self):
class ROSAgentWrapper (line 285) | class ROSAgentWrapper(AgentWrapper):
method __init__ (line 292) | def __init__(self, agent):
method _preprocess_sensor_spec (line 295) | def _preprocess_sensor_spec(self, sensor_spec):
method setup_sensors (line 300) | def setup_sensors(self, vehicle):
method cleanup (line 314) | def cleanup(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/autonomous_agent.py
class Track (line 21) | class Track(Enum):
class AutonomousAgent (line 32) | class AutonomousAgent(object):
method __init__ (line 38) | def __init__(self, carla_host, carla_port, debug=False):
method setup (line 51) | def setup(self, path_to_conf_file):
method sensors (line 59) | def sensors(self): # pylint: disable=no-self-use
method run_step (line 81) | def run_step(self, input_data, timestamp):
method destroy (line 94) | def destroy(self):
method __call__ (line 101) | def __call__(self):
method get_ros_version (line 125) | def get_ros_version():
method set_global_plan (line 128) | def set_global_plan(self, global_plan_gps, global_plan_world_coord):
method get_hero (line 137) | def get_hero(self):
method get_metric_info (line 146) | def get_metric_info(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/dummy_agent.py
function get_entry_point (line 16) | def get_entry_point():
class DummyAgent (line 19) | class DummyAgent(AutonomousAgent):
method setup (line 25) | def setup(self, path_to_conf_file):
method sensors (line 31) | def sensors(self):
method run_step (line 68) | def run_step(self, input_data, timestamp):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/human_agent.py
function get_entry_point (line 33) | def get_entry_point():
class HumanInterface (line 36) | class HumanInterface(object):
method __init__ (line 42) | def __init__(self, width, height, side_scale, left_mirror=False, right...
method run_interface (line 57) | def run_interface(self, input_data):
method set_black_screen (line 83) | def set_black_screen(self):
method _quit (line 91) | def _quit(self):
class HumanAgent (line 95) | class HumanAgent(AutonomousAgent):
method setup (line 104) | def setup(self, path_to_conf_file):
method sensors (line 129) | def sensors(self):
method run_step (line 166) | def run_step(self, input_data, timestamp):
method destroy (line 179) | def destroy(self):
class KeyboardControl (line 187) | class KeyboardControl(object):
method __init__ (line 193) | def __init__(self, path_to_conf_file):
method _json_to_control (line 227) | def _json_to_control(self):
method parse_events (line 240) | def parse_events(self, timestamp):
method _parse_vehicle_keys (line 256) | def _parse_vehicle_keys(self, keys, milliseconds):
method _parse_json_control (line 286) | def _parse_json_control(self):
method _record_control (line 294) | def _record_control(self):
method __del__ (line 309) | def __del__(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/npc_agent.py
function get_entry_point (line 18) | def get_entry_point():
class NpcAgent (line 21) | class NpcAgent(AutonomousAgent):
method setup (line 30) | def setup(self, path_to_conf_file):
method sensors (line 38) | def sensors(self):
method run_step (line 63) | def run_step(self, input_data, timestamp):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/ros1_agent.py
class ROS1Server (line 19) | class ROS1Server(object):
method __init__ (line 22) | def __init__(self, debug=True):
method start (line 25) | def start(self):
method shutdown (line 33) | def shutdown(self):
function wait_for_message (line 39) | def wait_for_message(client, topic, topic_type, timeout=None):
function wait_for_service (line 67) | def wait_for_service(client, service, timeout=None):
class ROS1Agent (line 80) | class ROS1Agent(ROSBaseAgent):
method __init__ (line 84) | def __init__(self, carla_host, carla_port, debug=False):
method get_ros_version (line 104) | def get_ros_version():
method spawn_object (line 107) | def spawn_object(self, type_, id_, transform, attributes, attach_to=0):
method destroy_object (line 129) | def destroy_object(self, uid):
method run_step (line 136) | def run_step(self, input_data, timestamp):
method set_global_plan (line 139) | def set_global_plan(self, global_plan_gps, global_plan_world_coord):
method destroy (line 168) | def destroy(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/ros2_agent.py
function wait_for_message (line 31) | def wait_for_message(node, topic, topic_type, timeout=None):
class ROS2Agent (line 50) | class ROS2Agent(ROSBaseAgent):
method __init__ (line 58) | def __init__(self, carla_host, carla_port, debug=False):
method get_ros_version (line 81) | def get_ros_version():
method spawn_object (line 84) | def spawn_object(self, type_, id_, transform, attributes, attach_to=0):
method destroy_object (line 107) | def destroy_object(self, uid):
method set_global_plan (line 117) | def set_global_plan(self, global_plan_gps, global_plan_world_coord):
method destroy (line 139) | def destroy(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/ros_base_agent.py
class ROSLogger (line 29) | class ROSLogger(object):
method __init__ (line 31) | def __init__(self, name):
method write (line 47) | def write(self, data):
method flush (line 50) | def flush(self):
method fileno (line 53) | def fileno(self):
method destroy (line 56) | def destroy(self):
class ROSLauncher (line 60) | class ROSLauncher(object):
method __init__ (line 62) | def __init__(self, app_name, ros_version, debug=False):
method run (line 74) | def run(self, package, launch_file, parameters={}, wait=False):
method log (line 86) | def log(self):
method is_alive (line 93) | def is_alive(self):
method terminate (line 98) | def terminate(self):
class BridgeHelper (line 107) | class BridgeHelper(object):
method carla2ros_pose (line 110) | def carla2ros_pose(cls, x, y, z, roll, pitch, yaw, to_quat=False):
method rpy2quat (line 123) | def rpy2quat(roll, pitch, yaw):
class ROSBaseAgent (line 128) | class ROSBaseAgent(AutonomousAgent):
method __init__ (line 137) | def __init__(self, ros_version, carla_host, carla_port, debug=False):
method get_ros_entrypoint (line 165) | def get_ros_entrypoint(self):
method spawn_object (line 168) | def spawn_object(self, type_, id_, transform, attributes, attach_to=0):
method destroy_object (line 171) | def destroy_object(self, uid):
method _vehicle_control_cmd_callback (line 174) | def _vehicle_control_cmd_callback(self, control_msg):
method run_step (line 227) | def run_step(self, _, timestamp):
method destroy (line 245) | def destroy(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/envs/sensor_interface.py
function threaded (line 16) | def threaded(fn):
class SensorConfigurationInvalid (line 26) | class SensorConfigurationInvalid(Exception):
method __init__ (line 31) | def __init__(self, message):
class SensorReceivedNoData (line 35) | class SensorReceivedNoData(Exception):
method __init__ (line 40) | def __init__(self, message):
class GenericMeasurement (line 44) | class GenericMeasurement(object):
method __init__ (line 45) | def __init__(self, data, frame):
class BaseReader (line 50) | class BaseReader(object):
method __init__ (line 51) | def __init__(self, vehicle, reading_frequency=1.0):
method __call__ (line 58) | def __call__(self):
method run (line 62) | def run(self):
method listen (line 79) | def listen(self, callback):
method stop (line 83) | def stop(self):
method destroy (line 86) | def destroy(self):
class SpeedometerReader (line 90) | class SpeedometerReader(BaseReader):
method _get_forward_speed (line 96) | def _get_forward_speed(self, transform=None, velocity=None):
method __call__ (line 110) | def __call__(self):
class OpenDriveMapReader (line 128) | class OpenDriveMapReader(BaseReader):
method __call__ (line 129) | def __call__(self):
class CallBack (line 133) | class CallBack(object):
method __init__ (line 134) | def __init__(self, tag, sensor_type, sensor, data_provider):
method __call__ (line 140) | def __call__(self, data):
method _parse_image_cb (line 157) | def _parse_image_cb(self, image, tag):
method _parse_lidar_cb (line 163) | def _parse_lidar_cb(self, lidar_data, tag):
method _parse_radar_cb (line 169) | def _parse_radar_cb(self, radar_data, tag):
method _parse_gnss_cb (line 177) | def _parse_gnss_cb(self, gnss_data, tag):
method _parse_imu_cb (line 183) | def _parse_imu_cb(self, imu_data, tag):
method _parse_pseudosensor (line 194) | def _parse_pseudosensor(self, package, tag):
class SensorInterface (line 198) | class SensorInterface(object):
method __init__ (line 199) | def __init__(self):
method register_sensor (line 207) | def register_sensor(self, tag, sensor_type, sensor):
method update_sensor (line 216) | def update_sensor(self, tag, data, frame):
method get_data (line 222) | def get_data(self, frame):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/leaderboard_evaluator.py
function find_free_port (line 54) | def find_free_port(starting_port):
function get_weather_id (line 64) | def get_weather_id(weather_conditions):
class LeaderboardEvaluator (line 80) | class LeaderboardEvaluator(object):
method __init__ (line 90) | def __init__(self, args, statistics_manager):
method _signal_handler (line 136) | def _signal_handler(self, signum, frame):
method __del__ (line 146) | def __del__(self):
method _get_running_status (line 155) | def _get_running_status(self):
method _cleanup (line 164) | def _cleanup(self):
method _setup_simulation (line 197) | def _setup_simulation(self, args):
method _reset_world_settings (line 249) | def _reset_world_settings(self):
method _load_and_wait_for_world (line 268) | def _load_and_wait_for_world(self, args, town):
method _register_statistics (line 296) | def _register_statistics(self, route_index, entry_status, crash_messag...
method _load_and_run_scenario (line 306) | def _load_and_run_scenario(self, args, config):
method run (line 454) | def run(self, args):
function main (line 509) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/scenarios/route_scenario.py
class RouteScenario (line 52) | class RouteScenario(BasicScenario):
method __init__ (line 63) | def __init__(self, world, config, debug_mode=0, criteria_enable=True):
method _get_route (line 109) | def _get_route(self, config):
method _filter_scenarios (line 124) | def _filter_scenarios(self, scenario_configs):
method _spawn_ego_vehicle (line 144) | def _spawn_ego_vehicle(self):
method _get_parking_slots (line 163) | def _get_parking_slots(self, max_distance=100, route_step=10):
method spawn_parked_vehicles (line 205) | def spawn_parked_vehicles(self, ego_vehicle, max_scenario_distance=10):
method _draw_waypoints (line 241) | def _draw_waypoints(self, waypoints, vertical_shift, size, downsample=1):
method get_all_scenario_classes (line 271) | def get_all_scenario_classes(self):
method build_scenarios (line 294) | def build_scenarios(self, ego_vehicle, debug=False):
method _initialize_actors (line 369) | def _initialize_actors(self, config):
method _create_behavior (line 377) | def _create_behavior(self):
method _create_test_criteria (line 409) | def _create_test_criteria(self):
method _create_weather_behavior (line 438) | def _create_weather_behavior(self):
method _create_lights_behavior (line 446) | def _create_lights_behavior(self):
method _create_timeout_behavior (line 452) | def _create_timeout_behavior(self):
method _initialize_environment (line 458) | def _initialize_environment(self, world):
method _create_criterion_tree (line 465) | def _create_criterion_tree(self, scenario, criteria):
method __del__ (line 489) | def __del__(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/scenarios/scenario_manager.py
class ScenarioManager (line 31) | class ScenarioManager(object):
method __init__ (line 48) | def __init__(self, timeout, statistics_manager, debug_mode=0):
method signal_handler (line 82) | def signal_handler(self, signum, frame):
method cleanup (line 92) | def cleanup(self):
method load_scenario (line 108) | def load_scenario(self, scenario, agent, route_index, rep_number):
method build_scenarios_loop (line 129) | def build_scenarios_loop(self, debug):
method run_scenario (line 139) | def run_scenario(self):
method _tick_scenario (line 163) | def _tick_scenario(self):
method get_running_status (line 234) | def get_running_status(self):
method stop_scenario (line 243) | def stop_scenario(self):
method compute_duration_time (line 270) | def compute_duration_time(self):
method analyze_scenario (line 280) | def analyze_scenario(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/checkpoint_tools.py
function autodetect_proxy (line 10) | def autodetect_proxy():
function fetch_dict (line 24) | def fetch_dict(endpoint):
function save_dict (line 50) | def save_dict(endpoint, data):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/result_writer.py
class ResultOutputProvider (line 33) | class ResultOutputProvider(object):
method __init__ (line 40) | def __init__(self, data):
method create_output_text (line 58) | def create_output_text(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/route_indexer.py
class RouteIndexer (line 10) | class RouteIndexer():
method __init__ (line 11) | def __init__(self, routes_file, repetitions, routes_subset):
method peek (line 28) | def peek(self):
method get_next_config (line 31) | def get_next_config(self):
method validate_and_resume (line 40) | def validate_and_resume(self, endpoint):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/route_manipulation.py
function _location_to_gps (line 20) | def _location_to_gps(lat_ref, lon_ref, location):
function location_route_to_gps (line 43) | def location_route_to_gps(route, lat_ref, lon_ref):
function _get_latlon_ref (line 60) | def _get_latlon_ref(world):
function downsample_route (line 85) | def downsample_route(route, sample_factor):
function interpolate_trajectory (line 136) | def interpolate_trajectory(waypoints_trajectory, hop_resolution=1.0):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/route_parser.py
function convert_elem_to_transform (line 22) | def convert_elem_to_transform(elem):
class RouteParser (line 38) | class RouteParser(object):
method parse_routes_file (line 45) | def parse_routes_file(route_filename, routes_subset=''):
method parse_weather (line 148) | def parse_weather(route):
method is_scenario_at_route (line 175) | def is_scenario_at_route(trigger_transform, route):
FILE: close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/statistics_manager.py
class RouteRecord (line 70) | class RouteRecord():
method __init__ (line 71) | def __init__(self):
method to_json (line 96) | def to_json(self):
class GlobalRecord (line 101) | class GlobalRecord():
method __init__ (line 102) | def __init__(self):
method to_json (line 125) | def to_json(self):
class Checkpoint (line 129) | class Checkpoint():
method __init__ (line 131) | def __init__(self):
method to_json (line 136) | def to_json(self):
class Results (line 147) | class Results():
method __init__ (line 149) | def __init__(self):
method to_json (line 157) | def to_json(self):
function to_route_record (line 170) | def to_route_record(record_dict):
function compute_route_length (line 178) | def compute_route_length(route):
class StatisticsManager (line 193) | class StatisticsManager(object):
method __init__ (line 200) | def __init__(self, endpoint, debug_endpoint):
method add_file_records (line 208) | def add_file_records(self, endpoint):
method clear_records (line 218) | def clear_records(self):
method sort_records (line 224) | def sort_records(self):
method write_live_results (line 234) | def write_live_results(self, index, ego_speed, ego_control, ego_locati...
method save_sensors (line 300) | def save_sensors(self, sensors):
method save_entry_status (line 303) | def save_entry_status(self, entry_status):
method save_progress (line 309) | def save_progress(self, route_index, total_routes):
method create_route_data (line 313) | def create_route_data(self, route_id, scenario_name, weather_id, save_...
method set_scenario (line 332) | def set_scenario(self, scenario):
method remove_scenario (line 337) | def remove_scenario(self):
method compute_route_statistics (line 342) | def compute_route_statistics(self, route_index, duration_time_system=-...
method compute_global_statistics (line 434) | def compute_global_statistics(self):
method validate_and_write_statistics (line 554) | def validate_and_write_statistics(self, sensors_initialized, crashed):
method write_statistics (line 597) | def write_statistics(self):
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/manage_scenarios.py
function get_scenario_transform (line 25) | def get_scenario_transform(scenario_dict):
function get_color_validity (line 39) | def get_color_validity(waypoint_transform, scenario_transform, scenario_...
function create_scenarios (line 65) | def create_scenarios(world, town_data, tmap, scenarios, debug):
function validate_scenarios (line 116) | def validate_scenarios(world, town_data, tmap, scenarios, debug):
function draw_scenarios (line 163) | def draw_scenarios(world, town_data, scenarios, debug):
function main (line 208) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/merge_statistics.py
function check_duplicates (line 7) | def check_duplicates(route_ids):
function check_missing_data (line 14) | def check_missing_data(route_ids):
function main (line 40) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/pretty_print_json.py
function prettify_json (line 21) | def prettify_json(args):
function main (line 97) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/route_creator.py
function draw_point (line 19) | def draw_point(world, wp, option):
function draw_keypoint (line 35) | def draw_keypoint(world, location):
function get_saved_data (line 40) | def get_saved_data(filename, route_id, world, grp):
function add_data (line 82) | def add_data(points, tmap, world, spectator, grp):
function save_data (line 96) | def save_data(filename, route_id, points):
function main (line 156) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/route_displayer.py
function draw_point (line 57) | def draw_point(world, wp, color):
function draw_keypoint (line 61) | def draw_keypoint(world, location):
function show_all_routes (line 67) | def show_all_routes(filename, show_scenarios, world, grp):
function show_route (line 106) | def show_route(filename, route_id, show_keypoints, show_scenarios, world...
function show_saved_scenarios (line 155) | def show_saved_scenarios(route, world):
function main (line 167) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/route_summarizer.py
function convert_elem_to_location (line 40) | def convert_elem_to_location(elem):
function main (line 44) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/scenario_creator.py
function show_saved_scenarios (line 208) | def show_saved_scenarios(filename, route_id, world):
function get_scenario_type (line 234) | def get_scenario_type(tmap, world, spectator):
function get_attributes_data (line 253) | def get_attributes_data(scen_type, trigger_point, tmap, world, spectator):
function get_transform_data (line 273) | def get_transform_data(a_name, scen_type, tmap, world, spectator):
function get_location_data (line 285) | def get_location_data(a_name, scen_type, tmap, world, spectator, a_type):
function get_value_data (line 312) | def get_value_data(a_name):
function get_interval_data (line 316) | def get_interval_data(a_name):
function print_scenario_data (line 321) | def print_scenario_data(scen_type, scen_attributes):
function save_scenario (line 327) | def save_scenario(filename, route_id, scenario_type, scenario_attributes):
function prettify_and_save_tree (line 390) | def prettify_and_save_tree(filename, tree):
function main (line 423) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/scenario_orderer.py
function order_saved_scenarios (line 229) | def order_saved_scenarios(filename, route_id, tmap, grp):
function main (line 323) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/scripts/weather_creator.py
function main (line 13) | def main():
FILE: close_loop/SparseDrive_MomAD/leaderboard/team_code/pid_controller.py
class PID (line 4) | class PID(object):
method __init__ (line 5) | def __init__(self, K_P=1.0, K_I=0.0, K_D=0.0, n=20):
method step (line 14) | def step(self, error):
class PIDController (line 30) | class PIDController(object):
method __init__ (line 32) | def __init__(self, turn_KP=0.75, turn_KI=0.75, turn_KD=0.3, turn_n=40,...
method control_pid (line 44) | def control_pid(self, waypoints, speed, target):
FILE: close_loop/SparseDrive_MomAD/leaderboard/team_code/planner.py
class Plotter (line 12) | class Plotter(object):
method __init__ (line 13) | def __init__(self, size):
method clear (line 18) | def clear(self):
method dot (line 24) | def dot(self, pos, node, color=(255, 255, 255), r=2):
method show (line 31) | def show(self):
class RoutePlanner (line 41) | class RoutePlanner(object):
method __init__ (line 42) | def __init__(self, min_distance, max_distance, debug_size=256, lat_ref...
method set_route (line 57) | def set_route(self, global_plan, gps=False, global_plan_world = None):
method run_step (line 83) | def run_step(self, gps):
method gps_to_location (line 120) | def gps_to_location(self, gps):
FILE: close_loop/SparseDrive_MomAD/leaderboard/team_code/sparsedrive_b2d_agent.py
function get_entry_point (line 47) | def get_entry_point():
class Clock (line 50) | class Clock():
method __init__ (line 51) | def __init__(self):
method count (line 55) | def count(self, tag):
class SparseDriveAgent (line 64) | class SparseDriveAgent(autonomous_agent.AutonomousAgent):
method setup (line 65) | def setup(self, path_to_conf_file, gpu_rank, save_name):
method _init (line 240) | def _init(self):
method sensors (line 261) | def sensors(self):
method tick (line 356) | def tick(self, input_data):
method run_step (line 396) | def run_step(self, input_data, timestamp):
method save (line 537) | def save(self, tick_data):
method destroy (line 581) | def destroy(self):
method gps_to_location (line 585) | def gps_to_location(self, gps):
method get_augmentation (line 596) | def get_augmentation(self):
method invert_pose (line 622) | def invert_pose(self, pose):
function draw (line 628) | def draw(input, step, cfg):
FILE: close_loop/SparseDrive_MomAD/leaderboard/team_code/uniad_b2d_agent.py
function get_entry_point (line 30) | def get_entry_point():
class UniadAgent (line 33) | class UniadAgent(autonomous_agent.AutonomousAgent):
method setup (line 34) | def setup(self, path_to_conf_file):
method _init (line 169) | def _init(self):
method sensors (line 191) | def sensors(self):
method tick (line 272) | def tick(self, input_data):
method run_step (line 311) | def run_step(self, input_data, timestamp):
method save (line 402) | def save(self, tick_data):
method destroy (line 420) | def destroy(self):
method gps_to_location (line 424) | def gps_to_location(self, gps):
FILE: close_loop/SparseDrive_MomAD/leaderboard/team_code/vad_b2d_agent.py
function get_entry_point (line 33) | def get_entry_point():
class VadAgent (line 37) | class VadAgent(autonomous_agent.AutonomousAgent):
method setup (line 38) | def setup(self, path_to_conf_file):
method _init (line 173) | def _init(self):
method sensors (line 196) | def sensors(self):
method tick (line 275) | def tick(self, input_data):
method run_step (line 315) | def run_step(self, input_data, timestamp):
method save (line 437) | def save(self, tick_data):
method destroy (line 457) | def destroy(self):
method gps_to_location (line 461) | def gps_to_location(self, gps):
FILE: close_loop/SparseDrive_MomAD/leaderboard/team_code/vad_b2d_agent_visualize.py
function float_to_uint8_color (line 35) | def float_to_uint8_color(float_clr):
function get_entry_point (line 54) | def get_entry_point():
class VadAgent (line 58) | class VadAgent(autonomous_agent.AutonomousAgent):
method setup (line 59) | def setup(self, path_to_conf_file):
method _init (line 201) | def _init(self):
method sensors (line 223) | def sensors(self):
method tick (line 302) | def tick(self, input_data):
method run_step (line 342) | def run_step(self, input_data, timestamp):
method save (line 453) | def save(self, tick_data,ego_traj,result=None):
method draw_traj (line 468) | def draw_traj(self, traj, raw_img,canvas_size=(900,1600),thickness=3,i...
method draw_traj_bev (line 501) | def draw_traj_bev(self, traj, raw_img,canvas_size=(512,512),thickness=...
method draw_lidar_bbox3d_on_img (line 534) | def draw_lidar_bbox3d_on_img(self,bboxes3d,raw_img,lidar2img_rt,canvas...
method plot_rect3d_on_img (line 592) | def plot_rect3d_on_img(self,img,num_rects,rect_corners,scores=None,lab...
method destroy (line 616) | def destroy(self):
method gps_to_location (line 620) | def gps_to_location(self, gps):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/apis/mmdet_train.py
function custom_train_detector (line 38) | def custom_train_detector(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/apis/test.py
function custom_encode_mask_results (line 26) | def custom_encode_mask_results(mask_results):
function custom_multi_gpu_test (line 49) | def custom_multi_gpu_test(model, data_loader, tmpdir=None, gpu_collect=F...
function collect_results_cpu (line 122) | def collect_results_cpu(result_part, size, tmpdir=None):
function collect_results_gpu (line 170) | def collect_results_gpu(result_part, size):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/apis/train.py
function custom_train_model (line 12) | def custom_train_model(
function train_model (line 40) | def train_model(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/core/evaluation/eval_hooks.py
function _calc_dynamic_intervals (line 16) | def _calc_dynamic_intervals(start_interval, dynamic_interval_list):
class CustomDistEvalHook (line 30) | class CustomDistEvalHook(BaseDistEvalHook):
method __init__ (line 31) | def __init__(self, *args, dynamic_intervals=None, **kwargs):
method _decide_interval (line 40) | def _decide_interval(self, runner):
method before_train_epoch (line 47) | def before_train_epoch(self, runner):
method before_train_iter (line 52) | def before_train_iter(self, runner):
method _do_evaluate (line 56) | def _do_evaluate(self, runner):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/b2d_3d_dataset.py
class B2D3DDataset (line 43) | class B2D3DDataset(Dataset):
method __init__ (line 76) | def __init__(
method __len__ (line 158) | def __len__(self):
method _set_sequence_group_flag (line 161) | def _set_sequence_group_flag(self):
method get_augmentation (line 220) | def get_augmentation(self):
method __getitem__ (line 266) | def __getitem__(self, idx):
method load_annotations (line 277) | def load_annotations(self, ann_file):
method anno2geom (line 282) | def anno2geom(self, annos):
method get_data_info (line 291) | def get_data_info(self, index):
method get_ann_info (line 349) | def get_ann_info(self, index):
method get_fut_agent (line 453) | def get_fut_agent(self, idx, sample_rate, frames):
method get_ego_trajs (line 493) | def get_ego_trajs(self,idx,sample_rate,past_frames,future_frames):
method command2hot (line 526) | def command2hot(self,command,max_dim=6):
method invert_pose (line 534) | def invert_pose(self, pose):
method _format_bbox (line 540) | def _format_bbox(self, results, jsonfile_prefix=None, tracking=False):
method _evaluate_single (line 581) | def _evaluate_single(
method load_gt (line 658) | def load_gt(self):
method format_results (line 687) | def format_results(self, results, jsonfile_prefix=None, tracking=False):
method format_map_results (line 715) | def format_map_results(self, results, prefix=None):
method format_motion_results (line 755) | def format_motion_results(self, results, jsonfile_prefix=None, trackin...
method _evaluate_single_motion (line 842) | def _evaluate_single_motion(self,
method evaluate (line 894) | def evaluate(
method show (line 999) | def show(self, results, save_dir=None, show=False, pipeline=None):
function get_T_global (line 1109) | def get_T_global(info):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/builder.py
function build_dataloader (line 21) | def build_dataloader(
function worker_init_fn (line 126) | def worker_init_fn(worker_id, num_workers, rank, seed):
function custom_build_dataset (line 154) | def custom_build_dataset(cfg, default_args=None):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/evaluation/detection/nuscenes_styled_eval_utils.py
function center_distance (line 8) | def center_distance(gt_box, pred_box) -> float:
function velocity_l2 (line 18) | def velocity_l2(gt_box, pred_box) -> float:
function yaw_diff (line 29) | def yaw_diff(gt_box, eval_box, period: float = 2*np.pi) -> float:
function angle_diff (line 43) | def angle_diff(x: float, y: float, period: float) -> float:
function attr_acc (line 60) | def attr_acc(gt_box, pred_box) -> float:
function scale_iou (line 79) | def scale_iou(sample_annotation, sample_result) -> float:
function quaternion_yaw (line 105) | def quaternion_yaw(q: Quaternion) -> float:
function cummean (line 124) | def cummean(x: np.array) -> np.array:
class DetectionMetricData (line 140) | class DetectionMetricData(abc.ABC):
method __init__ (line 145) | def __init__(self,
method __eq__ (line 179) | def __eq__(self, other):
method max_recall_ind (line 186) | def max_recall_ind(self):
method max_recall (line 199) | def max_recall(self):
method serialize (line 204) | def serialize(self):
method deserialize (line 218) | def deserialize(cls, content: dict):
method no_predictions (line 230) | def no_predictions(cls):
method random_md (line 242) | def random_md(cls):
class DetectionMetricDataList (line 254) | class DetectionMetricDataList:
method __init__ (line 257) | def __init__(self):
method __getitem__ (line 260) | def __getitem__(self, key):
method __eq__ (line 263) | def __eq__(self, other):
method get_class_data (line 269) | def get_class_data(self, detection_name: str) -> List[Tuple[DetectionM...
method get_dist_data (line 273) | def get_dist_data(self, dist_th: float) -> List[Tuple[DetectionMetricD...
method set (line 277) | def set(self, detection_name: str, match_distance: float, data: Detect...
method serialize (line 281) | def serialize(self) -> dict:
method deserialize (line 285) | def deserialize(cls, content: dict):
class DetectionMetrics (line 292) | class DetectionMetrics:
method __init__ (line 295) | def __init__(self, cfg: dict):
method add_label_ap (line 302) | def add_label_ap(self, detection_name: str, dist_th: float, ap: float)...
method get_label_ap (line 305) | def get_label_ap(self, detection_name: str, dist_th: float) -> float:
method add_label_tp (line 308) | def add_label_tp(self, detection_name: str, metric_name: str, tp: float):
method get_label_tp (line 311) | def get_label_tp(self, detection_name: str, metric_name: str) -> float:
method add_runtime (line 314) | def add_runtime(self, eval_time: float) -> None:
method mean_dist_aps (line 318) | def mean_dist_aps(self) -> Dict[str, float]:
method mean_ap (line 323) | def mean_ap(self) -> float:
method tp_errors (line 328) | def tp_errors(self) -> Dict[str, float]:
method tp_scores (line 341) | def tp_scores(self) -> Dict[str, float]:
method nd_score (line 357) | def nd_score(self) -> float:
method serialize (line 371) | def serialize(self):
method deserialize (line 385) | def deserialize(cls, content: dict):
method __eq__ (line 402) | def __eq__(self, other):
class DetectionBox (line 412) | class DetectionBox(abc.ABC):
method __init__ (line 415) | def __init__(self,
method __eq__ (line 447) | def __eq__(self, other):
method serialize (line 459) | def serialize(self) -> dict:
method deserialize (line 475) | def deserialize(cls, content: dict):
method ego_dist (line 489) | def ego_dist(self) -> float:
class EvalBoxes (line 497) | class EvalBoxes:
method __init__ (line 500) | def __init__(self):
method __repr__ (line 506) | def __repr__(self):
method __getitem__ (line 509) | def __getitem__(self, item) -> List[DetectionBox]:
method __eq__ (line 512) | def __eq__(self, other):
method __len__ (line 523) | def __len__(self):
method all (line 527) | def all(self) -> List[DetectionBox]:
method sample_tokens (line 535) | def sample_tokens(self) -> List[str]:
method add_boxes (line 539) | def add_boxes(self, sample_token: str, boxes: List[DetectionBox]) -> N...
method serialize (line 543) | def serialize(self) -> dict:
method deserialize (line 548) | def deserialize(cls, content: dict, box_cls):
function accumulate (line 560) | def accumulate(gt_boxes,
function calc_ap (line 716) | def calc_ap(md: DetectionMetricData, min_recall: float, min_precision: f...
function calc_tp (line 729) | def calc_tp(md: DetectionMetricData, min_recall: float, metric_name: str...
function quaternion_yaw (line 740) | def quaternion_yaw(q: Quaternion) -> float:
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/evaluation/map/AP.py
function average_precision (line 6) | def average_precision(recalls, precisions, mode='area'):
function instance_match (line 51) | def instance_match(pred_lines: NDArray,
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/evaluation/map/distance.py
function chamfer_distance (line 5) | def chamfer_distance(line1: NDArray, line2: NDArray) -> float:
function frechet_distance (line 23) | def frechet_distance(line1: NDArray, line2: NDArray) -> float:
function chamfer_distance_batch (line 37) | def chamfer_distance_batch(pred_lines, gt_lines):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/evaluation/map/vector_eval.py
class VectorEvaluate (line 23) | class VectorEvaluate(object):
method __init__ (line 31) | def __init__(self, dataset_cfg: Config, n_workers: int=N_WORKERS) -> N...
method gts (line 42) | def gts(self) -> Dict[str, Dict[int, List[NDArray]]]:
method interp_fixed_num (line 55) | def interp_fixed_num(self,
method interp_fixed_dist (line 74) | def interp_fixed_dist(self,
method _evaluate_single (line 96) | def _evaluate_single(self,
method evaluate (line 146) | def evaluate(self,
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/evaluation/motion/motion_eval_uniad.py
class MotionEval (line 33) | class MotionEval:
method __init__ (line 53) | def __init__(self,
method evaluate (line 111) | def evaluate(self) -> Tuple[DetectionMetrics, DetectionMetricDataList]:
method render (line 147) | def render(self, metrics: DetectionMetrics, md_list: DetectionMetricDa...
method main (line 173) | def main(self,
class NuScenesEval (line 207) | class NuScenesEval(MotionEval):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/evaluation/motion/motion_utils.py
class MotionBox (line 44) | class MotionBox(DetectionBox):
method __init__ (line 47) | def __init__(self,
method __eq__ (line 77) | def __eq__(self, other):
method serialize (line 90) | def serialize(self) -> dict:
method deserialize (line 107) | def deserialize(cls, content: dict):
function load_prediction (line 123) | def load_prediction(result_path: str, max_boxes_per_sample: int, box_cls...
function load_gt (line 164) | def load_gt(nusc: NuScenes, eval_split: str, box_cls, verbose: bool = Fa...
function accumulate (line 314) | def accumulate(gt_boxes: EvalBoxes,
function prediction_metrics (line 490) | def prediction_metrics(gt_box_match, pred_box, miss_thresh=2):
function traj_fde (line 507) | def traj_fde(gt_box, pred_box, final_step):
class MotionMetricDataList (line 518) | class MotionMetricDataList(DetectionMetricDataList):
method deserialize (line 521) | def deserialize(cls, content: dict):
class MotionMetricData (line 528) | class MotionMetricData(DetectionMetricData):
method __init__ (line 533) | def __init__(self,
method __eq__ (line 561) | def __eq__(self, other):
method max_recall_ind (line 568) | def max_recall_ind(self):
method max_recall (line 581) | def max_recall(self):
method serialize (line 586) | def serialize(self):
method deserialize (line 598) | def deserialize(cls, content: dict):
method no_predictions (line 608) | def no_predictions(cls):
method random_md (line 618) | def random_md(cls):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/evaluation/planning/planning_eval.py
function check_collision (line 13) | def check_collision(ego_box, boxes):
function get_yaw (line 35) | def get_yaw(traj):
class PlanningMetric (line 55) | class PlanningMetric():
method __init__ (line 56) | def __init__(
method reset (line 67) | def reset(self):
method evaluate_single_coll (line 73) | def evaluate_single_coll(self, traj, fut_boxes):
method evaluate_coll (line 88) | def evaluate_coll(self, trajs, gt_trajs, fut_boxes):
method compute_L2 (line 107) | def compute_L2(self, trajs, gt_trajs, gt_trajs_mask):
method update (line 114) | def update(self, trajs, gt_trajs, gt_trajs_mask, fut_boxes):
method compute (line 126) | def compute(self):
function planning_eval (line 134) | def planning_eval(results, eval_config, logger):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/map_utils/nuscmap_extractor.py
class NuscMapExtractor (line 13) | class NuscMapExtractor(object):
method __init__ (line 20) | def __init__(self, data_root: str, roi_size: Union[List, Tuple]) -> None:
method _union_ped (line 36) | def _union_ped(self, ped_geoms: List[Polygon]) -> List[Polygon]:
method get_map_geom (line 87) | def get_map_geom(self,
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/map_utils/utils.py
function split_collections (line 9) | def split_collections(geom: BaseGeometry) -> List[Optional[BaseGeometry]]:
function get_drivable_area_contour (line 32) | def get_drivable_area_contour(drivable_areas: List[Polygon],
function get_ped_crossing_contour (line 85) | def get_ped_crossing_contour(polygon: Polygon,
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/nuscenes_3d_dataset.py
class NuScenes3DDataset (line 30) | class NuScenes3DDataset(Dataset):
method __init__ (line 80) | def __init__(
method __len__ (line 154) | def __len__(self):
method _set_sequence_group_flag (line 157) | def _set_sequence_group_flag(self):
method get_augmentation (line 214) | def get_augmentation(self):
method __getitem__ (line 260) | def __getitem__(self, idx):
method get_cat_ids (line 271) | def get_cat_ids(self, idx):
method load_annotations (line 285) | def load_annotations(self, ann_file):
method anno2geom (line 294) | def anno2geom(self, annos):
method get_data_info (line 303) | def get_data_info(self, index):
method get_ann_info (line 376) | def get_ann_info(self, index):
method _format_bbox (line 449) | def _format_bbox(self, results, jsonfile_prefix=None, tracking=False):
method _evaluate_single (line 533) | def _evaluate_single(
method format_results (line 623) | def format_results(self, results, jsonfile_prefix=None, tracking=False):
method format_map_results (line 651) | def format_map_results(self, results, prefix=None):
method format_motion_results (line 691) | def format_motion_results(self, results, jsonfile_prefix=None, trackin...
method _evaluate_single_motion (line 778) | def _evaluate_single_motion(self,
method evaluate (line 830) | def evaluate(
method show (line 935) | def show(self, results, save_dir=None, show=False, pipeline=None):
function output_to_nusc_box (line 1045) | def output_to_nusc_box(detection, threshold=None):
function lidar_nusc_box_to_global (line 1098) | def lidar_nusc_box_to_global(
function get_T_global (line 1125) | def get_T_global(info):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/pipelines/augment.py
class ResizeCropFlipImage (line 11) | class ResizeCropFlipImage(object):
method __init__ (line 12) | def __init__(self, use_generated_img=False):
method __call__ (line 15) | def __call__(self, results):
method _img_transform (line 38) | def _img_transform(self, img, aug_configs):
class BBoxRotation (line 89) | class BBoxRotation(object):
method __call__ (line 90) | def __call__(self, results):
method box_rotate (line 119) | def box_rotate(bbox_3d, angle):
class PhotoMetricDistortionMultiViewImage (line 134) | class PhotoMetricDistortionMultiViewImage:
method __init__ (line 153) | def __init__(
method __call__ (line 165) | def __call__(self, results):
method __repr__ (line 229) | def __repr__(self):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/pipelines/loading.py
class LoadMultiViewImageFromFiles (line 7) | class LoadMultiViewImageFromFiles(object):
method __init__ (line 19) | def __init__(self, to_float32=False, color_type="unchanged"):
method __call__ (line 23) | def __call__(self, results):
method __repr__ (line 65) | def __repr__(self):
class LoadPointsFromFile (line 74) | class LoadPointsFromFile(object):
method __init__ (line 100) | def __init__(
method _load_points (line 124) | def _load_points(self, pts_filename):
method __call__ (line 147) | def __call__(self, results):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/pipelines/transform.py
class DenseDepthMapGenerator (line 12) | class DenseDepthMapGenerator(object):
method __init__ (line 13) | def __init__(self, downsample=1, max_depth=60):
method __call__ (line 19) | def __call__(self, input_dict):
method decode (line 74) | def decode(self, depth):
method _img_transform (line 79) | def _img_transform(self, img, aug_configs):
class MultiScaleDepthMapGenerator (line 110) | class MultiScaleDepthMapGenerator(object):
method __init__ (line 111) | def __init__(self, downsample=1, max_depth=60):
method __call__ (line 117) | def __call__(self, input_dict):
class NuScenesSparse4DAdaptor (line 160) | class NuScenesSparse4DAdaptor(object):
method __init (line 161) | def __init(self):
method __call__ (line 164) | def __call__(self, input_dict):
method limit_period (line 221) | def limit_period(
class InstanceNameFilter (line 229) | class InstanceNameFilter(object):
method __init__ (line 236) | def __init__(self, classes):
method __call__ (line 240) | def __call__(self, input_dict):
method __repr__ (line 263) | def __repr__(self):
class CircleObjectRangeFilter (line 271) | class CircleObjectRangeFilter(object):
method __init__ (line 272) | def __init__(
method __call__ (line 277) | def __call__(self, input_dict):
method __repr__ (line 302) | def __repr__(self):
class NormalizeMultiviewImage (line 310) | class NormalizeMultiviewImage(object):
method __init__ (line 320) | def __init__(self, mean, std, to_rgb=True):
method __call__ (line 325) | def __call__(self, results):
method __repr__ (line 342) | def __repr__(self):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/pipelines/vectorize.py
class VectorizeMap (line 12) | class VectorizeMap(object):
method __init__ (line 27) | def __init__(self,
method interp_fixed_num (line 53) | def interp_fixed_num(self, line: LineString) -> NDArray:
method interp_fixed_dist (line 69) | def interp_fixed_dist(self, line: LineString) -> NDArray:
method get_vectorized_lines (line 88) | def get_vectorized_lines(self, map_geoms: Dict) -> Dict:
method normalize_line (line 125) | def normalize_line(self, line: NDArray) -> NDArray:
method permute_line (line 145) | def permute_line(self, line: np.ndarray, padding=1e5):
method __call__ (line 180) | def __call__(self, input_dict):
method __repr__ (line 199) | def __repr__(self):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/samplers/distributed_sampler.py
class ForkedPdb (line 11) | class ForkedPdb(pdb.Pdb):
method interaction (line 12) | def interaction(self, *args, **kwargs):
function set_trace (line 21) | def set_trace():
class DistributedSampler (line 26) | class DistributedSampler(_DistributedSampler):
method __init__ (line 27) | def __init__(
method __iter__ (line 36) | def __iter__(self):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/samplers/group_in_batch_sampler.py
function sync_random_seed (line 13) | def sync_random_seed(seed=None, device="cuda"):
class GroupInBatchSampler (line 48) | class GroupInBatchSampler(Sampler):
method __init__ (line 57) | def __init__(
method _infinite_group_indices (line 109) | def _infinite_group_indices(self):
method _group_indices_per_global_sample_idx (line 115) | def _group_indices_per_global_sample_idx(self, global_sample_idx):
method __iter__ (line 123) | def __iter__(self):
method __len__ (line 173) | def __len__(self):
method set_epoch (line 177) | def set_epoch(self, epoch):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/samplers/group_sampler.py
class DistributedGroupSampler (line 14) | class DistributedGroupSampler(Sampler):
method __init__ (line 32) | def __init__(
method __iter__ (line 66) | def __iter__(self):
method __len__ (line 115) | def __len__(self):
method set_epoch (line 118) | def set_epoch(self, epoch):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/samplers/sampler.py
function build_sampler (line 6) | def build_sampler(cfg, default_args):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/utils.py
function box3d_to_corners (line 10) | def box3d_to_corners(box3d):
function plot_rect3d_on_img (line 32) | def plot_rect3d_on_img(
function draw_lidar_bbox3d_on_img (line 94) | def draw_lidar_bbox3d_on_img(
function draw_points_on_img (line 130) | def draw_points_on_img(points, img, lidar2img_rt, color=(0, 255, 0), cir...
function draw_lidar_bbox3d_on_bev (line 155) | def draw_lidar_bbox3d_on_bev(
function draw_lidar_bbox3d (line 207) | def draw_lidar_bbox3d(bboxes_3d, imgs, lidar2imgs, color=(255, 0, 0)):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/MomAD.py
class MomAD (line 27) | class MomAD(BaseDetector):
method __init__ (line 28) | def __init__(
method extract_feat (line 81) | def extract_feat(self, img, return_depth=False, metas=None):
method forward (line 111) | def forward(self, img, **data):
method forward_train (line 117) | def forward_train(self, img, **data):
method forward_test (line 128) | def forward_test(self, img, **data):
method simple_test (line 134) | def simple_test(self, img, **data):
method aug_test (line 143) | def aug_test(self, img, **data):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/MomAD_head.py
class MomADHead (line 14) | class MomADHead(BaseModule):
method __init__ (line 15) | def __init__(
method init_weights (line 33) | def init_weights(self):
method forward (line 41) | def forward(
method loss (line 71) | def loss(self, model_outs, data):
method post_process (line 96) | def post_process(self, model_outs, data):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/attention.py
function _in_projection_packed (line 27) | def _in_projection_packed(q, k, v, w, b = None):
class FlashAttention (line 36) | class FlashAttention(nn.Module):
method __init__ (line 46) | def __init__(self, softmax_scale=None, attention_dropout=0.0, device=N...
method forward (line 53) | def forward(self, q, kv,
class FlashMHA (line 101) | class FlashMHA(nn.Module):
method __init__ (line 103) | def __init__(self, embed_dim, num_heads, bias=True, batch_first=True, ...
method _reset_parameters (line 126) | def _reset_parameters(self) -> None:
method forward (line 132) | def forward(self, q, k, v, key_padding_mask=None):
class MultiheadFlashAttention (line 147) | class MultiheadFlashAttention(BaseModule):
method __init__ (line 167) | def __init__(self,
method forward (line 204) | def forward(self,
function gen_sineembed_for_position (line 288) | def gen_sineembed_for_position(pos_tensor, hidden_dim=256):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/base_target.py
class BaseTargetWithDenoising (line 7) | class BaseTargetWithDenoising(ABC):
method __init__ (line 8) | def __init__(self, num_dn_groups=0, num_temp_dn_groups=0):
method sample (line 15) | def sample(self, cls_pred, box_pred, cls_target, box_target):
method get_dn_anchors (line 22) | def get_dn_anchors(self, cls_target, box_target, *args, **kwargs):
method update_dn (line 29) | def update_dn(self, instance_feature, anchor, *args, **kwargs):
method cache_dn (line 35) | def cache_dn(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/blocks.py
function linear_relu_ln (line 32) | def linear_relu_ln(embed_dims, in_loops, out_loops, input_dims=None):
class DeformableFeatureAggregation (line 46) | class DeformableFeatureAggregation(BaseModule):
method __init__ (line 47) | def __init__(
method init_weight (line 106) | def init_weight(self):
method forward (line 110) | def forward(
method _get_weights (line 164) | def _get_weights(self, instance_feature, anchor_embed, metas=None):
method project_points (line 199) | def project_points(key_points, projection_mat, image_wh=None):
method feature_sampling (line 216) | def feature_sampling(
method multi_view_level_fusion (line 248) | def multi_view_level_fusion(
class DenseDepthNet (line 265) | class DenseDepthNet(BaseModule):
method __init__ (line 266) | def __init__(
method forward (line 287) | def forward(self, feature_maps, focal=None, gt_depths=None):
method loss (line 303) | def loss(self, depth_preds, gt_depths):
class AsymmetricFFN (line 326) | class AsymmetricFFN(BaseModule):
method __init__ (line 327) | def __init__(
method forward (line 384) | def forward(self, x, identity=None):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/detection3d/decoder.py
function decode_box (line 9) | def decode_box(box):
class SparseBox3DDecoder (line 24) | class SparseBox3DDecoder(object):
method __init__ (line 25) | def __init__(
method decode (line 36) | def decode(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/detection3d/detection3d_blocks.py
class SparseBox3DEncoder (line 24) | class SparseBox3DEncoder(BaseModule):
method __init__ (line 25) | def __init__(
method forward (line 57) | def forward(self, box_3d: torch.Tensor):
class SparseBox3DRefinementModule (line 78) | class SparseBox3DRefinementModule(BaseModule):
method __init__ (line 79) | def __init__(
method init_weight (line 118) | def init_weight(self):
method forward (line 123) | def forward(
class SparseBox3DKeyPointsGenerator (line 160) | class SparseBox3DKeyPointsGenerator(BaseModule):
method __init__ (line 161) | def __init__(
method init_weight (line 179) | def init_weight(self):
method forward (line 183) | def forward(
method anchor_projection (line 251) | def anchor_projection(
method distance (line 299) | def distance(anchor):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/detection3d/detection3d_head.py
class Sparse4DHead (line 28) | class Sparse4DHead(BaseModule):
method __init__ (line 29) | def __init__(
method init_weights (line 128) | def init_weights(self):
method graph_model (line 140) | def graph_model(
method forward (line 168) | def forward(
method loss (line 414) | def loss(self, model_outs, data, feature_maps=None):
method prepare_for_dn_loss (line 524) | def prepare_for_dn_loss(self, model_outs, prefix=""):
method post_process (line 551) | def post_process(self, model_outs, output_idx=-1):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/detection3d/losses.py
class SparseBox3DLoss (line 11) | class SparseBox3DLoss(nn.Module):
method __init__ (line 12) | def __init__(
method forward (line 31) | def forward(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/detection3d/target.py
class SparseBox3DTarget (line 16) | class SparseBox3DTarget(BaseTargetWithDenoising):
method __init__ (line 17) | def __init__(
method encode_reg_target (line 48) | def encode_reg_target(self, box_target, device=None):
method sample (line 66) | def sample(
method _cls_cost (line 122) | def _cls_cost(self, cls_pred, cls_target):
method _box_cost (line 146) | def _box_cost(self, box_pred, box_target, instance_reg_weights):
method get_dn_anchors (line 164) | def get_dn_anchors(self, cls_target, box_target, gt_instance_id=None):
method update_dn (line 295) | def update_dn(
method cache_dn (line 398) | def cache_dn(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/grid_mask.py
class Grid (line 7) | class Grid(object):
method __init__ (line 8) | def __init__(
method set_prob (line 20) | def set_prob(self, epoch, max_epoch):
method __call__ (line 23) | def __call__(self, img, label):
class GridMask (line 75) | class GridMask(nn.Module):
method __init__ (line 76) | def __init__(
method set_prob (line 89) | def set_prob(self, epoch, max_epoch):
method forward (line 92) | def forward(self, x):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/instance_bank.py
function topk (line 12) | def topk(confidence, k, *inputs):
class InstanceBank (line 25) | class InstanceBank(nn.Module):
method __init__ (line 26) | def __init__(
method init_weight (line 69) | def init_weight(self):
method reset (line 74) | def reset(self):
method get (line 84) | def get(self, batch_size, metas=None, dn_metas=None):
method update (line 148) | def update(self, instance_feature, anchor, confidence):
method cache (line 195) | def cache(
method get_instance_id (line 223) | def get_instance_id(self, confidence, anchor=None, threshold=None):
method update_instance_id (line 243) | def update_instance_id(self, instance_id=None, confidence=None):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/map/decoder.py
class SparsePoint3DDecoder (line 9) | class SparsePoint3DDecoder(object):
method __init__ (line 10) | def __init__(
method decode (line 19) | def decode(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/map/loss.py
class LinesL1Loss (line 10) | class LinesL1Loss(nn.Module):
method __init__ (line 12) | def __init__(self, reduction='mean', loss_weight=1.0, beta=0.5):
method forward (line 26) | def forward(self,
class SparseLineLoss (line 66) | class SparseLineLoss(nn.Module):
method __init__ (line 67) | def __init__(
method forward (line 84) | def forward(
method normalize_line (line 105) | def normalize_line(self, line):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/map/map_blocks.py
class SparsePoint3DEncoder (line 20) | class SparsePoint3DEncoder(BaseModule):
method __init__ (line 21) | def __init__(
method forward (line 35) | def forward(self, anchor: torch.Tensor):
class SparsePoint3DRefinementModule (line 41) | class SparsePoint3DRefinementModule(BaseModule):
method __init__ (line 42) | def __init__(
method init_weight (line 69) | def init_weight(self):
method forward (line 74) | def forward(
class SparsePoint3DKeyPointsGenerator (line 94) | class SparsePoint3DKeyPointsGenerator(BaseModule):
method __init__ (line 95) | def __init__(
method init_weight (line 114) | def init_weight(self):
method forward (line 118) | def forward(
method anchor_projection (line 173) | def anchor_projection(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/map/match_cost.py
class LinesL1Cost (line 8) | class LinesL1Cost(object):
method __init__ (line 14) | def __init__(self, weight=1.0, beta=0.0, permute=False):
method __call__ (line 19) | def __call__(self, lines_pred, gt_lines, **kwargs):
class MapQueriesCost (line 62) | class MapQueriesCost(object):
method __init__ (line 64) | def __init__(self, cls_cost, reg_cost, iou_cost=None):
method __call__ (line 73) | def __call__(self, preds: dict, gts: dict, ignore_cls_cost: bool):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/map/target.py
class SparsePoint3DTarget (line 15) | class SparsePoint3DTarget(BaseTargetWithDenoising):
method __init__ (line 16) | def __init__(
method sample (line 40) | def sample(
method normalize_line (line 74) | def normalize_line(self, line):
class HungarianLinesAssigner (line 93) | class HungarianLinesAssigner(BaseAssigner):
method __init__ (line 112) | def __init__(self, cost=dict, **kwargs):
method assign (line 115) | def assign(self,
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/motion/decoder.py
class SparseBox3DMotionDecoder (line 14) | class SparseBox3DMotionDecoder(SparseBox3DDecoder):
method __init__ (line 15) | def __init__(self):
method decode (line 18) | def decode(
class HierarchicalPlanningDecoder (line 111) | class HierarchicalPlanningDecoder(object):
method __init__ (line 112) | def __init__(
method decode (line 125) | def decode(
method select (line 155) | def select(
method rescore (line 192) | def rescore(
function check_collision (line 283) | def check_collision(boxes1, boxes2):
function corners_in_box (line 297) | def corners_in_box(boxes1, boxes2):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/motion/instance_queue.py
class InstanceQueue (line 16) | class InstanceQueue(nn.Module):
method __init__ (line 17) | def __init__(
method reset (line 59) | def reset(self):
method get (line 72) | def get(
method prepare_motion (line 133) | def prepare_motion(
method prepare_planning (line 180) | def prepare_planning(
method cache_motion (line 246) | def cache_motion(self, instance_feature, det_output, metas):
method cache_planning (line 257) | def cache_planning(self, ego_feature, ego_status):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/motion/motion_blocks.py
class MotionPlanningRefinementModule (line 17) | class MotionPlanningRefinementModule(BaseModule):
method __init__ (line 18) | def __init__(
method init_weight (line 80) | def init_weight(self):
method forward (line 85) | def forward(
class MotionPlanningClsRefinementModule (line 121) | class MotionPlanningClsRefinementModule(BaseModule):
method __init__ (line 122) | def __init__(
method init_weight (line 184) | def init_weight(self):
method forward (line 189) | def forward(
class MotionPlanning2thRefinementModule (line 206) | class MotionPlanning2thRefinementModule(BaseModule):
method __init__ (line 207) | def __init__(
method init_weight (line 254) | def init_weight(self):
method forward (line 259) | def forward(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/motion/motion_planning_cls_head.py
class MotionPlanningClsHead (line 34) | class MotionPlanningClsHead(BaseModule):
method __init__ (line 35) | def __init__(
method init_weights (line 152) | def init_weights(self):
method get_motion_anchor (line 164) | def get_motion_anchor(
method _agent2lidar (line 174) | def _agent2lidar(self, trajs, boxes):
method graph_model (line 188) | def graph_model(
method forward (line 216) | def forward(
method loss (line 381) | def loss(self,
method loss_motion (line 395) | def loss_motion(self, model_outs, data, motion_loss_cache):
method loss_planning (line 442) | def loss_planning(self, model_outs, data):
method post_process (line 479) | def post_process(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/motion/motion_planning_head.py
class MotionPlanningHead (line 34) | class MotionPlanningHead(BaseModule):
method __init__ (line 35) | def __init__(
method init_weights (line 152) | def init_weights(self):
method get_motion_anchor (line 164) | def get_motion_anchor(
method _agent2lidar (line 174) | def _agent2lidar(self, trajs, boxes):
method graph_model (line 188) | def graph_model(
method forward (line 216) | def forward(
method loss (line 372) | def loss(self,
method loss_motion (line 386) | def loss_motion(self, model_outs, data, motion_loss_cache):
method loss_planning (line 433) | def loss_planning(self, model_outs, data):
method post_process (line 482) | def post_process(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/motion/motion_planning_head_MomAD.py
class MLP (line 36) | class MLP(nn.Module):
method __init__ (line 37) | def __init__(self, in_channels, hidden_unit, verbose=False):
method forward (line 45) | def forward(self, x):
class LaneNet (line 49) | class LaneNet(nn.Module):
method __init__ (line 50) | def __init__(self, in_channels, hidden_unit, num_subgraph_layers):
method forward (line 59) | def forward(self, pts_lane_feats):
class MomADMotionPlanningHead (line 83) | class MomADMotionPlanningHead(BaseModule):
method __init__ (line 84) | def __init__(
method init_weights (line 209) | def init_weights(self):
method get_motion_anchor (line 221) | def get_motion_anchor(
method _agent2lidar (line 231) | def _agent2lidar(self, trajs, boxes):
method graph_model (line 245) | def graph_model(
method forward (line 273) | def forward(
method select_best_reg (line 463) | def select_best_reg(self, reg_preds, reg_target):
method loss (line 476) | def loss(self,
method loss_motion (line 492) | def loss_motion(self, model_outs, data, motion_loss_cache):
method loss_planning (line 539) | def loss_planning(self, model_outs, data):
method loss_planning_refined (line 588) | def loss_planning_refined(self, model_outs, data):
method post_process (line 637) | def post_process(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/motion/target.py
function get_cls_target (line 8) | def get_cls_target(
function get_best_reg (line 22) | def get_best_reg(
class MotionTarget (line 40) | class MotionTarget():
method __init__ (line 41) | def __init__(
method sample (line 46) | def sample(
class PlanningTarget (line 73) | class PlanningTarget():
method __init__ (line 74) | def __init__(
method sample (line 85) | def sample(
class ClsPlanningTarget (line 112) | class ClsPlanningTarget():
method __init__ (line 113) | def __init__(
method sample (line 124) | def sample(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/sparsedrive.py
class SparseDrive (line 27) | class SparseDrive(BaseDetector):
method __init__ (line 28) | def __init__(
method extract_feat (line 81) | def extract_feat(self, img, return_depth=False, metas=None):
method forward (line 111) | def forward(self, img, **data):
method forward_train (line 117) | def forward_train(self, img, **data):
method forward_test (line 127) | def forward_test(self, img, **data):
method simple_test (line 133) | def simple_test(self, img, **data):
method aug_test (line 141) | def aug_test(self, img, **data):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/models/sparsedrive_head.py
class SparseDriveHead (line 14) | class SparseDriveHead(BaseModule):
method __init__ (line 15) | def __init__(
method init_weights (line 33) | def init_weights(self):
method forward (line 41) | def forward(
method loss (line 71) | def loss(self, model_outs, data):
method post_process (line 96) | def post_process(self, model_outs, data):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/ops/__init__.py
function deformable_aggregation_function (line 6) | def deformable_aggregation_function(
function feature_maps_format (line 22) | def feature_maps_format(feature_maps, inverse=False):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/ops/deformable_aggregation.py
class DeformableAggregationFunction (line 7) | class DeformableAggregationFunction(Function):
method forward (line 9) | def forward(
method backward (line 41) | def backward(ctx, grad_output):
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/ops/setup.py
function make_cuda_ext (line 12) | def make_cuda_ext(
FILE: close_loop/SparseDrive_MomAD/mmdet3d_plugin/ops/src/deformable_aggregation.cpp
function deformable_aggregation_forward (line 31) | at::Tensor deformable_aggregation_forward(
function deformable_aggregation_backward (line 86) | void deformable_aggregation_backward(
function PYBIND11_MODULE (line 127) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
FILE: close_loop/SparseDrive_MomAD/scenario_runner/manual_control.py
function get_actor_display_name (line 105) | def get_actor_display_name(actor, truncate=250):
class World (line 114) | class World(object):
method __init__ (line 116) | def __init__(self, carla_world, hud, args):
method restart (line 138) | def restart(self):
method tick (line 173) | def tick(self, clock, wait_for_repetitions):
method render (line 185) | def render(self, display):
method destroy_sensors (line 189) | def destroy_sensors(self):
method destroy (line 194) | def destroy(self):
class KeyboardControl (line 214) | class KeyboardControl(object):
method __init__ (line 216) | def __init__(self, world, start_in_autopilot):
method parse_events (line 225) | def parse_events(self, client, world, clock):
method _parse_vehicle_keys (line 335) | def _parse_vehicle_keys(self, keys, milliseconds):
method _is_quit_shortcut (line 364) | def _is_quit_shortcut(key):
class HUD (line 373) | class HUD(object):
method __init__ (line 374) | def __init__(self, width, height):
method on_world_tick (line 392) | def on_world_tick(self, timestamp):
method tick (line 398) | def tick(self, world, clock):
method toggle_info (line 455) | def toggle_info(self):
method notification (line 458) | def notification(self, text, seconds=2.0):
method error (line 461) | def error(self, text):
method render (line 464) | def render(self, display):
class FadingText (line 508) | class FadingText(object):
method __init__ (line 509) | def __init__(self, font, dim, pos):
method set_text (line 516) | def set_text(self, text, color=(255, 255, 255), seconds=2.0):
method tick (line 523) | def tick(self, _, clock):
method render (line 528) | def render(self, display):
class HelpText (line 537) | class HelpText(object):
method __init__ (line 539) | def __init__(self, font, width, height):
method toggle (line 554) | def toggle(self):
method render (line 557) | def render(self, display):
class CollisionSensor (line 567) | class CollisionSensor(object):
method __init__ (line 568) | def __init__(self, parent_actor, hud):
method get_collision_history (line 581) | def get_collision_history(self):
method _on_collision (line 588) | def _on_collision(weak_self, event):
class LaneInvasionSensor (line 606) | class LaneInvasionSensor(object):
method __init__ (line 607) | def __init__(self, parent_actor, hud):
method _on_invasion (line 623) | def _on_invasion(weak_self, event):
class GnssSensor (line 637) | class GnssSensor(object):
method __init__ (line 638) | def __init__(self, parent_actor):
method _on_gnss_event (line 652) | def _on_gnss_event(weak_self, event):
class IMUSensor (line 665) | class IMUSensor(object):
method __init__ (line 666) | def __init__(self, parent_actor):
method _IMU_callback (line 683) | def _IMU_callback(weak_self, sensor_data):
class RadarSensor (line 704) | class RadarSensor(object):
method __init__ (line 705) | def __init__(self, parent_actor):
method _Radar_callback (line 730) | def _Radar_callback(weak_self, radar_data):
class CameraManager (line 771) | class CameraManager(object):
method __init__ (line 772) | def __init__(self, parent_actor, hud):
method toggle_camera (line 802) | def toggle_camera(self):
method set_sensor (line 806) | def set_sensor(self, index, notify=True, force_respawn=False):
method toggle_recording (line 827) | def toggle_recording(self):
method render (line 831) | def render(self, display):
method _parse_image (line 836) | def _parse_image(weak_self, image):
function game_loop (line 884) | def game_loop(args):
function main (line 935) | def main():
FILE: close_loop/SparseDrive_MomAD/scenario_runner/metrics_manager.py
class MetricsManager (line 31) | class MetricsManager(object):
method __init__ (line 37) | def __init__(self, args):
method _get_recorder (line 60) | def _get_recorder(self, log):
method _get_criteria (line 81) | def _get_criteria(self, criteria_file):
method _get_metric_class (line 93) | def _get_metric_class(self, metric_file):
method _get_recorder_map (line 116) | def _get_recorder_map(self, recorder_str):
function main (line 127) | def main():
FILE: close_loop/SparseDrive_MomAD/scenario_runner/no_rendering_mode.py
function get_actor_display_name (line 157) | def get_actor_display_name(actor, truncate=250):
class Util (line 162) | class Util(object):
method blits (line 165) | def blits(destination_surface, source_surfaces, rect=None, blend_mode=0):
method length (line 170) | def length(v):
method get_bounding_box (line 174) | def get_bounding_box(actor):
class ModuleManager (line 191) | class ModuleManager(object):
method __init__ (line 192) | def __init__(self):
method register_module (line 195) | def register_module(self, module):
method clear_modules (line 198) | def clear_modules(self):
method tick (line 201) | def tick(self, clock):
method render (line 206) | def render(self, display):
method get_module (line 211) | def get_module(self, name):
method start_modules (line 216) | def start_modules(self):
class FadingText (line 226) | class FadingText(object):
method __init__ (line 227) | def __init__(self, font, dim, pos):
method set_text (line 234) | def set_text(self, text, color=COLOR_WHITE, seconds=2.0):
method tick (line 241) | def tick(self, clock):
method render (line 246) | def render(self, display):
class HelpText (line 255) | class HelpText(object):
method __init__ (line 256) | def __init__(self, font, width, height):
method toggle (line 270) | def toggle(self):
method render (line 273) | def render(self, display):
class ModuleHUD (line 283) | class ModuleHUD (object):
method __init__ (line 285) | def __init__(self, name, width, height):
method start (line 291) | def start(self):
method _init_hud_params (line 294) | def _init_hud_params(self):
method _init_data_params (line 306) | def _init_data_params(self):
method notification (line 311) | def notification(self, text, seconds=2.0):
method tick (line 314) | def tick(self, clock):
method add_info (line 317) | def add_info(self, module_name, info):
method render_vehicles_ids (line 320) | def render_vehicles_ids(self, vehicle_id_surface, list_actors, world_t...
method render (line 344) | def render(self, display):
class TrafficLightSurfaces (line 396) | class TrafficLightSurfaces(object):
method __init__ (line 399) | def __init__(self):
method rotozoom (line 424) | def rotozoom(self, angle, scale):
class MapImage (line 434) | class MapImage(object):
method __init__ (line 435) | def __init__(self, carla_world, carla_map, pixels_per_meter, show_trig...
method draw_road_map (line 458) | def draw_road_map(self, map_surface, carla_world, carla_map, world_to_...
method world_to_pixel (line 763) | def world_to_pixel(self, location, offset=(0, 0)):
method world_to_pixel_width (line 768) | def world_to_pixel_width(self, width):
method scale_map (line 771) | def scale_map(self, scale):
class ModuleWorld (line 778) | class ModuleWorld(object):
method __init__ (line 779) | def __init__(self, name, args, timeout):
method _get_data_from_carla (line 819) | def _get_data_from_carla(self):
method start (line 836) | def start(self):
method select_hero_actor (line 888) | def select_hero_actor(self):
method _spawn_hero (line 897) | def _spawn_hero(self):
method tick (line 914) | def tick(self, clock):
method update_hud_info (line 921) | def update_hud_info(self, clock):
method on_world_tick (line 966) | def on_world_tick(weak_self, timestamp):
method _split_actors (line 975) | def _split_actors(self):
method _render_traffic_lights (line 1009) | def _render_traffic_lights(self, surface, list_tl, world_to_pixel):
method _render_speed_limits (line 1039) | def _render_speed_limits(self, surface, list_sl, world_to_pixel, world...
method _render_walkers (line 1074) | def _render_walkers(self, surface, list_w, world_to_pixel):
method _render_vehicles (line 1090) | def _render_vehicles(self, surface, list_v, world_to_pixel):
method render_actors (line 1111) | def render_actors(self, surface, vehicles, traffic_lights, speed_limit...
method clip_surfaces (line 1121) | def clip_surfaces(self, clipping_rect):
method _compute_scale (line 1126) | def _compute_scale(self, scale_factor):
method render (line 1147) | def render(self, display):
method destroy (line 1235) | def destroy(self):
class ModuleInput (line 1243) | class ModuleInput(object):
method __init__ (line 1244) | def __init__(self, name):
method start (line 1254) | def start(self):
method render (line 1258) | def render(self, display):
method tick (line 1261) | def tick(self, clock):
method _parse_events (line 1264) | def _parse_events(self):
method _parse_keys (line 1327) | def _parse_keys(self, milliseconds):
method _parse_mouse (line 1342) | def _parse_mouse(self):
method parse_input (line 1349) | def parse_input(self, clock):
method _is_quit_shortcut (line 1361) | def _is_quit_shortcut(key):
function game_loop (line 1376) | def game_loop(args):
function exit_game (line 1418) | def exit_game():
function main (line 1428) | def main():
FILE: close_loop/SparseDrive_MomAD/scenario_runner/scenario_runner.py
function get_carla_version (line 38) | def get_carla_version():
function get_carla_version (line 43) | def get_carla_version():
class ScenarioRunner (line 63) | class ScenarioRunner(object):
method __init__ (line 93) | def __init__(self, args):
method destroy (line 131) | def destroy(self):
method _signal_handler (line 144) | def _signal_handler(self, signum, frame):
method _get_scenario_class_or_fail (line 152) | def _get_scenario_class_or_fail(self, scenario):
method _cleanup (line 180) | def _cleanup(self):
method _prepare_ego_vehicles (line 217) | def _prepare_ego_vehicles(self, ego_vehicles):
method _analyze_scenario (line 259) | def _analyze_scenario(self, config):
method _record_criteria (line 287) | def _record_criteria(self, criteria, name):
method _load_and_wait_for_world (line 319) | def _load_and_wait_for_world(self, town, ego_vehicles=None):
method _load_and_run_scenario (line 368) | def _load_and_run_scenario(self, config):
method _run_scenarios (line 451) | def _run_scenarios(self):
method _run_route (line 474) | def _run_route(self):
method _run_openscenario (line 490) | def _run_openscenario(self):
method run (line 512) | def run(self):
function main (line 528) | def main():
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/autoagents/agent_wrapper.py
class AgentWrapper (line 20) | class AgentWrapper(object):
method __init__ (line 29) | def __init__(self, agent):
method __call__ (line 35) | def __call__(self):
method setup_sensors (line 41) | def setup_sensors(self, vehicle, debug_mode=False):
method cleanup (line 87) | def cleanup(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/autoagents/autonomous_agent.py
class AutonomousAgent (line 19) | class AutonomousAgent(object):
method __init__ (line 25) | def __init__(self, path_to_conf_file):
method setup (line 36) | def setup(self, path_to_conf_file):
method sensors (line 42) | def sensors(self): # pylint: disable=no-self-use
method run_step (line 64) | def run_step(self, input_data, timestamp):
method destroy (line 77) | def destroy(self):
method __call__ (line 84) | def __call__(self):
method set_global_plan (line 100) | def set_global_plan(self, global_plan_gps, global_plan_world_coord):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/autoagents/dummy_agent.py
class DummyAgent (line 17) | class DummyAgent(AutonomousAgent):
method setup (line 23) | def setup(self, path_to_conf_file):
method sensors (line 28) | def sensors(self):
method run_step (line 61) | def run_step(self, input_data, timestamp):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/autoagents/human_agent.py
class HumanInterface (line 34) | class HumanInterface(object):
method __init__ (line 40) | def __init__(self, width, height):
method run_interface (line 51) | def run_interface(self, input_data):
method quit_interface (line 64) | def quit_interface(self):
class HumanAgent (line 71) | class HumanAgent(AutonomousAgent):
method setup (line 81) | def setup(self, path_to_conf_file):
method sensors (line 94) | def sensors(self):
method run_step (line 120) | def run_step(self, input_data, timestamp):
method destroy (line 132) | def destroy(self):
class KeyboardControl (line 139) | class KeyboardControl(object):
method __init__ (line 145) | def __init__(self, path_to_conf_file):
method _json_to_control (line 180) | def _json_to_control(self):
method parse_events (line 196) | def parse_events(self, timestamp):
method _parse_vehicle_keys (line 212) | def _parse_vehicle_keys(self, keys, milliseconds):
method _parse_json_control (line 242) | def _parse_json_control(self):
method _record_control (line 253) | def _record_control(self):
method __del__ (line 272) | def __del__(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/autoagents/npc_agent.py
class NpcAgent (line 19) | class NpcAgent(AutonomousAgent):
method setup (line 28) | def setup(self, path_to_conf_file):
method sensors (line 34) | def sensors(self):
method run_step (line 59) | def run_step(self, input_data, timestamp):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/autoagents/ros_agent.py
class RosAgent (line 40) | class RosAgent(AutonomousAgent):
method setup (line 65) | def setup(self, path_to_conf_file):
method destroy (line 162) | def destroy(self):
method on_vehicle_control (line 183) | def on_vehicle_control(self, data):
method build_camera_info (line 201) | def build_camera_info(self, attributes): # pylint: disable=no-self-use
method publish_plan (line 224) | def publish_plan(self):
method sensors (line 247) | def sensors(self):
method get_header (line 256) | def get_header(self):
method publish_lidar (line 264) | def publish_lidar(self, sensor_id, data):
method publish_gnss (line 285) | def publish_gnss(self, sensor_id, data):
method publish_camera (line 301) | def publish_camera(self, sensor_id, data):
method publish_can (line 315) | def publish_can(self, sensor_id, data):
method publish_hd_map (line 357) | def publish_hd_map(self, sensor_id, data):
method use_stepping_mode (line 402) | def use_stepping_mode(self): # pylint: disable=no-self-use
method run_step (line 408) | def run_step(self, input_data, timestamp):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/autoagents/sensor_interface.py
class SensorReceivedNoData (line 26) | class SensorReceivedNoData(Exception):
class CallBack (line 33) | class CallBack(object):
method __init__ (line 39) | def __init__(self, tag, sensor, data_provider):
method __call__ (line 48) | def __call__(self, data):
method _parse_image_cb (line 66) | def _parse_image_cb(self, image, tag):
method _parse_lidar_cb (line 75) | def _parse_lidar_cb(self, lidar_data, tag):
method _parse_radar_cb (line 84) | def _parse_radar_cb(self, radar_data, tag):
method _parse_gnss_cb (line 95) | def _parse_gnss_cb(self, gnss_data, tag):
method _parse_imu_cb (line 104) | def _parse_imu_cb(self, imu_data, tag):
class SensorInterface (line 119) | class SensorInterface(object):
method __init__ (line 125) | def __init__(self):
method register_sensor (line 133) | def register_sensor(self, tag, sensor):
method update_sensor (line 142) | def update_sensor(self, tag, data, timestamp):
method get_data (line 151) | def get_data(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/metrics/examples/basic_metric.py
class BasicMetric (line 13) | class BasicMetric(object):
method __init__ (line 18) | def __init__(self, town_map, log, criteria=None):
method _create_metric (line 31) | def _create_metric(self, town_map, log, criteria):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/metrics/examples/criteria_filter.py
class CriteriaFilter (line 21) | class CriteriaFilter(BasicMetric):
method _create_metric (line 26) | def _create_metric(self, town_map, log, criteria):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/metrics/examples/distance_between_vehicles.py
class DistanceBetweenVehicles (line 23) | class DistanceBetweenVehicles(BasicMetric):
method _create_metric (line 28) | def _create_metric(self, town_map, log, criteria):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/metrics/examples/distance_to_lane_center.py
class DistanceToLaneCenter (line 22) | class DistanceToLaneCenter(BasicMetric):
method _create_metric (line 27) | def _create_metric(self, town_map, log, criteria):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/metrics/tools/metrics_log.py
class MetricsLog (line 20) | class MetricsLog(object): # pylint: disable=too-many-public-methods
method __init__ (line 25) | def __init__(self, recorder):
method get_actor_collisions (line 34) | def get_actor_collisions(self, actor_id):
method get_total_frame_count (line 52) | def get_total_frame_count(self):
method get_elapsed_time (line 59) | def get_elapsed_time(self, frame):
method get_delta_time (line 66) | def get_delta_time(self, frame):
method get_platform_time (line 73) | def get_platform_time(self, frame):
method get_ego_vehicle_id (line 81) | def get_ego_vehicle_id(self):
method get_actor_ids_with_role_name (line 87) | def get_actor_ids_with_role_name(self, role_name):
method get_actor_ids_with_type_id (line 103) | def get_actor_ids_with_type_id(self, type_id):
method get_actor_attributes (line 119) | def get_actor_attributes(self, actor_id):
method get_actor_bounding_box (line 131) | def get_actor_bounding_box(self, actor_id):
method get_traffic_light_trigger_volume (line 146) | def get_traffic_light_trigger_volume(self, traffic_light_id):
method get_actor_alive_frames (line 161) | def get_actor_alive_frames(self, actor_id):
method _get_actor_state (line 184) | def _get_actor_state(self, actor_id, state, frame):
method _get_all_actor_states (line 208) | def _get_all_actor_states(self, actor_id, state, first_frame=None, las...
method _get_states_at_frame (line 234) | def _get_states_at_frame(self, frame, state, actor_list=None):
method get_actor_transform (line 256) | def get_actor_transform(self, actor_id, frame):
method get_all_actor_transforms (line 262) | def get_all_actor_transforms(self, actor_id, first_frame=None, last_fr...
method get_actor_transforms_at_frame (line 268) | def get_actor_transforms_at_frame(self, frame, actor_list=None):
method get_actor_velocity (line 276) | def get_actor_velocity(self, actor_id, frame):
method get_all_actor_velocities (line 282) | def get_all_actor_velocities(self, actor_id, first_frame=None, last_fr...
method get_actor_velocities_at_frame (line 288) | def get_actor_velocities_at_frame(self, frame, actor_list=None):
method get_actor_angular_velocity (line 296) | def get_actor_angular_velocity(self, actor_id, frame):
method get_all_actor_angular_velocities (line 302) | def get_all_actor_angular_velocities(self, actor_id, first_frame=None,...
method get_actor_angular_velocities_at_frame (line 308) | def get_actor_angular_velocities_at_frame(self, frame, actor_list=None):
method get_actor_acceleration (line 316) | def get_actor_acceleration(self, actor_id, frame):
method get_all_actor_accelerations (line 322) | def get_all_actor_accelerations(self, actor_id, first_frame=None, last...
method get_actor_accelerations_at_frame (line 328) | def get_actor_accelerations_at_frame(self, frame, actor_list=None):
method get_vehicle_control (line 336) | def get_vehicle_control(self, vehicle_id, frame):
method get_vehicle_physics_control (line 342) | def get_vehicle_physics_control(self, vehicle_id, frame):
method get_walker_speed (line 356) | def get_walker_speed(self, walker_id, frame):
method get_traffic_light_state (line 363) | def get_traffic_light_state(self, traffic_light_id, frame):
method is_traffic_light_frozen (line 369) | def is_traffic_light_frozen(self, traffic_light_id, frame):
method get_traffic_light_elapsed_time (line 375) | def get_traffic_light_elapsed_time(self, traffic_light_id, frame):
method get_traffic_light_state_time (line 381) | def get_traffic_light_state_time(self, traffic_light_id, state, frame):
method get_vehicle_lights (line 398) | def get_vehicle_lights(self, vehicle_id, frame):
method is_vehicle_light_active (line 404) | def is_vehicle_light_active(self, light, vehicle_id, frame):
method get_scene_light_state (line 416) | def get_scene_light_state(self, light_id, frame):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/metrics/tools/metrics_parser.py
function parse_actor (line 17) | def parse_actor(info):
function parse_transform (line 29) | def parse_transform(info):
function parse_control (line 45) | def parse_control(info):
function parse_vehicle_lights (line 58) | def parse_vehicle_lights(info):
function parse_traffic_light (line 81) | def parse_traffic_light(info):
function parse_velocity (line 97) | def parse_velocity(info):
function parse_angular_velocity (line 106) | def parse_angular_velocity(info):
function parse_scene_lights (line 115) | def parse_scene_lights(info):
function parse_bounding_box (line 130) | def parse_bounding_box(info):
function parse_state_times (line 157) | def parse_state_times(info):
function parse_vector_list (line 166) | def parse_vector_list(info):
function parse_gears_control (line 178) | def parse_gears_control(info):
function parse_wheels_control (line 187) | def parse_wheels_control(info):
class MetricsParser (line 204) | class MetricsParser(object):
method __init__ (line 209) | def __init__(self, recorder_info):
method get_row_elements (line 216) | def get_row_elements(self, indent_num, split_string):
method next_row (line 222) | def next_row(self):
method parse_recorder_info (line 229) | def parse_recorder_info(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarioconfigs/openscenario_configuration.py
class OpenScenarioConfiguration (line 27) | class OpenScenarioConfiguration(ScenarioConfiguration):
method __init__ (line 34) | def __init__(self, filename, client, custom_params):
method _validate_openscenario_configuration (line 64) | def _validate_openscenario_configuration(self):
method _validate_openscenario_catalog_configuration (line 74) | def _validate_openscenario_catalog_configuration(self, catalog_xml_tree):
method _parse_openscenario_configuration (line 84) | def _parse_openscenario_configuration(self):
method _check_version (line 98) | def _check_version(self):
method _load_catalogs (line 106) | def _load_catalogs(self):
method _set_scenario_name (line 144) | def _set_scenario_name(self):
method _set_carla_town (line 155) | def _set_carla_town(self):
method _set_parameters (line 217) | def _set_parameters(self):
method _set_actor_information (line 232) | def _set_actor_information(self):
method _extract_vehicle_information (line 290) | def _extract_vehicle_information(self, obj, rolename, vehicle, args):
method _extract_pedestrian_information (line 313) | def _extract_pedestrian_information(self, obj, rolename, pedestrian, a...
method _extract_misc_information (line 324) | def _extract_misc_information(self, obj, rolename, misc, args):
method _get_actor_transform (line 339) | def _get_actor_transform(self, actor_name):
method _get_actor_speed (line 377) | def _get_actor_speed(self, actor_name):
method _validate_result (line 405) | def _validate_result(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarioconfigs/route_scenario_configuration.py
class RouteConfiguration (line 18) | class RouteConfiguration(object):
method __init__ (line 24) | def __init__(self, route=None):
method parse_xml (line 27) | def parse_xml(self, node):
class RouteScenarioConfiguration (line 43) | class RouteScenarioConfiguration(ScenarioConfiguration):
method __init__ (line 49) | def __init__(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarioconfigs/scenario_configuration.py
class ActorConfigurationData (line 15) | class ActorConfigurationData(object):
method __init__ (line 21) | def __init__(self, model, transform, rolename='other', speed=0, autopi...
method parse_from_node (line 34) | def parse_from_node(node, rolename):
method parse_from_dict (line 65) | def parse_from_dict(actor_dict, rolename):
class ScenarioConfiguration (line 87) | class ScenarioConfiguration(object):
method __init__ (line 97) | def __init__(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/actor_control.py
class ActorControl (line 28) | class ActorControl(object):
method __init__ (line 65) | def __init__(self, actor, control_py_module, args, scenario_file_path):
method reset (line 91) | def reset(self):
method update_target_speed (line 97) | def update_target_speed(self, target_speed, start_time=None):
method update_waypoints (line 109) | def update_waypoints(self, waypoints, start_time=None):
method update_offset (line 121) | def update_offset(self, offset, start_time=None):
method check_reached_waypoint_goal (line 134) | def check_reached_waypoint_goal(self):
method get_last_longitudinal_command (line 143) | def get_last_longitudinal_command(self):
method get_last_waypoint_command (line 152) | def get_last_waypoint_command(self):
method get_last_lane_offset_command (line 161) | def get_last_lane_offset_command(self):
method set_init_speed (line 170) | def set_init_speed(self):
method run_step (line 176) | def run_step(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/basic_control.py
class BasicControl (line 17) | class BasicControl(object):
method __init__ (line 51) | def __init__(self, actor):
method update_target_speed (line 57) | def update_target_speed(self, speed):
method update_waypoints (line 67) | def update_waypoints(self, waypoints, start_time=None):
method update_offset (line 77) | def update_offset(self, offset, start_time=None):
method set_init_speed (line 87) | def set_init_speed(self):
method check_reached_waypoint_goal (line 93) | def check_reached_waypoint_goal(self):
method reset (line 102) | def reset(self):
method run_step (line 111) | def run_step(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/carla_autopilot.py
class CarlaAutoPilotControl (line 21) | class CarlaAutoPilotControl(BasicControl):
method __init__ (line 35) | def __init__(self, actor, args=None):
method reset (line 39) | def reset(self):
method run_step (line 45) | def run_step(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/external_control.py
class ExternalControl (line 19) | class ExternalControl(BasicControl):
method __init__ (line 29) | def __init__(self, actor, args=None):
method reset (line 32) | def reset(self):
method run_step (line 39) | def run_step(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/npc_vehicle_control.py
class NpcVehicleControl (line 22) | class NpcVehicleControl(BasicControl):
method __init__ (line 35) | def __init__(self, actor, args=None):
method _update_plan (line 48) | def _update_plan(self):
method _update_offset (line 59) | def _update_offset(self):
method reset (line 65) | def reset(self):
method run_step (line 75) | def run_step(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/pedestrian_control.py
class PedestrianControl (line 19) | class PedestrianControl(BasicControl):
method __init__ (line 28) | def __init__(self, actor, args=None):
method reset (line 34) | def reset(self):
method run_step (line 41) | def run_step(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/simple_vehicle_control.py
class SimpleVehicleControl (line 28) | class SimpleVehicleControl(BasicControl):
method __init__ (line 85) | def __init__(self, actor, args=None):
method _on_obstacle (line 128) | def _on_obstacle(self, event):
method reset (line 140) | def reset(self):
method run_step (line 153) | def run_step(self):
method _offset_waypoint (line 221) | def _offset_waypoint(self, transform):
method _set_new_velocity (line 241) | def _set_new_velocity(self, next_location):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/vehicle_longitudinal_control.py
class VehicleLongitudinalControl (line 19) | class VehicleLongitudinalControl(BasicControl):
method __init__ (line 30) | def __init__(self, actor, args=None):
method reset (line 33) | def reset(self):
method run_step (line 40) | def run_step(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/actorcontrols/visualizer.py
class Visualizer (line 26) | class Visualizer(object):
method __init__ (line 56) | def __init__(self, actor):
method reset (line 83) | def reset(self):
method _on_camera_update (line 94) | def _on_camera_update(self, image, birdseye):
method render (line 112) | def render(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/carla_data_provider.py
function calculate_velocity (line 25) | def calculate_velocity(actor):
class CarlaDataProvider (line 34) | class CarlaDataProvider(object): # pylint: disable=too-many-public-methods
method register_actor (line 74) | def register_actor(actor, transform=None):
method update_osc_global_params (line 100) | def update_osc_global_params(parameters):
method get_osc_global_param_value (line 107) | def get_osc_global_param_value(ref):
method register_actors (line 114) | def register_actors(actors, transforms=None):
method on_carla_tick (line 125) | def on_carla_tick():
method get_velocity (line 149) | def get_velocity(actor):
method get_location (line 163) | def get_location(actor):
method get_transform (line 177) | def get_transform(actor):
method set_client (line 191) | def set_client(client):
method get_client (line 198) | def get_client():
method set_world (line 205) | def set_world(world):
method get_world (line 218) | def get_world():
method get_map (line 225) | def get_map(world=None):
method get_random_seed (line 241) | def get_random_seed():
method get_global_route_planner (line 248) | def get_global_route_planner():
method get_all_actors (line 255) | def get_all_actors():
method is_sync_mode (line 268) | def is_sync_mode():
method set_runtime_init_mode (line 275) | def set_runtime_init_mode(flag):
method is_runtime_init_mode (line 282) | def is_runtime_init_mode():
method find_weather_presets (line 289) | def find_weather_presets():
method prepare_map (line 299) | def prepare_map():
method annotate_trafficlight_in_group (line 317) | def annotate_trafficlight_in_group(traffic_light):
method get_trafficlight_trigger_location (line 353) | def get_trafficlight_trigger_location(traffic_light): # pylint: dis...
method update_light_states (line 377) | def update_light_states(ego_light, annotations, states, freeze=False, ...
method reset_lights (line 409) | def reset_lights(reset_params):
method get_next_traffic_light (line 420) | def get_next_traffic_light(actor, use_cached_location=True):
method generate_spawn_points (line 457) | def generate_spawn_points():
method create_blueprint (line 467) | def create_blueprint(model, rolename='scenario', color=None, actor_cat...
method handle_actor_batch (line 553) | def handle_actor_batch(batch, tick=True):
method request_new_actor (line 585) | def request_new_actor(model, spawn_point, rolename='scenario', autopil...
method request_new_actors (line 636) | def request_new_actors(actor_list, attribute_filter=None, tick=True):
method request_new_batch_actors (line 711) | def request_new_batch_actors(model, amount, spawn_points, autopilot=Fa...
method get_actors (line 764) | def get_actors():
method actor_id_exists (line 773) | def actor_id_exists(actor_id):
method get_hero_actor (line 783) | def get_hero_actor():
method get_actor_by_id (line 793) | def get_actor_by_id(actor_id):
method remove_actor_by_id (line 805) | def remove_actor_by_id(actor_id):
method remove_actors_in_surrounding (line 817) | def remove_actors_in_surrounding(location, distance):
method get_traffic_manager_port (line 831) | def get_traffic_manager_port():
method set_traffic_manager_port (line 838) | def set_traffic_manager_port(tm_port):
method cleanup (line 845) | def cleanup():
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/lights_sim.py
class RouteLightsBehavior (line 20) | class RouteLightsBehavior(py_trees.behaviour.Behaviour):
method __init__ (line 36) | def __init__(self, ego_vehicle, radius=50, radius_increase=15, name="L...
method update (line 51) | def update(self):
method _get_night_mode (line 70) | def _get_night_mode(self, weather):
method _turn_close_lights_on (line 91) | def _turn_close_lights_on(self, location):
method _turn_all_lights_off (line 134) | def _turn_all_lights_off(self):
method terminate (line 154) | def terminate(self, new_status):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/result_writer.py
class ResultOutputProvider (line 20) | class ResultOutputProvider(object):
method __init__ (line 27) | def __init__(self, data, result, stdout=True, filename=None, junitfile...
method write (line 49) | def write(self):
method create_output_text (line 65) | def create_output_text(self):
method _write_to_reportjson (line 137) | def _write_to_reportjson(self):
method _write_to_junit (line 206) | def _write_to_junit(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/scenario_manager.py
class ScenarioManager (line 26) | class ScenarioManager(object):
method __init__ (line 44) | def __init__(self, debug_mode=False, sync_mode=False, timeout=2.0):
method _reset (line 67) | def _reset(self):
method cleanup (line 79) | def cleanup(self):
method load_scenario (line 97) | def load_scenario(self, scenario, agent=None):
method run_scenario (line 116) | def run_scenario(self):
method _tick_scenario (line 150) | def _tick_scenario(self, timestamp):
method get_running_status (line 188) | def get_running_status(self):
method stop_scenario (line 195) | def stop_scenario(self):
method analyze_scenario (line 201) | def analyze_scenario(self, stdout, filename, junit, json):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/scenarioatomics/atomic_behaviors.py
function calculate_distance (line 49) | def calculate_distance(location, other_location, global_planner=None):
function get_actor_control (line 76) | def get_actor_control(actor):
class AtomicBehavior (line 90) | class AtomicBehavior(py_trees.behaviour.Behaviour):
method __init__ (line 101) | def __init__(self, name, actor=None):
method setup (line 110) | def setup(self, unused_timeout=15):
method initialise (line 117) | def initialise(self):
method terminate (line 133) | def terminate(self, new_status):
class RunScript (line 140) | class RunScript(AtomicBehavior):
method __init__ (line 160) | def __init__(self, script, base_path=None, name="RunScript"):
method update (line 169) | def update(self):
class ChangeParameter (line 191) | class ChangeParameter(AtomicBehavior):
method __init__ (line 200) | def __init__(self, parameter_ref, value, rule=None, name="ChangeParame...
method update (line 207) | def update(self):
class ChangeWeather (line 227) | class ChangeWeather(AtomicBehavior):
method __init__ (line 244) | def __init__(self, weather, name="ChangeWeather"):
method update (line 251) | def update(self):
class ChangeRoadFriction (line 262) | class ChangeRoadFriction(AtomicBehavior):
method __init__ (line 278) | def __init__(self, friction, name="ChangeRoadFriction"):
method update (line 285) | def update(self):
class ChangeActorControl (line 311) | class ChangeActorControl(AtomicBehavior):
method __init__ (line 332) | def __init__(self, actor, control_py_module, args, scenario_file_path=...
method update (line 341) | def update(self):
class UpdateAllActorControls (line 368) | class UpdateAllActorControls(AtomicBehavior):
method __init__ (line 380) | def __init__(self, name="UpdateAllActorControls"):
method update (line 386) | def update(self):
class ChangeActorTargetSpeed (line 408) | class ChangeActorTargetSpeed(AtomicBehavior):
method __init__ (line 459) | def __init__(self, actor, target_speed, init_speed=False,
method initialise (line 480) | def initialise(self):
method update (line 520) | def update(self):
class SyncArrivalOSC (line 570) | class SyncArrivalOSC(AtomicBehavior):
method __init__ (line 593) | def __init__(self, actor, master_actor, actor_target, master_target, f...
method initialise (line 613) | def initialise(self):
method update (line 651) | def update(self):
method terminate (line 695) | def terminate(self, new_status):
class ChangeActorWaypoints (line 728) | class ChangeActorWaypoints(AtomicBehavior):
method __init__ (line 756) | def __init__(self, actor, waypoints, name="ChangeActorWaypoints"):
method initialise (line 765) | def initialise(self):
method update (line 842) | def update(self):
class ChangeActorLateralMotion (line 872) | class ChangeActorLateralMotion(AtomicBehavior):
method __init__ (line 914) | def __init__(self, actor, direction='left', distance_lane_change=25, d...
method initialise (line 933) | def initialise(self):
method update (line 972) | def update(self):
class ChangeActorLaneOffset (line 1030) | class ChangeActorLaneOffset(AtomicBehavior):
method __init__ (line 1065) | def __init__(self, actor, offset, relative_actor=None, continuous=True...
method initialise (line 1080) | def initialise(self):
method update (line 1106) | def update(self):
method terminate (line 1182) | def terminate(self, new_status):
class ActorTransformSetterToOSCPosition (line 1202) | class ActorTransformSetterToOSCPosition(AtomicBehavior):
method __init__ (line 1222) | def __init__(self, actor, osc_position, physics=True, name="ActorTrans...
method initialise (line 1231) | def initialise(self):
method update (line 1239) | def update(self):
class AccelerateToVelocity (line 1261) | class AccelerateToVelocity(AtomicBehavior):
method __init__ (line 1276) | def __init__(self, actor, throttle_value, target_velocity, name="Accel...
method initialise (line 1287) | def initialise(self):
method update (line 1295) | def update(self):
class AccelerateToCatchUp (line 1314) | class AccelerateToCatchUp(AtomicBehavior):
method __init__ (line 1334) | def __init__(self, actor, other_actor, throttle_value=1, delta_velocit...
method initialise (line 1352) | def initialise(self):
method update (line 1358) | def update(self):
class KeepVelocity (line 1393) | class KeepVelocity(AtomicBehavior):
method __init__ (line 1412) | def __init__(self, actor, target_velocity, force_speed=False,
method initialise (line 1434) | def initialise(self):
method update (line 1448) | def update(self):
method terminate (line 1485) | def terminate(self, new_status):
class ChangeAutoPilot (line 1502) | class ChangeAutoPilot(AtomicBehavior):
method __init__ (line 1518) | def __init__(self, actor, activate, parameters=None, name="ChangeAutoP...
method update (line 1529) | def update(self):
class StopVehicle (line 1567) | class StopVehicle(AtomicBehavior):
method __init__ (line 1580) | def __init__(self, actor, brake_value, name="Stopping"):
method update (line 1591) | def update(self):
class SyncArrival (line 1613) | class SyncArrival(AtomicBehavior):
method __init__ (line 1630) | def __init__(self, actor, actor_reference, target_location, gain=1, na...
method update (line 1643) | def update(self):
method terminate (line 1677) | def terminate(self, new_status):
class SyncArrivalWithAgent (line 1689) | class SyncArrivalWithAgent(AtomicBehavior):
method __init__ (line 1708) | def __init__(self, actor, reference_actor, actor_target, reference_tar...
method initialise (line 1723) | def initialise(self):
method update (line 1730) | def update(self):
method terminate (line 1767) | def terminate(self, new_status):
class CutIn (line 1774) | class CutIn(AtomicBehavior):
method __init__ (line 1793) | def __init__(self, actor, reference_actor, direction, speed_perc=100,
method initialise (line 1812) | def initialise(self):
method update (line 1822) | def update(self):
class AddNoiseToVehicle (line 1837) | class AddNoiseToVehicle(AtomicBehavior):
method __init__ (line 1851) | def __init__(self, actor, steer_value, throttle_value, name="Jittering"):
method update (line 1861) | def update(self):
class AddNoiseToRouteEgo (line 1876) | class AddNoiseToRouteEgo(AtomicBehavior):
method __init__ (line 1890) | def __init__(self, actor, throttle_mean, throttle_std, steer_mean, ste...
method update (line 1902) | def update(self):
class ChangeNoiseParameters (line 1925) | class ChangeNoiseParameters(AtomicBehavior):
method __init__ (line 1936) | def __init__(self, new_steer_noise, new_throttle_noise,
method update (line 1952) | def update(self):
class BasicAgentBehavior (line 1965) | class BasicAgentBehavior(AtomicBehavior):
method __init__ (line 1977) | def __init__(self, actor, target_location=None, plan=None, target_spee...
method initialise (line 1994) | def initialise(self):
method update (line 2006) | def update(self):
method terminate (line 2017) | def terminate(self, new_status):
class ConstantVelocityAgentBehavior (line 2025) | class ConstantVelocityAgentBehavior(AtomicBehavior):
method __init__ (line 2040) | def __init__(self, actor, target_location, target_speed=None,
method initialise (line 2057) | def initialise(self):
method update (line 2067) | def update(self):
method terminate (line 2081) | def terminate(self, new_status):
class AdaptiveConstantVelocityAgentBehavior (line 2090) | class AdaptiveConstantVelocityAgentBehavior(AtomicBehavior):
method __init__ (line 2108) | def __init__(self, actor, reference_actor, target_location=None, speed...
method initialise (line 2125) | def initialise(self):
method update (line 2139) | def update(self):
method terminate (line 2155) | def terminate(self, new_status):
class Idle (line 2164) | class Idle(AtomicBehavior):
method __init__ (line 2176) | def __init__(self, duration=float("inf"), name="Idle"):
method initialise (line 2185) | def initialise(self):
method update (line 2192) | def update(self):
class WaitForever (line 2203) | class WaitForever(AtomicBehavior):
method __init__ (line 2212) | def __init__(self, name="WaitForever"):
method update (line 2219) | def update(self):
class WaypointFollower (line 2226) | class WaypointFollower(AtomicBehavior):
method __init__ (line 2268) | def __init__(self, actor, target_speed=None, plan=None, blackboard_que...
method initialise (line 2287) | def initialise(self):
method _apply_local_planner (line 2314) | def _apply_local_planner(self, actor):
method update (line 2353) | def update(self):
method terminate (line 2428) | def terminate(self, new_status):
class LaneChange (line 2447) | class LaneChange(WaypointFollower):
method __init__ (line 2475) | def __init__(self, actor, speed=10, direction='left', distance_same_la...
method initialise (line 2491) | def initialise(self):
method update (line 2502) | def update(self):
class SetInitSpeed (line 2526) | class SetInitSpeed(AtomicBehavior):
method __init__ (line 2533) | def __init__(self, actor, init_speed=10, name='SetInitSpeed'):
method initialise (line 2541) | def initialise(self):
method update (line 2553) | def update(self):
class HandBrakeVehicle (line 2561) | class HandBrakeVehicle(AtomicBehavior):
method __init__ (line 2574) | def __init__(self, vehicle, hand_brake_value, name="Braking"):
method update (line 2584) | def update(self):
class ActorDestroy (line 2601) | class ActorDestroy(AtomicBehavior):
method __init__ (line 2613) | def __init__(self, actor, name="ActorDestroy"):
method update (line 2620) | def update(self):
class ActorTransformSetter (line 2630) | class ActorTransformSetter(AtomicBehavior):
method __init__ (line 2650) | def __init__(self, actor, transform, physics=True, name="ActorTransfor...
method initialise (line 2659) | def initialise(self):
method update (line 2666) | def update(self):
class BatchActorTransformSetter (line 2683) | class BatchActorTransformSetter(AtomicBehavior):
method __init__ (line 2696) | def __init__(self, actor_transform_list, physics=True, name="BatchActo...
method update (line 2705) | def update(self):
class TrafficLightStateSetter (line 2720) | class TrafficLightStateSetter(AtomicBehavior):
method __init__ (line 2732) | def __init__(self, actor, state, name="TrafficLightStateSetter"):
method update (line 2742) | def update(self):
class ActorSource (line 2760) | class ActorSource(AtomicBehavior):
method __init__ (line 2777) | def __init__(self, actor_type_list, transform, threshold, blackboard_q...
method update (line 2791) | def update(self):
class ActorSink (line 2818) | class ActorSink(AtomicBehavior):
method __init__ (line 2832) | def __init__(self, sink_location, threshold, name="ActorSink"):
method update (line 2840) | def update(self):
class ActorFlow (line 2846) | class ActorFlow(AtomicBehavior):
method __init__ (line 2861) | def __init__(self, source_wp, sink_wp, spawn_dist_interval, sink_dist=2,
method initialise (line 2897) | def initialise(self):
method _spawn_actor (line 2912) | def _spawn_actor(self, transform):
method update (line 2941) | def update(self):
method stop_constant_velocity (line 2969) | def stop_constant_velocity(self):
method terminate (line 2979) | def terminate(self, new_status):
class OppositeActorFlow (line 3010) | class OppositeActorFlow(AtomicBehavior):
method __init__ (line 3024) | def __init__(self, reference_wp, reference_actor, spawn_dist_interval,
method _move_waypoint_forward (line 3055) | def _move_waypoint_forward(self, wp, distance):
method _move_waypoint_backwards (line 3068) | def _move_waypoint_backwards(self, wp, distance):
method initialise (line 3081) | def initialise(self):
method _spawn_actor (line 3097) | def _spawn_actor(self):
method update (line 3111) | def update(self):
method terminate (line 3137) | def terminate(self, new_status):
class InvadingActorFlow (line 3159) | class InvadingActorFlow(AtomicBehavior):
method __init__ (line 3173) | def __init__(self, source_wp, sink_wp, reference_actor, spawn_dist,
method initialise (line 3208) | def initialise(self):
method _spawn_actor (line 3214) | def _spawn_actor(self):
method update (line 3226) | def update(self):
method terminate (line 3252) | def terminate(self, new_status):
class BicycleFlow (line 3274) | class BicycleFlow(AtomicBehavior):
method __init__ (line 3288) | def __init__(self, plan, spawn_dist_interval, sink_dist=2,
method initialise (line 3317) | def initialise(self):
method _spawn_actor (line 3329) | def _spawn_actor(self, transform):
method update (line 3365) | def update(self):
method terminate (line 3395) | def terminate(self, new_status):
class OpenVehicleDoor (line 3417) | class OpenVehicleDoor(AtomicBehavior):
method __init__ (line 3429) | def __init__(self, actor, vehicle_door, name="OpenVehicleDoor"):
method initialise (line 3437) | def initialise(self):
method update (line 3444) | def update(self):
class TrafficLightFreezer (line 3453) | class TrafficLightFreezer(AtomicBehavior):
method __init__ (line 3463) | def __init__(self, traffic_lights_dict, duration=10000, name="TrafficL...
method initialise (line 3471) | def initialise(self):
method update (line 3490) | def update(self):
method terminate (line 3497) | def terminate(self, new_status):
class StartRecorder (line 3507) | class StartRecorder(AtomicBehavior):
method __init__ (line 3522) | def __init__(self, recorder_name, name="StartRecorder"):
method update (line 3530) | def update(self):
class StopRecorder (line 3535) | class StopRecorder(AtomicBehavior):
method __init__ (line 3544) | def __init__(self, name="StopRecorder"):
method update (line 3551) | def update(self):
class TrafficLightManipulator (line 3556) | class TrafficLightManipulator(AtomicBehavior):
method __init__ (line 3608) | def __init__(self, ego_vehicle, subtype, debug=False, name="TrafficLig...
method update (line 3628) | def update(self):
method passed_enough_time (line 3740) | def passed_enough_time(self, time_limit):
method set_intersection_state (line 3763) | def set_intersection_state(self, choice):
method get_waiting_time (line 3775) | def get_waiting_time(self, annotation, direction):
method get_traffic_light_configuration (line 3791) | def get_traffic_light_configuration(self, subtype, annotations):
method variable_cleanup (line 3828) | def variable_cleanup(self):
class ScenarioTriggerer (line 3843) | class ScenarioTriggerer(AtomicBehavior):
method __init__ (line 3854) | def __init__(self, actor, route, blackboard_list, distance, debug=Fals...
method add_blackboard (line 3873) | def add_blackboard(self, blackboard):
method update (line 3879) | def update(self):
class KeepLongitudinalGap (line 3946) | class KeepLongitudinalGap(AtomicBehavior):
method __init__ (line 3959) | def __init__(self, actor, reference_actor, gap, gap_type="distance", m...
method initialise (line 3979) | def initialise(self):
method update (line 3998) | def update(self):
class SwitchWrongDirectionTest (line 4047) | class SwitchWrongDirectionTest(AtomicBehavior):
method __init__ (line 4057) | def __init__(self, active, name="SwitchWrongDirectionTest"):
method update (line 4064) | def update(self):
class SwitchMinSpeedCriteria (line 4069) | class SwitchMinSpeedCriteria(AtomicBehavior):
method __init__ (line 4071) | def __init__(self, active, name="ChangeMinSpeed"):
method update (line 4079) | def update(self):
class WalkerFlow (line 4088) | class WalkerFlow(AtomicBehavior):
method __init__ (line 4105) | def __init__(self, source_location, sink_locations, sink_locations_pro...
method update (line 4134) | def update(self):
method _destroy_walker (line 4174) | def _destroy_walker(self, walker, controller):
method terminate (line 4179) | def terminate(self, new_status):
class AIWalkerBehavior (line 4189) | class AIWalkerBehavior(AtomicBehavior):
method __init__ (line 4200) | def __init__(self, source_location, sink_location,
method initialise (line 4218) | def initialise(self):
method update (line 4240) | def update(self):
method _destroy_walker (line 4252) | def _destroy_walker(self, walker, controller):
method terminate (line 4259) | def terminate(self, new_status):
class ScenarioTimeout (line 4269) | class ScenarioTimeout(AtomicBehavior):
method __init__ (line 4284) | def __init__(self, duration, scenario_name, name="ScenarioTimeout"):
method initialise (line 4296) | def initialise(self):
method update (line 4304) | def update(self):
method terminate (line 4316) | def terminate(self, new_status):
class MovePedestrianWithEgo (line 4327) | class MovePedestrianWithEgo(AtomicBehavior):
method __init__ (line 4329) | def __init__(self, reference_actor, actor, distance, displacement=0, n...
method initialise (line 4347) | def initialise(self):
method update (line 4356) | def update(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/scenarioatomics/atomic_criteria.py
class Criterion (line 31) | class Criterion(py_trees.behaviour.Behaviour):
method __init__ (line 49) | def __init__(self,
method initialise (line 71) | def initialise(self):
method terminate (line 77) | def terminate(self, new_status):
class MaxVelocityTest (line 87) | class MaxVelocityTest(Criterion):
method __init__ (line 98) | def __init__(self, actor, max_velocity, optional=False, name="CheckMax...
method update (line 105) | def update(self):
class DrivenDistanceTest (line 131) | class DrivenDistanceTest(Criterion):
method __init__ (line 144) | def __init__(self, actor, distance, acceptable_distance=None, optional...
method initialise (line 153) | def initialise(self):
method update (line 157) | def update(self):
method terminate (line 193) | def terminate(self, new_status):
class AverageVelocityTest (line 203) | class AverageVelocityTest(Criterion):
method __init__ (line 217) | def __init__(self, actor, velocity, acceptable_velocity=None, optional...
method initialise (line 228) | def initialise(self):
method update (line 232) | def update(self):
method terminate (line 272) | def terminate(self, new_status):
class CollisionTest (line 281) | class CollisionTest(Criterion):
method __init__ (line 299) | def __init__(self, actor, other_actor=None, other_actor_type=None,
method initialise (line 315) | def initialise(self):
method update (line 324) | def update(self):
method terminate (line 349) | def terminate(self, new_status):
method _count_collisions (line 359) | def _count_collisions(self, event): # pylint: disable=too-many-ret...
class ActorBlockedTest (line 417) | class ActorBlockedTest(Criterion):
method __init__ (line 429) | def __init__(self, actor, min_speed, max_time, name="ActorBlockedTest"...
method update (line 440) | def update(self):
class KeepLaneTest (line 479) | class KeepLaneTest(Criterion):
method __init__ (line 488) | def __init__(self, actor, optional=False, name="CheckKeepLane"):
method update (line 499) | def update(self):
method terminate (line 517) | def terminate(self, new_status):
method _count_lane_invasion (line 526) | def _count_lane_invasion(self, event):
class ReachedRegionTest (line 533) | class ReachedRegionTest(Criterion):
method __init__ (line 544) | def __init__(self, actor, min_x, max_x, min_y, max_y, name="ReachedReg...
method update (line 555) | def update(self):
class OffRoadTest (line 581) | class OffRoadTest(Criterion):
method __init__ (line 597) | def __init__(self, actor, duration=0, optional=False, terminate_on_fai...
method update (line 610) | def update(self):
class EndofRoadTest (line 661) | class EndofRoadTest(Criterion):
method __init__ (line 675) | def __init__(self, actor, duration=0, optional=False, terminate_on_fai...
method update (line 689) | def update(self):
class OnSidewalkTest (line 728) | class OnSidewalkTest(Criterion):
method __init__ (line 743) | def __init__(self, actor, duration=0, optional=False, terminate_on_fai...
method update (line 762) | def update(self):
method terminate (line 924) | def terminate(self, new_status):
method _set_event_message (line 960) | def _set_event_message(self, event, location, distance):
method _set_event_dict (line 977) | def _set_event_dict(self, event, location, distance):
class OutsideRouteLanesTest (line 984) | class OutsideRouteLanesTest(Criterion):
method __init__ (line 1001) | def __init__(self, actor, route, optional=False, name="OutsideRouteLan...
method update (line 1026) | def update(self):
method _set_traffic_event (line 1082) | def _set_traffic_event(self):
method _is_outside_driving_lanes (line 1106) | def _is_outside_driving_lanes(self, location):
method _is_at_wrong_lane (line 1128) | def _is_at_wrong_lane(self, location):
class WrongLaneTest (line 1169) | class WrongLaneTest(Criterion):
method __init__ (line 1181) | def __init__(self, actor, optional=False, name="WrongLaneTest"):
method update (line 1198) | def update(self):
method terminate (line 1292) | def terminate(self, new_status):
method _set_event_message (line 1314) | def _set_event_message(self, event, location, distance, road_id, lane_...
method _set_event_dict (line 1329) | def _set_event_dict(self, event, location, distance, road_id, lane_id):
class InRadiusRegionTest (line 1340) | class InRadiusRegionTest(Criterion):
method __init__ (line 1350) | def __init__(self, actor, x, y, radius, name="InRadiusRegionTest"):
method update (line 1359) | def update(self):
class InRouteTest (line 1387) | class InRouteTest(Criterion):
method __init__ (line 1403) | def __init__(self, actor, route, offroad_min=None, offroad_max=30, nam...
method update (line 1438) | def update(self):
class RouteCompletionTest (line 1513) | class RouteCompletionTest(Criterion):
method __init__ (line 1529) | def __init__(self, actor, route, name="RouteCompletionTest", terminate...
method _get_acummulated_percentages (line 1550) | def _get_acummulated_percentages(self):
method update (line 1564) | def update(self):
method terminate (line 1606) | def terminate(self, new_status):
class RunningRedLightTest (line 1620) | class RunningRedLightTest(Criterion):
method __init__ (line 1631) | def __init__(self, actor, name="RunningRedLightTest", terminate_on_fai...
method is_vehicle_crossing_line (line 1649) | def is_vehicle_crossing_line(self, seg1, seg2):
method update (line 1659) | def update(self):
method rotate_point (line 1751) | def rotate_point(self, point, angle):
method get_traffic_light_waypoints (line 1759) | def get_traffic_light_waypoints(self, traffic_light):
class RunningStopTest (line 1799) | class RunningStopTest(Criterion):
method __init__ (line 1812) | def __init__(self, actor, name="RunningStopTest", terminate_on_failure...
method point_inside_boundingbox (line 1828) | def point_inside_boundingbox(self, point, bb_center, bb_extent, multip...
method is_actor_affected_by_stop (line 1847) | def is_actor_affected_by_stop(self, wp_list, stop):
method _scan_for_stop_sign (line 1867) | def _scan_for_stop_sign(self, actor_transform, wp_list):
method _get_waypoints (line 1888) | def _get_waypoints(self, actor):
method update (line 1908) | def update(self):
class MinimumSpeedRouteTest (line 1957) | class MinimumSpeedRouteTest(Criterion):
method __init__ (line 1970) | def __init__(self, actor, route, checkpoints=1, name="MinimumSpeedRout...
method update (line 2003) | def update(self):
method _set_traffic_event (line 2058) | def _set_traffic_event(self):
method terminate (line 2075) | def terminate(self, new_status):
class YieldToEmergencyVehicleTest (line 2089) | class YieldToEmergencyVehicleTest(Criterion):
method __init__ (line 2103) | def __init__(self, actor, ev, optional=False, name="YieldToEmergencyVe...
method update (line 2111) | def update(self):
method terminate (line 2138) | def terminate(self, new_status):
class ScenarioTimeoutTest (line 2152) | class ScenarioTimeoutTest(Criterion):
method __init__ (line 2162) | def __init__(self, actor, scenario_name, optional=False, name="Scenari...
method update (line 2171) | def update(self):
method terminate (line 2177) | def terminate(self, new_status):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/scenarioatomics/atomic_trigger_conditions.py
class AtomicCondition (line 41) | class AtomicCondition(py_trees.behaviour.Behaviour):
method __init__ (line 52) | def __init__(self, name):
method setup (line 60) | def setup(self, unused_timeout=15):
method initialise (line 67) | def initialise(self):
method terminate (line 73) | def terminate(self, new_status):
class InTriggerDistanceToOSCPosition (line 80) | class InTriggerDistanceToOSCPosition(AtomicCondition):
method __init__ (line 95) | def __init__(self, actor, osc_position, distance, along_route=False,
method initialise (line 114) | def initialise(self):
method update (line 118) | def update(self):
class InTimeToArrivalToOSCPosition (line 145) | class InTimeToArrivalToOSCPosition(AtomicCondition):
method __init__ (line 160) | def __init__(self, actor, osc_position, time, along_route=False,
method initialise (line 179) | def initialise(self):
method update (line 183) | def update(self):
class StandStill (line 223) | class StandStill(AtomicCondition):
method __init__ (line 236) | def __init__(self, actor, name, duration=float("inf")):
method initialise (line 247) | def initialise(self):
method update (line 254) | def update(self):
class RelativeVelocityToOtherActor (line 273) | class RelativeVelocityToOtherActor(AtomicCondition):
method __init__ (line 288) | def __init__(self, actor, other_actor, speed, comparison_operator=oper...
method update (line 300) | def update(self):
class TriggerVelocity (line 323) | class TriggerVelocity(AtomicCondition):
method __init__ (line 337) | def __init__(self, actor, target_velocity, comparison_operator=operato...
method update (line 347) | def update(self):
class TriggerAcceleration (line 367) | class TriggerAcceleration(AtomicCondition):
method __init__ (line 381) | def __init__(self, actor, target_acceleration, comparison_operator=ope...
method update (line 391) | def update(self):
class TimeOfDayComparison (line 414) | class TimeOfDayComparison(AtomicCondition):
method __init__ (line 428) | def __init__(self, dattime, comparison_operator=operator.gt, name="Tim...
method update (line 436) | def update(self):
class OSCStartEndCondition (line 460) | class OSCStartEndCondition(AtomicCondition):
method __init__ (line 473) | def __init__(self, element_type, element_name, rule, name="OSCStartEnd...
method initialise (line 485) | def initialise(self):
method update (line 492) | def update(self):
class InTriggerRegion (line 509) | class InTriggerRegion(AtomicCondition):
method __init__ (line 522) | def __init__(self, actor, min_x, max_x, min_y, max_y, name="TriggerReg...
method update (line 535) | def update(self):
class InTriggerDistanceToVehicle (line 556) | class InTriggerDistanceToVehicle(AtomicCondition):
method __init__ (line 574) | def __init__(self, reference_actor, actor, distance, comparison_operat...
method update (line 593) | def update(self):
class InTriggerDistanceToLocation (line 616) | class InTriggerDistanceToLocation(AtomicCondition):
method __init__ (line 631) | def __init__(self,
method update (line 647) | def update(self):
class InTriggerDistanceToNextIntersection (line 668) | class InTriggerDistanceToNextIntersection(AtomicCondition):
method __init__ (line 682) | def __init__(self, actor, distance, name="InTriggerDistanceToNextInter...
method update (line 698) | def update(self):
class InTriggerDistanceToLocationAlongRoute (line 715) | class InTriggerDistanceToLocationAlongRoute(AtomicCondition):
method __init__ (line 732) | def __init__(self, actor, route, location, distance, name="InTriggerDi...
method update (line 745) | def update(self):
class InTimeToArrivalToLocation (line 766) | class InTimeToArrivalToLocation(AtomicCondition):
method __init__ (line 783) | def __init__(self, actor, time, location, comparison_operator=operator...
method update (line 794) | def update(self):
class InTimeToArrivalToVehicle (line 821) | class InTimeToArrivalToVehicle(AtomicCondition):
method __init__ (line 838) | def __init__(self, actor, other_actor, time, condition_freespace=False,
method update (line 859) | def update(self):
class InTimeToArrivalToVehicleSideLane (line 912) | class InTimeToArrivalToVehicleSideLane(InTimeToArrivalToLocation):
method __init__ (line 930) | def __init__(self, actor, other_actor, time, side_lane,
method update (line 957) | def update(self):
class WaitUntilInFront (line 985) | class WaitUntilInFront(AtomicCondition):
method __init__ (line 998) | def __init__(self, actor, other_actor, factor=1, check_distance=True, ...
method update (line 1018) | def update(self):
class WaitUntilInFrontPosition (line 1061) | class WaitUntilInFrontPosition(AtomicCondition):
method __init__ (line 1071) | def __init__(self, actor, transform, check_distance=True, distance=10,...
method update (line 1086) | def update(self):
class DriveDistance (line 1112) | class DriveDistance(AtomicCondition):
method __init__ (line 1124) | def __init__(self, actor, distance, name="DriveDistance"):
method initialise (line 1135) | def initialise(self):
method update (line 1139) | def update(self):
class AtRightmostLane (line 1159) | class AtRightmostLane(AtomicCondition):
method __init__ (line 1170) | def __init__(self, actor, name="AtRightmostLane"):
method update (line 1179) | def update(self):
class WaitForTrafficLightState (line 1201) | class WaitForTrafficLightState(AtomicCondition):
method __init__ (line 1214) | def __init__(self, actor, state, name="WaitForTrafficLightState"):
method update (line 1223) | def update(self):
class WaitEndIntersection (line 1240) | class WaitEndIntersection(AtomicCondition):
method __init__ (line 1248) | def __init__(self, actor, junction_id=None, debug=False, name="WaitEnd...
method update (line 1256) | def update(self):
class WaitForBlackboardVariable (line 1280) | class WaitForBlackboardVariable(AtomicCondition):
method __init__ (line 1289) | def __init__(self, variable_name, variable_value, var_init_value=None,
method update (line 1301) | def update(self):
class CheckParameter (line 1315) | class CheckParameter(AtomicCondition):
method __init__ (line 1321) | def __init__(self, parameter_ref, value, comparison_operator, debug=Fa...
method update (line 1328) | def update(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/timer.py
class GameTime (line 20) | class GameTime(object):
method on_carla_tick (line 36) | def on_carla_tick(timestamp):
method restart (line 50) | def restart():
method get_time (line 60) | def get_time():
method get_carla_time (line 67) | def get_carla_time():
method get_wallclocktime (line 74) | def get_wallclocktime():
method get_frame (line 81) | def get_frame():
class SimulationTimeCondition (line 88) | class SimulationTimeCondition(py_trees.behaviour.Behaviour):
method __init__ (line 98) | def __init__(self, timeout, comparison_operator=operator.gt, name="Sim...
method initialise (line 108) | def initialise(self):
method update (line 115) | def update(self):
class TimeOut (line 134) | class TimeOut(SimulationTimeCondition):
method __init__ (line 142) | def __init__(self, timeout, name="TimeOut"):
method update (line 149) | def update(self):
class RouteTimeoutBehavior (line 162) | class RouteTimeoutBehavior(py_trees.behaviour.Behaviour):
method __init__ (line 170) | def __init__(self, ego_vehicle, route, debug=False, name="RouteTimeout...
method initialise (line 201) | def initialise(self):
method update (line 208) | def update(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/traffic_events.py
class TrafficEventType (line 13) | class TrafficEventType(Enum):
class TrafficEvent (line 38) | class TrafficEvent(object):
method __init__ (line 44) | def __init__(self, event_type, frame, message="", dictionary=None):
method get_type (line 58) | def get_type(self):
method get_frame (line 62) | def get_frame(self):
method set_frame (line 66) | def set_frame(self, frame):
method set_message (line 70) | def set_message(self, message):
method get_message (line 74) | def get_message(self):
method set_dict (line 78) | def set_dict(self, dictionary):
method get_dict (line 82) | def get_dict(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/watchdog.py
class Watchdog (line 21) | class Watchdog(object):
method __init__ (line 35) | def __init__(self, timeout=1.0, interval=None):
method start (line 43) | def start(self):
method stop (line 51) | def stop(self):
method pause (line 58) | def pause(self):
method resume (line 63) | def resume(self):
method update (line 68) | def update(self):
method _callback (line 76) | def _callback(self, watchdog):
method get_status (line 84) | def get_status(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenariomanager/weather_sim.py
class Weather (line 26) | class Weather(object):
method __init__ (line 51) | def __init__(self, carla_weather, dtime=None, animation=False):
method update (line 71) | def update(self, delta_time=0):
class OSCWeatherBehavior (line 91) | class OSCWeatherBehavior(py_trees.behaviour.Behaviour):
method __init__ (line 111) | def __init__(self, name="WeatherBehavior"):
method initialise (line 119) | def initialise(self):
method update (line 125) | def update(self):
class RouteWeatherBehavior (line 169) | class RouteWeatherBehavior(py_trees.behaviour.Behaviour):
method __init__ (line 182) | def __init__(self, ego_vehicle, route, weathers, debug=False, name="Ro...
method _get_route_percentages (line 218) | def _get_route_percentages(self):
method get_route_weathers (line 233) | def get_route_weathers(self):
method update (line 275) | def update(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarios/actor_flow.py
function convert_dict_to_location (line 34) | def convert_dict_to_location(actor_dict):
function get_value_parameter (line 45) | def get_value_parameter(config, name, p_type, default):
function get_interval_parameter (line 51) | def get_interval_parameter(config, name, p_type, default):
class EnterActorFlow (line 60) | class EnterActorFlow(BasicScenario):
method __init__ (line 67) | def __init__(self, world, ego_vehicles, config, randomize=False, debug...
method _create_behavior (line 96) | def _create_behavior(self):
method _create_test_criteria (line 144) | def _create_test_criteria(self):
method __del__ (line 154) | def __del__(self):
class EnterActorFlowV2 (line 161) | class EnterActorFlowV2(EnterActorFlow):
method _create_behavior (line 165) | def _create_behavior(self):
class HighwayExit (line 230) | class HighwayExit(BasicScenario):
method __init__ (line 240) | def __init__(self, world, ego_vehicles, config, randomize=False, debug...
method _create_behavior (line 267) | def _create_behavior(self):
method _create_test_criteria (line 298) | def _create_test_criteria(self):
method __del__ (line 308) | def __del__(self):
class MergerIntoSlowTraffic (line 315) | class MergerIntoSlowTraffic(BasicScenario):
method __init__ (line 325) | def __init__(self, world, ego_vehicles, config, randomize=False, debug...
method _create_behavior (line 355) | def _create_behavior(self):
method _create_test_criteria (line 401) | def _create_test_criteria(self):
method __del__ (line 411) | def __del__(self):
class MergerIntoSlowTrafficV2 (line 418) | class MergerIntoSlowTrafficV2(MergerIntoSlowTraffic):
method _create_behavior (line 423) | def _create_behavior(self):
class InterurbanActorFlow (line 485) | class InterurbanActorFlow(BasicScenario):
method __init__ (line 491) | def __init__(self, world, ego_vehicles, config, randomize=False, debug...
method _get_entry_exit_route_lanes (line 531) | def _get_entry_exit_route_lanes(self, wp, route):
method _create_behavior (line 567) | def _create_behavior(self):
method _create_test_criteria (line 597) | def _create_test_criteria(self):
method __del__ (line 607) | def __del__(self):
class InterurbanAdvancedActorFlow (line 614) | class InterurbanAdvancedActorFlow(BasicScenario):
method __init__ (line 621) | def __init__(self, world, ego_vehicles, config, randomize=False, debug...
method get_lane_key (line 650) | def get_lane_key(self, waypoint):
method _get_junction_entry_wp (line 653) | def _get_junction_entry_wp(self, entry_wp):
method _get_junction_exit_wp (line 661) | def _get_junction_exit_wp(self, exit_wp):
method _initialize_actors (line 669) | def _initialize_actors(self, config):
method _create_behavior (line 729) | def _create_behavior(self):
method _create_test_criteria (line 764) | def _create_test_criteria(self):
method __del__ (line 774) | def __del__(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarios/background_activity.py
function get_lane_key (line 31) | def get_lane_key(waypoint):
function get_road_key (line 36) | def get_road_key(waypoint):
function is_lane_at_road (line 41) | def is_lane_at_road(lane_key, road_key):
function get_lane_key_from_ids (line 45) | def get_lane_key_from_ids(road_id, lane_id):
function draw_string (line 77) | def draw_string(world, location, string='', debug_type=DEBUG_ROAD, persi...
function draw_point (line 85) | def draw_point(world, location, point_type=DEBUG_SMALL, debug_type=DEBUG...
function draw_arrow (line 93) | def draw_arrow(world, location1, location2, arrow_type=DEBUG_SMALL, debu...
class Source (line 104) | class Source(object):
method __init__ (line 110) | def __init__(self, wp, actors, entry_lane_wp='', active=True): # pyli...
class Junction (line 120) | class Junction(object):
method __init__ (line 126) | def __init__(self, junction, junction_id, route_entry_index=None, rout...
method contains_wp (line 154) | def contains_wp(self, wp):
class BackgroundBehavior (line 165) | class BackgroundBehavior(AtomicBehavior):
method __init__ (line 170) | def __init__(self, ego_actor, route, debug=False, name="BackgroundBeha...
method _get_route_data (line 262) | def _get_route_data(self, route):
method _get_road_radius (line 282) | def _get_road_radius(self):
method initialise (line 292) | def initialise(self):
method update (line 302) | def update(self):
method terminate (line 344) | def terminate(self, new_status):
method _check_background_actors (line 351) | def _check_background_actors(self):
method _create_junction_dict (line 362) | def _create_junction_dict(self):
method _get_junctions_data (line 371) | def _get_junctions_data(self):
method _filter_fake_junctions (line 414) | def _filter_fake_junctions(self, data):
method _get_complex_junctions (line 492) | def _get_complex_junctions(self):
method _join_complex_junctions (line 537) | def _join_complex_junctions(self, filtered_data):
method _get_fake_lane_pairs (line 580) | def _get_fake_lane_pairs(self, fake_data):
method _get_junction_entry_wp (line 604) | def _get_junction_entry_wp(self, entry_wp):
method _get_junction_exit_wp (line 614) | def _get_junction_exit_wp(self, exit_wp):
method _get_closest_junction_waypoint (line 623) | def _get_closest_junction_waypoint(self, waypoint, junction_wps):
method _is_route_wp_behind_junction_wp (line 645) | def _is_route_wp_behind_junction_wp(self, route_wp, junction_wp):
method _add_junctions_topology (line 655) | def _add_junctions_topology(self, route_data):
method _is_junction (line 819) | def _is_junction(self, waypoint):
method _add_actor_dict_element (line 828) | def _add_actor_dict_element(self, actor_dict, actor, exit_lane_key='',...
method _switch_to_junction_mode (line 841) | def _switch_to_junction_mode(self, junction):
method _end_junction_behavior (line 873) | def _end_junction_behavior(self, junction):
method _search_for_next_junction (line 937) | def _search_for_next_junction(self):
method _initialise_connecting_lanes (line 949) | def _initialise_connecting_lanes(self, junction):
method _monitor_incoming_junctions (line 965) | def _monitor_incoming_junctions(self):
method _monitor_ego_junction_exit (line 986) | def _monitor_ego_junction_exit(self):
method _add_incoming_actors (line 995) | def _add_incoming_actors(self, junction, source):
method _move_road_sources (line 1025) | def _move_road_sources(self, prev_ego_index):
method _update_road_sources (line 1063) | def _update_road_sources(self):
method _initialise_road_behavior (line 1121) | def _initialise_road_behavior(self, road_wps):
method _initialise_opposite_sources (line 1158) | def _initialise_opposite_sources(self):
method _initialise_road_checker (line 1185) | def _initialise_road_checker(self):
method _initialise_junction_sources (line 1204) | def _initialise_junction_sources(self, junction):
method _initialise_junction_exits (line 1242) | def _initialise_junction_exits(self, junction):
method _update_junction_sources (line 1298) | def _update_junction_sources(self):
method _monitor_topology_changes (line 1339) | def _monitor_topology_changes(self, prev_index):
method _move_opposite_sources (line 1510) | def _move_opposite_sources(self, prev_index):
method _update_opposite_sources (line 1578) | def _update_opposite_sources(self):
method _update_parameters (line 1609) | def _update_parameters(self):
method _compute_parameters (line 1733) | def _compute_parameters(self):
method _stop_road_front_vehicles (line 1740) | def _stop_road_front_vehicles(self):
method _start_road_front_vehicles (line 1755) | def _start_road_front_vehicles(self):
method _stop_road_back_vehicles (line 1767) | def _stop_road_back_vehicles(self):
method _start_road_back_vehicles (line 1778) | def _start_road_back_vehicles(self):
method _move_actors_forward (line 1786) | def _move_actors_forward(self, actors, space):
method _switch_route_sources (line 1802) | def _switch_route_sources(self, enabled):
method _leave_space_in_front (line 1815) | def _leave_space_in_front(self, space):
method _leave_crossing_space (line 1839) | def _leave_crossing_space(self, collision_wp):
method _remove_road_lane (line 1860) | def _remove_road_lane(self, lane_wp):
method _readd_road_lane (line 1874) | def _readd_road_lane(self, lane_offset):
method _handle_junction_scenario (line 1936) | def _handle_junction_scenario(self, junction_data):
method _clear_junction_middle (line 1964) | def _clear_junction_middle(self):
method _clear_ego_entry (line 1977) | def _clear_ego_entry(self):
method _remove_junction_entries (line 1999) | def _remove_junction_entries(self, wps):
method _remove_junction_exits (line 2034) | def _remove_junction_exits(self, wps):
method _stop_non_ego_route_entries (line 2067) | def _stop_non_ego_route_entries(self):
method _extent_road_exit_space (line 2086) | def _extent_road_exit_space(self, space):
method _initialise_actor (line 2109) | def _initialise_actor(self, actor):
method _spawn_actor (line 2119) | def _spawn_actor(self, spawn_wp, ego_dist=0):
method _spawn_actors (line 2140) | def _spawn_actors(self, spawn_wps, ego_dist=0):
method _spawn_source_actor (line 2164) | def _spawn_source_actor(self, source, ego_dist=20):
method _is_location_behind_ego (line 2185) | def _is_location_behind_ego(self, location):
method _update_road_actors (line 2194) | def _update_road_actors(self):
method _set_road_actor_speed (line 2236) | def _set_road_actor_speed(self, location, actor, multiplier=1):
method _monitor_road_changes (line 2260) | def _monitor_road_changes(self, prev_route_index):
method _update_junction_actors (line 2366) | def _update_junction_actors(self):
method _update_opposite_actors (line 2471) | def _update_opposite_actors(self):
method _set_actors_speed (line 2495) | def _set_actors_speed(self):
method _remove_actor_info (line 2509) | def _remove_actor_info(self, actor):
method _destroy_actor (line 2547) | def _destroy_actor(self, actor):
method _update_ego_data (line 2556) | def _update_ego_data(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarios/background_activity_parametrizer.py
function get_parameter (line 19) | def get_parameter(config, name):
class BackgroundActivityParametrizer (line 25) | class BackgroundActivityParametrizer(BasicScenario):
method __init__ (line 32) | def __init__(self, world, ego_vehicles, config, randomize=False, debug...
method _create_behavior (line 62) | def _create_behavior(self):
method _create_test_criteria (line 77) | def _create_test_criteria(self):
method __del__ (line 84) | def __del__(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarios/basic_scenario.py
class BasicScenario (line 28) | class BasicScenario(object):
method __init__ (line 34) | def __init__(self, name, ego_vehicles, config, world,
method _initialize_environment (line 138) | def _initialize_environment(self, world):
method _initialize_actors (line 161) | def _initialize_actors(self, config):
method _setup_scenario_trigger (line 174) | def _setup_scenario_trigger(self, config):
method _setup_scenario_end (line 194) | def _setup_scenario_end(self, config):
method _create_behavior (line 211) | def _create_behavior(self):
method _create_test_criteria (line 219) | def _create_test_criteria(self):
method _create_weather_behavior (line 228) | def _create_weather_behavior(self):
method _create_lights_behavior (line 236) | def _create_lights_behavior(self):
method _create_timeout_behavior (line 244) | def _create_timeout_behavior(self):
method change_control (line 251) | def change_control(self, control): # pylint: disable=no-self-use
method get_criteria (line 261) | def get_criteria(self):
method _extract_nodes_from_tree (line 277) | def _extract_nodes_from_tree(self, tree): # pylint: disable=no-self-use
method terminate (line 297) | def terminate(self):
method remove_all_actors (line 319) | def remove_all_actors(self):
method get_parking_slots (line 332) | def get_parking_slots(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarios/blocked_intersection.py
function convert_dict_to_location (line 32) | def convert_dict_to_location(actor_dict):
class BlockedIntersection (line 44) | class BlockedIntersection(BasicScenario):
method __init__ (line 50) | def __init__(self, world, ego_vehicles, config, debug_mode=False, crit...
method _initialize_actors (line 78) | def _initialize_actors(self, config):
method _create_behavior (line 103) | def _create_behavior(self):
method _create_test_criteria (line 136) | def _create_test_criteria(self):
method __del__ (line 146) | def __del__(self):
FILE: close_loop/SparseDrive_MomAD/scenario_runner/srunner/scenarios/change_lane.py
class ChangeLane (line 36) | class ChangeLane(BasicScenario):
method __init__ (line 50) | def __init__(self, world, ego_vehicles, config, randomize=False, debug...
method _initialize_actors (line 85) | def _initialize_actors(self, config):
method _create_behavior (line 111) | def _create_behavior(self):
method _create_test_criteria (line 164) | def _create_test_criteria(self):
method __del__ (line 177) | def __del__(self):
Copy disabled (too large)
Download .json
Condensed preview — 1700 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (32,686K chars).
[
{
"path": ".gitignore",
"chars": 141,
"preview": "*.pyc\n*.npy\n*.pth\n*.whl\n*.swp\n\ndata/\nckpt/\nwork_dirs*/\ndist_test/\nvis/\nval/\nlib/\n\n*.egg-info\nbuild/\n__pycache__/\n*.so\n\nj"
},
{
"path": "LICENSE",
"chars": 1063,
"preview": "MIT License\n\nCopyright (c) 2024 swc-17\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
},
{
"path": "README.md",
"chars": 12419,
"preview": "# [CVPR2025] Don't Shake the Wheel: Momentum-Aware Planning in End-to-End Autonomous Driving\n\n<div align=\"justify\"> \n\nT"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/momad_small_b2d_stage1.py",
"chars": 25936,
"preview": "# ================ base config ===================\nplugin = True\nplugin_dir = \"mmdet3d_plugin/\"\ndist_params = dict(backe"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/momad_small_b2d_stage2_multiplan.py",
"chars": 26677,
"preview": "# ================ base config ===================\nversion = \"mini\"\nversion = \"base\"\nlength = {'base': 234769, 'mini': 1"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/momad_small_b2d_stage2_singleplan.py",
"chars": 26659,
"preview": "# ================ base config ===================\nversion = \"mini\"\nversion = \"base\"\nlength = {'base': 234769, 'mini': 1"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/sparsedrive_small_b2d_stage1.py",
"chars": 25879,
"preview": "# ================ base config ===================\nplugin = True\nplugin_dir = \"mmdet3d_plugin/\"\ndist_params = dict(backe"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/sparsedrive_small_b2d_stage2_cmd_singleplan.py",
"chars": 26598,
"preview": "# ================ base config ===================\nversion = \"mini\"\nversion = \"base\"\nlength = {'base': 234769, 'mini': 1"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/configs/sparsedrive_small_b2d_stage2_targetpoint_multiplan.py",
"chars": 26609,
"preview": "# ================ base config ===================\nversion = \"mini\"\nversion = \"base\"\nlength = {'base': 234769, 'mini': 1"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/dist_train.sh",
"chars": 301,
"preview": "#!/usr/bin/env bash\n\nCONFIG=$1\nGPUS=$2\nPORT=${PORT:-28512}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\nCUDA_VISIBLE_DEV"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/create_data.sh",
"chars": 316,
"preview": "export PYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH\n\n#python tools/data_converter/B2D_converter.py nuscenes \\\n## --root-"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/kmeans.sh",
"chars": 139,
"preview": "python tools/kmeans/kmeans_det.py\npython tools/kmeans/kmeans_map.py\npython tools/kmeans/kmeans_motion.py\npython tools/km"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/test.sh",
"chars": 290,
"preview": "CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7\\ \n bash ./tools/dist_test.sh \\\n projects/configs/sparsedrive_small_stage2.py \\"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/test_roboAD.sh",
"chars": 562,
"preview": "# bash ./tools/dist_test.sh \\\n# projects/configs/sparsedrive_small_stage2.py \\\n# ckpt/sparsedrive_stage2.pth \\\n#"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/train.sh",
"chars": 287,
"preview": "## stage1\n# bash ./tools/dist_train.sh \\\n# projects/configs/sparsedrive_small_trainval_1_10_stage1_test.py \\\n# 1 \\"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/train_6s.sh",
"chars": 261,
"preview": "## stage1\n# bash ./tools/dist_train.sh \\\n# projects/configs/sparsedrive_small_trainval_1_10_stage1_test.py \\\n# 1 \\"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/train_roboAD.sh",
"chars": 376,
"preview": "## stage1\n# bash ./tools/dist_train.sh \\\n# projects/configs/sparsedrive_small_stage1_roboAD.py \\\n# 1 \\\n# --dete"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/scripts/visualize.sh",
"chars": 200,
"preview": "export PYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH\npython tools/visualization/visualize.py \\\n\tprojects/configs/sparsedrive"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/benchmark.py",
"chars": 6992,
"preview": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport time\nimport torch\nfrom mmcv import Config\nfrom mm"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/B2D_converter.py",
"chars": 25730,
"preview": "import os\nfrom os.path import join\nimport gzip, json, pickle\nimport numpy as np\nfrom pyquaternion import Quaternion\nfrom"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/__init__.py",
"chars": 48,
"preview": "# Copyright (c) OpenMMLab. All rights reserved.\n"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter.py",
"chars": 24683,
"preview": "import os\nimport math\nimport copy\nimport argparse\nfrom os import path as osp\nfrom collections import OrderedDict\nfrom ty"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter_1_10.py",
"chars": 24412,
"preview": "import os\nimport math\nimport copy\nimport argparse\nfrom os import path as osp\nfrom collections import OrderedDict\nfrom ty"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter_6s.py",
"chars": 24693,
"preview": "import os\nimport math\nimport copy\nimport argparse\nfrom os import path as osp\nfrom collections import OrderedDict\nfrom ty"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/data_converter/nuscenes_converter_hrad_planing_scene.py",
"chars": 24652,
"preview": "import os\nimport math\nimport copy\nimport argparse\nfrom os import path as osp\nfrom collections import OrderedDict\nfrom ty"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/dist_test.sh",
"chars": 273,
"preview": "#!/usr/bin/env bash\n\nCONFIG=$1\nCHECKPOINT=$2\nGPUS=$3\nPORT=${PORT:-29611}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\npy"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/dist_train.sh",
"chars": 248,
"preview": "#!/usr/bin/env bash\n\nCONFIG=$1\nGPUS=$2\nPORT=${PORT:-28651}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\npython3 -m torch"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/fuse_conv_bn.py",
"chars": 2243,
"preview": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\n\nimport torch\nfrom mmcv.runner import save_checkpoint\nfr"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/kmeans/kmeans_det.py",
"chars": 1147,
"preview": "import os\nimport pickle\nfrom tqdm import tqdm\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.cluster i"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/kmeans/kmeans_map.py",
"chars": 1095,
"preview": "import os\nimport pickle\nfrom tqdm import tqdm\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.cluster i"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/kmeans/kmeans_motion.py",
"chars": 9382,
"preview": "import os\nimport pickle\nfrom tqdm import tqdm\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.cluster i"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/kmeans/kmeans_plan.py",
"chars": 3446,
"preview": "import os\nimport pickle\nfrom tqdm import tqdm\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.cluster i"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/test.py",
"chars": 11835,
"preview": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport mmcv\nimport os\nfrom os import path as osp\n\nimport"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/train.py",
"chars": 11242,
"preview": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom __future__ import division\nimport sys\nimport os\n\nprint(sys.executab"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/train_single.py",
"chars": 11341,
"preview": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom __future__ import division\nimport sys\nimport os\n\nprint(sys.executab"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/visualization/bev_render.py",
"chars": 15247,
"preview": "import os\nimport numpy as np\nimport cv2\n\nimport matplotlib\nimport matplotlib.pyplot as plt\n\n#from .projects.mmdet3d_plug"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/tools/visualization/cam_render.py",
"chars": 10455,
"preview": "import os\nimport numpy as np\nimport cv2\nfrom PIL import Image\n\nimport matplotlib\nimport matplotlib.pyplot as plt\nfrom py"
},
{
"path": "close_loop/SparseDrive_MomAD/adzoo/sparsedrive/train.py",
"chars": 11245,
"preview": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom __future__ import division\nimport sys\nimport os\n\nprint(sys.executab"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/.pylintrc",
"chars": 547,
"preview": "[MESSAGES CONTROL]\nmax-line-length=120\ndisable=no-self-use,anomalous-backslash-in-string,too-many-arguments,too-few-publ"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/CHANGELOG.md",
"chars": 2332,
"preview": "## Latest changes\n\n* Added support to ROS agents, which are meant to inherit from the new `ROS1Agent` and `ROS2Agent` ag"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/LICENSE",
"chars": 1062,
"preview": "MIT License\n\nCopyright (c) 2019 CARLA\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof t"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/README.md",
"chars": 1199,
"preview": "The main goal of the CARLA Autonomous Driving Leaderboard is to evaluate the driving proficiency of autonomous agents in"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/Gemfile",
"chars": 418,
"preview": "source \"https://rubygems.org\"\n\ngem \"jekyll\", \"~> 3.8.5\"\n\ngroup :jekyll_plugins do\n gem \"jekyll-feed\", \"~> 0.6\"\n gem \"j"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/LICENSE",
"chars": 1093,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2013-2019 Blackrock Digital LLC\n\nPermission is hereby granted, free of charge, to a"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/README.md",
"chars": 1289,
"preview": "## Welcome to GitHub Pages\n\nYou can use the [editor on GitHub](https://github.com/carla-simulator/leaderboard/edit/maste"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_config.yml",
"chars": 938,
"preview": "title: CARLA Leaderboard\nemail: carla.simulator@gmail.com\ndescription: CARLA Autonomous"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_includes/footer.html",
"chars": 2336,
"preview": "<!-- Footer -->\n\n<hr>\n\n<footer>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-lg-8 col-md-10 mx-"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_includes/google-analytics.html",
"chars": 343,
"preview": "<!-- Global site tag (gtag.js) - Google Analytics -->\n<script async src=\"https://www.googletagmanager.com/gtag/js?id={{ "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_includes/head.html",
"chars": 1214,
"preview": "<head>\n\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\""
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_includes/navbar.html",
"chars": 1404,
"preview": "<!-- Navigation -->\n<nav class=\"navbar navbar-expand-lg navbar-light fixed-top\" id=\"mainNav\">\n <div class=\"container\">\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_includes/read_time.html",
"chars": 212,
"preview": "<span class=\"reading-time\" title=\"Estimated read time\">\n {% assign words = include.content | number_of_words %}\n {% if"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_includes/scripts.html",
"chars": 3636,
"preview": "<script src=\"{{\"/assets/vendor/jquery/jquery.min.js\" | relative_url }}\"></script>\n<script src=\"{{\"/assets/vendor/bootstr"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_layouts/default.html",
"chars": 219,
"preview": "<!DOCTYPE html>\n\n<html>\n\n{% include head.html %}\n\n<body>\n\n {% include navbar.html %}\n\n {{ content }}\n\n {% include foo"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_layouts/home.html",
"chars": 658,
"preview": "---\nlayout: default\n---\n\n<!-- Page Header -->\n{% if page.background %}\n<header class=\"masthead\" style=\"background-image:"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_layouts/page.html",
"chars": 812,
"preview": "---\nlayout: default\n---\n\n<!-- Page Header -->\n{% if page.background %}\n<header class=\"masthead\" style=\"background-image:"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_layouts/post.html",
"chars": 1821,
"preview": "---\nlayout: default\n---\n\n<!-- Page Header -->\n{% if page.background %}\n<header class=\"masthead\" style=\"background-image:"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/_sass/styles.scss",
"chars": 106,
"preview": "// Import Core Clean Blog SCSS\n@import \"../assets/vendor/startbootstrap-clean-blog/scss/clean-blog.scss\";\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/about.html",
"chars": 852,
"preview": "---\nlayout: page\ntitle: About us\ndescription: This is what I do.\nbackground: '/img/bg-about.jpg'\n---\n\n<p>Lorem ipsum dol"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/main.scss",
"chars": 96,
"preview": "---\n# Only the main Sass file needs front matter (the dashes are enough)\n---\n\n@import \"styles\";\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/scripts.js",
"chars": 60,
"preview": "$(function () {\n $('[data-toggle=\"tooltip\"]').tooltip()\n})\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/bootstrap/css/bootstrap.css",
"chars": 192348,
"preview": "/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/bootstrap/js/bootstrap.bundle.js",
"chars": 222909,
"preview": "/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/t"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/bootstrap/js/bootstrap.js",
"chars": 131637,
"preview": "/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/t"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/LICENSE.txt",
"chars": 1548,
"preview": "Font Awesome Free License\n-------------------------\n\nFont Awesome Free is free, open source, and GPL friendly. You can u"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/css/all.css",
"chars": 70117,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/css/brands.css",
"chars": 714,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/css/fontawesome.css",
"chars": 68502,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/css/regular.css",
"chars": 733,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/css/solid.css",
"chars": 726,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/css/svg-with-js.css",
"chars": 8077,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/css/v4-shims.css",
"chars": 41218,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/all.js",
"chars": 1196200,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/brands.js",
"chars": 428308,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/conflict-detection.js",
"chars": 33664,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/fontawesome.js",
"chars": 78044,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/regular.js",
"chars": 107034,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/solid.js",
"chars": 583372,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/js/v4-shims.js",
"chars": 17391,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_animated.less",
"chars": 297,
"preview": "// Animated Icons\n// --------------------------\n\n.@{fa-css-prefix}-spin {\n animation: fa-spin 2s infinite linear;\n}\n\n.@"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_bordered-pulled.less",
"chars": 422,
"preview": "// Bordered & Pulled\n// -------------------------\n\n.@{fa-css-prefix}-border {\n border-radius: .1em;\n border: solid .08"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_core.less",
"chars": 297,
"preview": "// Base Class Definition\n// -------------------------\n\n.@{fa-css-prefix}, .fas, .far, .fal, .fad, .fab {\n -moz-osx-font"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_fixed-width.less",
"chars": 119,
"preview": "// Fixed Width Icons\n// -------------------------\n.@{fa-css-prefix}-fw {\n text-align: center;\n width: (20em / 16);\n}\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_icons.less",
"chars": 94028,
"preview": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters th"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_larger.less",
"chars": 454,
"preview": "// Icon Sizes\n// -------------------------\n\n.larger(@factor) when (@factor > 0) {\n .larger((@factor - 1));\n\n .@{fa-css"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_list.less",
"chars": 322,
"preview": "// List Icons\n// -------------------------\n\n.@{fa-css-prefix}-ul {\n list-style-type: none;\n margin-left: (@fa-li-width"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_mixins.less",
"chars": 1237,
"preview": "// Mixins\n// --------------------------\n\n.fa-icon() {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: an"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_rotated-flipped.less",
"chars": 771,
"preview": "// Rotated & Flipped Icons\n// -------------------------\n\n.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }\n.@"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_screen-reader.less",
"chars": 118,
"preview": "// Screen Readers\n// -------------------------\n\n.sr-only { .sr-only(); }\n.sr-only-focusable { .sr-only-focusable(); }\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_shims.less",
"chars": 60596,
"preview": ".@{fa-css-prefix}.@{fa-css-prefix}-glass:before { content: @fa-var-glass-martini; }\n\n.@{fa-css-prefix}.@{fa-css-prefix}-"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_stacked.less",
"chars": 478,
"preview": "// Stacked Icons\n// -------------------------\n\n.@{fa-css-prefix}-stack {\n display: inline-block;\n height: 2em;\n line-"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/_variables.less",
"chars": 39691,
"preview": "// Variables\n// --------------------------\n\n@fa-font-path: \"../webfonts\";\n@fa-font-size-base: 16px;\n@fa-font-"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/brands.less",
"chars": 794,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/fontawesome.less",
"chars": 505,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/regular.less",
"chars": 813,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/solid.less",
"chars": 806,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/less/v4-shims.less",
"chars": 236,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_animated.scss",
"chars": 300,
"preview": "// Animated Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n animation: fa-spin 2s infinite linear;\n}\n\n."
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_bordered-pulled.scss",
"chars": 428,
"preview": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n border: solid .08em $fa-border-color;\n "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_core.scss",
"chars": 332,
"preview": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix},\n.fas,\n.far,\n.fal,\n.fad,\n.fab {\n -moz-osx-fon"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_fixed-width.scss",
"chars": 121,
"preview": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n text-align: center;\n width: $fa-fw-width;\n}"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_icons.scss",
"chars": 112030,
"preview": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_larger.scss",
"chars": 393,
"preview": "// Icon Sizes\n// -------------------------\n\n// makes the font 33% larger relative to the icon container\n.#{$fa-css-prefi"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_list.scss",
"chars": 322,
"preview": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n list-style-type: none;\n margin-left: $fa-li-width"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_mixins.scss",
"chars": 1266,
"preview": "// Mixins\n// --------------------------\n\n@mixin fa-icon {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothi"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_rotated-flipped.scss",
"chars": 833,
"preview": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_screen-reader.scss",
"chars": 130,
"preview": "// Screen Readers\n// -------------------------\n\n.sr-only { @include sr-only; }\n.sr-only-focusable { @include sr-only-foc"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_shims.scss",
"chars": 65190,
"preview": ".#{$fa-css-prefix}.#{$fa-css-prefix}-glass:before { content: fa-content($fa-var-glass-martini); }\n\n.#{$fa-css-prefix}.#{"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_stacked.scss",
"chars": 505,
"preview": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n display: inline-block;\n height: 2em;\n line"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/_variables.scss",
"chars": 37148,
"preview": "// Variables\n// --------------------------\n\n$fa-font-path: \"../webfonts\" !default;\n$fa-font-size-base: 16px !"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/brands.scss",
"chars": 786,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/fontawesome.scss",
"chars": 433,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/regular.scss",
"chars": 805,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/solid.scss",
"chars": 798,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/fontawesome-free/scss/v4-shims.scss",
"chars": 224,
"preview": "/*!\n * Font Awesome Free 5.10.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/f"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/jquery/jquery.js",
"chars": 280364,
"preview": "/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * C"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/jquery/jquery.slim.js",
"chars": 227022,
"preview": "/*!\n * jQuery JavaScript Library v3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-aja"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/js/jqBootstrapValidation.js",
"chars": 37173,
"preview": "/* jqBootstrapValidation\n * A plugin for automating validation on Twitter Bootstrap formatted forms.\n *\n * v1.3.6\n *\n * "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_bootstrap-overrides.scss",
"chars": 505,
"preview": "// Bootstrap overrides for this template\n.btn {\n font-size: 14px;\n font-weight: 800;\n padding: 15px 25px;\n letter-sp"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_contact.scss",
"chars": 1268,
"preview": "// Styling for the contact page\n.floating-label-form-group {\n font-size: 14px;\n position: relative;\n margin-bottom: 0"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_footer.scss",
"chars": 199,
"preview": "// Styling for the footer\nfooter {\n padding: 50px 0 65px;\n .list-inline {\n margin: 0;\n padding: 0;\n }\n .copyri"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_global.scss",
"chars": 1001,
"preview": "// Global styling for this template\nbody {\n font-size: 20px;\n color: $gray-900;\n @include serif-font;\n}\n\np {\n line-h"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_masthead.scss",
"chars": 1601,
"preview": "// Styling for the masthead\nheader.masthead {\n // TIP: Background images are set within the HTML using inline CSS!\n ma"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_mixins.scss",
"chars": 1516,
"preview": "// Mixins\n// Bootstrap Button Variant\n@mixin button-variant($color, $background, $border) {\n color: $color;\n border-co"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_navbar.scss",
"chars": 2550,
"preview": "// Styling for the navbar\n#mainNav {\n position: absolute;\n border-bottom: 1px solid $gray-200;\n background-color: whi"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_post.scss",
"chars": 740,
"preview": "// Styling for the post page\n.post-preview {\n > a {\n color: $gray-900;\n &:focus,\n &:hover {\n text-decorat"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/_variables.scss",
"chars": 879,
"preview": "// Variables\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !de"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/assets/vendor/startbootstrap-clean-blog/scss/clean-blog.scss",
"chars": 224,
"preview": "@import \"variables.scss\";\n@import \"mixins.scss\";\n@import \"global.scss\";\n@import \"navbar.scss\";\n@import \"masthead.scss\";\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/contact.html",
"chars": 1870,
"preview": "---\nlayout: page\ntitle: Contact Me\ndescription: Have questions? I have answers.\nbackground: '/img/bg-contact.jpg'\nform: "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/get_started.html",
"chars": 841,
"preview": "---\nlayout: page\ntitle: Getting Started\ndescription: Introduction to the leaderboard.\n---\n\n<p>Lorem ipsum dolor sit amet"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/gulpfile.js",
"chars": 1201,
"preview": "// Load plugins\nconst gulp = require(\"gulp\");\n\n// Copy third party libraries from /node_modules into /vendor\ngulp.task('"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/index.html",
"chars": 2965,
"preview": "---\nlayout: home\ntitle: CARLA Leaderboard\ndescription: CARLA Autonomous Driving competition.\nbackground: '/img/carla_hea"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/jekyll-theme-clean-blog.gemspec",
"chars": 744,
"preview": "# frozen_string_literal: true\n\nGem::Specification.new do |spec|\n spec.name = \"jekyll-theme-clean-blog\"\n spec."
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/leaderboard.html",
"chars": 807,
"preview": "---\nlayout: page\ntitle: Leaderboard\ndescription: \"\"\n---\n\n<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Se"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/posts/index.html",
"chars": 1307,
"preview": "---\nlayout: page\ntitle: Posts\nbackground: '/img/bg-post.jpg'\n---\n\n{% for post in paginator.posts %}\n\n<article class=\"pos"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/docs/submit.html",
"chars": 833,
"preview": "---\nlayout: page\ntitle: Submit\ndescription: How to submit to the leaderboard.\n---\n\n<p>Lorem ipsum dolor sit amet, consec"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/agent_wrapper.py",
"chars": 12559,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2019 Intel Corporation\n#\n# This work is licensed under the terms of the MIT licen"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/autonomous_agent.py",
"chars": 5466,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/dummy_agent.py",
"chars": 3351,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/human_agent.py",
"chars": 10351,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/human_agent_config.txt",
"chars": 526,
"preview": "mode: log # Either 'log' or 'playback'\nfile: test.json # path to the file with "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/npc_agent.py",
"chars": 2898,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/ros1_agent.py",
"chars": 6400,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/ros2_agent.py",
"chars": 5497,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/autoagents/ros_base_agent.py",
"chars": 8902,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/envs/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/envs/sensor_interface.py",
"chars": 8471,
"preview": "import copy\nimport logging\nimport numpy as np\nimport os\nimport time\nfrom threading import Thread\n\nfrom queue import Queu"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/leaderboard_evaluator.py",
"chars": 23446,
"preview": "#!/usr/bin/env python\n# Copyright (c) 2018-2019 Intel Corporation.\n# authors: German Ros (german.ros@intel.com), Felipe "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/scenarios/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/scenarios/route_scenario.py",
"chars": 21951,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2019 Intel Corporation\n#\n# This work is licensed under the terms of the MIT licen"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/scenarios/scenario_manager.py",
"chars": 9721,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2018-2020 Intel Corporation\n#\n# This work is licensed under the terms of the MIT "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/checkpoint_tools.py",
"chars": 1654,
"preview": "import json\ntry:\n import simplejson as json\nexcept ImportError:\n import json\nimport requests\nimport os.path\n\n\ndef "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/parked_vehicles.py",
"chars": 3249565,
"preview": "Town12 = [\n {'tilex':2, 'tiley':1, 'location':(-602.3104296900001, 4002.51804688, 371.64960937999996), 'rotation':(-0.59"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/result_writer.py",
"chars": 4545,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2018-2019 Intel Corporation\n#\n# This work is licensed under the terms of the MIT "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/route_indexer.py",
"chars": 3702,
"preview": "from collections import OrderedDict\nfrom dictor import dictor\n\nimport copy\n\nfrom leaderboard.utils.route_parser import R"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/route_manipulation.py",
"chars": 5400,
"preview": "#!/usr/bin/env python\n# Copyright (c) 2018-2019 Intel Labs.\n# authors: German Ros (german.ros@intel.com), Felipe Codevil"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/route_parser.py",
"chars": 8339,
"preview": "#!/usr/bin/env python\n\n# This work is licensed under the terms of the MIT license.\n# For a copy, see <https://opensource"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/leaderboard/utils/statistics_manager.py",
"chars": 25123,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2018-2019 Intel Corporation\n#\n# This work is licensed under the terms of the MIT "
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/requirements.txt",
"chars": 77,
"preview": "dictor\nrequests\nopencv-python==4.2.0.32\npygame\ntabulate\npexpect\ntransforms3d\n"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/run_leaderboard.sh",
"chars": 775,
"preview": " #!/bin/bash\n\nexport TEAM_AGENT=$LEADERBOARD_ROOT/leaderboard/autoagents/human_agent.py\n\nexport ROUTES=$LEADERBOARD_ROOT"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/Dockerfile.master",
"chars": 2921,
"preview": "FROM nvidia/cuda:11.7.1-cudnn8-devel-ubuntu20.04\n\nARG HTTP_PROXY\nARG HTTPS_PROXY\nARG http_proxy\n\nRUN apt-get update && a"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/Dockerfile.ros",
"chars": 4852,
"preview": "ARG ROS_DISTRO\n\nFROM ros:$ROS_DISTRO-ros-base\n\nWORKDIR /workspace\n\nENV DEBIAN_FRONTEND \"noninteractive\"\n\nRUN apt-get upd"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/agent_entrypoint.sh",
"chars": 64,
"preview": "#!/bin/bash\nset -e\n\nsource \"${HOME}/agent_sources.sh\"\n\nexec \"$@\""
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/code_check_and_formatting.sh",
"chars": 266,
"preview": "#!/bin/bash\n\nautopep8_params=\"--in-place --max-line-length=120\"\npylint_params=\"--rcfile=.pylintrc\"\n\nfiles=`find leaderbo"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/make_docker.sh",
"chars": 2567,
"preview": "#!/bin/bash\n\nDOC_STRING=\"Build agent leadearboard image.\"\n\nUSAGE_STRING=$(cat <<- END\nUsage: $0 [-h|--help] [-r|--ros-di"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/manage_scenarios.py",
"chars": 12526,
"preview": "import argparse\nfrom argparse import RawTextHelpFormatter\nimport math\n\nimport carla\n\nfrom leaderboard.utils.checkpoint_t"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/merge_statistics.py",
"chars": 3515,
"preview": "import argparse\n\nfrom leaderboard.utils.checkpoint_tools import fetch_dict\nfrom leaderboard.utils.statistics_manager imp"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/pretty_print_json.py",
"chars": 4543,
"preview": "# !/usr/bin/env python\n# Copyright (c) 2020 Intel Corporation.\n# authors: German Ros (german.ros@intel.com)\n#\n# This wor"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/route_creator.py",
"chars": 7881,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de\n# Barcelona (UAB"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/route_displayer.py",
"chars": 7606,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de\n# Barcelona (UAB"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/route_summarizer.py",
"chars": 6485,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de\n# Barcelona (UAB"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evaluation.sh",
"chars": 1366,
"preview": "#!/bin/bash\n# Must set CARLA_ROOT\nexport CARLA_ROOT=/data/songziying/workspace/carla\nexport CARLA_SERVER=${CARLA_ROOT}/C"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evaluation_debug.sh",
"chars": 1044,
"preview": "#!/bin/bash\nBASE_PORT=30000\nBASE_TM_PORT=50000\nIS_BENCH2DRIVE=True\nBASE_ROUTES=leaderboard/data/bench2drive220\n#TEAM_AGE"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evaluation_multi_admlp.sh",
"chars": 2843,
"preview": "#!/bin/bash\nBASE_PORT=30000\nBASE_TM_PORT=50000\nIS_BENCH2DRIVE=True\nBASE_ROUTES=leaderboard/data/bench2drive220\nTEAM_AGEN"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evaluation_multi_tcp.sh",
"chars": 2911,
"preview": "#!/bin/bash\nBASE_PORT=30000\nBASE_TM_PORT=50000\nIS_BENCH2DRIVE=True\nBASE_ROUTES=leaderboard/data/bench2drive220\nTEAM_AGEN"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evaluation_multi_uniad.sh",
"chars": 2914,
"preview": "#!/bin/bash\nBASE_PORT=30000\nBASE_TM_PORT=50000\nIS_BENCH2DRIVE=True\nBASE_ROUTES=leaderboard/data/bench2drive220\nTEAM_AGEN"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evaluation_multi_uniad_tiny.sh",
"chars": 2919,
"preview": "#!/bin/bash\nBASE_PORT=30000\nBASE_TM_PORT=50000\nIS_BENCH2DRIVE=True\nBASE_ROUTES=leaderboard/data/bench2drive220\nTEAM_AGEN"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evaluation_multi_vad.sh",
"chars": 3019,
"preview": "#!/bin/bash\nBASE_PORT=30000\nBASE_TM_PORT=50000\nIS_BENCH2DRIVE=True\nBASE_ROUTES=leaderboard/data/bench2drive220\nTEAM_AGEN"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/run_evalutaion_multi_sparsedrive.sh",
"chars": 3011,
"preview": "#!/bin/bash\nBASE_PORT=30000\nBASE_TM_PORT=50000\nIS_BENCH2DRIVE=True\nBASE_ROUTES=leaderboard/data/bench2drive220\nTEAM_AGEN"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/scenario_creator.py",
"chars": 16417,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de\n# Barcelona (UAB"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/scenario_orderer.py",
"chars": 11970,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de\n# Barcelona (UAB"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/scripts/weather_creator.py",
"chars": 2176,
"preview": "#!/usr/bin/env python\n\n# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de\n# Barcelona (UAB"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/team_code/pid_controller.py",
"chars": 4533,
"preview": "from collections import deque\nimport numpy as np\n\nclass PID(object):\n\tdef __init__(self, K_P=1.0, K_I=0.0, K_D=0.0, n=20"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/team_code/planner.py",
"chars": 4287,
"preview": "import os\nfrom collections import deque\n\nimport numpy as np\nimport math\nEARTH_RADIUS_EQUA = 6378137.0\n\n\nDEBUG = int(os.e"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/team_code/sparsedrive_b2d_agent.py",
"chars": 29500,
"preview": "import os\nimport json\nimport datetime\nimport pathlib\nimport time\n\nimport math\nfrom scipy.optimize import fsolve\nfrom pyq"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/team_code/uniad_b2d_agent.py",
"chars": 21702,
"preview": "import os\nimport json\nimport datetime\nimport pathlib\nimport time\nimport cv2\nimport carla\nfrom collections import deque\ni"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/team_code/vad_b2d_agent.py",
"chars": 22898,
"preview": "import os\nimport json\nimport datetime\nimport pathlib\nimport time\nimport cv2\nimport carla\nfrom collections import deque\ni"
},
{
"path": "close_loop/SparseDrive_MomAD/leaderboard/team_code/vad_b2d_agent_visualize.py",
"chars": 30297,
"preview": "import os\nimport json\nimport datetime\nimport pathlib\nimport time\nimport cv2\nimport carla\nfrom collections import deque\ni"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/__init__.py",
"chars": 97,
"preview": "from .datasets import *\nfrom .models import *\nfrom .apis import *\nfrom .core.evaluation import *\n"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/apis/__init__.py",
"chars": 128,
"preview": "from .train import custom_train_model\nfrom .mmdet_train import custom_train_detector\n\n# from .test import custom_multi_g"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/apis/mmdet_train.py",
"chars": 7011,
"preview": "# ---------------------------------------------\n# Copyright (c) OpenMMLab. All rights reserved.\n# ----------------------"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/apis/test.py",
"chars": 5960,
"preview": "# ---------------------------------------------\n# Copyright (c) OpenMMLab. All rights reserved.\n# ----------------------"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/apis/train.py",
"chars": 1441,
"preview": "# ---------------------------------------------\n# Copyright (c) OpenMMLab. All rights reserved.\n# ----------------------"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/core/box3d.py",
"chars": 158,
"preview": "X, Y, Z, W, L, H, SIN_YAW, COS_YAW, VX, VY, VZ = list(range(11)) # undecoded\nCNS, YNS = 0, 1 # centerness and yawness "
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/core/evaluation/__init__.py",
"chars": 42,
"preview": "from .eval_hooks import CustomDistEvalHook"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/core/evaluation/eval_hooks.py",
"chars": 3594,
"preview": "# Note: Considering that MMCV's EvalHook updated its interface in V1.3.16,\n# in order to avoid strong version dependency"
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/__init__.py",
"chars": 252,
"preview": "from .nuscenes_3d_dataset import NuScenes3DDataset\nfrom .b2d_3d_dataset import B2D3DDataset\nfrom .builder import *\nfrom "
},
{
"path": "close_loop/SparseDrive_MomAD/mmdet3d_plugin/datasets/b2d_3d_dataset.py",
"chars": 43825,
"preview": "import random\nimport math\nimport os\nfrom os import path as osp\nimport cv2\nimport tempfile\nimport copy\nimport prettytable"
}
]
// ... and 1500 more files (download for full content)
About this extraction
This page contains the full source code of the adept-thu/MomAD GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1700 files (46.0 MB), approximately 8.0M tokens, and a symbol index with 11269 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.