Pixel2Mesh: Generating 3D Mesh Models from
Single RGB Images
PSI B3 近藤生也
余談
- https://www.crowdai.org/c
hallenges/marlo-
2018/leaderboards
- エントリーまだ受付中だ
そう
アジェンダ
● 書誌情報
● モチベーション
● データセット
● 既存手法
● GCN
● コンセプト
● Mesh deformation (graph based ResNet)
● Graph unpooling
● loss4種
● 評価指標
● 実験
● 所感
3
書誌情報
● Pixel2Mesh: Generating 3D Mesh Models from Single RGB Images
(ECCV2018) ←ヨーロッパのCV系
● Fudan University(中国), Princeton University(米), Intel Labs
● ポイント
○ 単一画像から3Dメッシュを復元する。
○ 定量定性的にかなりよさそう
4
モチベーション
5
● 単一の視点から3D形状を推論したい
● ボクセルでもポイントクラウドでもなく、メッシュで。
● メッシュだと、テクスチャを貼りやすい
レイトレーシングもしやすい。
テクスチャ
モチベーション
6
(メッシュ系って実際何
に使うんだよ……)
● 個人的にはこれを→
one-shotでやりたいの
だと思う(やりたい)
● 仮想空間, オブジェク
トを作成するコスト
を(劇的に?)下げる,
3D情報を(明示的に)理
解した上でactionを考
える
↑ Google mapの3D機能。
恐らくSLAMをベースにした手法で3Dを復元し、
テクスチャを貼り付けている
データセット
● ShapeNet
● WordNetの構造に従っている
● 数が凄い
● (使わない手はない)
7
既存手法
● [DL輪読会]MeshとDeep Learning Surface Networks & AtlasNet
● AtlasNetはsurfaceを分けて生成。枚数はハイパラ。
● Surface Networksは変形に強い(?)。ShapeNet等で実験をしていない。
どちらかというとsiggraph系(CG系)な気がする(?)。
● これらとは違うアプローチを提案
8
コンセプト
● GCNベース(メッシュの頂点と辺が、グラフの頂点と辺に対応)
● 徐々に頂点数を増やす(点: 156→618→2466, 面: 308→1232→4928)
○ ~~MH3Gのリオレウスのポリゴン数が約6500~~
● GCNとは別にCNNを用意し、入力画像から情報を抽出する。
9
GCN
10
● GCN一層の処理
fp^l: あるレイヤーでの、ノードpの特徴量ベクトル
N(p): pの隣接頂点の集合,
m次元→n次元と特徴量数が変化する場合、w0, w1はm*n行列
どの隣接頂点に対して使うw1も共通。
(ほとんど全結合で、自分自身と隣接してるノードの特徴量で次の層が決まる)
● https://colab.research.google.com/drive/1O4SiC5wEZn_98RSdalNJ92fJu1yo
chJe#scrollTo=O8lpjeHictaG
● GCN実装の本家様のkerasサンプルコードをさらにシンプルにしてコメント
を付けてみました。
Pixel2Mesh
● 入力:156個の頂点座標
● ⊕各頂点に対するCNNからの特徴量
● →Mesh Deformation(GCN)
● →Graph Unpooling(頂点増やす)
● ⊕各頂点に対するCNNからの特徴量
● →Mesh Deformation(GCN) 11
:
:
● →Mesh Deformation(GCN)
● →GCN
● 出力:2466個の頂点座標
Mesh deformation (graph based ResNet)
12
●
● CNNの3箇所のfeature mapから、入力画像に頂点を投影した場所の特徴量を
とってきて、各頂点の特徴量とする。
● GCN部分では残差接続を使う。
Graph unpooling
13
● NN的にはUpsamplingと同じノリで、点の数を増やす。
● 各面の中心ではなく辺上に点を増やすことで、均一な密度で点を増やせる
× ○
Loss1: Chamfer loss (面取りloss)
14
p: predicted vertex, q: ground truth vertex
● 一番近い頂点が正しいペアだと仮定して、二乗誤差をとる。
● 片方のΣだけだと、lossに登場しないpまたはqが出現しうる!
(ユークリッドノルム)
Loss2: Normal loss (法線loss)
15
各予測頂点pとすべての隣接頂点kについて、『線分pk』と『点qでの接平面
の垂線』との内積をとる。
● これは、点qでの接平面上に点pとその隣接頂点が全て存在したときに 0に
なる。
Loss3: Laplacian regularization (ラプラシアンで正規化)
16
● ラプラシアンδpを定義
δp=「予測頂点p(x,y,z)」と「その隣接頂点の平均」の差 (dx,dy,dz)
● Mesh Deformationの前と後のラプラシアンをδp, δ’p。
● 隣接頂点との関係性が、G-Resの前と後であまり
変わらないようにする。
● 特異点みたいな頂点が生成されにくくなる
Loss4: Edge length regularization (辺の長さで正規化)
17
● すべての予測頂点pとその隣接頂点kの組み合わせについて、
距離の和をとる。
● 形の収束が安定しやすくなる。
実験
18
● それぞれのlossがいい仕事をして
いる。
実験
19
● SOTA
feature work
20
● 初期入力メッシュと目標物のトポ
ロジーが違う場合、この手法は最
適ではないので拡張していきたい
所感
21
● 暗黙的に3Dを学習する手法が流行ってる気がするけど、明示的に3Dを作れ
るほうが強い気がする…?
● いろいろlossを設計していたが、mesh系のGANが出たらあっさりSOTAだっ
たりするのでは?
参考
22
● GCN本家 https://arxiv.org/pdf/1609.02907.pdf

[DL輪読会]Pixel2Mesh: Generating 3D Mesh Models from Single RGB Images

Editor's Notes

  • #2 zero-shot-GCN 昔のリオレウスがポリゴン数(三角形の数)6500、今32万 VRChatのポリゴン数制限は2万 【ポリゴン数比較】 シン・ゴジラ 1億1000万 ミライアカリ 18万 ACfA アンサラー 15万 FF15 ノクティス 10万 キズナアイ・電脳少女シロ 8万 メギド 4万 にがもん式魔理沙 3万 ミライアカリの胸 2万 ばあちゃる 2万 MGS4 ソリッド・スネーク 1.4万 デレステ 1.1万 かばんちゃん 1万 depthを使うのまあありだけど、屋外、鏡とかに弱いので画像でもできたほうが良い?
  • #3 マインクラフトを使ったマルチエージェント系のコンペがあって、32位までが世界大会に招待される いろいろわけあって自分9位です 環境構築がまぁまぁめんどくさいけど、それさえクリアすればランクインできてしまうっていうおいしい状態なので紹介してみました
  • #4 http://imagingsolution.blog.fc2.com/blog-entry-142.html https://ja.wikipedia.org/wiki/Lp%E7%A9%BA%E9%96%93 156/628/2466 正四面体 点4辺6面4 一回増やす 点=辺+点=10 # 辺の数だけ点が増える 辺=辺*2+辺*4/2=辺*4=24 # 分裂, 一つの辺から4本生えるけども、生えた一本一本は他のとこから生えたともとれる 面=面*4=16 156 628 2466 156+点
  • #5 https://ja.wikipedia.org/wiki/%E4%BD%8D%E7%9B%B8%E5%B9%BE%E4%BD%95%E5%AD%A6
  • #6 米国のCG系の学会。 シーグラフ
  • #7 3Dを復元してテクスチャを貼り付ける
  • #10 たぶん618
  • #11 # 各頂点について、その頂点と連結している頂点N個の計N+1個について全結合層で新たな特徴量を計算し、 # そのN+1個の新たな特徴ベクトルを足し合わせる。
  • #12 たぶん618 concatnate 156個の頂点にconcatする
  • #13 赤いところ。 入力画像が一枚だけ遭って、そこにいまの状態を写像する。 表面じゃないってわかってても、無理やり撮ってくる。
  • #15 GANにすればって思ったけど
  • #16 垂直のほうが良い
  • #21 複数視点から的なhogehoge