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

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

Pytorchの勉強を続ける

Pytorchの勉強を続けています。前回、基本的なGANは動いたと書きましたがどうもうまく学習できていないみたい・・・

オートエンコーダ(AE)のほうが学習状況の確認がしやすい(損失関数が1つだけなのでこいつが単調に減少していってくれればいちおう学習が進んでいると判断できる)ので、基本のAEまで戻ってプログラムしています。

今作っているAEは入力(下図の左)の3Dデータ(32x32x32)をエンコーダネットワークで100次元のベクトルに変換し、このベクトルをデコーダネットワークで元のサイズ(32x32x32)の3Dデータ(下図の右)に変換しています。

f:id:ichidaya:20210830214808j:plain

エンコーダへの入力とデコーダの出力の例 (1)

単純なAEだと損失関数としてエンコーダの入力とデコーダの出力の差(Binary Cross Entropy)を使うのですが、今回は出力が値のばらつきが正規分布になっているかというKL-Divergence(カールバックライブラーダイバージェンス)の項を追加しています。変分オートエンコーダと呼ばれています。

f:id:ichidaya:20210830220947j:plain

                             エンコーダへの入力とデコーダの出力の例 (2)

KL項の重みをどのくらいにするかにもよるのですが、変分オートエンコーダでは角やアンテナなどの特徴が失われてしまうことが多いです。

f:id:ichidaya:20210830222727j:plain

エンコーダへの入力とデコーダの出力の例 (3)

比較的学習しやすい変分オートエンコーダとシャープな出力が得られるGANを組み合わせるという手法もあるようです。