drive-nuscenes-mapexpansion

star 0

nuScenes Map Expansionの構造とファイル形式の説明。ユーザーが「map expansion」「nuScenes map」「road segment」「drivable_area」「HD map」「UniAD」「Bench2Drive」などに言及した際は必ずこのスキルを参照すること。自動運転の地図処理・可視化・座標変換タスクにも適用する。

c60evaporator By c60evaporator schedule Updated 4/25/2026

name: drive-nuscenes-mapexpansion description: "nuScenes Map Expansionの構造とファイル形式の説明。ユーザーが「map expansion」「nuScenes map」「road segment」「drivable_area」「HD map」「UniAD」「Bench2Drive」などに言及した際は必ずこのスキルを参照すること。自動運転の地図処理・可視化・座標変換タスクにも適用する。"

フォルダ構成とファイル形式

フォルダ構成

root
├─ v1.0-trainval <- メタデータtrainval(nuScenes本体のため省略)
├─ samples <- キーフレームのセンサデータ(nuScenes本体のため省略)
├─ sweeps <- キーフレーム以外のセンサデータ(nuScenes本体のため省略)
└─ maps
    :
    ├─ basemap <- Map Expansionのマップ高精細画像 (.png)
    |   ├─ boston-seaport.png
    |   ├─ singapore-hollandvillage.png
    |   ├─ singapore-onenorth.png
    |   └─ singapore-queenstown.png
    ├─ expansion <- Map Expansionのメタデータ (.json)
    |   ├─ boston-seaport.json
    |   ├─ singapore-hollandvillage.json
    |   ├─ singapore-onenorth.json
    |   └─ singapore-queenstown.json
    └─ prediction <- Map Expansionの予測タスクのアノテーション (.json)
        └─ prediction_scenes.json

ファイル形式

各データは以下のファイル形式で保存されている。

データ種別 ファイル形式 内容
メタデータ .json マップごとのアノテーション情報
basemap .png ロケーションごとのマップ高精細画像(nuScenes本体のbasemapが白黒であるのに対し、本画像は高精細なLiDAR点群が描画されている)
予測タスクのアノテーション .json Map Expansionの予測タスクのアノテーション情報

メタデータのフォーマット

メタデータはマップごとに以下のJSON形式で保存されている。

{
    "version": "1.3",
    "polygon": [],  // ポリゴンで表されるアノテーション
    "line": [],  // 直線で表されるアノテーション
    "node": [],  // 直線の座標 (座標情報の大半はここに記載される)
    "drivable_area": [],  // 連続して運転可能なエリア
    "road_segment": [],  // 交差点や車線増減ごとに分割された道路エリア
    "road_block": [],  // road_segmentの上下両車線を分割したもの
    "lane": [],  // road_blockを車線ごとに分割したもの
    "ped_crossing": [],  // 横断歩道
    "walkway": [],  // 歩道
    "stop_line": [],  // 停止線ゾーン
    "carpark_area": [],  // 駐車スペース
    "road_divider": [],  // 道路の上下線の境目となる線
    "lane_divider": [],  // 車線の境界線
    "traffic_light": [],  // 信号機
    "canvas_edge": [],  // 地図サイズ
    "arcline_path_3": [],  // 円弧パスで表されるアノテーション
    "connectivity": [],  // ラインの座標
    "lane_connector": [],  // ラインの座標
}
フィールド名 概要 カテゴリ レコード数 (singapore-onenorth)
version Map expansionのバージョン - -
polygon ポリゴンで表されるアノテーション - 4886
line 直線で表されるアノテーション - 3845
node 点の座標 (座標情報の大半はここに記載される) - 37740
drivable_area 連続して運転可能なエリア polygon系 1
road_segment 交差点や車線増減ごとに分割された道路エリア。交差点自身も含む polygon系 783
road_block road_segmentの上下両車線を分割したもの polygon系(エッジはline系) 645
lane road_blockを車線ごとに分割したもの polygon系(エッジはline系、アークはarcline系) 936
ped_crossing 横断歩道 polygon系 120
walkway 歩道 polygon系 838
stop_line 停止線ゾーン polygon系 451
carpark_area 駐車スペース polygon系 451
road_divider 道路の上下線の境目となる線(中央分離帯は含まず、白線で区切られたもののみを示す) line系 152
lane_divider 車線の境界線 line系 120
traffic_light 信号機 line系 127
canvas_edge メートル単位の地図サイズ(H, W) - -
arcline_path_3 円弧パスで表されるアノテーション (lane, lane_connectorと対応) arcline系 2002
connectivity arcline_path_3同士の接続を表す - 2002
lane_connector lane同士の接続パス polygon系(アークはarcline系)

アノテーション情報を持つフィールドは、面で表されるpolygon系、線で表されるline系、円弧で表されるarcline系にカテゴライズ。それぞれのカテゴリには以下のフィールドが分類されます (laneはline系とarcline系両方のアノテーション情報を持つ)。

  • polygon系: drivable_area, road_segment, road_block, lane, lane_connector, ped_crossing, walkway, stop_line, carpark_area
  • line系: road_divider, lane_divider, traffic_light(road_block, laneの両エッジもline系に位置付けられる)
  • arcline系: lane, lane_connector

JSONの座標情報は基本的に、マップの左下端を原点としたメートル座標basemap画像は左上端を原点とした1ピクセル=0.1mの座標系のため、座標を合わせる際は以下の変換が必要。

  • 画像のメートル座標に10を掛ける、またはJSONのピクセル座標に0.1を掛ける
  • 画像の上下方向を逆にする、またはJSONの上下方向を逆にする

メタデータの各フィールドの依存関係

references/schemas_mapexpansion.py(SQLAlchemyのスキーマ)も参照すること(traffic_lightのgeomがLineStringではなくPointになっていることに注意)。以下はフィールド間の依存関係を表したER図。

erDiagram
    drivable_area{
        UUID token
        list[UUID] polygon_tokens
    }

    road_segment{
        UUID token
        UUID polygon_token
        bool is_intersection
        UUID drivable_area_token
    }

    road_block{
        UUID token
        UUID polygon_token
        UUID from_edge_line_token
        UUID to_edge_line_token
        UUID road_segment_token
    }

    ped_crossing{
        UUID token
        UUID polygon_token
        UUID road_segment_token
    }

    walkway{
        UUID token
        UUID polygon_token
    }

    stop_line{
        UUID token
        UUID polygon_token
        string stop_line_type
        list[UUID] ped_crossing_tokens
        list[UUID] traffic_light_tokens
        UUID road_block_token
    }

    carpark_area{
        UUID token
        UUID polygon_token
        float orientation
        UUID road_block_token
    }

    lane{
        UUID token
        UUID polygon_token
        string lane_type
        UUID from_edge_line_token
        UUID to_edge_line_token
        list[dict] left_lane_divider_segments
        list[dict] right_lane_divider_segments
    }

    road_divider{
        UUID token
        UUID line_token
        UUID road_segment_token
    }

    lane_divider{
        UUID token
        UUID line_token
        list[dict] lane_divider_segments
    }

    traffic_light{
        UUID token
        UUID line_token
        string traffic_light_type
        UUID from_road_block_token
        list[dict] items
        dict pose
    }

    lane_connector{
        UUID token
        UUID polygon_token
    }

    polygon{
        UUID token
        list[UUID] exterior_node_tokens
        list[dict] holes
    }

    line{
        UUID token
        list[UUID] node_tokens
    }

    node{
        UUID token
        float x
        float y
    }

    arcline_path_3{
        UUID token
        list[float] start_pose
        list[float] end_pose
        float radius
        list[float] segment_length
    }

    connectivity{
        UUID token
        list[UUID] incoming
        list[UUID] outgoing
    }

    drivable_area |o--|{ road_segment: ""
    road_segment ||--o{ road_block: ""
    road_segment ||--o{ ped_crossing: ""
    road_block |o--o{ stop_line: ""
    stop_line }o--o{ ped_crossing: ""
    stop_line }o--o{ traffic_light: ""
    road_block ||--o{ carpark_area: ""

    drivable_area |o--|{ polygon: ""
    road_segment |o--|| polygon: ""
    road_block |o--|| polygon: ""
    ped_crossing |o--|| polygon: ""
    walkway |o--|| polygon: ""
    stop_line |o--|| polygon: ""
    carpark_area |o--|| polygon: ""
    lane |o--|| polygon: ""
    lane_connector |o--|| polygon: ""
    polygon }o--|{ node: ""

    road_segment ||--o{ road_divider: ""
    road_block ||--o{ traffic_light: ""

    road_divider |o--|| line: ""
    lane_divider |o--|| line: ""
    traffic_light |o--|| line: ""
    road_block |o--|| line: ""
    line }o--|{ node: ""

    lane }o--|{ arcline_path_3: ""
    lane_connector }o--|{ arcline_path_3: ""
    lane }o--|{ connectivity: ""
    lane_connector }o--|{ connectivity: ""    

メタデータの各フィールドの内容とフォーマット

references/metadata_fields.mdを参照すること

Map Expansionの座標系

nuScenes Map Expansionのノード・ポリゴン座標はローカルメートル座標系で格納されている。他の座標系との関係は以下の表の通り。

座標系 単位 原点 用途
Map Expansionノード座標 メートル マップ左下 ポリゴン・レーン定義
Ego pose グローバル座標 メートル 同上(同一座標系) 自車位置・アノテーション
basemap PNG画像 ピクセル 左上 背景地図画像
WGS84経緯度 Deck.gl等の地図サービス

basemap PNG画像との対応

basemap PNGは (0,0)〜(canvas_edge[0], canvas_edge[1]) メートルの範囲全体を画像全体にマッピングしている。ピクセル変換は以下: px = x / resolution # resolution = 0.1 m/px py = -y / resolution + canvasH_px # Y軸反転

UniADのGround Truthとの関係

ユーザーが「UniAD」や「Bench2Drive」に言及した際はreferences/uniad_mapexpansion.mdも参照すること

Install via CLI
npx skills add https://github.com/c60evaporator/wai-no-harness --skill drive-nuscenes-mapexpansion
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
c60evaporator
c60evaporator Explore all skills →