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

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

KPConv: Flexible and Deformable Convolution for Point Cloudsを読んだのでメモ

はじめに

KPConv: Flexible and Deformable Convolution for Point Cloudsを読んだのでメモ.

気持ち

Point Cloudに対する効果的な畳み込みの方法の提案.基本的には2D regular gridに対する畳み込みを元にしていて,カーネルの形状をdeformation可能なdeform KPConvも提案.

Kernel Point Convolution

各点群の座標と特徴ベクトルをx_i\in\mathbb{R}^{N\times 3},f_i\in\mathbb{R}^{N\times D}と定義.畳み込みカーネルgとして,畳み込みを次のように定義.

\displaystyle
(\mathcal{F}\ast g)(x)=\sum_{x_i\in\mathcal{N}_x}g(x_i-x)f_i

ただし,\mathcal{N}_xxを中心とする半径r以内の点群を表す.以下y_i=x_i-xとする.ここでは画像での畳み込みと同様,異なる位置の点に異なる重みをかけて足し合わせるという演算を考える.畳み込みカーネルは,K個の位置に重みを持ち,それぞれカーネルの中心からの相対座標\tilde{x}_kと重みW_k\in\mathbb{R}^{D_{out}\times D_{in}\times K}を持つ.画像の場合には,カーネルにおける位置\tilde{x}_kに一致する画像上の値に重みをかけて,全ての要素の足し合わせで畳み込みが実現されるが,点群の場合には必ずしも位置\tilde{x}_kに値が来るとは限らない.また,カーネルでカバーされる範囲にいる点の数も未知のため,一工夫が必要.KPConvでは,\tilde{x}_ky_iとの距離h(y_i,\tilde{x}_k)=\max\left(0,1-\frac{\|y_i-\tilde{x}_k\|}{\sigma}\right)を使って,次のようにカーネルを定義する.

\displaystyle
g(y_i)=\sum_{k\lt K}h(y_i,\tilde{x}_k)W_k

Deformable Kernel

KPConvをさらにDeformableに拡張する.基本的にはDeformable Convと同様,オフセットを加えるというもので,次のように定義できる.

\displaystyle
(\mathcal{F}\ast g)(x)=\sum_{x_i\in\mathcal{N}_x}g_{deform}(x-x_i,\Delta(x))f_i\\
g_{deform}(y_i,\Delta(x))=\sum_{k\lt K}h(y_i,\tilde{x}_k+\Delta_k(x))W_k

オフセットの値\Delta_k(x)はやはりdeformable Convと同様に別ブランチの出力結果として得る.

画像と違い点群はスパースなため,rigidなカーネルでは点のないところに重みを用意するような状況に陥りやすく表現力の無駄遣いを起こすため,deformable KPConvは無駄なく畳み込みを行うことが可能とのこと.ただし,そのような挙動を実際に示すように以下の正則化をかけると良いらしい.

\displaystyle
\mathcal{L}_{reg}=\sum_x\mathcal{L}_{fit}(x)+\mathcal{L}_{rep}(x)\\
\mathcal{L}_{fit}(x)=\sum_{k\lt K}\min_{y_i}\left(\frac{\|y_i-(\tilde{x}_k+\Delta_k(x))\|}{\sigma}\right)^2\\
\mathcal{L}_{rep}(x)=\sum_{k\lt K}\sum_{l\neq k}h(\tilde{x}_k+\Delta_k(x),\tilde{x}_l+\Delta_l(x))^2

\mathcal{L}_{fit}カーネルの位置と点群の位置が重なるようにするもので,\mathcal{L}_{rep}カーネルの位置が一箇所に固まらないようにするもの.

まとめ

気づけばPointNetから点群を扱うニューラルネットがだいぶ進化していてなかなか面白い.ただTable 2の実験結果を見るとPointNetが圧倒的過去の物になっているのはちょっと恐ろしい.