cedro-blog

NNabla DCGAN 顔画像のモーフィングをやってみる

今回は、NNabla DCGANの学習済みモデルを使って、顔画像のモーフィングをやってみたいと思います。

こんにちは cedro です。

前回は、DCGAN学習済みモデルを使って、入力(ランダムノイズ)にオフセットを加えることで、生成する顔画像の「顔の向き」をコントロールしてみました。

しかし、これで終わっては、せっかく作ったDCGAN学習済みモデルがもったいないので、もうちょっと何か活用方法がないかなと色々考えていました。

そうした中、適当な「右向き」画像のベクトル「左向き」画像のベクトルを見つけて、その間のベクトルを細かく補完して作成し、学習済みモデルにそのまま入力として与えてやれば、顔画像「右向き」から徐々に「左向き」に変化する、いわゆるモーフィングがお手軽にできるのではないかと思いつきました。

ということで、今回は、DCGAN学習済みモデルを使って、顔画像モーフィングをやってみたいと思います。

前回のプログラムを修正します

どういうベクトル画像生成するのかは、予め CSVファイル(vector.csv)に記録しておきます。

プログラムでは、そのCSVファイルから1行づつベクトルを読み出し、そのベクトルをそのまま入力として、画像生成する仕様にしています。

生成する画像はカラー64×64生成枚数CSVファイルに記録されているデータ数(行数)分です。dcgan_mor.py で保存します。

 

CSVファイルを準備します

前回作成したプログラムを使って、ランダム画像生成させ、気に入った「右向き」画像「左向き」画像を見つけ、そのベクトルを調べます。

「右向き」から「左向き」まで、40個のベクトル(100次元)を作成します。

Calcで、1行目に「右向き」画像のベクトルをコピーし、40行目に「左向き」画像のベクトルをコピーして、2行目から39行目は各次元毎に単純平均で補完します。

これをコピーして、CSVファイル(vector.csv)を作成します。

 

プログラムを実行します

必要なプログラムを格納し、> Python dcgan_mor.py でプログラムを実行します。

 

おおっ!思ったよりもかなり綺麗な出来です。単純平均による補完なので、途中はかなり画像が崩れるかと心配したのですが、スタートエンド画像が似通っているせいか、問題ないようです。

 

作成した40枚の画像を使ってGIF動画(表示切替0.1秒/枚)にしてみました。結構いけます!

 

さらに調子に乗って、「右向き」→「左向き」→「右向き」とやってみます。

合計80枚の画像のGIF動画(表示切替0.1秒/枚)です。

やっぱり画像、そしてさらに動画となると、燃えますねー(笑)。

では、また。