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

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

ロボットの頭部をAIでデザインできないかと試してみたい ー単純に適用してみたー

OBJ形式の3Dモデルをニューラルネットへの入力であるNumpy形式に変換するプログラム、逆にニューラルネットの出力のNumpy形式をOBJ形式に変換するプログラムを作ったので、参考書で定義されているGAN(敵対的生成ネットワーク)で3Dデータを生成してみました。学習データはThingiverseで見つけてきたロボットの3Dデータ。ガンダム、パシフィックリムなどのロボットの3DデータをZBrushで編集して頭部だけのデータを60体分集めました。これだけでは全然足りないので、1体分のデータを縦/横に少しずつ引き延ばして25のバリエーションを作成、全部で1500ほどを学習データ(1データは64×64次元、3チャンネル)として準備しました。

ニューラルネットの構成はセレブの顔を生成する例を何も考えずそのまま使用、人間が決めないといけないハイバーパラメータもそのまま使っています。GANではではランダムに発生させた3Dデータから出発してロボットの頭部っぽい3Dデータを生成するネットワークと本物の頭部(学習データ)と人工的に生成された頭部っぽい3Dデータを区別するネットワークが競い合って3Dモデルを発展させていきます。

で、試してみると学習の初期段階で生成されている3Dデータがこんな感じ。

f:id:ichidaya:20210131220434j:plain

学習初期段階で生成される3Dモデル

そもそもなんのかたちにもなっていないという感じですが、学習プロセスを5000回ぐらい繰り返すと、以下のようななんか(?)のかたちにはなってきました。

f:id:ichidaya:20210131220829j:plain

5000回学習後に生成された3Dモデルの例

「どこがロボットじゃーい!!?」と突っ込まれそうですが、ランダムノイズのようなデータからコンピュータが勝手にここまでの3Dデータを作ってくれるってすごいことのように思えます。

もう少し勉強していけばいろいろおもしろいことができそうです。