3Dモデルをいろいろ作ってみたい

3Dモデルをいろいろ作ろうとがんばっています。苦労した点、役に立ちそうな情報を発信していきます。

state-of-the-artのDeep Learning(IM-NET)を試してみた

前回、Deep Learningを使った3Dデータのモーフィングを試してみて、なんらかの形を作ってはくれるもののちょっと残念な結果に終わったわけですが、我流で進めるのもそろそろ限界かなと思いちょっと世の中の状況を調べてみました。さすがに日本語の書籍で3Dモデルの生成を扱っているようなものはまだないですが、論文ではいくつか発表されていました。

そのうちの1つが2019年のCVPR(Computer Vision and Pattern Recognition)で発表された

Learning Implicit Fields for Generative Shape Modeling

で、オートエンコーダのデコーダ部分(IM-NET)に大きな特徴があります。通常、エンコーダが出力した何次元かのコード情報から、転置畳込み層とMax pooling層を使って3次元のボクセルまたはサーフェスのデータを作っていくのですが、IM-NETではコードと3次元の点の座標を受け取ってその点がコードが表す形状の内側にあるのか外側にあるのかを出力するネットワークを学習していきます。ある程度の数の点について形状の内側か外側かがわかったところでMarching Cubeというアルゴリズムを走らせて内と外の境界をサーフェス(メッシュ)として出力します。

ちなみにCVPRという国際会議は30年以上前の研究所勤務の時代には文字認識関係の論文を漁ったりしていたこともあるのですが、まさか会社を辞めてからまた論文を読むことになるとは思わなかった...

昔と大きく異なるのは、私のころは国際会議の論文にアクセスするには海外の会議に出席するか高価な予稿集を購入するかしか方法がなかったのが、いまはネットで簡単に論文を読むことができるということ。さらに、論文内容を実装したプログラムや実験に使ったデータまでgitHubから手にいれることができます。公開されているPytorchを使った実装とデータを使ってオートエンコーダの処理を私の環境でも動かすことができました。そこからちょっとだけプログラムを変えてcarの3Dモデルとairplaneの3Dモデルとの間でモーフィングを行ってみました。

f:id:ichidaya:20211123224508g:plain

carとairplaneの間で形状のモーフィングを行う

我流で行ったモーフィングよりも断然スムーズに形状が変化していってる!

次は自分で集めたロボットの頭部データをIM-NETの学習データに取り込んでロボット頭部のモーフィングを試してみたいと思っています。