huawei-noah / SMARTS

Scalable Multi-Agent RL Training School for Autonomous Driving
MIT License
952 stars 190 forks source link

2022 NeurIPS Driving SMARTS Competition - track 2 - Where is the offline data used for training? #1577

Closed TianQi-777 closed 2 years ago

TianQi-777 commented 2 years ago

High Level Description 2022 NeurIPS Driving SMARTS Competition - track 2 - Which datasets should we use to train the model?

Desired SMARTS version 0.4.12

Operating System ubuntu 20.04

Problems 2022 NeurIPS Driving SMARTS Competition - track 2 - Which datasets should we use to train the model? In the Data and Model section of README: Track-2: Offline Learning, the organizer said that the training data should use Waymo Open Motion or Next Generation Simulation (NGSIM). However, we found that the data of Waymo Open Motion is very large (>1T) and contains many scenarios. If Waymo Open Motion is used for training, which scenario dataset should be used? Also, we noticed that in the Dockerfile, DockerHub, Training, and Evaluation section (8), the organizer said New offline dataset is made available to the container via a mapped volume at /SMARTS/competition/offline_dataset directory. Does this mean that we should use the data in the container as training data, and if so, the description of Data and Model section is confusing and misleading.

Adaickalavan commented 2 years ago

Hi @TianQi-777,

  1. You may consider using the Waymo dataset waymo_open_dataset_motion_v_1_1_0/uncompressed/scenario. Convert the Waymo dataset to an equivalent SMARTS dataset, and then use the equivalent SMARTS dataset to train your model.

    • In order to browse and replay a Waymo dataset, use the scl waymo overview and scl waymo preview commands.
    • In order to convert a Waymo dataset into an equivalent SMARTS dataset, do the following:
  2. Please note that we are unable to provide or distribute a Waymo dataset which has already been converted into an equivalent SMARTS dataset, due to Waymo dataset's terms and conditions.

  3. A subset of Waymo dataset which have useful and interesting trajectories are provided here. This subset may be used to focus the training. The provided data conversion tool can be used to convert these datasets into an equivalent SMARTS dataset.

  4. Please note that Track-2 is an offline learning track. Here, participants are required to submit their training code for the competition organizers to re-train a new model from scratch using hidden SMARTS dataset. The newly trained model will then be evaluated.

  5. Once you have developed a solution for Track2, you are required to upload a Docker image of your training code to DockerHub. Do not include any pre-trained models in your uploaded Docker image. During evaluation in the competition organizer's server, your Docker image will be pulled and executed as follows.

    $ docker run --rm -it \
        --volume=<path>/offline_dataset:/SMARTS/competition/offline_dataset
        --volume=<path>/output:/SMARTS/competition/output
        <username/imagename:version>

    The competition organizer will supply hidden SMARTS dataset to the container via a mapped volume at /SMARTS/competition/offline_dataset directory. Upon executing the above command, the training code inside the container should start training a new model from scratch by using the newly supplied SMARTS dataset from the container path /SMARTS/competition/offline_dataset. The resulting re-trained model from the container will then be copied out and evaluated in a manner identical to that of Track1.

TianQi-777 commented 2 years ago

Thank you for your reply. Does this mean that we don't have access to the dataset that the competition ultimately uses for evaluation, as you said, the final evaluation dataset is hidden.

However, we can arbitrarily download some scene datasets in Waymo Open Motion or Next Generation Simulation (NGSIM) for evaluating and testing our algorithm, then upload this code to codalab in the form of docker, and finally the organizer runs our code to evaluate the algorithm on unified hidden datasets.

In general, the participants do not have access to the dataset that is ultimately used for evaluation? In other words, we does not know the offline dataset for the final evaluation?

soheilalizadeh commented 2 years ago

Hi @TianQi-777 ,

The offline training set consists of subsets of NGSIM and Waymo Motion Open dataset that is similar to the subset we specified here.

To develop your offline model, you can download the NGSIM and Waymo Motion Open dataset and extract the scenes listed in the subset using the tools mentioned above. The provided subset has useful and interesting trajectories.

Adaickalavan commented 2 years ago

We hope the above addresses your question and thus this issue is being closed. Please feel free to reopen this issue if your doubts persist or open a new issue for other questions.

tunglm2203 commented 2 years ago

Hi,

I have followed the above process to generate SMARTS dataset from the Waymo Motion Open dataset, but while generating, there are some scenarios raising the error:

INFO:ObservationRecorder:t=8.6, active_vehicles=1
INFO:ObservationRecorder:t=8.7, active_vehicles=1
INFO:ObservationRecorder:t=8.8, active_vehicles=1
INFO:ObservationRecorder:t=8.9, active_vehicles=1
INFO:ObservationRecorder:t=9.0, active_vehicles=1
INFO:ObservationRecorder:No more vehicles. Exiting...
Waiting on offline_dataset/fd4652b5ddc69783/. ...
WARNING:WaymoMap:ignoring 'entry_lane' feature=718 for feature=711 as it only has a single point in its polyline.
Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/cli/studio.py", line 79, in _build_single_scenario_proc
    build_single_scenario(clean, allow_offset_map, scenario, seed, click.echo)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/sstudio/build_scenario.py", line 66, in build_single_scenario
    road_map, _ = map_spec.builder_fn(map_spec)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/default_map_builder.py", line 148, in get_road_map
    road_map = map_class.from_spec(map_spec)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 933, in from_spec
    return cls(map_spec, waymo_scenario)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 131, in __init__
    self._lanepoints = LanePoints.from_waymo(
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/lanepoints.py", line 491, in from_waymo
    _, new_lps = _shape_lanepoints_along_lane(
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/lanepoints.py", line 474, in _shape_lanepoints_along_lane
    for out_lane in curr_lane.outgoing_lanes:
  File "/opt/.venv/lib/python3.8/site-packages/cached_property.py", line 36, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1185, in outgoing_lanes
    return [
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1186, in <listcomp>
    self._map.lane_by_id(ol) for ol in self._lane_dict["outgoing_lane_ids"]
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1560, in lane_by_id
    assert lane, f"WaymoMap got request for unknown lane_id: '{lane_id}'"
AssertionError: WaymoMap got request for unknown lane_id: '359'
WARNING:WaymoMap:ignoring 'entry_lane' feature=718 for feature=711 as it only has a single point in its polyline.
Traceback (most recent call last):
  File "examples/traffic_histories_to_observations.py", line 386, in <module>
    recorder = ObservationRecorder(
  File "examples/traffic_histories_to_observations.py", line 64, in __init__
    self._scenario = next(scenario_iter)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/scenario.py", line 202, in variations_for_all_scenario_roots
    agent_missions = Scenario.discover_agent_missions(
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/scenario.py", line 297, in discover_agent_missions
    road_map, _ = Scenario.build_map(scenario_root)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/scenario.py", line 459, in build_map
    return map_spec.builder_fn(map_spec)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/default_map_builder.py", line 148, in get_road_map
    road_map = map_class.from_spec(map_spec)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 933, in from_spec
    return cls(map_spec, waymo_scenario)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 131, in __init__
    self._lanepoints = LanePoints.from_waymo(
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/lanepoints.py", line 491, in from_waymo
    _, new_lps = _shape_lanepoints_along_lane(
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/lanepoints.py", line 474, in _shape_lanepoints_along_lane
    for out_lane in curr_lane.outgoing_lanes:
  File "/opt/.venv/lib/python3.8/site-packages/cached_property.py", line 36, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1185, in outgoing_lanes
    return [
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1186, in <listcomp>
    self._map.lane_by_id(ol) for ol in self._lane_dict["outgoing_lane_ids"]
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1560, in lane_by_id
    assert lane, f"WaymoMap got request for unknown lane_id: '{lane_id}'"
AssertionError: WaymoMap got request for unknown lane_id: '359

or

INFO:ObservationRecorder:t=8.7, active_vehicles=1
INFO:ObservationRecorder:t=8.8, active_vehicles=1
INFO:ObservationRecorder:t=8.9, active_vehicles=1
INFO:ObservationRecorder:t=9.0, active_vehicles=1
INFO:ObservationRecorder:No more vehicles. Exiting...
Waiting on offline_dataset/57e0125d067b6bad/. ...
Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/cli/studio.py", line 79, in _build_single_scenario_proc
    build_single_scenario(clean, allow_offset_map, scenario, seed, click.echo)
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/sstudio/build_scenario.py", line 75, in build_single_scenario
    road_map.to_glb(os.path.join(scenario_root, "map.glb"))
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 989, in to_glb
    glb = self._make_glb_from_polys()
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1014, in _make_glb_from_polys
    lane_dividers = self._compute_traffic_dividers()
  File "/root/workspace/rlbench/neurips22_comp/SMARTS/smarts/core/waymo_map.py", line 1034, in _compute_traffic_dividers
    assert lane_to_left
AssertionError
WARNING:ObservationRecorder:No vehicle IDs specifed. Defaulting to ego vehicle (202)
INFO:ObservationRecorder:t=0, active_vehicles=0

Is there any problem with this converted dataset? Is this possible to use it for training?

saulfield commented 2 years ago

Hi @tunglm2203. Were any of these scenarios from the selected datasets, or were they chosen by you? Unfortunately SMARTS cannot currently handle some of the Waymo scenarios due to issues with the maps (specifically, maps with single-point polylines). This applies to roughly 15% of the Waymo dataset. I would recommend using other scenarios for now.

tunglm2203 commented 2 years ago

Hi @saulfield, I extract exactly from the suggested subset. Do you experience the same problem when using that subset?

Adaickalavan commented 2 years ago

Hi @tunglm2203,

  1. Kindly consider starting another new issue, as your problem appears different from the original issue of this thread. You may reference your comment in the new issue.
  2. Please confirm whether the following are the Waymo scenarios from waymo_candid_list.csv which are in question here.
    • File: validation.tfrecord-00017-of-00150 ; Scenario ID: fd4652b5ddc69783
    • File: validation.tfrecord-00018-of-00150 ; Scenario ID: 57e0125d067b6bad