論文読み「Implicit 3D Orientation Learning for 6D Object Detection from RGB Images」

## はじめに

ECCV2018のBest Paperになった6次元物体検出の論文のまとめです。インターン先の勉強会で文献紹介を行ったので、こちらに記録しておきます。

Sundermeyer, M. (2018). Implicit 3D Orientation Learning for 6D Object Detection from RGB Images. Retrieved from http://openaccess.thecvf.com/content_ECCV_2018/papers/Martin_Sundermeyer_Implicit_3D_Orientation_ECCV_2018_paper.pdf

著者の所属はドイツ航空宇宙センター（DLR）で、アメリカでいうNASAに相当する団体です。Wikipediaによると宇宙用・医療用のロボットで有名なようですが、このことはこの論文の活用方法につながる部分かと思います。

[ドイツ航空宇宙センター - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%89%E3%82%A4%E3%83%84%E8%88%AA%E7%A9%BA%E5%AE%87%E5%AE%99%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC)

## 概要

RGB画像からの6次元物体検出（3次元座標＋3軸方向推定）の新手法の提案です。特に方向推定の部分を扱います。この6次元情報が分かるとロボットが物を掴む時などに使えます。

### 何が新しい？

3Dモデルのデータがあればそこから学習できます。たくさんのアノテーション付き画像はいりません。そしてRGB画像だけから推定できます。深度センサーはいりません。

3Dデータが必要という制約はありますが、大量の画像を用意するよりも楽という事例は多そうです。宇宙・医療関係はまさにそうなのではないでしょうか。

### どうやって？

Domain Randomizationを活用したDenoising Autoencoderを学習させて使います。ここが面白いところなので、記事ではこれを中心に紹介していきます。

## 導入

### 6次元

ある物体に対して、3次元空間の座標xyzに加え、3軸に対してどういう回転をしているかを考えると6次元になります。6つの自由度、6DoFという風にも呼びます。

[6DoF - Wikipedia](https://ja.wikipedia.org/wiki/6DoF)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/eee97905-1539-749d-1456-ed65a7f24829.png)

いらすとやさんの「VRゴーグルのトラッキングのイラスト（6DoF）」です。この6つの矢印の話ということになります。

基本的な物体検出というと、画像中のxy座標だけを扱いますが、それだけではロボットが物を掴んだりはできません。4つも推定する次元が増えているので難しそうですね。

実用化していくためにはこれを簡単に学習し、高速に推定したいよねという中でのこの論文です。

### これまでの問題点

6次元物体検出は先行研究はいくつもありますが、「柔軟性・一般性・ロバスト性・高速性」などが十分ではないという問題があります。

遮蔽物があって対象の物体が隠れてしまうオクルージョンや、左右対称の物体なんかには弱いです。学習に必要な時間やデータ数も実用的ではありません。

さらに深度センサーを使っていますが、これは不安定さもあります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/e4ce01bf-00ec-4f58-13ef-5da955ef54b4.png)
[こういう時は難しいという例（論文から引用）]

### 推定の流れ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/c0c7a82e-4c8a-f93e-97f1-71dc0962b1d7.png)
[提案手法の推定の流れ（論文から引用）]

RGB画像をSSD[^1]などの既存の物体検出手法に入力し、物体を切り出します。この時点でxとyは推定済みです。切り出した画像を今回提案するAugumented Autoencoderに入力します。そうすると3次元方向推定ができます。最後にこれらの情報を使い、奥行きzを計算して、6次元が揃います。

もし深度センサーがあれば、その情報を使い値を補正することもできます。

[^1]: Liu, W., Anguelov, D., Erhan, D., Szegedy, C., Reed, S., Fu, C.Y., Berg, A.C.: SSD: Single Shot Multibox Detector. In: Proceedings of the IEEE European Conference on Computer Vision (ECCV). pp. 21–37. Springer (2016) https://arxiv.org/pdf/1512.02325.pdf




## 関連研究

### Domain Randomization

3Dデータで学習し、現実の物を推定するための手法です。3Dデータから作成したRGB画像にランダムに背景を加えたり、光を入れたりします。これを学習することで、現実の物でも推定できるようになります。Hinterstoisserの論文[^3]の以下の図がうまくまとまっています。

[^3]: Hinterstoisser, S., Lepetit, V., Wohlhart, P., Konolige, K.: On Pre-Trained Image Features and Synthetic Images for Deep Learning. arXiv preprint arXiv:1710.10710 (2017) https://arxiv.org/pdf/1710.10710.pdf

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/f0823c0f-c0cb-561f-4a87-f0104f0a5621.png)
[Domain Randomizationの学習例（Hinterstoisserの論文[^3]から引用）]


以下の論文まとめ記事も分かりやすいです。

[論文まとめ：Training Deep Networks with Synthetic Data: Bridging the Reality Gap by Domain Randomization - Qiita](https://qiita.com/masataka46/items/0a0b4a0884baa39efd0a)

3DデータをDomain Randomizationする6D推定手法はKehlのSSD6D[^2]もありました。このSSD6Dでは方向推定をディープラーニングの一般的な分類問題として解いていますが、本研究はAutoencoderを使うことで異なるアプローチをしていきます。

[^2]: Kehl, W., Manhardt, F., Tombari, F., Ilic, S., Navab, N.: SSD-6D: Making RGBBased 3D Detection and 6D Pose Estimation Great Again. In: Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). pp. 1521–1529 (2017) https://arxiv.org/pdf/1711.10006.pdf

## 提案手法

### Autoencoder

ニューラルネットワークにおいて入力と同じ値を出力するように学習することで、中間層では潜在的な表現を得ることができます。中間層は入出力よりも少ない次元数です。

以下は発展的手法であるVAEの解説記事ですが、基本的なAutoencoderについても触れられていて参考になります。

[Variational Autoencoder徹底解説 - Qiita](https://qiita.com/kenmatsu4/items/b029d697e9995d93aa24)

### Denoising Autoencoder

Autoencoderを発展させたノイズ除去方法があります。Autoencoderにノイズありの画像を入力し、ノイズなしの画像が出力できるように学習させることで、ノイズによらない本質的な潜在表現を得ることができるためです。

### Augumented Autoencoder(AAE)

Denoising Autoencoderのアイデアを、ノイズ以外の画像への加工にも適用しようというのが本研究の提案するAugumented Autoencoderです。

Augumented Autoencoderを示す数式はこのようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/79a9eeef-8f42-b185-a736-dade9358e852.png)
$x$ : インプット
$𝑓_{𝑎𝑢𝑔𝑚}$ : 何らかの変換（加工）を行う関数
$x'$ : インプットに変換を加えたもの
$x$ : アウトプット 
$z$ : 隠れ層での特徴量（潜在的特徴）
$𝜙$ : エンコーダー
$𝜓$ : デコーダー

### 四角形で実験

3Dデータに適用する前に、簡単な実験でAAEがうまくいくか実験しています。

64*64ピクセルの黒い背景の中に、白い四角形を様々な角度で配置した画像を作成します。（以下の図左の(a)）

その四角形の画像に対して、拡大縮小の加工を行ったもの（以下の図左の(b)）や平行移動の加工を行ったもの（以下の図左の(c)）、その双方の加工を行ったもの（以下の図左の(d)）を作成します。

これで潜在表現が2次元（z1とz2）のAutoencoderおよびAugumented Autoencoderを学習させます。

(a)から(a)および(d)から(d)の入出力で学習した通常のAutoencoderと、(d)から(a)の入出力で学習したAugumented Autoencoderを比較しました。以下の図の右を見ると、Augumented Autoencoderは四角形の角度がかなり綺麗に潜在表現z1,z2に反映されていることが分かります。Augumented Autoencoderは四角形の角度を抽出することに成功したわけです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/a9d38390-bbb7-db65-00de-d3c91dd58a0e.png)
[Augumented Autoencoderを幾何学的変換に適用した実験結果（論文から引用）]

通常のAutoencoderと本研究で提案されているAugumented Autoencoderを四角形の画像を例にまとめると以下のようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/e73eb945-c187-ca85-3232-fce1950fa635.png)
[AutoencoderとAugumented Autoencoderの比較]

### 3Dデータに対してのAAE

四角形の角度が抽出できたのならば、3次元物体の方向も抽出できるはずです。6次元物体検出においては、3Dデータを元にした画像に対してAAEを用います。幾何学的変換に相当する部分がDomain Randomizationによる背景や光、遮蔽物などの追加です。以下の図のように、元のような背景が黒の画像が出力できるように学習ができました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/b28d98f7-c0af-1372-3cb0-2cce39b8fc46.png)
[3Dデータに対するAugumented Autoencoder（論文から引用）]

今回使うEncoderとDecoderの構造はこんな感じでそれぞれ4回の畳み込み＋1回全結合です。潜在表現を128次元としています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/cd996bef-e634-4eb5-0ab6-12e682fe6113.png)
[Augumented Autoencoderの構造（論文から引用）]

### 方向の推定

方向が既知の潜在表現と、推定したい画像から新たに得た潜在表現を比較することで、方向の推定を行います。

まず、事前に学習する3Dデータから92232通りの向きの画像を作成し、それらをエンコーダに入力して潜在表現を取得しておきます。

推定時にはSSDなどの物体検出器によって切り取られた物体画像をエンコーダに入力し潜在表現を得ます。これを事前に取得した潜在表現とでコサイン類似度を測り、最も類似していたものの方向が推定したい方向になるわけです。n次元のベクトル空間に画像を埋め込み、最近傍法をするということです。

なお92232通りというのは、球面状に均一な2562箇所の点を考え、そこに物体を36通りの回転で配置した時の球の中心からの見え方を考えるためです。2562×36=92232通りです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173282/ab2fc846-24ef-f395-b60f-527cc419d576.png)
[方向を推定する方法（論文から引用）]

## 検証

ここは詳しくは元論文の表を確認していただきたいのですが、T-LESSとLineMODの2つのデータセットで検証しています。指標値が従来手法より良いといいうわけではないですが、アノテーションや深度センサがいらず、高速だという点を考慮するとなかなかな結果のようです。

3Dデータのみで学習する点が共通するSSD6D[^2]と比べると、深度センサーなしの条件だと本研究が上回り、深度センサーありだと逆という結果でした。3Dデータがあればアノテーションがいらない、深度センサーいらないというメリットの中で高精度な手法ができたということになります。

## 感想

医療現場など3Dデータは作成するが、アノテーション付き画像を大量に用意するのは難しいという場面は多いかと思われますので、実際に活用が期待できる手法ですね。

幅広い現場で使うには、柔らかく変形しやすいものにどう対応する？みたいな問題は考えられそうです。

技術的にはDomain Randomizationによりオートエンコーダーを学習し、得た特徴の類似度を計算するというアイデアはかなり面白く、6次元物体検出に興味はなくとも注目な論文だったかと思います。他の分野でも応用ができそうですね。