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

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

ロボットの頭部をAIでデザインできないかと試してみたい ーフレームワークをPytorchに変更ー

これまで3Dモデル生成のネットワークを作るのにTensorflow/Kerasというフレームワークを使っていたのですが、しばらく前からPytorchというフレームワークを使ってプログラムを作っています。2つのフレームワークDeep Learningフレームワークの2大勢力です。tensorflowが機能的に何か足りないとかということはないのですが、tensorflowでGANのプログラムをいじっているとフレームワークの中で発生したエラーの原因を特定できず煮詰まってしまっていて、何か目先を変えて打開したいというのがPytorchに手をだした理由です。

試行錯誤を続けてVisual Source CodeのJupyterプラグイン使ってデバッグするやりかたがやっとわかってきました。基本的なGANで32x32x32の3Dモデル(numpy配列)を作れるようになったところです。

損失関数の値をグラフにするやりかたもやっとわかってきました(これはDeep Learning)関係なくて単にPythonプログラミングをわかってなかっただけなんですが)。生成器の損失関数の値が学習をかさねるにつれて(乱高下しながらも)下がっていることがわかります。

f:id:ichidaya:20210803182929j:plain

モデル生成と識別それぞれの損失関数の値の変化

実際、同じ初期値をネットワークに入力しても学習が進んだネットワークからの出力はなんとなくロボットの頭部っぽい形が出力されています。

f:id:ichidaya:20210803190432j:plain

学習回数と生成される3Dモデル

プログラムとしては動いてくれていると思うのですが、ネットワークの学習の状況としてはまだまだです。モード崩壊とよばれる現象がおこっているらしく生成される形にバリエーションがないんですよね。ランダムに発生させたいろんな初期値を与えても生成される形は2,3個のパターンのどれかに落ちてしまう...

対応するための手法はいくつかあるので今後試していく予定です。