Waymo自動運転車のデータセットを覗いてみた
自動運転の世界でトップを走るGoogle系列のWaymoからデータセットが発表されましたね!
とってもエキサイティング!
なんと合計1TBのデータセット!どうやら後にはコンペが控えているみたいなので今から用意しようZE!
(初記事なのでアドバイス等、間違いの指摘等いただけるとありがたいです)
この記事ですること
- Waymo Open Dataset(以下WOD)の概要
- WODのクイックスタートガイド
- データの覗き方
※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
このカラフルな世界を覗いてみたくないか?覗いてみたいよね。
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終了。
ステップ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
リンク先の”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の手順にそいます。
下記に各セル名と実行結果をリストします。
Waymo自動運転車のてっぺんについているカメラユニット5台からの画像
アメリカの郊外で駐車車両が大量にあるシーン
LIDARの距離画像
今後PointCloudを3Dで表示、かつ物票もつけてくれるメソッドを作ってくれるらしい
LIDARの点群を画像に重畳。これでカメラ+LIDARの3D物体検出ができるようになる。
4.おわりに
以上が08/23/2019時点であがっているWaymo Open Datasetのウォークスルーです。
個人的な希望で、今後のアップデートにこんなものがあればいいなぁ。
・より充実したvisualization
・訓練のメソッド(Tensorflow Object Detection APIとの連携等)
おそらくこれらが出る前に、チュートリアルに沿ってデータをパースして自分で学習するほうが早いかも。
今後は自動運転系のプロジェクトのウォークスルーを上げていく予定です。
気に入った人はぜひLikeください!
それでは〜
※追記 可視化の詳細なウォークスルーを記事にしました、見てね!
Waymo自動運転データセットを可視化するんだよ!