概要
3次元点群に対するシンプルですが強力な前処理を実現するMaskNetを提案している論文を読んだので紹介します。
MaskNetのアイディアは単純です。
下図の左に示されるような赤い点群と緑の点群を考えます。赤い点群は事前に用意されているテンプレート点群で、緑の点群が特定の位置に配置されたセンサーなどによって取得された欠損を含むソース点群とします。
ここで、ソース点群をテンプレート点群に位置合わせするようなレジストレーション処理を考えます。ソース点群には欠損が存在するため、この状態でテンプレートの点群へと位置合わせを行おうとすると、テンプレート側にしか存在しない領域がノイズとして働いてしまいます。もちろん、この問題を克服するためにRANSACを使うなど様々な方法が考案されていますが、MaskNetではもっとシンプルに「あらかじめテンプレート側の一部の点をマスクする」ことを考えます。
MaskNetでは、テンプレート点群とソース点群を入力すると、テンプレート点群に対するBinary Maskを推定し、ソース点群に存在しない点をマスクアウトできるようにします。これによって、レジストレーションに適した点のみからなる、上図右のような青い点群を得ることができます。
本稿では、まずネットワークの構造と訓練方法を確認し、その後本手法を用いたアプリケーションについて確認していきます。
書誌情報
- Sarode, Vinit et al. “MaskNet: A Fully-Convolutional Network to Estimate Inlier Points.” ArXiv abs/2010.09185 (2020)
- International Conference on 3D Vision 2020 採択
- https://arxiv.org/abs/2010.09185
- 公式実装(PyTorch)
ネットワーク構造
MaskNetの構造は、下図のようになっています。
$\mathcal{X, Y}$はそれぞれ、テンプレート点群、ソース点群を表します。$\mathcal{C}$はテンプレート点群に対するマスクです。
$\mathcal{X, Y}$はそれぞれ独立して特徴抽出が行われますが、ネットワークの重みは共有しています。緑のMLPsは、PointNet1による特徴抽出を表します。
テンプレート側では、ポイントごとの特徴量$\phi(\mathcal{X}) \in \mathbb{R}^{N_{\mathcal{X}} \times 1024}$が得られます。一方ソース側では、全ポイントに対するMaxPoolingが行われ、Global Feature Vector$g\left(\phi(\mathcal{Y})\right) \in \mathbb{R}^{\in 1 \times 1024}$が得られます。
テンプレート側の特徴量とGlobal Feature Vectorを$N_{\mathcal{X}}$個重ねた特徴量とを結合し、$N_{\mathcal{X}}\times 2048$の特徴量が得られます。これを赤のMLPsに入力することで、$\mathcal{C_i} \in \mathbb{R}^{N_{\mathcal{X}} \times 1}$が得られます。直感的には、テンプレート側の各点ごとに得られている特徴量が、ソース点群を表すGlobal Feature Vectorに含まれていると言えるか否かを判定している、と思えば良いでしょう。
赤のMLPsでの最後にはSigmoid関数が適用されるので、$\mathcal{C_i}$の各要素は$[0,1]$の値になっています。推論時には、適当な閾値$\epsilon$を用いて二値化することで、マスク$\mathcal{C}$を得ることができます。
ネットワークの訓練
MaskNetは、$\mathcal{C_i}$が真のマスク$\mathcal{C_i}^{\text{gt}}$に近づくように、以下の損失を最小化できるように訓練されます。
\text {Loss}=\sum_{i=1}^{N_{\mathcal{X}}}\left\|\mathbf{C}_{{i}}-\mathbf{C}_{{i}}^{g t}\right\|_{2}
実験では、モデルの訓練にModelNet-40を使用しています。ModelNetには、40カテゴリ、9843個のメッシュCADモデルが含まれており、このメッシュモデルから点をサンプルすることで、テンプレート点群とソース点群を得ています。後者では、物理的なセンサーをシミュレートし、特定の角度から見える面上の点に対して0、見えない面上の点に対して1を割り当てることで、欠損が生じているソース点群を作成しています。この値は$\mathbf{C}_{i}^{g t}$として、訓練時に使われます。
興味深いことに、このように訓練されたモデルは様々な物体カテゴリに対して一般化された性能を示します。以下は、ModelNet-40のうちの20カテゴリで訓練したモデルをつかって、訓練中に出現しなかったカテゴリについてマスクを推定した結果になっています。いずれのケースも、ソース点群に含まれない領域の点がテンプレート点群から除去されている様子が確認できます。
アプリケーション
論文中では大きく2つのアプリケーションが示されています。ひとつは、例として示してきたレジストレーションの高精度化です。もうひとつは、点群に対するノイズ除去です。
レジストレーション
MaskNetを使用したレジストレーションは、以下のような流れで行われます。$\mathcal{X, Y}$はそれぞれテンプレート点群、ソース点群を表します。
まず、MaskNetによって、$\mathcal{X, Y}$からマスク$\mathcal{C}$が推定されます。推定した$\mathcal{C}$を使用して$\mathcal{X}$をマスクすると、$\mathcal{C} \otimes \mathcal{X}$が得られます。$\mathcal{C} \otimes \mathcal{X}$に対して、ソース点群$\mathcal{Y}$をレジストレーションします。レジストレーションに使用するアルゴリズムはなんでも良く、実験では複数の手法が使用されています。
レジストレーションの結果、ソース点群に対する変換$\mathbf{T}=[\mathbf{R|t}]$が得られます。変換のパラメータは逐次的に更新され、以下のように徐々に位置合わせが行われます。
以下のグラフは各種レジストレーションの手法をそのまま使った時とMaskNetも併用した時の比較になっています。初期位置が大きく異なっていると変換パラメータ$\mathbf{R,t}$を推定するのが難しくなるのはどの手法でも同じですが、MaskNetを使用することで、多くの手法で$\mathbf{R,t}$の推定誤差を低減させることに成功しています。
ノイズ除去
MaskNetは、センサーによって得られたノイズの多い3次元点群に対するノイズ除去手法としても使用できます。
レジストレーションでは、テンプレート点群の一部をマスクアウトすることを目的としていましたが、ノイズ除去ではソース点群の一部をノイズとしてマスクアウトすることを目的とします。
下図(a)はソース点群で、欠損はありませんが、ノイズが大量に含まれています。(b)と(c)はテンプレート点群の元となるメッシュモデルを表します。いずれもchairカテゴリに含まれるモデルですが、(b)はソース点群に形状が似ていて、(c)はソース点群とはやや異なる形状となっています。
(d)は既存の手法であるPointCleanNetによるノイズ除去結果となっています。この結果は、元々のソース点群が持っていた点を大幅に削除しており、ノイズ除去してはやや過剰です。
(e)は、(b)から得られるテンプレート点群を使ってノイズ除去を行った結果です。ソース点群に含まれていたノイズがほとんど取り除かれていることがわかります。
(f)は、(c)から得られるテンプレート点群を使ってノイズ除去を行った結果です。(e)と同様に、ソース点群に含まれていたノイズはほとんど取り除かれています。(c)はソース点群と形状が違いますが、このような形状の違いも吸収した上でノイズ除去を実現できるというのは興味深い性質です。
まとめ
3次元点群に対する学習ベースの前処理手法MaskNetについて紹介しました。
本手法は片方が綺麗なテンプレート点群であることをが前提となっています。論文の最後で示されているように、双方の点群がいずれも欠損やノイズを含んでいるような条件で、双方の点群に対するマスクを推定するような拡張ができれば、より広範な可能性がうまれるの余地があります。
-
Qi, C. R. et al. “PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation.” 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (2017): 77-85. ↩