!!! サイト改修中のため表示が乱れる場合があります(1月末頃まで) !!!
画像生成AI / スタイル変換

2-4. DCGANでお寿司をモーフィングする(ソースコードあり)

やること

DCGANでお寿司のモーフィング(画像がだんだん変化するアレ)を行います。

使うもの

Google Colaboratoryが利用可能です。

Google Colab

WinPython3.6をおすすめしています。

WinPython - Browse /WinPython_3.6/3.6.7.0 at SourceForge.net
Portable Scientific Python 2/3 32/64bit Distribution for Windows

こちらの勉強会を参考にしています。

AIワークショップ|初心者だけどDCGANできちゃった (2019/01/18 18:00〜)
# 【注意】偽札を作るワークショプではありません【喚起】 警察関係者の立ち入りを禁止します() ## オンラインコミュニティ 情報交換・質問・クレームなどはAI FASHIONのSlack(自由参加)...
AI勉強会|GANやVAEが書けるようになりたい (2019/10/11 19:30〜)
## 久しぶりに本郷で開催します こちらがライブ配信のアーカイブ動画です。 ## 参加方法 抽選や承認はありませんので、好き勝手にお越しください。 ## オンラインコミュニティ 情報交換・質問・クレー...

ソースコード

学習で保存されたジェネレータの重みを指定してください(generator_1200.h5)。実行すると、「DCGAN_morph」フォルダに画像が保存されていき、さらにmorph.gifも保存される親切設計です。

import os
import numpy as np
import numpy.random as nr
from PIL import Image
import matplotlib.pyplot as plt
from keras.models import load_model


#パラメータ
#======================================
#使用する重み
para = 'DCGAN_para/generator_1200.h5'

#乱数列の次元
z_dim = 100
#補完数(58だと60枚出ます)
img_num = 58

#モーフィングを保存するフォルダ
img_f = 'DCGAN_morph/'
#======================================




#乱数列1
a = np.clip(nr.randn(z_dim), -1, 1)
print(a)
#乱数列2
b = np.clip(nr.randn(z_dim), -1, 1)
print(b)


#間の補完
#======================================
zs = np.zeros((img_num+2, z_dim))
for i in range(img_num+2):
    zs[i] = a * ((img_num+1-i)/(img_num+1)) + b * (i/(img_num+1))
#======================================


#generatorで画像を生成
#======================================
model = load_model(para)
imgs_array = model.predict(zs)
imgs = []
for i in range(len(imgs_array)):
    img = Image.fromarray(np.uint8(imgs_array[i] * 127.5 + 127.5))
    imgs.append(img)
#======================================

#保存用フォルダ作成
if not os.path.isdir(img_f): 
    os.makedirs(img_f)

#保存
#======================================
for i in range(len(imgs)):
    print(i)
    #画像の表示と保存
    imgs[i].save(img_f + str(i) + '.png')
    plt.imshow(imgs[i], vmin = 0, vmax = 255)
    plt.show()
#gif保存
imgs[0].save('morph.gif', save_all=True, append_images=imgs[1:], optimize=False, duration=1, loop=0)
#======================================

結果

ランダムに生成された2枚の画像と、その中間の画像(枚数指定可)が保存されます。ネタの色や幅がだんだん変化するのが理想のモーフィングですが、ごくシンプルな実装ですからそこまでは望みません。

豪華4寿司ループも作ってみました。

余談

モーフィングでは2つの画像を構成する乱数をだんだんと近づけていますので、色や幅がだんだん変化することが理想です。よくある失敗例として、「マグロ→マグロとサバが重なった画像→サバ」のように、単に画像が切り替わっている場合があり、「なんちゃってモーフィング」と呼ばれることがあります。

関連記事もご参照ください

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

タイトルとURLをコピーしました