Image-based 3D Object Reconstructionのメモ

# Image-based 3D Object Reconstruction: State-of-the-Art and Trends in the Deep Learning Era

* Xian-Feng Han, Hamid Laga, Mohammed Bennamoun. 2019.
    * **この記事で読んでいるのはバージョン2です．論文の引用番号が違うので注意** https://arxiv.org/abs/1906.06543v2
    * 最新版はこちら： https://arxiv.org/abs/1906.06543
* DNNを使って１枚/複数枚の画像から3Dモデルを再構成する手法のサーベイ論文．
    * 大きくボクセル，サーフェス，点群ベースの手法に分けられる．最近の主流は点群．
    * ネットワーク構造はCNNベースのencode-decoderが使われることが多い
* 図表と数式のフォーマットは省略しています．太字は個人的に興味を持った箇所で，原論文にはありません．


## abst

* 2015からCNNによる画像ベースの3D再構成が注目を集めた．
* 1枚または複数のrgb画像から３D形状を推定するDNN技術に焦点を当てた．
    * 一般物体を再構成することを念頭においているが，一部は人の体や顔といった特定物体も扱う．
* 本論文は形状の表現方法，ネットワーク構成，訓練メカニズムで構成される
* 主要な論文について性能比較と解析を行い，未解決問題を要約し，将来の方向についても議論する

## 11. summary and concluding remarks

* ディープを使った過去5年間の画像ベース３D物体再構成の包括的なサーベイを行った
* 最先端技術を，volumetric, surfaceベース，点群，に分類した
    * それからカテゴリごとに，入力，ネットワーク構成，訓練手法について議論した
    * 主要な方法については性能比較を行った
* 本論文は3D再構成を，1枚または複数のrgb画像から3D物体のジオメトリを再構成する問題として定義した
    * しかし同様のソリューションを共有する関連する他の問題がたくさんある．   
        * 一番近いのはrgb画像からの深度予測であるが，これは最近ディープで解決された
        * 他のは3D形状補完，深度から3D物体再構成，手書き２D画像からの３D再構成，新規視点合成，3D形状構造修復など．
    * これらはこの5年間でかなり研究されており，別のサーベイが必要．

## 1. intro

* ロボット誘導，物体認識とシーン理解，モデリングとアニメーション，産業コントロール，医療診断などに応用できる
* 初期は数式的に（射影）から再構成する方法が取られた．(ただしill-posed inverse problem)
    * ステレオベースの手法は複数の画像を必要とする
    * shape-from-silhouetteは正確にセグメントされた２Dの影が必要．
    * これらは正確にキャリブレーションされたカメラで複数の画像を撮れば良い再構成ができるが，実用的でない．
* 人間はこの問題を事前知識をつかってうまく解くことができる．
    * 片目だけでも大体のサイズと幾何形状を簡単に推定できる
        * 別の視点からみた場合を想像することもできる
    * これは見たものから事前知識を作り，物体がどんなふうに見えるかのメンタルモデルができているから
        * 第2世代の手法は，3D再構成問題を認識問題と捉えることで，事前知識を利用しようとした
    * DLの台頭と更に重要な大規模データの利用は，複雑なキャリブレーションなしで１または数枚のrgb画像から再構成できるようにする
* 最初に一般物体を論じ，次に特殊ケースを論じる．
    * 2015以降のCV, CG, ML の主要conferenceから114本以上のpaperを集めた
    * 本論文のcontributionは：
        1. DLを用いた画像ベースの3D物体再構成では最初のsurveyである
        2. この領域の近年の文献をカバーしている．2015以降の112の手法を紹介する
        3. DNNでの3D再構成の包括的な復習と解析を提供する．
            * 訓練データ，ネットワーク構成の選択，その影響，訓練戦略，応用シナリオを含む
        4. 一般3D物体再構成のための手法でreviewしたものについて包括的な性質の要約を行う．
            * 一般物体：88アルゴリズム
            * 顔：11
            * 人体：6
        5. 表形式で比較の要約を行う．
* section2: 問題設定とtaxonomy(分類)
* section3: 潜在空間と入力のエンコーディング
* section4: volumetric手法
* section5: サーフェスベース手法
* section6: 追加の手がかりの利用法
* section7: 訓練
* section8: 特定の物体
* section9: 性能比較と議論
* section10: 今後についての議論
* section11: 結論

## 2. problem statement and taxonomy

* I = {I_k, k=1,...,n}がn>=1の1つまたは複数の物体Xが写ったrgb画像の集合とする．
    * 3D再構成は未知の形状Xをできるだけ近い形状X^を推定する予測機f_thetaを学習する問題．
        * f_thetaは再構成目的関数(つまり誤差関数)L(I) = d(f_theta(I), X)を最小化する関数．
            * ここでthetaはfのパラメタの集合であり，d(.,.)はターゲット形状Xと再構成形状f(I)の距離計量
* 入力I，出力の表現，予測器fを近似するためのネットワーク構造，訓練手法，教師ありの度合い，の性質に基づき最先端の手法を分類する．
    * 視覚的なサマリは表1
    * 入力Iは次がありうる
        1. 1枚の画像
            * これは３D再構成では曖昧さがあるのでチャレンジングな問題．
        2. 複数の画像，内在的・外在的パラメタが既知または未知のrgbカメラで撮影されたもの
        3. ビデオストリーム
            * 再構成がなめらかでフレーム間で一致していることを保証しながら，時系列の相関を3D再構成に利用できる
    * また，入力には既知または未知のカテゴリに属する１つまたは複数の物体が含まれているかもしれない
        * 影や，セグメンテーションマスクや，再構成をガイドするセマンティクラベルがついているかもしれない
* 出力の表現はネットワーク構成の選択に重要で，計算効率と品質にも影響を与える
    * volumetric representation：初期のDLベース3D再構成手法にはよく採用された
        * 通常のvoxelグリッドをつかって3D形状のパラメトライゼーションをする
            * 画像解析での2D畳み込みを簡単に3Dに拡張できる
                * しかし，メモリ必要量が大きい，sub-voxelを正確にできる手法は限られる
    * Surface-based: 
        * mesh, point closus
        * メモリ効率は増加するが，surface encodedされたデータは一般的ではないので，最適化がむずかしい
    * Intermediation: 
        * 幾つかの3D再構成手法はrgb画像から物体のジオメトリを推定するが，問題を時系列に分解する方法もある
            * それぞれのステップで中間表現を予測する
* 予測器fを訓練するためにたくさんの構造が利用されてきた．
    * バックボーンはencoder hと，それに続くdecoder gである．つまり
        * f = f o h 
        * encoderはconvolution，pooling，fully connectedのシーケンスを使って，入力をfeature vector とかcodeと呼ばれる潜在変数xにマップする．
        * decoder はgeneratorとも呼ばれる． 
            * 全結合か，deconvolutionのネットワークでfeature vectorをほしい形状にデコードする．
                * deconvolutionはconvolutionとupsamplingの系列，upconvolutionとも呼ばれる
                * 前者は構造化されていない出力（3D point clouds）に適しており，後者はvolumetric gridsまたはparametrized surfacesに利用される
    * これをベースに，ConvNet/ResNet, CNN/GAN, CNN/VAE, 2Dconv/3Dconv等変種が提案されてきた
* 構造は重要だが，性能は訓練手法に非常に依存する．次に注目する
     * データセット：
        * 本論文で対象とする問題で使える訓練集合は多い．実際のデータやCG合成データ
    * 誤差関数：
        * 再構成の品質に大きく影響する．教師ありの度合いはこれで決まる．
    * 訓練手順と教師ありの度合い：
        * 実際の画像と，対応する３Dモデルのアノテーションを必要とするモデルがあるが，そのようなデータは入手困難．
        * 実際のデータと合成データの組み合わせもある
        * 完全な教師3Dデータを利用しないものもある．これは簡単に得られる教師シグナルを利用した誤差関数による

## 3. the encoding stage

* DLベース3D再構成アルゴリズムは，入力Iを特徴ベクトルx =h(I) in Xにエンコードする．Xは潜在空間と呼ぶ．
    * よいmapping関数hは次の性質を満たす
        * 似た3D物体を表現した2つの入力I_1とI_2は潜在空間中で互いに近いx_1とx_2 in Xにマップされる
        * 入力の形状が少し変動すると潜在変数xも少し変動する
        * hによる潜在表現はカメラのポーズ等外部の要因に対して不変である
        * 3Dモデルと対応する2D画像は潜在空間の同じ点にマップされる
            * このことは表現が曖昧でないことを保証し，ゆえに再構成をfacilitateする
    * 最初の２つは，入力を離散(3.1)または連続(3.2)の潜在空間にマップするencoderにより解決された
        * これはフラットまたは階層的でも可能(3.3)
    * 3番目はdisentangled representaitonsにより解決された(3.4)
    * 最後は訓練中にTL構造を利用して解決された．(7.3.1)

### 3.1 discrete latent spaces

* 3DShapeNet．Wu et al.
    * 30^3のdiscretized volumetric表現
    * 潜在空間4000x1
    * conv=3, fc=1
    * この標準アーキテクチャは3D形状分類，取得に使われ[4]，後にvoxel grid表現されたdepth mapからの3D volumetric 表現に適用された[3]．
    * 3Dconvolutionを2Dconvolutionに置き換えて，3D再構成にも使用されている
        *  [5], [6], [7], [8], [9], [10], [11], [12]. 
            * 初期の研究はレイヤ数とタイプが異なる
    * encoderにResNetを利用した変種がよく利用される[15]

### 3.2 連続潜在空間

* 前述のencoderを使うと潜在空間Xが連続ではないかもしれず，そのためにinterpolationが簡単にはできないかもしれない
    * x_1 = h(I_1)で，x_2 = h(I_2)なら，1/2(x_1 + x_2)が有効な3D形状にデコードされる保証はない．
    * また，入力の摂動がかならずしもx_1のそれと対応していない
    * VAEと3次元拡張版の3D-VAEは生成モデルに適した基本的に特別な性質を持っている
        * 潜在空間が，設計上連続であり，サンプリングとinterpolationが容易
            * キーアイデアは入力を特徴ベクトルにマッピングする代わりに，多変数ガウス分布の平均ベクトルmuと標準偏差ベクトルsigmaにマップすること．
            * サンプリングレイヤはこの2つのベクトルをとり，多変数ガウス分布からランダムサンプルにより，特徴ベクトルxを生成する．これがdecoding段階への入力となる
                * このアイデアはvolumetric[17],[18], depth-based[19], surface-based[20], point-based[21]の3D再構成で連続潜在空間を学習するために利用されてきた．
                    * 3D-VAEは通常のendcoderと比べて，ランダムに潜在空間からサンプルできる．入力のバリエーションを生成するために．曖昧な入力から複数のちゃんとした３D形状を再構成できる
                        * つまり，入力画像の一部が隠れているとかの時
                        * 訓練中に見せていない画像についても良く汎化できる．

### 3.3 Hierarchical latent spaces

* Liu et al.[18]は入力を１つの潜在表現にmapするencoderはrichな構造を抽出できないので，ぼやけたreconstructionになることを示し，それを解決するためにもっと複雑な内部変数構造を導入した．
    * 潜在特徴検出器の構造的な配置の学習を導くという特定の目的で．
    * この手法は，局所潜在変数レイヤのsetに固定(hardwired)されたグローバル潜在変数レイヤからスタートする．
        * (潜在変数)それぞれが特徴抽象化の1階層を表現するタスクを担う．
        * skip-connectionsは潜在コードを結びつけ，トップダウンのやり方で，入力に近い潜在コードが低レベルの特徴を表現する傾向にある
            * 入力から離れた局所コードが高レベル特徴を表現する
            * 最後に，3D再構成のようなタスク特有のモデルに入力するときは，局所潜在コードがconcatenateされてflattenされた構造になる

### 3.4 Disentangled representation 

* 画像中の物体の見た目は物体の形状やカメラポーズ，ライティング条件等によって異なる．
    * 標準的なencoderは学習したcode xの中にこれらすべての変動を表現する
        * ポーズやライティングなど外部要因に対して不変であるべき認識や分類[4]のような応用ではこれは望ましくない
        * 3D再構成もshape, pose, lightingが異なるコードとして表現されるdisentangled representationの恩恵を受けることができる
            * この目的で，Grant et al.[6]はRGB画像を形状コードと変形コードにマップするencoderを提案した．
                * 形状コードは3Dshapeにデコードされ，ライティング条件やポーズをエンコードしている変形コードは次の2つにデコードされる
                    1. 正しいライティングであるもう1枚の80x80 RGB画像．upconvolutional layerを使う
                    2. カメラポーズ．全結合層を使う．
                * disentangled表現のために，ネットワークはforwardパスでは，画像decoderがshape codeとtransformation codeから入力を受け取る
                * backwardパスでは，画像decoderからshape codeへのシグナルは形状だけを表現するようにsupressされる
* Zhu et al.[23]は6DOF(6自由度) pose parametersとshapeをdecouplingして同じアイデアに従った
    * ネットワークは２D入力から３D形状を再構成する．ただし正しい（canonical） poseで．
    * 同時に，pose 回帰器が6DOFポーズパラメタを推定する．
        * これは再構成されたcanonical shapeに適用される．
        * pose とshapeをdecoupling することはネットワークの自由パラメタを減らし，効率性が上がる

## 4. volumetric decoding

* volumetric 表現は3D物体周辺の空間を3D voxcel grid Vに離散化する．
    * 離散化が細かいほど，表現が正確になる
* 3D形状X^ が示すものが未知の３D形状Xとできるだけ近くなるようにグリッドV^ = f_theta(I)を復元することがゴール
* volumetricの利点は2D画像解析用に設計された多くのディープラーニングの構造が，簡単に3Dに拡張できるから
* この節は異なるvolumetric 表現に着目し（4.1），低解像度(4.2)と高解像度(4.3)のためのデコーダ構造の復習を行う．

### 4.1 volumetric representations of 3D shapes

* 文献で使用されている表現は主に４つある
    * Binary occupancy grid
        * voxelは物体に属していれば１，背景に当たるvoxelは0
    * Probabilistic occupancy grid
        * voxcelが物体の表面に属している確率を値とする．
    * The Signed Distance Function(SDF)
        * 最も近い表面点とのsigned distance(符号付き距離)を値とする．
            * voxelが表面の内側なら正，外側なら負である
    * Truncated Signed Distance Function(TSDF)
        * Curless and Levoy[36]で導入された．
        * range sensorの視野（sight）に沿って距離を推定し，projective signed distance fieldを形成し，そのfieldを小さい正および負の値でtruncateする．
* Probabilistic occupancy gridが特に尤度を出力する機械学習アルゴリズムに適している
* SDFは表面位置の曖昧ではない推定と，法線の方向を提供する
    * しかし，深度マップのような部分的データから構成するのは簡単ではない
* TSDFは表面ジオメトリから無限に伸びる完全なsigned distance fieldを諦め，部分的な観測に基づくfieldの局所的な更新を可能にする．
    * 深度マップから3Dvolumeを再構成するのに適している．[25], [30], [34], [37]
* 一般に，volumetric 表現は物体周辺のvolumeのregular samplingによって作られる
    * Knyaz et al.[29]はFrustum Voxel ModelまたはFruxelという表現手法を導入した
        * これはvoxelグリッドとdepth表現を組み合わせたもの
        * カメラの3D frustum(錐台)のsliceをvoxel空間を作るために使っており，そのためvoxelスライスの正確なalignmentと入力画像の輪郭が得られる

### 4.2 Low resolution 3D volume reconstruction

* encoderで入力のコンパクトなベクトル表現が学習されれば次のステップはdecoding関数gを学習すること
    * ベクトル表現をvolumetric voxel gridにマップするgeneratorあるいはgenerative modelとして知られる
    * 標準的なアプローチはconvolutional decoder　あるいはup-convolutional networkを使う
        * convolutional encoderをミラー（同じ構造を反対向きに）したもの
        * Wu et al.[3] は深度マップから3D volumeを再構成するためにこの手法を最初に提案したものの一つ
            * 拡張： [8], [9], [17], [26], [38]
            * 3D voxel grid を中間出力なしで直接回帰しようとした： [9], [12], [14], [18]
            * これらは１または複数の写真からキャリブレーションされたカメラで3D再構成ができた
                * 計算量とメモリ使用量が多いので，これらは低解像度しか出せない．
                    * 32^3, 64^3程度．それ以上は詳細の復元に失敗する
        * MarrNet[7]は２段階の再構成ネットワーク．
            * 最初の段階は入力画像，深度マップ，法線マップ，シルエットマップからの再構成にencoder-decoder構造を使う．
                * これらの３つのマップは2.5スケッチと呼ばれる．これらはもう一つのencoder-decoderの入力になる
                    * このencoder-decoderはvolumetric 3D shape を回帰する．
            * このネットワークは後にSun et al.[10]により入力のポーズを回帰するために拡張される
            * この２段階の利点は，full 3D modelに比べて，depth map, normal map, silhouette mapは2D画像から再構成するのがよほど簡単なこと．
                * 3Dモデルも画像よりこれらのマップからの方が再構成がかんたん
                * 但し，複雑なものや薄いものは再構成できない

### 4.3 High resolution 3D volume reconstruction

* wu et al. [7]は単純にnetworkを拡張して128^3サイズの再構成ができる
* volumetric gridはメモリ要求量が大きい．3乗で増加する．
* 本節は高解像度volumetric gridsを再構成するために使用されたテクニックを紹介する
    * 空間分割，形状分割，部分空間パラメトライゼーション，coarse-to-fine再構成戦略の有無で分類した

### 4.3.1 空間分割

* 標準的なvolumetric gridsは畳み込み計算を行うことができるが，表面の要素が僅かなvoxelにしか含まれず非常にスパースである
    * 解像度の問題を解決するためこのスパースさを利用した手法もある [31], [32], [39], [40]. 
        * octreeのような空間分割を使用して256^3から512^3までのサイズで再構成できる
            * DLベースの再構成問題にoctreeを使うには２つの問題がある
                1. 計算の問題．convolutionは標準的なグリッド上で操作すると実装しやすい(特にGPU上で)．このためWang et al.[31]はO-CNNを設計し，訓練と評価をGPU上で実行した．これはoctant(８分割の象限)情報とCNN featureをグラフィックメモリに効率的に保存するための新しいoctree データ構造．
                    * O-CNNは色々なCNN構造をサポートし，異なる表現の3D形状で動作する．3D表面で占められたoctants上での計算のみに制限することで，O-CNN上でのメモリと計算コストがoctreeの深さが増えるごとに２次式で増加することになる．これにより3DCNNは高解像度の3Dモデルを扱う事ができる
                2. octree構造は物体に依存するため，DNNがoctreeの構造とその内容を両方推定することを学習する必要がある．文献における解決方法を後に示す．

#### 4.3.1.1 事前定義されたoctree構造の使用：

* 最も簡単なアプローチは，実行時に，octreeの構造が既知であること．
    * これは出力octreeの構造が入力の構造と同一でありうるセマンティックセグメンテーションのような応用では可能．
        * しかし多くの重要なシナリオで，例えば3D再構成，形状モデリング，RGB-D合成，octreeの構造は事前にはわからず予測する必要がある．この目的で，Riegler et al.[39]はOctNetと呼ばれるhybrid grid-octree構造を提案した．
            * キーアイデアはoctreeの最大深さを小さい数に制限し，例えば３，いくつかのそのような浅いocteeを通常のgridに置く．
                * この表現はdeepで高解像度な3Dconvolutional networkを可能にする
                    * しかし，テスト時には，Riegler et al.[39]は個別のoctree構造が既知であることを想定している
                        * ゆえに，この手法は256^3の解像度で3Dvolumeを再構成できるが，異なる種類の物体が異なる訓練を要求する可能性があり，柔軟性にかける

#### 4.3.1.2 octree構造の学習：

* octree構造とその内容を同時に学習したい．次の様にすればできる
    * 畳み込みencoderで入力をコンパクトなvectorにする(3章)
    * 普通のup-convolutional netwrokでデコードする．これは荒いvolumetric 再構成になる．解像度は32^3(4.2章)
    * 再構成されたvolumeはoctreeのrootを構成するが，これを８個に（８分儀に）分割する．境界voxelのあるoctantsはupsampleされ，更に処理される．up-convolutional networkを使って，そのoctantの領域の再構成をより細かくするために．
    * octantsはほしい解像度が得られるまで再帰的に処理される
* Hane et al[35]はHierarchical Surface Prediction(HSP)を導入した．
    * 最大256^3のvolumetric gridを再構成するために上記の手続きを使用している．
        * octreeは深さ優先で探索されている
* Tatarchenko et al[32]はOctree Generating Networks(OGN)を導入したが，
    * こちらは同様の手続きで，octreeが幅優先探索される．
        * OGNは512^3のvolumetric gridを再構成できる
* Wang et al[33]はpatch-guided partitioning 戦略を導入した．
    * 3D形状を，octreeの葉ノードが平面の表面(planar surface)を近似するようなoctreeで表現する，というのがコアアイデア
        * 潜在表現からそのような構造を推定するために，decoderをcascadeにして使った．一つのdecoderが一つのoctree level．
            * 各octree levelで，decoderは各セル内でのplanar patchを予測する．
                * predictor(全結合レイヤで構成される)が各octantにかんしてpatchの近似状況を予測する．(セルが"空"か，"表面がよく近似されている"か，"表面は近似できていない")
                * 近似できていないセルは更に分割され，次のレベルで処理される
    * この手法はメモリ使用を6.4GBから1.7GBに減らした．256^3で．
    * デメリットは隣接するパッチがシームレスに再構成されないこと．
        * 平面は各octree cellにfitするので，曲がった表面はよく近似できない

###  4.3.2 形状分割

* 3D形状が埋め込まれている空間を分割するのではなく，形状がgeometric partsの組み合わせだと考える．各パーツを個別に再構成し，つなぎ合わせる．
* Li et al[40]はパーツレベルのvoxel表現だけを生成した．
    * Gen-erative Recursive Autoencoder for Shape Structure (GRASS)を導入した．
        * アイデアは問題を２段階に分けること
            * 最初のステップでRecursive Neural Nets(RvNN)のencoder-decoderをGenerative Adversarial Networkと組み合わせて，形状構造を対称な階層に構成するかということと，パーツの配置をどのように合成するかということを学習する．
            * 第２ステップではもう一つの生成モデルを使って，各パーツのジオメトリをどのように合成するかを学習する．32^3のvoxel gridで．
    * パーツ生成ネットワークは32^3しかないが，個別のパーツが別々に扱われるので，再構成の形状は高解像度になる
* Zou et al[28]は3D-PRNNと呼ばれるgenerative recurrent neural networkを使って3D物体をプリミティブの集まりとして扱った．
    * encoderで入力をサイズ32のベクトルに変換する
        * その後，LSTMのスタックでできたreccurent generatorと，Mixture Density Network(MDN)が順に，形状の中の異なるパーツを特徴ベクトルから予測する．
            * 各タイムステップで，networkはfeature vector と前に出力した１個のprimitiveで条件付けられたprimitiveの集合を予測する
                * 予測されたパーツは再構成の結果を構成するために結合される
    * この手法はcubiodsの形状で抽象化された表現しか予測できない
    * それをvolumetric based再構成技術と合わせることでパーツレベルの3D再構成をrefineすることができる．

### 4.3.3 Subspace parameterization 

* すべての可能な形状の空間は直行基底の集合B={b_1, b_2, b_3, ...}でparameterizeできる．
    * すべての形状X は基底の線形結合で書ける．
        * X = sigma_{i=1}^{n} alpha_i beta_i 
            * ただしalpha_i in R
        * この式は再構成の問題をシンプルにする
            * volumetric grid Vを再構成する方法を学習するかわりに，係数alpha_i, i=1, .., nを推定する，全結合レイヤで構成されたdecoderを設計でき，完全な3Dvolumeを復元できる．
* Jhonson et al.[13]は離散コサイン変換-Ⅱ(DCT-Ⅱ)を，Bを定義するのに使った．
    * 彼らは低周波数のDCT-II係数alpha_iを予測するのにconvlutional encoderを使うことを提案した
        * これらの係数はDCTdecoderによって3Dvolumeに変換される．decoding networkはDCT decoderで置き換えられる
            * これは訓練と推定の計算コストに深い影響を与える：n=20^3のDCT係数を使ってnetworkは128^3のvolumetric gridの表面を再構成できる
    * DCT基底のような一般基底を使うことの問題は，正確に複雑な3D物体を表現するのに多数の基底が必要になること
        * 実践的には，既知のカテゴリの物体，例えば人の顔や人の体，を扱う．訓練データが利用できる．
            * 形状の空間をパラメトライズするためにPrincipal component基底(PCA基底)を使うこともできる．
                * こちらは一般基底と比べて非常に小さい数の基底で済む．（1000のオーダに対し10のオーダ）

### 4.3.4 Coarse-to-fine refinement 

* volumetric で解像度を上げるもう一つの方法は段階を複数にすること [25], [27], [34], [41], [42].
    * 32^3とか低解像度から開始，encoder-decoderアーキテクチャを使う．
        * 続くステージはupsampling networkとして機能するが，局所領域に注目して再構成をrefineする
    * Yang et al.[42]は2つのup-convolutional layerからなるup-samplngモジュールをつかった
        * 256^3まで解像度を高められる
* Wang et al.[27]は再構成された粗いvoxel gridを画像のシーケンス(スライス)として扱った．
    * 3D物体はスライスごとに高解像度で再構成される
    * この手法は2D up-convolutionで効果的なrefinementができるが，訓練データが一貫して揃えられていなければならない
        * volumesは第一主成分の方向に沿って２D画像にスライスできる．
            * また，個別のスライスをそれぞれ独立に再構成すると最終的なvolumeが不連続で一貫していないものになる
                * wangらはLong term Recurrent Convolutional Network(LRCN)[43]を使ってこれを解決した
                    * LRCNはLSTMの入力として固定長のベクトル表現を作るために5個の連続したスライスを取り込む
                    * LSTMの出力は2D畳み込みデコーダを通る．高解像度の画像を出力するために
                        * 高解像度2D画像の系列は出力の3Dvolumeを形成する
* volume slicingの代わりに，追加のCNNモジュールを使ったpaperもある．これはrefinementが必要な領域にフォーカスを当てる．
    * Dai et al[25]は最初に粗いが完全な形のvolumeを32^3で推定し，その後繰り返しのvolumetric patch 合成過程を通してそれをrefineして128^3にする．
        * この合成過程はvoxelを３Dモデルのデータベースから取り出したk-nearest-neighborsからcopy-pasteするものである．
    * Han et al[41]はDai et alの手法を局所3D CNNを導入して拡張した．パッチレベルでの表面refinementのために．
    * Cao et al[34]は最初のステージは128^3のグリッドを復元し，16^3のvolumetric blockを受け取ってさらなるrefinementが必要かどうかを予測する．
        * refinementが必要なblockはresampleされて512^3になり，もう一つのendcoder-decoderにrefinementのために入力される．refinementをガイドするために最初の粗い予測と一緒に．
            * どちらのサブネットワークもU-net構造[44]を採用しており，convolutionとpoolingレイヤはOctNet[39]において対応するものと入れ替えている
* これらの手法は局所推定の前に時間のかかる手法を必要としており，例えば，
    * Dai et al.[25]はnearest neighbor searchを3Ddatabaseで必要とする
    * Han et al[41]は3D境界検出を必要とする
    * Cao et al[34]はbloackがさらなるrefineを必要とするかどうかの評価を必要とする

### 4.4 Deep marching cubes 

* volumetric 表現は任意のtopologyの3D形状を扱えるが，実際に３D再構成の興味のある量である3D表面meshを得るためにはmarching cubes[45]のような後処理を必要とする．
    * そのため全体のパイプラインはend-to-endで訓練できない
        * これを解決するため，Liao et al.[46]はend-to-endに訓練できるnetworkであるDeep Marching Cubesを導入した
            * これは任意のトポロジの表面表現を明示的に予測する．
            * ジオメトリからメッシュトポロジを分離する修正された微分可能名表現を使う
                * ネットワークは一つのencoderと２つのbranch decoderからなる．
                    * 符号付き距離を予測する代わりに，最初のbranchは各voxelに関してoccupancyの確率を予測する
                        * コーナー(物体の境界？)にあるoccupancy variablesによってmesh topologyは明示的に(確率的に)定義される
                    * ２つめのbranchは各cellのすべてのedgeについてvertex locationを予測する
                    * 両方とも明示的に定義されたトポロジと頂点の位置がmesh上の分布を定義する．これは微分可能でback propagationできる
            * この手法はend-to-end訓練が可能だが，32^3の低解像度に限られる
* 直接高解像度volumetric gridsを推定する代わりに，multiviewの深度マップを生成する手法もあるが，これは一つのoutput volumeに融合される．
    * 利点はdecoding stageにおいて，３Dconvolutionより効率的な2Dconvolutionを使えること
    * 欠点はdepth mapが外部表面だけをencodeすること
        * 内部構造を捉えるために，Richter et al[47]はMatryoshka Networksを導入した．これはL個のネストされたdepth layerを使う
            * 形状は最初に最初のレイヤのdepth mapを融合して，それから偶数レイヤの形状を引き，さらに奇数レイヤの形状を足すことで再帰的に再構成される
                * この手法は256^3のサイズのvolumetric gridを再構成できる

## 5. 3D surface decoding

* volumetric 表現ベースの手法は，情報が3D形状の表面付近のみリッチなので計算的に無駄が多い．
* 表面を直接扱うことのメインチャレンジは，meshやpoint cloudのような共通表現はは通常構造化されておらず，ゆえに，deep learning アーキテクチャに簡単にはfitしないこと．とくにCNNを使ったものでは．
* 本章ではこの問題に対する手法を振り返る
* 最先端の手法を３つのメインカテゴリに分ける：parameterizationベース（5.1），template deformationベース(5.2)，point ベース(5.3)

### 5.1 parameterization -based 3D reconstruction

* ３角形メッシュを直接扱う代わりに，3D形状Xの表面をmapping zeta: D -> R^3，ただしDは標準的なparameterization ドメインと表現する事ができる
    * これにより3D再構成のゴールは形状関数zetaを入力Iから復元することになる
    * Dが３Dドメインのとき，このクラスの手法は4章で説明したvolumetric 手法となる
    * ここではDが標準の2Dドメインの場合を考える．D=[0,1]^2, または単位球D=S^2．
        * 最初のケースではencoder-decoder構造を標準の2D convolution で実装できる
        * 後のケースでは，spherical convolutions[57]を使う．
* spherical parameterizationとジオメトリ画像[58],[59],[60]は最も一般的に使われるparameterizationだが，種数０でしかもディスク状の表面にしか適していない
    * 任意のトポロジの表面を扱うには，表面がディスク状のパッチに切断される必要がある，その後標準の2Dドメインにunfoldされる
    * 与えられた表面についての最適な切断を見つけること，更に重要なことに，同じカテゴリの形状の中は一貫した切断を見つけることはチャレンジングである．
        * 実際，ある形状カテゴリについてナイーブに独立なジオメトリの画像を作ってそれらをdeep neural networksに入れると一貫した3D形状表面を生成できない[48]
    * 種数0の表面について，形状カテゴリで一貫したロバストなジオメトリ画像をつくるために，そのカテゴリの3D物体は最初に対応する必要がある[61],[62],[63]
        * Sinha et al.[48]はcut-invariant procedureを提案したが，これは大規模な対応問題を解決し，自動的にx,y,z表面座標をエンコード舌ジオメトリ画像を生成するようにdeep residual netsを拡張した．
            * この手法は３つの別々のencoder-decoder networkを使い，x, y, zジオメトリ画像を別々に学習する
                * 3つのネットワークは標準のconvolution，up-residual，down-residual blockで構成される
                    * それらは深度画像またはRGB画像を入力として，shape-aware L2 誤差を最小化することで3D再構成を学習する．
    * Pumarola et al[49]はdeformable表面の形状を２つのbranchを持つネットワークで再構成した
        * detection branch とdepth estimation branchであり，並行に実行される．３番目のshape branchが検出マスクとdepth mapをparameterized surfaceに統合する
    * Groueix et al.[50]は3D物体の表面をm個のパッチに分解し，各パッチiはマッピングzeta_i: D =[0,1]^2 -> R^3と定義される．
        * 彼らはm個のブランチからなるdecoderを設計した
            * 各branch iは関数zeta_iを推定することでi番目のパッチを再構成する
                * 最終的に，再構成されたパッチは全体の表面を形成するためにマージされる．
                    * この手法は種数の高い表面を扱うことができるが，任意の種数を扱えるほど一般的ではない
                        * 実際，最適なpatchの数は表面の種数に依存する(種数0ではn=1，種数１ではn=2など)
                            * また，パッチは連結していることは保証されないが，結果を後処理することができるので不連結なパッチの間の溝を埋めることができる.
    * まとめると，parameterizationメソッドは種数が低い表面に限定されている．
        * なので，与えられた形状カテゴリに属する物体の再構成に向いている．例えば人の顔や体等．

### 5.2 Deformation-based 3D reconstruction 

* このクラスの手法は入力Iをとり，deformation field deltaを推定する．これはテンプレート３D形状に適用すると，再構成された3DモデルXとなる．
    * 既存技術はdeformation modelの種類によって(5.2.1)，またはテンプレートの定義方法(5.2.2)，field deltaを推定するnetworkの構造(5.2.3)によって異なる
    * 3D shape X =(V, F)はn個の頂点V={v1, .., vn}と表面Fで表現されるものとする．X~ =(V~ , F)はテンプレート形状を表す

#### 5.2.1 Deformation models

1. Vertex deformation
    * このモデルは3D形状Xがテンプレートの個別の頂点の線形ディスプレイスメントで書けることを仮定している．
        * つまりall v_i in V, v_i = v_i~ + delta_i，ただしdelta_i in R^3である
        * deformation fieldはdelta=(delta_1, ..., delta_n)で定義される．
        * このdeformation modelはKato et al[51]とKanazawa et al[53] で使用された．
        * さらなる仮定として，
            1. 形状XとテンプレートX~ の頂点が１対１に対応していること
            2. 形状XがテンプレートX~ と同じトポロジを持っていること
2. Morphable model
    * 代わりに，学習されたmorphableモデルを，3D meshをparameterizeするために使うことができる
        * V~ を平均形状として，lambda_1, .. lambda_kを直交基底の集合とする．いかなる形状Vも次の様に書ける
            * V= V~ + sigma_{i=1}^{K} alpha_i Lambda_i, alpha_i in R (1)
            * (平均形状＋係数×直交基底の線形結合) 
        * (1)式の第２項はdeformation field deltaとみなせるが，delta = sigma_{i=1}^K alpha_i Lambda_i，は平均形状の頂点V~ に適用できる．
            * Lambda_0 = V~ と，alpha_0 = 1と置くことで，式(1)はV = sigma_{i=0}^{K} alpha_i Lambda_i と書くことができる．平均V~ はバイアスとして扱われる
    * morphable modelを学習する一つの方法は，cleanな3D mesh サンプルに対してPrincipal Component Analysis(PCA)を使うこと．[64]．近年の技術は2Dアノテーションだけでカテゴリ特有の3D morphable modelを2Dシルエットや2D画像から作ることができる．[65],[66]．これらの手法はオブジェクトの効率的なdetectionとsegmentationと，camera pose estimationを必要とする．これはCNN-based 技術でできるものもある．
3. Free-Form Deformation(FFD)
    * template X~ の頂点を直接deformingする代わりに，その周辺の空間をdeformすることができる．
        * これはX~ の周辺をm個のコントロールポイントを持つ集合P in R^{mx3}と定義することでできる．これはdeformation handlesとよばれる
            * deformation field Delta = (delta_1, ... , delta_m) m << nのとき，これはコントロールポイントに適用され，形状の周辺の空間全体をdeformする．ゆえに形状の頂点Vも次の式に従ってdeformする
                * V^T = B Phi (P+ Delta)^T (2)
                    * B in R^{nxm}はdeformation matrixであり，これは多項式基底の集合．例えばbernstein polynomials[56]
                    * Phiはmxm行列．FFD field で対称性を付加するために使われる[67]．Deltaはdisplacements．
            * この手法はKuryenkov et al[55]，Pontes et al[56]，Jack et al[54]で使用された．
            * 利点は形状とテンプレートに1対1の対応が必要ないこと．
            * ただしFFDによって近似できる形状はテンプレートと同じトポロジだけ．


#### 5.2.2 Defining the template

* Katoら[51]は球をテンプレートにし，Wangら[52]は楕円体を使った．Henderson らは[20]２タイプのテンプレートを使った：直方体プリミティブへ抽象化される複雑な形状，および複数の頂点に分割される直方体．
    * 前者は複数の要素を持つ人間の作った形状に適しており，後者は種数0の形状に適している．球やellipsoidと比較して特に利点があるわけではない
* 収束を早めるためにKuryenkov ら[55]はDeformNetを導入した．これは画像を入力にとり，データベースから最も近い形状を探し，式2のFFDモデルでdeformを行う．
    * この手法は詳細を保存した３D再構成ができる
* Pontes et al[56]はDeformNet[55]と類似の手法を使用した．
    * しかし，一度FFD fieldが推定され，テンプレートに適用されると，辞書から取り出した3Dモデルの重み付きわとして定義されたresidualを加えることで結果はさらにrefineされる
        * deep neural networkの役割はどうやってdeformation field Delta を推定するかと，refinement residualを計算するときにつかう重みを学習すること
    * Jackら[54]は一方，FFDを使って複数のテンプレートをdeformし，最もよいfitting精度を提供するものを選んだ
* もう一つのアプローチはテンプレートを学習すること，sepratelyに統計的形状解析技術を使って，例えば訓練集合のset上でのPCA ，またはjointlyにdeep learning でdeformation field を使って．
    * 例えばTulsiani et al[66]は各カテゴリの3Dモデルの平均形状をクラス特有のテンプレートとして使った．
        * deep neural networkは入力形状のクラスとdeformationを両方とも推定する．クラスはclass特有の平均形状を推定するのにつかう．deformationはクラス特有の平均形状に適用する
    * Kanazawa et al[53]は同時に平均形状とdeformation fieldを学習する．ゆえにmorphable modelを学習するための別々の3D訓練集合を必要としない．
    * どちらのケースでも，再構成結果は詳細が不足しており，車や鳥といった人気のあるカテゴリに限られる．

#### 5.2.3 Network architectures

* Deformation baseの手法もendocer-decoder構造を使う．encoderはconvolutionで入力を潜在変数xにmapする
    * 潜在空間は[20]のように離散または連続(VAE)．
    * デコーダーは一般的にfully-connectedで構成される．
        * Kato et al[51]はfully connectedを入力のシルエットにマッチするため球に適用するdeformation field を推定するのに使った．
* 球や楕円をdeformする代わりにKuryenkov et al[55]はデータベースから入力Iに最も類似する3Dモデルを取り出し，それを入力にマッチさせるのに必要なFFDを推定した．
    * 取り出されたテンプレートは最初にvoxel化され3D CNNを使って他の潜在変数x_tにencodeされる．
    * 入力画像の潜在表現と取り出したテンプレートの潜在表現はconcatenateされ，decodeされる．up-convolutional networkを使って．
        * decodeされてvoxel gridのvertices上で定義されたFFD fieldになる
* Pontes ら[56]は同様の手法で，しかし潜在変数xがデータベースから入力と最も近いモデルを見つけるclassifierへの入力として使われることが異なる．
    * 同時に，潜在変数はfeed forward networkでデコードされ，deformation field Deltaと重みalpha_i , i=1,..., Kになる．
        * 抽出されたtemplateはDeltaとCAD modelsの辞書からの重みづけられた組み合わせを使ってdeformされる．重みalpha_iを使って．
* これらの手法の変種を設計することもできる．
    * たとえば，データベースから取り出したモデルをtemplateにする代わりに，クラス特有の平均形状を使う事もできる
        * このケースでは，潜在変数ｘは入力を形状カテゴリの一つに分類するために使用できる，それから学習済みのそのカテゴリの平均形状をテンプレートとして取り出す[66]．
        * また，平均形状を別々に学習する代わりにKanazawa et al[53]は平均形状をバイアス項として扱った．それはdeformation field Deltaと一緒にその後networkによって予測することができる．
        * 最後に，Wang et al[52]は粗い->細かいの戦略を採用したが，これは手続きをもっと安定にする．
            * 彼らは3つのdeformation blockで構成されたdeformation networkを提案した．
                * 各ブロックはグラフベースのCNN(GCNN)で，２つのgraph unpooling layersによってintersectされる．
                    * unpooling layersが頂点の数を増やし，deformation blocksは頂点の位置を更新する
* parameterization と　deformationベースの技術は表面または固定のトポロジしか再構成できない
    * 前者は種数の低い表面に限られ，後者はテンプレートのトポロジに限られる．


### 5.3 point-based techniques

* 3D形状はN個の頂点の順番のない集合S={(x_i, y_i, z_i)}_ {i=1}^{N} で表現できる．
    * そのようなポイントベースの表現はシンプルだがメモリ効率的．
        * それは興味深いパーツや細かい詳細に適している
            * なので，2017年には1件[68]だった論文が2018年には12件を超えている．[21], [21], [22], [69], [70], [71], [72], [73], [74], [75], [76], [77], [78],
            * また，2019には[77]などがdeep learning ベースのreconstructionに使用している
    * 本節は最先端のポイントベース表現と，対応するネットワーク構造について論じる．

#### 5.3.1 Representations 

* 点群のメインチャレンジは，点群はregularな構造を持っておらず，空間のregularityを利用したconvolutional 構造に簡単にはfitしないこと．
    * この制限を乗り越えるために３つの表現が考案されている．
        * 点群をサイズNx3の行列として扱う.[21], [22], [68], [71], [73], [77]. 
        * サイズHxWx3の，一つまたは複数の3チャネルグリッド[68],[69],[78]．グリッド中の各ピクセルは3D点の(x,y,z)座標をエンコードする
        * 複数のビューポイントからのdepth map[74],[79]
    * 最後の２つは，今後グリッド表現と呼ぶが，convolutional networksに適している
        * それらは2D convolutionだけを使って推定できるので，計算効率がよい．
            * depth map ベースの手法は物体の3D形状を推定するために追加のfusionステップが必要になる
                * cameraのパラメタが既知であれば簡単にできる
                * そうでなければ，point cloud 登録技術[80],[81]や，fusion networkを使う．[82]
            * point set表現は点の数Nを事前に固定する必要があるが，グリッド表現では，点の数は物体の性質に基づいて変わるが，グリッドの解像度によってboundされる．

#### 5.3.2 Network architectures 

* volumetricとsurface-basedな表現と同様，pointベースもencoder-decoderモデルを用いる．encoderについてはすべて同じアーキテクチャを用いるが，decoderは異なる．
    * 一般に，グリッド表現はup-convolutional networksを潜在変数のでコードに使う.[68],[69],[74],[78]
    * 点集合表現ではfully connected layers[21],[68],[70],[73],[77]を使う．点群が順番がないから
        * fully connected layerの利点はglobalな情報をcaptureできること．
            * しかし，convlutionにくらべて，計算的に高価である
                * convolutionの計算効率を利用するために，Gadelha et al[22]はKD-Treeのような空間分割木を使って点群を空間的に順番付けし，1D convolutionで処理した．
                    * 典型的なCNNでは，各畳込み操作は受容野に限られglobal情報もlocal情報も効率的に利用できない．
                        * **Gadelha et al.[22]**はこの問題を３つのことなる解像度を保持することで解決した．
                            * 潜在変数が３つの異なる解像度にでコードされ，サイズ4Kの点群を生成するために，concatenateされ1Dconvolutional layerで更に処理される．
    * **Fan ら[68]**は点集合表現とgrid表現を組み合わせたgenerative deep networkを提案した．
        * 最初のブロックは入力画像をとり，それを潜在表現にマップする．これはサイズHxWの３チャネル画像にデコードされる．
            * 各ピクセルの３つの値は点の座標である
        * 連続する各ブロックはその前のブロックの出力を受け取り，更にencodeし，それをHxWの3channel画像にデコードする．
        * 最後のブロックは前のものと同じタイプのencoderであり，その後に2つのbranchからなるpredictorが続く．
            * 最初のbranchはHxW(今回は32x24)のサイズの3channel画像を予測し，その各ピクセルの３つの値は点の座標である．
            * ２番めのbranchは全結合networkで，サイズNx3の行列を予測し，各行が3D点を表す(N=256)
        * ２つのbranchの予測はサイズ1024の3D点群を作るために集合和をつかってマージされる
        * この手法はJian et al[70]によっても使用された．
            * 訓練においての違いは7章で述べる
    * Tatarchenki et al[79]，Wang et al[78]およびLin et al[69]は同じアイデアに従ったが，decoder がN個のgridを回帰する．
        * 各gridはdepth map[79]をencodeしているか，または視点から見える表面の(x,y,z)座標[69]，[78]をencodeしている
            * 視点は全結合レイヤの系列でencodeされているが，これは入力画像の潜在表現と一緒にdecoderへの入力として提供される．
            * Li et al[74]は一方，複数branchのデコーダを用い，各デコーダが各view pointに対応する．
            * [79]とは異なり，各ブランチがcanonical depth mapを与えられたviewpointとdeformation fieldから回帰するが，これは入力にマッチするように推定されたcanonical depth mapをdeformする．Grid Deformation Units(GDUs)を使って．
                * 再構成されたgridは3Dにリフトされ，マージされる
    * volumetric 手法と同様，通常のpoint based 3D reconstructionは低解像度のgeometry鹿復元できない．
        * 高解像度のreconstructionについては，Mandikal et al[77]が複数のネットワークのカスケードを用いている
        * 最初のネットワークは低解像度のpoint cloudを予測する
            * 引き続くブロックは前に予測された点群を取り，PointNet[83]やPointnet++ [84]に類似したMLPを用いてグローバル特徴を計算し，各点を中心とするの球のなかでMLPを適用して局所特徴を計算する．
                * 局所特徴とグローバル特徴は集約され，他のMLPに入力されるが，これが密な点群を予測する．
                    * このプロセスはのぞみの解像度まで再帰的に繰り返す
    * Mandikal et al[21]はTL-embedding をvariational auto-encoderと組み合わせた．
        * 前者は3D点群とその対応するviewを潜在空間での同じ位置にマッピングする
        * 後者は入力画像から複数の可能な点群の再構成を可能にする
    * 最後に，点ベースの表現は任意のトポロジの3D形状を扱うことができる．
        * しかし，3D表面meshを得るためには後処理ステップを必要とする．
            * たとえばPoisson 表面再構成[85]またはSSD[86]，
        * だから入力から最後のメッシュまでのパイプラインは，end-to-endにならない．
            * ゆえに，３つの手法は中間表現上で定義される補助の誤差を最適化するだけ．

## 6 LEVERAGING OTHER CUES 

* 前の章では2D表現から直接的に３D物体を再構成する手法について論じた．
    * この章では中間表現(6.1)や時系列相関(6.2)など追加の手がかりを利用する方法を示すが，これにより3D再構成がboostされる

### 6.1 Intermediating

* deep learning ベースの3D　再構成の多くはrgb画像から3Dジオメトリを直接推定する
    * 問題を連続したステップに分解するものもあるが，これはdepth mapやnormal map, segmentation masksのような2.5D情報を推定する
        * space carving, 3D back projection に続くfilteringおよびregistrationといった伝統的な最後のステップが全体の3Dジオメトリと入力のポーズを再構成する
* 初期の研究はend-to-endの手法を提供している[7], [10], [37], [49], [76], [87], [88].
    * 例えば，Wu et al[7]と後にSun et al[10]は２つのブロックを用いた．
        * 最初のブロックはencoderで，その後に3つのブランチを持つdecoderが続く．これはdepth map，normal map, segmentation mask(2.5D sketchと呼ばれる)を推定する．
            * これらはconcatenateされ，もう一つのencoder-decoderに入力されるが，これは完全な3D volumetric gridを回帰する[7],[10],[87]．そして全結合レイヤの集合にも入力され，こちらはカメラポーズを回帰する[10]
                * end-to-endで訓練できる
* その他の手法は中間depth mapを次のものに変換する
    1. 3D occupancy grid[42]またはtruncated signed distance function volume[37]に変換する．これはその後3D encoder- decoder networkを用いて処理される．補完とrefineのために
    2. 部分点群に．これは点群補完モジュール[76]を用いて更に処理される．
        * Zhang et al[88]は推定されたdepth mapを球マップに変換し，unpaintし，穴を埋めるために，もう一つのencoder-decoderを使う．
        * unpaint されたspherical depth mapは3Dにback-projectedされ，voxel refinement networkを使ってrefineされる.voxel refinement networkはサイズ128^3のvoxel occupancy gridを推定する
    * 事前定義された任意のviewpointから複数のdepth mapを推定する技術もある．
        * Tatarchenko et al[79]は入力にRGB画像をとtarget viewpoint vをとり，viewpoint vからみたその物体のdepth mapを推定するネットワークを提案した．
            * viewpointを変えることによって，networkは複数のdepthを推定でき，完全な３Dモデルに統合できる．
                * この手法は普通のencoder-decoderと，view pointをencodeするために３つのfully connected layerで構成された追加のネットワークを使う．
                * Soltani et al[19]とLin et al[69]は同じ手法に従ったが，depth mapをbinary maskと一緒に，事前定義されたview pointから推定した．
                * どちらの手法でもマージは後処理で実行される．
        * Smith et al[89]は最初に低解像度のvoxel gridを推定した．
            * その後６軸のalignされたviewから計算したdepth mapを入力にとり，シルエットとdepth refinement networkを用いてそれらをrefineする．
                * refineされたdepth mapはspace carving を用いてサイズ256^3のvolumetric gridに全結合される
    * Tatarchenko et al[79], Lin et al[69], Sun et al.[10]はbinary/ silhouetteマスクをdepth mapと一緒に推定した．
        * binary maskは3D空間の表面にback projected されない点をfilter outするために使われた．
            * これらのdepth mask-basedな手法の副作用は，廃棄される点の数が多いとかなりの計算の無駄が生じること．特に薄い構造の物体について．
                * Li et al[74]はこの問題を学習されたdeformation fieldを使ってregular depth mapをdeformすることで乗り越えた．
                    * 入力にベストフィットするdepth mapを直接推定する代わりに，Li ら[74]は2D pre deformation depth mapとその対応するdeformation fieldを事前定義されたcanonical view pointsにおいて推定する．
                        * これらはそれぞれGrid Deformation Unit (GDU)に渡される．これはdepth map のregular gridをdeformed depth mapに変換する．
                            * 最後に，deformeされたdepth mapはdenseなpoint cloudに融合するために一般的な座標フレームへ変換される
    * 複数ステージ手法の利点は，depth , normal, silhouette mapは2D 画像から復元するのが簡単なこと．
        * 同様に，3D modelもこれらのmodalitiesからのほうが，2D画像のみからより復元がかんたん．

### 6.2 Exploiting spatio-temporal correlations 

* 同じ物体が空間的に分散した画像が複数の時間に渡って得られることはよくある．
    * 単一の画像ベースの再構成技術が，各フレームを独立に処理することで3D形状を再構成するのに利用できるし，その後再構成をregistration技術を使ってマージできる．
        * 理想的には，フレーム間の時空間での相関関係を利用したい，特に隠れている部分があったり，ノイズが多いシーンで曖昧さを解決するために．
            * 特に，時刻tのネットワークは時刻t-1までに再構成したものを覚えているはずで，それを新しい入力とともに用いて，時刻tの物体やシーンを再構成できるはず．
                * この時系列データを扱う問題はRecurrent Neural Networks(RNN)とLong-short Term Memory(LSTM)で解決されたが，これは入力を一定期間に渡って覚えておくものである
        * Choy ら[8]は3D recurrent Reconstruction Network(3D-R2N2)と呼ばれる構造を提案しており，これはネットワークが適応的に，また一貫して，物体の適した3D再構成を異なる視点からの(矛盾することもありうる)情報を元に学習することを可能にする．
            * ネットワークは新しい視点が利用できるようになると，incremental refinementを各時刻でできる
                * これは２つの部分からなり，普通のconvolution encoder-decoderと，convolutional decoderの開始位置に置かれた3D convolutional Long-Short Term Memory(3D-LSTM)の集合である．
                    * これらはencoderの出力をとり，選択的にcell状態を更新するか，または入力ゲートを閉じて状態を保持する．
                        * decoderはLSTMの隠れ状態をデコードし，voxel occupancy mapの形で確率的な再構成を生成する．



## 7. TRAINING

* アーキテクチャに加えて、ディープニューラルネットのパフォーマンスはその訓練方法に依存する
* 教師ありモード(7.1)と、文献で使用されている訓練手順(7.3)について述べる

### 7.1 Degree of supervision

* 初期の手法は教師ありだった（７．１．１）
    * しかし、既存手法または手動で正解３Ｄを得る、またはことは高価であり難しい
        * なので、近年の手法はほかの教師あり信号を利用することで３Ｄ教師ありの量を最小化しようとしている

#### 7.1.1 Training with 3D supervision

* 教師ありの手法は正解の３D形状と対応する画像を必要とする。
    * 訓練プロセスは再構成された３D形状と正解の３D形状の不一致度を測る誤差関数を最小化する
    * 勾配が計算できるように微分できる必要がある。
        * そのような関数には次のようなものがある：
            1. Volumetric loss:
                * 再構成されたものと正解との体積の間の距離
                    * L_vol(I) - d(f(I), X) (3)
                * d(., .)は二つの体積の間のL2距離または負のIOU
                * どちらのmetricsもbinary occupancy gridsとTSDF表現に適している
                    * cross-entropyは最も一般的に使われる[24]
                        * L_CE = - 1/N sum_{i=1}^{N}{p_i log p_i^ + (1-p_i)log(1-p_i^)} (4)
                            * ここでp_iはvoxel iが占められている正解の確率で，p_i^は推定確率，Nはvoxel数
            2. 点群誤差
                * 点ベースの表現を使う時，再構成誤差はEarth Mover's distance(EMD)[55],[68]やChamfer Distance(CD)で測ることができる[55], [68]
                    * EMDは全ての点の対応の順列での，ある集合の中の点と他の集合の中の点の間の距離の和の，最小値として定義される
                        * もっと厳密に言うと，２つの点の集合S_gtとS_recがあり，EMDは次のように定義される
                            * L_EMD = min{S_gt -> S_rec} sum_{P in S_gt} || p - phi(p)|| (5)
                                * ここでphi(p) in S_recはS_rec上でp in S_gtと最も近い点．
                    * CD誤差は
                        * L_CD = 1/N_gt min_{p in S_gt} ||p - q||^2 + 1/ N_rec min_{q in S_rec}||p-q||^2 (6)
                            * N_gt とN_rec　はそれぞれ，S_gtとS_recの大きさ．
                                * CDはペアごとの関係を決めるのにsub-optimulなマッチングを使うので計算量的にEMDよりも簡単
            3. 複数の可能な再構成を生成することを学習する
                * １枚の画像からの再構成はill-posedであり，与えられた入力について複数の可能な再構成があるかもしれない．
                    * Fan ら[68]はNNが分布的な出力を生成できるよう訓練するため，Min-of-N(MoN)誤差を導入した．
                        * アイデアは，入力を摂動させるための特定の分布から選んだランダムベクトルrを使うこと
                            * ネットワークは入力の摂動それぞれから，可能な3D形状を生成することを学習する．次の誤差をつかう
                                * L_{MoN} = sum_i min_{r \sim N(0,1)} {d(f(I, r), S_gt)} (7)
                                    * ここで，f(I, r)は多変量ガウス分布N(0, I)からサンプルされたランダムベクトルで摂動した後の，再構成された3D点群．
                                    * S_gtは点群の正解，d(.,.)は再構成誤差，上で定義したどれでも良い．
                                    * 実行時には，ある入力から色々な可能な再構成が生成されうる．異なるランダムベクトルrをN(0,I)からサンプルすることで．
                                        * ? S_gtの方を変えないので，複数のパターンを1つの正解にマップするよう学習しているように見える?


### 7.1.2 training with 2D supervision

* 3Dの正解データを教師として得るのは高価であり，小さいスケールの訓練でも大変なプロセスである．
* しかし，複数の2Dまたは2.5D画像を訓練のために得るのは比較的容易．
    * このカテゴリの手法は，推定された3D形状が正解と近ければ近いほど，3Dモデルのviewとその再構成された3Dモデルからこれらのいかなるviewへのprojectionの間の不一致もまた最小化される，という性質を利用する．
        * このアイデアの実装は射影演算子を定義する必要がある．これは再構成された３Dモデルを与えられた視点からレンダリングし，誤差関数がその再射影誤差を測る．

#### 7.1.2.1 Projection operators:

* 射影幾何の技術は3D物体のviewをレンダーすることに使える．
    * しかしend-to-endの訓練を勾配近似[51]なしで可能にするには，射影演算子は微分可能である必要がある．
        * Gadelha et al.[26]はP((i, j), V) = 1 -e^{-sum_k V(i,j,k)}で定義される微分可能射影演算子Pを導入した．Vは3Dボクセルグリッド
            * この演算子はvoxelのoccupancy valuesを視界の各ラインに沿って加算する
                * しかし，それはorthographic projection(正投影)を仮定している
                    * Loper とBlack[90]はOpenDRを導入したが，これは近似微分可能レンダラであり，正投影および透視投影に適している
        * Petersen et al[91]は画像からジオメトリへの再構成のための新しいC^{infty}級微分可能レンダラを導入した．
            * アイデアは，ピクセルからどのトライアングルが見えるか離散的に決定する代わりに，この手法はそれらの可視性をなめらかにブレンドする．
                * カメラ空間でz-positionsの重み付きSoftMinを取ることで，なめらかなz-bufferが構成される．
                    * これはC^infty級なめらかなレンダラにつながる．そこではocclusionsについてtri-anglesのz-positionsが微分可能である．
                        * 従来のレンダラでは，occlusionsに関してxy座標だけが局所的に微分可能であった
        * 最後に，固定レンダラを使う代わりに，Rezende et al[92]は学習したprojection operator，あるいは学習可能カメラを提案した．これは最初に再構成されたvolumeにアフィン変換を適用し，次に3D volumeを2D imageにマップする3Dと2Dの畳み込み層を適用することで構築される

#### 7.1.2.2 re-projection loss functions:

* 2D 教師を使って3D再構成をするためにいくつかの誤差関数が提案されてきた．
    * それらを２つのメインカテゴリに分類する：1. シルエットベース，2. 法線およびdepthベースの誤差関数
        1. Silhouette-based loss functions
            * アイデアは，再構成されたvolumeからの2Dシルエットは，特定のカメラ内部及び外部パラメタのもとで，入力画像に対する正解の2Dシルエットとマッチするはずということ．
                * space carvingにインスパイアされた不一致度(=誤差)を次に定義する：
                    * L_proj(I) = 1/n sum_{j=1}^n d( P (f(I);alpha^(j)), S^(j)) (8)
                        * S^(j)はもとの3DオブジェクトXのj番目の正解2Dシルエット，nは各3Dモデルで使うviewまたはsilhouetteの数，P(.)は3Dから2Dへの射影関数，alpha^(j)はj番目のシルエットのカメラパラメタ．
                            * 距離メトリックd(.,.)は標準L2メトリック[73]，正解と再構成シルエットの負のIoU[51]，またはbinary cross-entropy loss[5],[23]
            * Kundu et al[30]はrender-and-compare 誤差を導入した．これは正解シルエットG_sとレンダリングされたシルエットR_sのあいだのIoU，および正解depth G_dとレンダリングされたdepth R_dの間のL_2距離について定義される
                * L_r = 1 - IOU(R_s, G_s; I_s) + d_L2(R_d, G_d; I_d) (9)
                    * I_sとI_dは誤差に寄与しないピクセルは値が１になる二値無視マスク
                        * この誤差は微分可能ではないので，Kundu ら[30]はその勾配を近似するために有限な誤差を使った．
            * シルエットベースの誤差は視点を区別できない(e.g. 前と後ろ)．
                * これを解決するため，InsafutdinovとDosovitskiy[73]は複数のポーズ回帰を訓練中に行った．それぞれがシルエット誤差を用いている
                    * ネットワーク全体は個別の誤差の最小値で訓練される．
                        * 最小誤差の予測木はテスト時に使用される
            * Gwak ら[93]はreprojection誤差を特定クラスの有効なメンバであるreconstructed shape について最小化している．e.g. 椅子．
                * 再構成をその形状クラスの多様体上に成約するために，この手法はbarrier function phiを定義している．
                    * これは形状が多様体の中にあれば1，それ以外で0を取る
                        * L = L_reprojection - 1/t log phi(X^) (10)
                            * barrier functionはGANの識別関数として学習される
            * 最後に，Tulsiani et al[9]はre-projection 誤差をvolumetric reconstructionにかんする微分可能なray consistency誤差として定義している．
                * まず，推定された形状X^が確率的occupancy gridに関して定義されることを仮定している．
                    * (O,C)を観測-カメラのペアとする．Rを光線の集合として，各光線r in Rはカメラの中心を原点に持ち，カメラCの画像平面にキャストされる．ray consistency 誤差は次で定義される
                        * L_{ray_cons}(X^;(O,C)) = sum_{r in R} L_r(X^) (11)
                            * L_r(X^)は推定された3DモデルX^が特定の光線rに関連する観測を正しく説明しているかどうかを捉える
                                * もし観測Oが前面のピクセルが0，それ以外のピクセルが1をとる正解の前面マスクなら，L_rは光線rと関連付けられたピクセルにおけるマスクの値に重み付けられた，光線rが表面voxelに当たる確率となる
                                    * この誤差はnetworkの予測に関して微分可能である．
                                        * foreground maskを観測として使った時，この誤差は既知のカメラパラメータを必要とし，学習[24]または固定[25]のreprojection 関数を使って特定のmask supervisionを使うように設計された手法と似ている．
                                            * また，[5], [23]で使われているbinary cross-entropy誤差はray consistencyを使って導出された誤差の近似と考えることができる
        2. Surface normal and depth-based loss
            * 表面法線やdepthの値などの追加の手がかりは訓練をガイドするのに使用できる．
                * n_{x,y} = (n_a, n_b, n_c)をある点(x, y, z)での法線ベクトルとする．
                    * ベクトルn_x = (0, -n_c, n_b)と(-n_c, 0, n_a)はn_{x,y}に直交している
                        * 正規化することで，２つのベクトルを得られる．n_x' = (0, -1, n_b/n_c)およびn_y' = (-1, 0, n_a/n_c)．
                            * 法線誤差は(x,y,z)+- n_x'と(x,y,z)+- n_y'におけるvoxelが推定された表面法線とマッチするために１になることを保証しようとする．
                                * この制約はtarget voxelsが推定されたシルエットの中にあるときのみ適用できる
                                    * 射影された表面法線誤差は次の通り
                                        * L_{normal} = (1-v_{x,y-1, z+nb/nc})^2 + (1-v_{x,y+1, z-nb/nc})^2 + (1- v_{x-1, y, z+na/nc})^2 + (1-v_{x+1, y, z-na/nc}) (12)
                                    * この誤差はWu et al[7]で使用されたが，normal lossに加えて，projected depth lossも含む．
                                        * このアイデアはdepth v_{x,y,d_{x,y}}のボクセルが１になるはずであり，その前にある全てのボクセルは０になる．
                                        * depth lossは次のように定義される
                                            * L_{depth}(x, y, z) = {v^2_{x,y,z} if z < d_{x,y},
                                                * (1-v_{x,y,z})^2 if z = d_{x,y},
                                                * 0 otherwise
                                                * (13)
                                            * これは推定された3D形状が推定されたdepthの値とマッチすることを保証する
        3. 複数の誤差を結合する
            * 2D lossと3D lossを組み合わせる事もできる．
                * これは正解３Dデータが利用できる時特に便利．
                    * 例えば最初のネットワークを3D教師ありで訓練して，それからそれを2D教師ありでfine-tuneする．
                    * Yan et al[5]は一方，2Dと3D誤差の重み付き和をとった
            * 再構成誤差に加えて，追加の成約を課すこともできる
                * 例えば，Kato et al[5]は正解と再構成シルエットの間の負のIoUで定義されたシルエット誤差と，smoothness lossの重み付き和を利用した
                * 表面については，smoothness lossは隣接する面の間の角度theta_iが180度に近いことを保証し，平らになる

#### 7.1.2.3 Camera parameters and viewpoint estimation:

* Reprojectionベースの誤差関数はcamera パラメタを推定された3D形状を画像平面にレンダリングするのに使う．
    * 複数の観測カメラペアの利用可能性を仮定している手法もある[5],[9],[11]．
        * ここで，観測はRGB画像，シルエットまたは前面マスク，またはターゲット3D形状のdepth map
            * カメラパラメタと入力を最もよく説明する3D 再構成に関して同時に最適化する手法も存在する[26],[73]
                * Gadelha et al[26]は入力画像をfully connected layers を使って潜在表現とpose codeにエンコードする
                    * pose codeは２Dプロジェクションモジュールへの入力として使われるが，これは推定された3Dvolumeを入力の視点上にレンダリングする．
                * Insafutdinov ，Dosovitskiy [73]は一方，同じ物体の２つのviewを取り， 最初のviewおよび，２番めのviewカメラポーズ(４元数で表現される)から対応する形状を予測する(点群として表現される)
                    * この手法は次に微分可能なprojection moduleをprojected camera poseから予測される形状のviewを生成するのに使う
                        * shapeとpose predictorは２つのbranchを持つconvolutional networkとして実装される
                        * このネットワークは全部で７個のレイヤのあるconvolutioanl encoderから始まり，2つの共有されたfully connected layersが来て，その後ネットワークが２つに別れる．shapeとposeの予測のために．
                            * pose branchはmulti layer perceptron
* カメラポーズだけを推定するpaperもある[66],[94],[95]
    * 同時に再構成する技術とは異なり，これらの手法はpose annotationだけで訓練される
        * たとえばKendall et al[94]はPoseNetを導入したが，これは一枚の画像からcamera pose を推定するconvolutinal neural netである．
            * ネットワークは，カメラポーズを位置ベクトルと方向を表す４元数で表現するが，正解と推定poseの間のL2誤差を最小化するように訓練される．
        * Su ら[95]は一方，1クラスのview point推定のために訓練されたCNNが他のクラスではうまく動作しないことを発見した．
            * おそらくクラス間で幾何的なバラつきが大きから．
        * そこで，下層のレイヤが(convolutional およびfully connected両方)全てのクラスで共有され，その上にクラス依存のfully connected layersがスタックされるネットワーク構造を，彼らは提案した．


## 7.2 Training with video supervision

* 別のアプローチは3D教師を動きで置き換えることで，3D物体形状を学習するのに必要な教師ありのレベルをかなり下げる
    * Novotni et al[96]は教師あり信号をビデオから生成するためにStructure from Motion(SfM)を使った．
        * この手法は，訓練時にはvideo sequenceを取り，部分的な点群と相対的なカメラパラメタをSfMを使って生成する[97]
            * 各RGBフレームはdepth map，uncertainty map, camera parametersを推定するネットワークで処理される．
                * ことなるdepth 推定は推定されたカメラパラメタを使って融合され，部分的な点群になる．これは点群補完ネットワークPointNet[83]を使って補完のためさらに処理される
                    * ネットワークはSfMの推定を教師信号として訓練される．
                        * すなわち，誤差関数はSfMによるdepth map推定とネットワークによるdepth map 推定の間の不一致と，ネットワークによるカメラパラメタの推定とSfMによるそれとの不一致を測る
                        * テスト時に，ネットワークは完全な3Dジオメトリを一枚のRGB画像から復元することができる

## 7.3 訓練手順

* データセット，誤差関数，教師ありの度合いに加えて，３D再構成のためのディープラーニングアーキテクチャを訓練するときに考える必要があるいつくかの実践的な側面がある．

### 7.3.1 Joint 2D-3D embedding 

* 多くのstate of the artの研究は入力（rgb画像）を潜在表現にmapして，それから潜在表現を3Dモデルにデコードする．
    * 良い潜在表現は
        1. 3Dにおいて生成的である，つまり3D物体をその表現から再構成できること
        2. 2Dから予測可能であること．つまり簡単に画像からこの表現を推定できること[24]
        * これらの２つを達成することはTL-embedding　ネットワークを訓練で使うことにより解決された．
            * それは２つの同時訓練されたencoding branchからなる
                * 2Dエンコーダと2Dエンコーダである．
            * それらはそれぞれが2D画像とその対応する3D annotationを潜在空間の同じ点にmapする[23],[24]
                * Gidharら[24]はRGB画像からvolumetric shapeを再構成するためにTL-embeddingネットワークを利用したが，(image, voxel)ペアのバッチを使ってネットワークを訓練している．
                * 画像は3Dmodelをレンダリングして生成され，ネットワークは３ステージの手順で訓練される
                    * 最初のステージでは，networkの一部である3D encoderとそのデコーダはランダムに初期化される
                        * その後sigmoid cross-entropy lossで2D encoder とは独立にエンドツーエンドに訓練される
                    * ２番めのステージでは，2D encoderは潜在表現を回帰するように訓練される
                        * encoderはvoxelのembeddingを生成し，画像networkはそのembeddingを回帰するように訓練される
                    * 最後のステージは，全体のネットワークを同時にfine tuneする．
                * この手法はLi ら[75]およびMandikal et al[21]によって，volume encoderをpoint cloud auto-encoderで置き換えることで点群ベースの3D再構成のために拡張された

## 7.3.2 adversarial training

* 良い再構成モデルは訓練中に見たものを超えるべきである．
    * 標準的な手順で訓練されたネットワークは未知のデータを良く汎化するとは限らない．
        * また，Yang et al[42]は標準的な技術の結果はgrainyで詳細に欠ける傾向があるとしている
        * この問題を克服するために，近年の研究は与えられたランダムベクトルから信号を生成するGANを使って敵対的lossでネットワークを訓練している．[98]
            * Conditional GANは，生成された信号を入力画像に条件づける
            * encoder hを反転したgenerator g，およびgeneratorを反転したdiscriminator Dからなる
        * 3D再構成の場合，encoderはConvNet/ResNet[42],[99]またはvariational auto encoder(VAE)[17]である．
            * generatorは潜在ベクトルxを3D形状X=g(x)にデコードする
                * discriminatorは訓練中のみ使用され，decodeされたデータの本物らしさを評価する
                    * 物体Xが本物または偽物(generatorから来た)であるかを示す0と１の間の確信度C(X)を出力する
                        * ゴールは再構成された形状が正解に近くなるようにgeneratorとdiscriminatorを同時訓練すること
        * GANの中心はdiscriminatorとgeneratorを同時訓練するのに使う敵対的誤差関数．
            * Goodfellow et al[98]に従い，Wu et al[17]は二値クロスエントロピーを分類誤差に使った．全体の敵対lossは次の通り：
                * L_{3D-GAN} = log(D(X)) + log(1-D(g(x))) (14)
                * x = h(I)であり，Iは訓練形状Xの2D画像．
                    * Yang et al[42],[99]はもとのGAN lossはreal ,fake両方の全体のlossをpresentsすることを観測した(?)
                    * 彼らはWGAN-GP誤差[100], [101]を使うことを提案したが，これはfake reconstruction ペアの生成誤差とfakeとreal の再構成ペアをdiscriminateする誤差を別々に表現する．
        * networkの３つの要素(encoder, generator, discriminator)を同時訓練するために，overall lossはreconstruction lossの和として定義される.
            * ネットワークがVAEを使うときは(3D VAE-GAN[17])，variational distribution をprior distribution に近づけるために追加の項が全体の誤差に追加される
                * 例えばWu et al[17]はKL-divergence metricを使い，平均０，分散１の多変数ガウス分布を事前分布として使った
        * GANはvolumetric[14],[17],[29],[38],[42],[99]およびpoint cloud[70],[71]の再構成に使われてきた．
            * 3D教師あり[17],[29],[38],[42],[99]および2D教師あり[14],[26],[93]で使用され，再構成誤差はreprojection lossで測定される．
                * 彼らはいかなるデータの分布も真似できるので潜在能力は大きい
                    * また，ある観測を説明する多くの可能な形状のほとんどは実現不可能であり，自然な物体と対応づかないために難しい，シングルview 3D形状再構成にとても適している[87]
                        * また，可能な形状のなかで，2D画像に等しくフィットする形状が複数ある．
                            * この曖昧さを解決するため，Wu et al[87]はGANのdiscriminatorを，予測された3D形状が自然でなかった場合3D estimatorを罰するために使った．
        * GANは訓練が難しい．特に多くのカテゴリと方向がある3D物体の複雑なデータ分布では．
            * 高解像度の形状では不安定になる．
                * 実際，generatorとdiscriminatorの学習を注意深くバランスしなければならない
                    * そうでなければ，勾配は消失してしまい，学習が進展しなくなる[38]
                        * これを解決するため，SmithおよびMeger[38]，のちにWu ら[87]は目的関数としてgradient penalizationで正規化されたWasserstein distance を使った．

### 7.3.3 Joint training with other tasks

* reconstruction と　segmentationを同時に訓練することは独立にやるより両方のタスクの性能を上げる．
    * **Mandikal et al[102]**は部分的にセグメントされた点群を一枚のRGB画像から生成するアプローチを提案した．
        * アイデアはより忠実なパーツ再構成セグメンテーション精度の向上のために２つのタスク間での情報伝播を可能にすること
            * これはセグメンテーション誤差と,Chamfer distanceで定義された再構成誤差の重み付き和である誤差を使って行われる．
                * 後者は対称softmax cross entropy lossで定義される

## 8. APPLICATIONS AND SPECIAL CASES

* 画像ベースの3D再構成は重要な問題であり，roboticsやautonomous navigationからgraphicやentertainmentまで多くの応用へのビルディングブロックとなる
    * これらの応用のいくつかは一般物体を扱うが，その多くは人間の体や体のパーツ(顔や手)，野生動物，車といった特定クラスの物体を扱う
        * 上で説明した技術はこれらの特定クラスの形状に適用できるが，その形状クラスの事前知識を利用したカスタムデザイン手法によって大きく再構成のクオリティが向上する．
            * 本節では，近年の人間の体の形状と，顔のような体パーツの画像ベース3D再構成について要約する

### 8.1 3D human body reconstruction

* 3Dの 静的・動的デジタル人間データは，ゲーム，visual effect，free-viewpoint video等の多くの応用で必要不可欠である
    * しかし，ハイエンドのキャプチャ方法は多くのカメラとアクティブセンサを使い，制御されたライティング条件とスタジオセッティングを使うので専門家による操作に制限されている
    * deep learningにおいてはいくつかの研究は数枚のRGB画像から3Dの人間の形状やポーズを復元できるより軽量な手法を探索したものもある(section4, section5.2)
* パラメトリック手法は問題を統計的モデルを使って正則化する
    * human body形状を再構成する問題はモデルのパラメタを推定する問題になる
        * 人気のある手法はmorphable models[103], SCAPE[104], SMPL[105]など．
    * Dibra ら[106]はencoderのあとに3つのfully connected layersが来る．このfully connected はSCAPE parametersを複数のシルエット画像から回帰する
        * Dibraら[107]は後に，最初に一般の2D シルエットと3D human body 形状のembeddingを学習する．
            * 後者はHeat Kernel Signatures[108]を使って表現される
                * 両方ともニュートラルポーズの裸の体形状しか予測できない
* 初期の手法はstatic poseの3D human body 形状に焦点を当てている
    * Bogo et al[109]はSMPLifyを提案したが，これは最初の画像からの3Dhuman pose およびshape再構成である
        * 彼らは最初にCNNベースの構造，DeepCut[110]を使った，2Dのjoint 位置を推定するために．
            * 彼らは3Dの生成モデルSMPLを予測された2D jointsにfitする．3D human body poseと形状の推定を与えられて
                * 訓練は5つの項の目的関数を最小化する：joint-based データ項，３つのpose priors, shape priorである
                    * 実験結果はこの手法が任意のポーズからの3Dhuman body reconstrucitonに効果的であると示している
* Kanazawa et al[111]は一方，そのようなstepwiseの手法は最適ではないとして，画像ピクセルからmodel parametersに直接mappingすることを学習するend-to-endな手法を提案した．この手法は２つの重要な挑戦を解決した：
    1. in-the-wild imagesにおける大規模な正解3Dアノテーションの不足
    2. human body shapeの　single view 2D-to-3D mappingにもともとある曖昧さ
        * 一つの例は，複数の3D body configurationsが同じ２Dprojections を説明しうるというdepthの曖昧さである[109]
    * 最初の挑戦を解決するために，kanazawa et alは大規模なin-the-wild画像の2Dキーポイントアノテーションと,色々なポーズと形状の人々の3D mesh の別々の大規模データセットがあることを観測した．
        * 彼らは条件付き敵対生成のやり方でこれらのペアになっていない2Dキーポイントアノテーションと3Dスキャンを利用した．
            * 彼らは射影した後にアノテートされた2D keypointsと3D keypointsがマッチするような3D meshとカメラパラメタのSMPL[105]パラメータを推定するネットワークを提案した．
                * 曖昧さに対処するために，これらのパラメタは3Dパラメタが真のhuman の体と対応しているかどうかを判別するdiscriminatorに送られる
                    * ゆえに，networkはhuman多様体上のパラメタを出力するようにencourageされる．
                        * discriminatorは弱教師として振る舞う
    * この手法は複雑な背景を持つ画像からの複雑なポーズを扱えるが，画像ごとに一人しか扱えず，服も扱えない．
        * これらはvolumetric な手法でよりよく扱うことができるが，volumetricは一般に，クラス特有の知識を組み込まない．
            * 一つの例はHuang et al[112]で，入力として複数のrgb画像とその対応するカメラキャリブレーションパラメタを取り，各ボクセルごとにhuman bodyの内側または外側にある確率をエンコードした密な3D fieldを推測する．
                * 表面の幾何形状はmarching cubeを使って3D確率場から忠実に再構成される．
                    * この手法は複数branchのencoderを使っており，各画像につき一つ，同じ3D点に対応するfeatureを確率値にaggregateする多層パーセプトロンがあとに続く．
                        * この手法は服ありのhuman bodyであっても詳細な幾何を復元できるが，シンプルな背景でなければならない

## 8.2 3D face reconstruction

* 形状，ポーズ，表情，肌，反射率，より細かいスケールの表面を復元する目的で，詳細で密な画像ベースの人間の顔の3D再構成は長い間computer visionとcomputer graphicsの課題だった．
    * 近年，この問題は回帰問題として立式され，convolutional neural networksで解決された．
* 本節では，代表的な論文をreviewする．
    * 多くの近年の技術はparametric representationを使用している．
        * これは3D顔の多様体をparametrizeする．
            * 最も一般的に使用される表現は**Blanz and Vetter[64]**の**3D morphable model(3DMM)**であり，これは2D active appearance model[113]の拡張である(5.2.1)．
                * このモデルは幾何的およびテクスチャに関する表情の変化を捉える．
                    * Gerig et al[114]はこのモデルを表情を分割された空間として含めることで拡張した．
                        * 次にいろいろなネットワーク構成(8.2.1)とその訓練手順について論じる．(8.2.2)
                            * model-free 手法についても論じる(8.2.3)

### 8.2.1 ネットワーク構成

* バックボーンアーキテクチャはencoderであり，それは入力画像をparametric model parametersにマップする
    * それは畳み込みレイヤで構成され，fully connected layersが続く．
        * 一般に，既存技術はAlexNetのような一般的なネットワークや，VGG-Face[115], FaceNet[116],のような表情の画像で訓練されたネットワークを使う．
            * Tran et al[117]は顔のidentity(幾何)とテクスチャをencodeした3DMMの198個のパラメタを回帰するためにこのアーキテクチャを使う
                * 3D教師ありでL2対称誤差(つまり平均から遠い3D 再構成を好む)を使って訓練される
            * Richardson et al[118]は同様のアーキテクチャを使用したが，再構成を繰り返し行った．
                * 各イテレーションでは，ネットワークは前に再構成した顔，しかし前面のカメラを使って画像にprojectされたものと，入力画像を取り，3DMMのパラメタを回帰する．
                    * 再構成は平均顔で初期化される．
                        * 結果は３イテレーションで，このアプローチが色々な表情と照明条件でうまく画像からの顔の再構成ができることを示している
            * 3DMM ベースの問題の一つは，なめらかな顔表面を再構成する傾向にあることであり，それはシワやくぼみといった詳細に欠けている．
                * なので，このカテゴリの手法は詳細を復元するために修正モジュールを使う．
                    * 例えば，Richardson et al[118]は再構成された顔をShape from Shading(SfS)を使って修正した．
                        * Richardson et al[119]は一方，二番目の再構成ブロックFineNetを加えたが，これは入力として粗い推定のdepth mapを取り，encoder-decoder networkで高解像度の顔depth mapを復元する
                            * end2endの訓練のために，２つのブロックは微分可能レンダリング層に結合される
                                * 従来のSfSとなり，FineNetの導入はalbedo(反射光の比率)と照明係数の計算を直接推定することなく誤差関数の一部として扱う．
                                    * しかし，照明は一次のspherical harmonicsでモデリングされ，それは正確ではない詳細の再構成につながる

### 8.2.2 Training and supervision

* networkに入力するために，3D顔に対応してラベルのついた十分な訓練画像をどうやって集めるかは主要な問題となる
    * Richardson et al[118],[119]はrandom sampleをmorphable modelからサンプルしてその顔をレンダリングすることで合成データを生成した．
        * しかし，合成データのみで訓練したnetworkは物体が隠れていたり，普通でない照明であったり，よく表現されないethnicitiesではうまく動かない可能性がある．
            * Genova et al[120]は訓練データ不足をrandomに生成された合成顔を3D座標を提供するために(?)各訓練batchに含めることで解決した．しかし同時に現実の写真でもそのネットワークを訓練している．
                * Tran et al[117]は表情のないモデルを大量の写真にfittingするために繰り返し最適化を使った．そして最適化が収束したその結果を正解として使った．
                    * 表情のある顔へ汎化するために，identity ラベルと最低でも一つのニュートラル画像が必要である．
                        * ゆえにデータセットのサイズは潜在的に制限される
    * Tewari et al[121]は3D教師なしで，encoder-decoder ネットワークを同時に顔の形状，表情，テクスチャ，ポーズ，照明を推定するように訓練した
        * encoderはimageからmorphable model 座標への回帰ネットワークで，decoderは固定した，入力画像を再生産しようとする微分可能レンダリングレイヤである
            * 誤差は再生産された写真と入力の不一致度を測る．
                * 訓練誤差は個別の画像ピクセルに基づいているので，ネットワークは関連する変数の間の交絡するvariationに弱い．
                    * 例えば，暗い肌のトーンと仄暗い照明環境を区別することはできない
    * 教師あり訓練データの必要とinverse renderingへの依存を取り除くために，Genova et al[120]はVGG-Face[114]やGoogle's FaceNet[116]のような顔認識ネットワークによって生成された顔のidentity特徴に基づいた誤差を最小化することを学習するフレームワークを提案した．
        * つまり，顔認識ネットワークは入力写真も，再構成された顔からレンダリングされた画像もエンコードし，ポーズ，表情，照明，photorealisticでない入力に対してまで堅牢なベクトルへと変換される
            * この手法はその後，レンダリングされた画像と入力写真のピクセルごとの距離の代わりに，２つの特徴ベクトル間の不一致度を図る誤差を適用する
                * 3D顔形状とテクスチャ回帰ネットワークは顔認識ネットワーク，morphable face model, ラベル付けされていない顔画像のデータセット，のみを使って訓練される．
                    * この手法は従来の手法の精度を改善するだけでなく，元の被写体として認識可能な3D再構成を生成する．

### 8.2.3 Model-free approaches

* 3DMM-baseの技術の制約はモデリングされた部分空間に制限されることである．
    * つまり，訓練データの張る空間の外にある再構成は可能ではない
        * volumetric gridのような他の表現は，この問題に陥ることはないが，3D face reconstructionの文脈では探索されている
            * Jackson et al[122]は，Volumetric Regresion Network(VRN)を提案した．
                * このネットワークは入力として２D画像と3DMMの代わりに画像と対応する3D binary volumeを取る
                    * [117]とは異なり，この手法は広い範囲の表情，ポーズ，alignmentと対応付けなしの隠れた物体，を扱うことができる．
* その他の技術は中間表現を使う．
    * Sela et al[123]はdepth 画像と顔の対応関係mapを推定するために，Unet[44]に基づくImage-to-Image Translation Network を使った
        * それから，繰り返しのdeformation-baseのregistrationが幾何的な修正手続きの後に実行される．かすかな表情の詳細を再構成するために．
            * 3DMMとは異なり，この手法は大きな幾何的なvariationを扱うことができる
* Feng ら[124]はmodel-freeの手法を調査した．
    * 最初に密に結合されたCNNフレームワークが，3D顔カーブを水平と垂直epipoar平面(ステレオビジョンに関する幾何であるエピポーラ幾何)画像から回帰するために設計された．
        * その後，これらのカーブは3D点群に変換され顔表面にfitするためにgrid-fit algorithm[125]が適用される
            * 実験結果はこの手法は変化するポーズ・表情・照明に対して堅牢であることを示している

## 8.3 3D scene parsing

* これまで議論した手法は主に独立した物体の3D再構成のためのものであった．
    * 複数の物体のあるシーンは，隠れ，ノイズ，形状の不明瞭さ，ポーズ，シーンレイアウトの推定を適切に扱った物体を描くというさらなるチャレンジを課す
        * この問題の解決方法は3D物体検出と認識，ポーズ推定，3D再構成が含まれる．
            * 従来，これらのタスクの多くは手で作った特徴量を使って解決されていた．
                * deep learningベースの時代にあって，pipelineの幾つかのブロックはCNNに置き換えられた．
    * 例えば，Izadinia et al[126]は室内のシーンにある物体を認識することに基づく手法を提案した．これは部屋の幾何を推定し，３D物体のポーズとその部屋におけるサイズが入力画像への合成レンダリングとマッチするように最適化する
        * この手法は物体領域を検出し，CADデータベースからもっとも類似の形状を探し，それらを入力にフィットするように変形する．
            * 部屋の幾何はfully convolutional networkを使って推定される．
                * 物体のdetectionとretrieval両方とも，Faster R-CNN[127]を使っている．
                    * 変形とフィッティングは，render and matchで行われる．
        * Tulsiani et al[128]は一方，全体がdeep learningに基づく手法を提案している．
            * 入力は１枚のRGB画像とその物体のbounding boxからなり，４branchのネットワークで処理される．
                * 最初のブランチはskip connectionsのあるencoder-decoderで，シーンレイアウトの差異を推定する
                * 二番目のブランチは全体のシーンの低解像度の画像を取り，CNNに続く３つのfully connected layersでそれを潜在空間にマップする
                * ３番目のブランチは２番めと同じ構造で，画像を元の解像度でconvolutional feature mapsにマップする．その後ROIのための特徴を得るためにROI pooling が続く．
                * 最後のレイヤはboudning boxの位置を全結合レイヤを通してmapする．
                    * 3つの特徴はその後結合され，fully-connected layers，さらにdecoderによって更に処理される．それはROIにある物体の32^3のボクセルグリッドと，そのポーズ（位置，方向，スケール）を生成する．
                        * この手法は3Dデータに関連する合成でレンダリングされた画像を使って訓練される

## 9. Performance Comparison

* このセクションでは幾つかキーメソッドの性能を論じる．
    * deep learning based 3D shape reconstruction algorithmsのベンチマークに使われる色々なデータセット(9.1)，
    * 性能基準とメトリクス(9.2)，
    * キーメソッドの性能比較(9.3)

### 9.1 Datasets

* 表5にdeep 3D reconstructionに最もよく使われるデータセットをようやくする．
* 従来技術とことなり，deep 3D reconstrucitonの訓練と評価には大量のアノテーション付きデータが必要．
    * このデータは自然画像と対応する3D形状/シーンのペアである必要がある．
        * 大量にそのようなデータを得ることは難しい
            * 実際，既存のデータセットは特にdeep learning 3D reconstructionのベンチマークのために設計されたものではない
                * ShapeNetとModelNetは最も大きい3Dデータセットであるが，3D CADモデルを，対応する自然画像なしで含んでいる．
                    * IKEA, PASCAL 3D+, ObjectNet3Dのような他のデータセットは比較的小さい画像サブセットが対応する３Dモデルと共にアノテーションされている．
    * この問題はdata augmentation かdomain adaptationで解決される．
        * data augmentationは合成データで元のセットを拡張する
            * たとえば移動，回転，スケーリング，等を既存の３Dモデルに適用して幾何的に変形することで新しいインスタンスを得る
                * 類似度を保存するものもあるが，それでもデータセットを豊かにする
            * また，既存の３Dモデルから2D, 2.5D(depth)のviewを色々な視点，ポーズ，照明，背景でレンダリングすることもできる
            * 自然画像と３Dモデルをアノテーションする代わりに，セグメンテーションマスク付きの2D画像をアノテーションしている論文もある
                * MS COCO[133]．これはとくに2D教師に依存する手法で有効である(7.1.2)
        * domain adaptationは，**Petersen et al[91]**を除いて3D再構成では通常は使われない
            * 微分可能レンダラでレンダリングされた画像と似た画像で訓練できる従来手法とは異なり，peterson ら[91]はReconstructive Adversarial Network(RAN)を導入した．
                * これは異なるタイプの画像で訓練できる

### 9.2 performance criteria and metrics

* Xが真の3D形状でX^が再構成された形状とする．
    * 3D再構成アルゴリズムで最も一般に使われる量化尺度は次の通り．
        1. Mean Squared Error(MSE)
            * 再構成形状X^と正解Xとの対称な表面距離
                * d(X^, X) = 1/n_X sum_{p in X} d(p, X^) + 1/n_{X^} sum_{p^ in X^} d(p^, X) (15)
                    * n_Xとn_X^はそれぞれXとX^上で密にサンプルされた点で，d(p, X)はXへの法線方向に沿ったpからXの距離
        2. Intersection over Union(IoU) 
            * IoUは予測された形状の体積と正解の体積の間のintersectionと，２つの体積のunionとの比率を測る
                * IoU_{eps} = V^ cap V / V^ cup V = sum_i{I(V^_ i > eps) * I(V_i)} / sum_i{I(I(V^_ i > eps) + I(V_i))} (16)
                    * I(.)はindicator function，V^ _ iはi番目のボクセルで予測された値，V_iは正解，epsは閾値．
                        * このmetricはvolumetric reconstructionに適している．
                            * ゆえに，surface-basedな表現を扱う時，再構成されたものと正解3Dモデルはvoxelizedされるひつようがある
        3. cross entropy(CE) lossの平均[99]
            * CE = -1/N sum_{i=1}^N{p_i log p^_ i + (1-p_i) log(1-p^_ i)} (17)
                * ここでNはvoxelまたはpointsの総数で，voxelまたはpointベースの表現を使うかどうかに依存する
                    * pとp^はそれぞれi番目のボクセルまたはポイントにおける正解と予測値
                        * CEの値が小さいほど再構成は良い
        4. Earth Mover Distance(EMD) and Chamfer Distance(CD)
            * これらの距離は式(5),(6)で定義される
    * これらのquantitative metricsに加えて，これらの手法の効率性を評価するのに使われる量的な側面がいくつかある；
        1. Degree of 3D supervision
            * 訓練に必要とする3D教師データの度合いは重要な側面．        
                * RGB画像を得ることは容易だが，その対応する正解3Dデータを得ることは難しい．
                    * なので，最小のまたは3D教師が必要ない技術は好まれる
        2. Computation time
            * 訓練が遅い場合があるが，リアルタイム推定が好まれる
        3. Memory footprint
            * deepは大量のパラメタがある
                * 3D convolutionを使ってvolumeに対する計算をするものもある
                    * これは大量のメモリを必要とする．実行時の性能に影響する

## 9.3 Comparison and discussion

* 過去4年での再構成精度の改善を図６に，代表的な手法を表６に示した．
* 初期の手法はvoxel表現を使っており[5], [8], [17], [24], [134]，これは任意の形状の物体の複雑なsurfaceおよび内部の詳細を表現できる．
    * O-CNN[31], OGN[32], OctNet[39]のような空間分割の導入で，volumetricな手法は比較的高い解像度を得る(512^3)
        * これはメモリ効率が大幅に良くなるからであり，32^3のvolumetric gridsの再構成に必要な，[13]では1.7GB，[8]では4.5GBのメモリ要求がOGN[32]ではわずか0.29GBになる
            * しかし，その実装の複雑さから，この手法を採用した論文はわずかである．[34]
        * 高解像度の3D volumetric 再構成を達成するために，多くの研究が複数のdepth mapを通してintermediationを使っている．volumetric[37],[42],[47],[88]または点ベース[76]の融合が続く．
* 図6は2016からの性能改善の進化を示しており，ShapeNetデータセット[3]をベンチマークに使用した．
    * IoU metricにおいては，サイズ32^3のvolumetric gridsで計算しており，複数のviewを訓練および・またはテストに使う手法が単一viewの手法を凌ぐことがわかる
        * surface-baseの技術も，2017(mesh-base[56], point-base[55],[68])から現れており，volumetric 手法を少し上回る
            * mesh-baseの手法は，しかしながら種数0のsurfaceまたはテンプレートと同じトポロジのsurfaceに制限される
    * Yan et al[5]の2017年の導入から，2D教師ベースの手法が性能を伸ばしている事がわかる
        * 図6(a)(b)のIoUカーブからは，しかし，3D教師ありの手法がすこし性能を改善している
            * これは2Dベースの教師あり手法が2Dバイナリマスクとシルエットに基づく誤差を使っていることに起因する．
                * しかし，複数の3D物体は同じ２D projectionを説明できる
                    * この曖昧さは複数のviewからcaptureされた複数のbinary maskを使うか[19]，(visual hullしか再構成できないので精度に制限がある)，またはadversarial training[87],[93]を使うことで解決する．(再構成される3D形状が有効なクラスのmanifoldの内部に制約される)

## 10 FUTURE RESEARCH DIRECTIONS

* 過去５年に行われた広範な研究に照らして，deepを使った画像ベースの3D再構成は見込みのある結果を達成している．
    * しかしこのトピックはまだ生まれたばかりであり，さらなる開発が期待される．
        * 本章では，現在の問題と将来の研究の方向性を述べる
1. Training data issue

* deepの成功は訓練データの利用可能性に大いに依存している
    * 画像と3Dアノテーション両方を含むデータセットは分類や認識タスク[4]に比べて少ない．
    * 2D教師あり技術は3D訓練データの不足を解決するために使われてきた．
        * その多くは，しかし，シルエットベースの教師ありに依存し，ゆえにvisual hullしか再構成できない．
            * なので，新しい大量データセット，いろいろなvisual cueを利用する新しい弱教師あり，教師なし手法を提案する研究をもっと見たい．
                * そしてある特定のドメインからのデータで訓練する新しいドメインadaptation技術，例えば合成レンダリング画像が最小限の再訓練と教師によって新しいドメイン，例えばin-the-wildな画像にadaptされるような，を見たい
    * リアル画像と合成レンダリング画像のギャップを縮めるレンダリング技術の研究も，訓練データ問題の解決に貢献するかもしれない

2. Generalization to unseen objects

* sotaの論文の多くはデータセットをtrain, validation, testサブセットに分ける．(ex. shapeNet, Pix3D)
    * そしてtest subsetの性能を報告する．
        * しかし，これらの手法が全く新しい未知のobject/imageカテゴリにさらされたときにどう機能するかは不明である．
            * 3D再構成の究極のゴールは任意の画像からいかなる任意の3D形状も再構成できることである
                * **学習ベースの技術は，訓練データセットで張られた空間の画像と物体でしかうまく動かない．**
                    * 近年の研究，例えばCherabier et al[37]はこの問題を解決し始めている
                        * 面白い方向であるが，学習ベースの手法の汎化性能を上げるために従来の手法を組み合わせることになるだろう．

2. Fine-scale 3D reconstruction

* 現在のsotaの手法は形状の粗い3D構造を復元できる
    * 近年の研究は再興性の解像度をrefinement moduleの仕様によって大幅に改善したが，薄い，または植物，髪，毛皮のような小さいパーツはまだ失敗する

3. Specialized instance reconstruction

* 特定クラスのreconstructionに注目が集まっている．
    * 例えば人の体や体のパーツ，車，動物，建物
        * 特定の手法は事前知識ををかなり利用できる
            * 例えば，統計的な形状モデルを使って処理する
                * Kanazawa[53] はすでにこのモデルをクラス特有のmorphable modelと再構成関数を画像から一緒に学習することで解決している
    * 将来はbending, elasticity, topological variabilities[61], [62], [63], [136], [137]を扱える もっと進んだstatistical 形状モデルとdeepベースの３D再構成をみたい

4. ノイズの多い背景や遮蔽物がある状況で複数の物体を扱う

* 多くのsotaの手法が一つの物体を含む画像を扱う．
    * 自然な画像では，複数の異なるカテゴリの物体が含まれるのが普通．
        * 従来手法は物体検出の後roiにおける再構成を採用している[128]
            * 検出，その後の再構成モジュールは独立に動作する
                * しかしこれらのタスクは相互に関連しており，一緒に解ければ互いに利益をもたらす
    * このゴールに向かって２つの重要な問題が解決されるべきである
        * 複数物体再構成用の訓練データが不足していること
        * CNN構造，loss，学習手法(3D教師がない場合に特に重要となる)を適切に設計すること
            * これらは普通シルエットベースの誤差関数を使い，正確な物体レベルでのセグメンテーションをひつようとする

5. 3D video

* 本論文は一つまたは複数の画像からの3D再構成に着目しているが，時間的な相関は考えていない
    * しかし3D videoへの関心は高まっている
        * 例えば，連続するフレームが時間的に相関を持つビデオストリーム全体の3D再構成
    * フレームシーケンスの利用は再構成を改善する
        * 連続するフレームの情報を取り出して現在のフレームの再構成を改善したり，曖昧さをなくすことができるから
            * 一方再構成はフレーム間でなめらかで一貫している必要がある

6. Towards full 3D scene parsing

* 最終的なゴールは１枚または複数の画像から3Dシーン全体を意味的にパースできることである
    * これはdetection, recognition, reconstructionの統合を必要とする
        * 空間的な関係と物体間のintersectionを捉えることも必要
            * この問題の解決を試みた研究は少ないが，ほとんどがシーンを構成する物体の位置と空間に関して強い仮定をおいたインドアシーンのものに限られている