コンサルでデータサイエンティスト

仕事でPythonを書いてます。機械学習、Webマーケティングに興味があります。趣味は旅です。

【3D物体検出論文】Orthographic Feature Transform for Monocular 3D Object Detection をまとめた

3D object detection (3D 物体検出) に関する2018-2019期の最新の論文『Orthographic Feature Transform for Monocular 3D Object Detection』*1について読んでまとめました。

3D Object detection とは、自動運転などにおいて 3次元空間における物体の位置情報を画像データから予測する物体検出タスクです。本記事では、3D object detection の概念について通常の物体検出と比較しながら紹介した後に、提案された最新の3D物体検出手法について解説していきます。

3d_object_detection
目次

3D Object detection とは

3D Object detection (3D 物体検出) とはどういったものなのでしょうか。実際の予測画像を紹介しながら、ほかの一般的な画像認識タスクと比較をしていきます。


画像認識タスクには一般的に以下の4種類があります。

  • Classification(分類)
  • Classification + Localization(分類 + 位置推定)
  • Object Detection(物体検出)
  • Semantic segmentation(領域分割)


image_recognition_task



3D Object detection はこれらのいずれにも含まれない新たな画像認識タスクとして、近年注目され始めています。

通常の物体検出 (2D Object detection) は様々な用途におけるニーズを伸ばしており、多くのアプリケーションで実用化されています。しかし、自動運転などにおいては通常の物体検出では不足している部分があります。例えば、下図の左画像のような2次元の物体検出では画像内に自動車が映っていることはわかりますが、画像に映っている自動車までの距離情報を認識できないという問題があります。


3d_object_detection_compare


そこで、物体の奥行き情報も考慮した3D Object detection(3次元物体検出) が登場しました。3D Object detection とは、物体の3次元空間における位置情報(3次元の直方体の位置、大きさ、角度)を予測するタスクです。

自動運転などでは、従来 LiDARと呼ばれる光を用いたリモートセンシング技術を用いて周辺の車両の位置推定を行っていました。


lidar_object_detection
画像: https://medium.com/@jhkoh/object-detection-with-lidar-point-cloud-algorithm-94a241fd3f49

しかし、LiDARが精密機械ゆえに自動車搭載に不向きであることや、安いものでも50万円程度と高価であることから、カメラ画像から 3D 空間の物体検出を行いたいというニーズが高まっています。

このような理由から、カメラ画像による 3D Object detection タスクが誕生しました。

論文の要旨

3D Object detection の概念をお伝えしたところで、ここから論文『Orthographic Feature Transform for Monocular 3D Object Detection』の解説に入っていきたいと思います。


本論文の特徴は以下の通りです。

  • 1台のカメラで撮影した画像から 3D Object detection を行う
  • 2次元画像空間における特徴を現実の 3D 空間にマッピングすることで3次元空間の特徴を捉える
  • 3D 空間における特徴マップに対して Orthographic space(正投影空間)に変換する機構を加えることで計算量削減


本論文は、2018年11月に arxiv に登場した時点では 1台のカメラ画像による 3D 物体検出手法で State-of-the-art を達成しています。つまり、共通のデータセットで評価を比較した際には最も良い精度が出ているということになります。

3D 物体検出までの流れ

本論文の提案手法について、ネットワークの学習および推論までのステップについて解説していきます。

提案手法では、複数のネットワークを組み合わせた大きなネットワーク構成となっています。共通の損失関数からすべてのネットワークの重みを学習することができることから、本ネットワークは End-to-end network であるといえます。

提案手法のネットワークアーキテクチャは下図の通りです。

3d_object_detection_architecture


この図に書かれている各ネットワークの詳細について、ひとつずつ解説していきます。


ResNet による特徴抽出

はじめに、画像が入力される最初のネットワークについて説明いたします。
ここでは、一般的な画像認識タスクでも多く使われている ResNet という Convolutional Neural Network (CNN) に画像を入力し、入力画像の特徴マップを抽出します。

このとき、入力画像に対してマルチスケールな特徴マップを抽出することで、画像の大まかな特徴から細かな特徴といった多様な特徴を捉えた特徴マップを得ることができます。


画像特徴マップを 3D 空間へマッピング

提案手法では、現実空間の特徴をより捉えるために画像空間ではなく 3D 空間で物体検出を行います。ここでは1つ目の CNN で抽出された特徴マップを 3D 空間にマッピングしていきます。

画像の最小の解像度はピクセルで表されるように、筆者らは現実の 3D 空間の最小の解像度をボクセルで表しています。


orthographic_feature_transform


1つのボクセルを1辺の長さが r の立方体だとすると、カメラで撮影した立方体のボクセルは画像空間内では下図のような六角形に映ります。


object_detection_cube


ボクセルの中心座標を (x, y, z)、カメラの位置を( (c_u, c_v))、カメラの焦点距離fとすると、画像空間内に映るボクセルのバウンディングボックス座標は下式で求めることができます。


bounding_box_equation


ボクセルが画像空間内でどのような映るかがわかったところで、画像空間における特徴マップを 3D 空間にマッピングしていきます。

中心座標が (x, y, z) のボクセルの特徴マップ g(x, y, z) は、上記で求めたバウンディングボックスに含まれる範囲の特徴マップに対して Average pooling(平均プーリング)をかけることで求めることができます。


mapping_equation


特徴マップのテンソルを繰り返し足し合わせる処理は計算量増大の原因になってしまいます。そこで、提案手法では Integral images(積分画像)による高速化を図っています。ピクセル (u, v) の Integral map を F(u, v) は、再帰関数の利用により下式のように表すことができます。


recursive_integral_image


求めた積分画像を用いると、ボクセルの特徴マップ g(x, y, z) は下式のように書き換えることができます。

speedy_feature_mapping


積分画像については、こちらの方の記事を読んでみるといいかもしれません。

画像処理 Integral Image(積分画像) - のんびりしているエンジニアの日記


Orthographic Feature Transform(正投影空間への変換)

3次元空間に特徴をマッピングすることで 3D 空間の情報を抽出することができました。しかし、このまま 3次元空間の特徴マップを用いて物体検出をしようとすると計算量が膨大になってしまうことは明らかです。
そこで、提案手法では 3次元の特徴マップを高さ方向で圧縮して 2次元にマッピングしています。これを Orthographic Feature Transform と呼んでいます。

実空間にマッピングした特徴マップ (Voxel features) のy軸方向の高さを Hとすると、正投影空間における特徴マップ h(x, z) は下式で求めることができます。
orthographic_feature_transform_h


求めた正投影空間における特徴マップ h(x, z) を再び CNN に入力し、出力に対して Confidence map、位置、大きさ、向きに関する 4つの損失関数を最小化するようにネットワーク全体を学習していきます。


topdown_network

画像空間ではなく実空間に対応する特徴マップを入力するため、カメラから遠い物体をカメラから近い物体と同様に扱うことができるというのが提案手法の大きな特徴です。


3D 物体の位置推定

物体の位置推定ステップでは一般的な背景・物体の分類問題を解く手法ではなく、物体の中心座標の存在確率を表す Confidence map を回帰する手法を利用します。

confidence_map


下記の中心座標を持つ N 個の既知の物体(学習データ)があるとすると


training_data_equation

正投影空間における点(x, z) の ground truth Confidence score は次のガウス関数で表現することができます。

confidence_map_equation

ここで定義した ground truth Confidence map と予測した Confidence map の差を l1 損失関数で表し、学習時にはこの損失関数を最小化するように学習していく。


さらに、位置・大きさ・向きについても損失関数を用意することで精度向上を図ります。

f:id:hktech:20181217225719p:plain



評価

KITTI の 3D Object detection データセットを用いて学習・テストを実施し、評価を行っています。
KITTI データセットの中身については、次の方がまとめてくださっています。

kitti関連の覚え書き - 八谷大岳の覚え書きブログ

評価実験は下記の諸元で実施しています。

*Features
Front-end network ResNet-18
Feature map scales 1/8, 1/16, 1/32
3次元空間のグリッドサイズ 80m × 4m × 80m
グリッド解像度 r 0.5 m
Topdown network 16-layer ResNet
Data Number (Training, Validation) 3712, 3769
Data augmentation Random cropping, scaling, flipping, camera parameters
Training epochs 600

物体検出結果を画像で確認していきます。ご覧のとおり、画像上に正投影空間に投影した Confidence map が描画されているのが確認できると思います。また、bird-eye's-view(鳥瞰図)でみると、画像内の車両位置と対応するように、Confidence mapで描かれた円がプロットされていることがわかります。

object_detection_result



定量的に結果を確認していきます。ここでは、カメラを2台使った従来手法である
3DOP*2 と、1台のカメラ画像を使った従来手法であるMono3D*3を比較します。


evaluation_result


KITTI ベンチマークでは正解と予測の重複が 0.7 以上のものを予測成功と定義されています。
Mono3D と比較すると精度が改善していることがわかります。また、2台のカメラを使用する 3DOP に近い精度を達成しています。特に、物体の重複がある場合や物体が遠方なときの Hard カテゴリでは精度が大きく改善していることがわかります。これは、画像空間ではなく実空間に対応する特徴マップを入力するため、カメラから遠い物体をカメラから近い物体と同様に扱うことが可能だからです。

まとめ

3D Object detection の最新論文についてまとめました。
対象論文『Orthographic Feature Transform for Monocular 3D Object Detection』では単一のカメラで撮影した画像を使って3次元空間における物体の位置情報を検出する 3D 物体検出手法が提案され、2018年末時点での State-of-the-art を達成しました。
まだまだ実用化に向けて精度を改善していかなければいけないフェーズですが、カメラ画像を使った 3D Object detection は今後も注目され続ける分野だと思います。今後も画像認識に関連した新しい手法について調べてまとめていきたいので、ご期待ください。