機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

Point-Voxel CNN for Efficient 3D Deep Learningを読んだのでメモ

はじめに

Point-Voxel CNN for Efficient 3D Deep Learningを読んだのでメモ.

気持ち

3Dデータに対するdeep learning(特に畳み込み系)は計算コストが高いことが知られていて,エッジデバイス等での実装は不向きであるなので軽いかつ高性能なモデルを作りたいというもの.ここでは(ボクセル化した場合)入力の次元が高くなることと,(点群の場合)畳み込みでメモリへのランダムアクセスを問題視していて,これらを解決するPoint-Voxel CNNを提案するというもの.結果としてvoxel-basedな手法に対しメモリを10分の1に,計算時間を7分の1にしたとのこと.

Motivation

今回は入力として三次元座標\boldsymbol{p}_kと特徴量(色や法線など)\boldsymbol{f}_kの直積\boldsymbol{x}=\{\boldsymbol{x}_k\}=\{(\boldsymbol{p}_k,\boldsymbol{f}_k)\}を考える.このとき,voxel-based,point-basedの畳み込みはどちらも以下のように記述できる.

\displaystyle
\boldsymbol{y}_k=\sum_{\boldsymbol{x}_i\in\mathcal{N}(\boldsymbol{x}_k)}\mathcal{K}(\boldsymbol{x}_k,\boldsymbol{x}_i)\times\mathcal{F}(\boldsymbol{x}_i)

\mathcal{N}(\boldsymbol{x}_k)\boldsymbol{x}_kの近傍の点もしくはボクセルの集合で,\mathcal{F}(\boldsymbol{x}_i)\boldsymbol{x}_iの特徴量,\mathcal{K}(\boldsymbol{x}_k,\boldsymbol{x}_i)(\boldsymbol{x}_k,\boldsymbol{x}_i)間の畳み込み係数を表す.

Voxel-Based Models

Voxel-basedなモデルは入力の解像度が増加すると入力が大きくなりすぎてGPUに乗らないという問題があるが,解像度を落とすと原信号の情報が失われすぎて判別が不可能になる.ここでは論文Figure 2に解像度とGPU Memory,入力の情報損失の関係を示しており,Titanに乗る解像度(64\times64\times64)で42%の情報損失が起こることを示している.

Point-Based Models

点群データはボクセルデータと違い隣接する点\boldsymbol{x}_i\in\mathcal{N}(\boldsymbol{x}_k)がメモリ上で連続しているとは限らないため畳み込みの計算をする際にランダムアクセスが発生する.加えて隣接関係を得るためにk-nerarest neighborを計算する必要がある.また,点の相対位置に対して動的にカーネルを計算するPointCNNのような手法は,その分演算回数が増えるためこれもまた計算時間の増加につながる.実際PointCNNは全体の計算時間のうち半分近くをこのカーネルの計算に費やしているとのこと.

Point-Voxel Convolution

ここではvoxel-basedの良さ(データの連続性)とpoint-basedの良さ(少メモリ)を組み合わせたPVConvを提案する.PVConvはfine-grained feature transformationとcoarse-grained neighborhood aggregationに分解されそれぞれ効率的な実装が可能となっている.前提として全ての点は超球内に収まるように\|\boldsymbol{p}_k\|_2で正規化されているものとする.この正規化された座標を\{\hat{\boldsymbol{p}}_k\}とする.

Voxel-Based Feature Aggregation

特徴の集約(畳み込み)は点群よりボクセルで行う方が計算効率的に良いので,PVConvでは以下の3工程からなるボクセルに基づく特徴の集約を行う.

Voxelization

入力の点群\{(\hat{\boldsymbol{p}}_k,\boldsymbol{f}_k)\}をボクセルのグリッド\{\boldsymbol{V}_{u,v,w}\}に変換する.そのとき各ボクセルの値はボクセル内の点の特徴量\boldsymbol{f}_kの平均とする.

\displaystyle
\boldsymbol{V}_{u,v,w,c}=\frac{1}{N_{u,v,w}}\sum_{k=1}^n\mathbb{1}[\mathrm{floor}(\hat{\boldsymbol{x}}_k\times r)=u,\mathrm{floor}(\hat{\boldsymbol{y}}_k\times r)=v,\mathrm{floor}(\hat{\boldsymbol{z}}_k\times r)=w]\times\boldsymbol{f}_{k,c}

rはボクセルの解像度,\mathbb{1}[\cdot]は指示関数で座標\hat{\boldsymbol{p}}_kがボクセル内に収まっているかを示す.\boldsymbol{f}_{k,c}c番目の特徴量を表し,N_{u,v,w}は正規化パラメータ(ボクセル内の点の総数)を表す.実験的にPVConvはボクセルの解像度を高くする必要がないため,解像度によるメモリの増加はここでは問題にならないとのこと.

Feature Aggregation

点群をボクセル化した後,3D volumetric convolugion,batch norm,nonlinear activation functionで特徴の集約を行う.

Devoxelization

ボクセル化した点群を元の点群に戻す操作を行う.最も単純な方法はボクセルに含まれる全ての点群にそのボクセルが持つ値をコピーすることだが,同一ボクセルに属する全ての点群の特徴が同じになるのは良くないとのことで,ここではtrilinear補間によってボクセルから点群に戻す.

Point-Based Feature Transformation

voxel-based feature aggregationでは荒く特徴量の集約を行うため,詳細な認識を行うのが難しい.なので詳細な認識のために点群ベースの特徴変換を別途行う.やり方は単純で,PointNetと同様点ごとにMLPを使って変換するというもの.

Feature Fusion

voxel-basedとpoint-basedそれぞれで得られた特徴をまとめる処理.こちらも単純でただ足し合わせるというもの.こうしてみるとindetity mappingが1x1ConvになったResNetというイメージ.

まとめ

全体的にstraightforwardなアプローチという印象だが精度,Latency,GPU Memory全てにおいてアドバンテージがあるのでかなり強力という感じ.