LoginSignup
20
15

More than 3 years have passed since last update.

Waymo自動運転車のデータセットを覗いてみた

Last updated at Posted at 2019-08-23

Waymo自動運転車のデータセットを覗いてみた

Screenshot from 2019-08-23 22-20-57.png

自動運転の世界でトップを走るGoogle系列のWaymoからデータセットが発表されましたね!
とってもエキサイティング!
なんと合計1TBのデータセット!どうやら後にはコンペが控えているみたいなので今から用意しようZE!

(初記事なのでアドバイス等、間違いの指摘等いただけるとありがたいです)

この記事ですること

  1. Waymo Open Dataset(以下WOD)の概要
  2. WODのクイックスタートガイド
  3. データの覗き方

※GoogleColab使用は最低限、オフライン前提でウォークスルーします

1.Waymo Open Datasetの概要

Waymoは自動運転業界のトップと言われている企業。
そんな会社が、大規模データセットを出したって!

データセットは:

  • 20秒をワンシーンとして1000シーンを収集
  • 10Hzで収集
  • センサデータは中距離LIDAR x1, 短距離LIDAR x4, カメラ x5
  • その他LIDAR-カメラ投影パラメータ、車両姿勢、センサキャリブレーションデータも提供されている

  • ラベリング

    • 4つの種別「車両」「歩行者」「サイクリスト」「標識」
    • 1200万の3D bounding boxのタグ、120万のカメラ 2D bounding boxのタグ
    • 高品質のカメラとLIDARデータのタグ(カメラに関しては全部ついていない 08/23/2019時点)
  • Github: https://github.com/waymo-research/waymo-open-dataset

  • ラベリングフォーマット:https://github.com/waymo-research/waymo-open-dataset/blob/master/docs/labeling_specifications.md

Screenshot from 2019-08-23 23-07-45.png

このカラフルな世界を覗いてみたくないか?覗いてみたいよね。

2.WODのクイックスタートガイド

環境

  • Ubuntu 18.04 LTS, i7-9700K, RTX2080
  • Python 3.6.8
  • Tensorflow-gpu 1.12.0 (tensorflow cpuはなし)
  • Nvidia-driver 410.104
  • CUDA 9.0
  • Cudnn7.4.1
  • conda4.6.14(JupyterNotebook環境含む)

参考

このrepo何が入ってるの

  • データセットフォーマットの解説
  • 検出結果評価用のメトリック+評価ソースコード
  • モデル生成用のヘルパー関数

このセクションでは主にメトリック系をどう動かすかを解説。
QuickStartガイドをなぞり、トラブルバスティングしていくよ。

ステップ1: repositoryのクローン

ブランチをr1.0にするのを忘れずに。

git clone https://github.com/waymo-research/waymo-open-dataset.git waymo-od
cd waymo-od
git checkout remotes/origin/r1.0

ステップ2: Bazel系のインストール。

こいつをインストールすることによって、repositoryに含まれる検出結果を自動評価するコード等が使えるようになる。

sudo apt-get install --assume-yes pkg-config zip g++ zlib1g-dev unzip python3 python3-pip
BAZEL_VERSION=0.28.0
wget https://github.com/bazelbuild/bazel/releases/download/0.28.0/bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
sudo bash bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
sudo apt install build-essential

ステップ3: Bazelのconfigure

人によってはここでつっかかる

./configure.sh

当方のマシンでは、tensorflow-gpuのみが入っており、tensorflow(CPU版)がないためここでつっかかった
その場合はconfigure.shファイルを強引に編集(tensorflowをインストールしてtensorflow-gpu環境を汚したくないため)
この方法で今のところ問題は出ていない。

適当なエディタで、installation check部分を強引に書き換えてしまおう。
tensorflow-gpuの呼び出しも tensorflow as tfで事足りる。

# Check if it's installed
TF_CFLAGS=""
TF_LFLAGS=""
echo 'Using installed tensorflow'
TF_CFLAGS=( $(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_compile_flags()))') )
TF_LFLAGS="$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))')"

書き換えた後、./configure.shを走らせてみると
↓のように表示されて少し待つと、configure終了。
Screenshot from 2019-08-23 23-04-39.png

ステップ4:検出結果と真値を使って自動評価

metricテストを行う。
モデルの検出結果と真値を比較して評価してくれる。

WODには、コンペ&評価用に下記のmetricが用意されている

  • 3D 検出
    • Mean average precision(mAP)
    • Mean average precision weighted by heading(mAPH)
  • 3D トラッキング
    • Multiple Object Tracking Accuracy(MOTA)
    • Multiple Objecy Tracking Precision(MOTP)

これらをオートで計算してくれるソースコードが用意されておりそれらをビルドする。

まずはmetricテストをする。これで正しくビルドされているかがわかる。

bazel test waymo_open_dataset/metrics:all

結果はこんな感じ

INFO: Analyzed 18 targets (48 packages loaded, 8042 targets configured).
INFO: Found 10 targets and 8 test targets...
INFO: Elapsed time: 218.470s, Critical Path: 97.99s
INFO: 483 processes: 483 linux-sandbox.
INFO: Build completed successfully, 637 total actions
//waymo_open_dataset/metrics:breakdown_generator_test                    PASSED in 0.1s
//waymo_open_dataset/metrics:detection_metrics_test                      PASSED in 0.1s
//waymo_open_dataset/metrics:hungarian_test                              PASSED in 0.3s
//waymo_open_dataset/metrics:iou_test                                    PASSED in 0.5s
//waymo_open_dataset/metrics:matcher_test                                PASSED in 0.1s
//waymo_open_dataset/metrics:metrics_utils_test                          PASSED in 0.1s
//waymo_open_dataset/metrics:mot_test                                    PASSED in 0.1s
//waymo_open_dataset/metrics:tracking_metrics_test                       PASSED in 0.2s

Executed 8 out of 8 tests: 8 tests pass.
There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line optiINFO: Build completed successfully, 637 total actions

じゃテストも終わったことだし
自分の検出結果で評価したいよ、というときは下記の通り

bazel build waymo_open_dataset/metrics/tools/compute_detection_metrics_main
bazel-bin/waymo_open_dataset/metrics/tools/compute_detection_metrics_main waymo_open_dataset/metrics/tools/fake_predictions.bin  waymo_open_dataset/metrics/tools/fake_ground_truths.bin

自分の検出結果で評価したいときは

bazel-bin/waymo_open_dataset/metrics/tools/compute_detection_metrics_main 予測結果のパス/予測結果ファイル.bin  真値ファイルのパス/真値ファイル.bin

評価をすると下記のような結果が。
mAP, mAPHなどのメトリックの他に、LEVELが存在する。
物体が内包する点群の数で難易度Lv1,Lv2で変わってくるようだ。
点群の数が少なければ判断の材料が少ないので難易度が高い→Lv2だそうだ。
(今後Lvは更新されていくんだってさ)

OBJECT_TYPE_TYPE_VEHICLE_LEVEL_2: [mAP 0.0650757] [mAPH 0.055601]
OBJECT_TYPE_TYPE_PEDESTRIAN_LEVEL_2: [mAP 0.101786] [mAPH 0.0473937]
OBJECT_TYPE_TYPE_SIGN_LEVEL_2: [mAP 0.0500082] [mAPH 0.0366725]
OBJECT_TYPE_TYPE_CYCLIST_LEVEL_2: [mAP 0] [mAPH 0]
RANGE_TYPE_VEHICLE_[0, 30)_LEVEL_2: [mAP 0.0784186] [mAPH 0.0709105]
RANGE_TYPE_VEHICLE_[30, 50)_LEVEL_2: [mAP 0.133955] [mAPH 0.103888]
RANGE_TYPE_VEHICLE_[50, +inf)_LEVEL_2: [mAP 0.0522752] [mAPH 0.0460845]
RANGE_TYPE_PEDESTRIAN_[0, 30)_LEVEL_2: [mAP 0.0458333] [mAPH 2.20291e-09]
RANGE_TYPE_PEDESTRIAN_[30, 50)_LEVEL_2: [mAP 0.110526] [mAPH 0.0512746]
RANGE_TYPE_PEDESTRIAN_[50, +inf)_LEVEL_2: [mAP 0.15] [mAPH 0.074034]
RANGE_TYPE_SIGN_[0, 30)_LEVEL_2: [mAP 0.128993] [mAPH 0.100171]
RANGE_TYPE_SIGN_[30, 50)_LEVEL_2: [mAP 0.0354839] [mAPH 0.0171309]
RANGE_TYPE_SIGN_[50, +inf)_LEVEL_2: [mAP 0.0164904] [mAPH 0.01548]
RANGE_TYPE_CYCLIST_[0, 30)_LEVEL_2: [mAP 0] [mAPH 0]
RANGE_TYPE_CYCLIST_[30, 50)_LEVEL_2: [mAP 0] [mAPH 0]
RANGE_TYPE_CYCLIST_[50, +inf)_LEVEL_2: [mAP 0] [mAPH 0]

次は何する?

repositoryのクイックスタートガイドは以上。
え、これだけ?
データを覗かせてよ、キラキラの点群世界を俺に見せてくれ!!

というわけで、google colaboratoryの手順に従ってデータセットを覗いてみよう。

3.データの覗き方

オンラインでやりたい方向け

下記のリンクからgoogle colabへ

データブラウジングチュートリアル
https://colab.research.google.com/github/waymo-research/waymo-open-dataset/blob/r1.0/tutorial/tutorial.ipynb

Screenshot from 2019-08-24 00-42-21.png

リンク先の”Colab”ボタンをクリック
開けたら、各セルの[]を一つずつrunしていけば問題なくすべて実行可能。

オフラインでやる方向け

データブラウジングチュートリアルのipynbファイルをダウンロード。
jupyter-notebook環境でデータセットのデータをブラウジングしていこう。

ステップ1:必要なファイルをGoogle Colabからダウンロード

おい、貴様オフラインでやるといったな?
すまない、あれは嘘だ。ここだけGoogle Colab使います。

Google Colab上にて、セルを作成、下記のコードで必要なファイル3つをダウンロード。(要google chrome)

from google.colab import files
files.download('/content/waymo-od/bazel-genfiles/waymo_open_dataset/label_pb2.py') 
files.download('/content/waymo-od/bazel-genfiles/waymo_open_dataset/dataset_pb2.py')
files.download('/content/waymo-od/tutorial/frames')

ステップ2: jupyter notebook実行の下準備

Load waymo_open_dataset packageのセル、Read one frameのセルにあるパスを修正。
ステップ1でダウンロードしたファイルを読み込みます。

ステップ3: オープンデータセットの読み込み

オープンデータセットを読み込みたい場合は下記からダウンロード
https://waymo.com/open/download

試しにtraining_0000.tarをダウンロード、解凍する
フォルダの中身は.tfrecordファイル

それを読み込むためには、jupyter notebookのRead One frameを下記の様に変更
試しに一つの.tfrecordを読んでみる

FILENAME = '/データのおいてあるパス/training_0000/segment-1208303279778032257_1360_000_1380_000_with_camera_labels.tfrecord'
dataset = tf.data.TFRecordDataset(FILENAME)
for data in dataset:
    frame = open_dataset.Frame()
    frame.ParseFromString(bytearray(data.numpy()))
    break

ステップ4:データの中身をチェック!

基本jupyter notebookの手順にそいます。
下記に各セル名と実行結果をリストします。

  • Visualize Camera Images Screenshot from 2019-08-24 01-44-55.png

Waymo自動運転車のてっぺんについているカメラユニット5台からの画像
アメリカの郊外で駐車車両が大量にあるシーン

  • Visualize Range Images Screenshot from 2019-08-24 01-45-04.png

LIDARの距離画像

  • Show Point Cloud ※まだ実装されていないので予告、らしい(GoogleColabより) Screenshot from 2019-08-24 02-16-09.png

今後PointCloudを3Dで表示、かつ物票もつけてくれるメソッドを作ってくれるらしい

  • Visualize Camera Projection Screenshot from 2019-08-24 02-17-11.png

LIDARの点群を画像に重畳。これでカメラ+LIDARの3D物体検出ができるようになる。

4.おわりに

以上が08/23/2019時点であがっているWaymo Open Datasetのウォークスルーです。
個人的な希望で、今後のアップデートにこんなものがあればいいなぁ。

・より充実したvisualization
・訓練のメソッド(Tensorflow Object Detection APIとの連携等)

おそらくこれらが出る前に、チュートリアルに沿ってデータをパースして自分で学習するほうが早いかも。

今後は自動運転系のプロジェクトのウォークスルーを上げていく予定です。
気に入った人はぜひLikeください!
それでは〜

※追記 可視化の詳細なウォークスルーを記事にしました、見てね!
Waymo自動運転データセットを可視化するんだよ!

20
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15