乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

画像生成

今回はGoogle Colabで
stable diffusionを便利に使うテクニック
についてです。

解説動画はこちら



前回は
Google Colabでstable diffusionを使う方法を
紹介しました。
stable diffusionをGoogleColabで使ってみる


今回は
もう少し使い勝手を良くするための
テクニックを紹介していきます。


まず最初は
モデルのロードの高速化です

GoogleColabで
stable-diffusionを使うには
最初にセットアップとして
色々読み込みをしないといけません。


初回のセットアップ部分のコード
(要アクセストークン)
#@title 事前セットアップ
 
# 必要なライブラリのインストール
!pip install diffusers==0.2.4 transformers scipy ftfy
 
# アクセス・トークンを設定
token = ""#@param {type:"string"}

# パイプラインを構築
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=token)
pipe.to("cuda")

初回はモデルのダウンロードなどが行われるため
この読み込みがかなり時間が掛かります。

この部分を高速化するために
モデルをpickleで保存してみましょう。



Googleドライブのマウント

モデルを保存するには
Googleドライブのマウントをしておく
必要があります

フォルダマークから「ドライブのマウント」
をクリックしてマウントしておきましょう。


モデルの保存

import pickle
import shutil
import os

model_name = 'sd_model.pkl'
with open(model_name , mode='wb') as f:
    pickle.dump(pipe, f)

save_dir = 'drive/MyDrive/stable-diffusion-v1-4/'
os.makedirs(save_dir, exist_ok=True)
save_path = save_dir + model_name
shutil.copyfile(model_name, save_path)

これでGoogleドライブに保存されます。

次回以降はこのドライブに保存された
モデルをロードすることで高速化できます。



モデルのロード
# 必要なライブラリのインストール
!pip install diffusers==0.2.4 transformers scipy ftfy

# パイプラインを構築
from diffusers import StableDiffusionPipeline

model_name = 'sd_model.pkl'
save_dir = 'drive/MyDrive/stable-diffusion-v1-4/'
save_path = save_dir + model_name
with open(save_path, mode='rb') as f:
    pipe = pickle.load(f)
2回目以降はこのコードで
Googleドライブからモデルを
読み込み出来ると思います。

stable-diffusionを使えるようになるまでが
少し高速化されます。



画像作成(1枚)
#@title 画像を生成する
 
# 画像生成
prompt = "" #@param {type:"string"}
img = pipe(prompt)["sample"][0]

# 画像の保存
img_name = prompt.replace(' ','_')
img_path = img_name + '.png'
img.save(img_path)

# 画像の表示
from IPython.display import Image,display
display(Image(img_path))

テキストを入力すると
1枚だけ画像が生成されます。

同じテキストの画像は1回ごとに
上書きされて消えてしまうので
何枚も作成する場合は
少し使い勝手が悪いです。



画像作成(フォルダ内に複数枚数)
#@title 画像を生成する
import os

# 画像生成
prompt = "" #@param {type:"string"}
times = 3 #@param {type:"integer"}
save_dir = 'drive/MyDrive/stable-diffusion-v1-4/sd_img/'

for i in range(times):
  img = pipe(prompt)["sample"][0]

  # 画像の保存
  txts = prompt.split(' ')
  img_name = prompt.replace(' ','_')
  if len(txts)>=4:
    dir_path = '_'.join(txts[0:2]) + '_-_' +  '_'.join(txts[-2:])
  else:
    dir_path = prompt.replace(' ','_')

  # 保存ディレクトリの作成
  img_save_dir = save_dir + dir_path
  os.makedirs(img_save_dir, exist_ok=True)
  
  img_path = img_save_dir + '/' + img_name + '_{0:02}.png'.format(i)
  img.save(img_path)

ということで
複数枚を一気に作成するようにしてみましょう。

こちらのコードでGoogleドライブ内に
画像が保存されるようになります。

timesの部分で回数指定ができるので
変えることで複数枚を一気に作成できます。

作成した画像を全部見るのは次のコードです。

# 画像の表示(保存ディレクトリ内の画像全部)
from IPython.display import Image,display
import glob
for path in glob.glob(img_save_dir + "/*.png"):
  print(path.split('/')[-1])
  display(Image(path,retina=True))

これでまとめてフォルダ内の画像を表示できます。


画風に加える文字列(プロンプト)の生成補助

stable-diffusionでは様々な画風を
指定することができますが
指定するには、コマンドが必要です。

コマンドを覚えるのは大変なので
指定するプロンプトに
画風を加える補助をしてくれる
サイトがあります。

promptoMANIA

こちらでプロンプトを英文で打ち込みます。
スクリーンショット 2022-09-10 17.38.12

次に下の方にスクロールすると
画風を選ぶことができます。
スクリーンショット 2022-09-10 17.38.40


画風のサンプルが画像で表示されるので
これを参考にしながら作成したい画風をクリックします。

サイトの上部にプロンプトが作成されるので
コピーできるようになります。

スクリーンショット 2022-09-10 17.38.47

これをstable-diffusionに貼り付ければ
その画風で作成することができます。



作成した画像のダウンロード
# ダウンロードしたいフォルダを zip 圧縮する
!zip -r /content/download.zip drive/MyDrive/stable-diffusion-v1-4/sd_img/

# 圧縮した zip ファイルをダウンロードする
from google.colab import files
files.download("/content/download.zip")

こちらのコードで画像をまとめてダウンロードできます。
Googleドライブに保存されてはいるので
そちらからもまとめてダウンロードは出来るので
あまり使う機会は少ないかもしれませんが
Google Colab上から画像のダウンロードをするのは
このコードを使えば出来ます。


今回は少しだけstable-diffusionを使うのが
便利になるテクニックを紹介しました。

他にも紹介しきれないほどの
機能を有しているので
また機会があれば
色々紹介していきたいと思います。

それでは。

今回はテキストから画像を自動生成する
stable-diffusionをGoogle Colabで試してみました

解説動画はこちら






さて、こちら
最近公開されたようなのですが
テキストから画像を生成してくれるという
優れものです

使えるようにするには
少しコツがいるので手順を紹介します。

デモサイト



コードを動かすために必要な作業

1.Hugging Faceのアカウント作成(要メールアドレス)

最初はhuggingfaceというサイトのアカウントが必要です
SignUpからメアドとパスワードで登録しましょう。


2.来たメールで認証確認

登録したらメールが来ると思うので
リンクをクリックして認証確認をします。


3.stable-diffusionのModel cardの使用申請をする
申請先

次にこのライブラリを使うためには
Model cardというものの使用許可がいるため
申請をする必要があります。

リンクにアクセスして
チェックを入れて
Access repositoryをクリックします。


4.Access Tokenを取得

その後、Tokenの作成画面に遷移し
「New token」をクリックして
適当な名前で「token」を作成します。
スクリーンショット 2022-08-27 14.34.32

出来上がったら、コピーボタンがあるので
それをコピーします。



ここからはGoogle Colabの設定です。

5.Google Colabのランタイムの変更

CPUでは動かないので、ランタイムを設定変更します。

「ランタイム」から「ランタイムタイプの変更」
スクリーンショット 2022-08-27 15.45.44
ハードウェアアクセラレーターを
「None」から「GPU」へ変更します。



6.Access Tokenをコードに入力して実行する

最後に次のコードをコピペして
Tokenを打ち込んで実行します。

そうするとコード類のセットアップが走り
2-3分すると終わります。

#@title 事前セットアップ
 
# 必要なライブラリのインストール
!pip install diffusers==0.2.4 transformers scipy ftfy
 
# アクセス・トークンを設定
token = ""#@param {type:"string"}

# パイプラインを構築
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=token)
pipe.to("cuda")



あとは下記のコードをコピペして
英文のテキストを入力して画像を生成しましょう。
#@title 画像を生成する
 
# 画像生成
prompt = "A small cabin on top of a snowy mountain in the style of Disney, artstation" #@param {type:"string"}
img = pipe(prompt)["sample"][0]
 
# 画像の保存
img_name = prompt.replace(' ','_')
img_path = img_name + '.png'
img.save(img_path)

# 画像の表示
from IPython.display import Image,display
display(Image(img_path))

画像は画像保存で指定したパスに
保存されます。

画像作成時のポイントとして
・英文でないとダメです
・画風(スタイル)を指定できます


今回使用した英文の例です

A high tech solarpunk utopia in the Amazon rainforest

A pikachu fine dining with a view to the Eiffel Tower

A mecha robot in a favela in expressionist style

an insect robot preparing a delicious meal

A small cabin on top of a snowy mountain in the style of Disney, artstation

A_high_tech_solarpunk_utopia_in_the_Amazon_rainforest
A_pikachu_fine_dining_with_a_view_to_the_Eiffel_Tower
A_mecha_robot_in_a_favela_in_expressionist_style

結構それなりに、いい感じに出来ていると思います。

画像の生成には30秒ほどかかり
Google ColabのGPU使用は
無料版だと12時間ほどかと思うので
結構な枚数は作成できるんじゃないかと思います。

ちょっとしたイラストなんかは
自動で生成出来てしまいますね。

やりたい方は試してみてくださいね
それでは。

BabyGANという
父親と母親の画像から子供の画像を
生成するツールが公開されていたので
早速遊んでみました。

解説動画はこちら


 

BabyGANのリンクはこちらです。

GoogleColab:
BabyGAN


GitHub:
BabyGAN

さて、早速GoogleColabの
プロジェクトで遊んでみましょう。

開くとこんな感じになってます。
スクリーンショット 2020-08-30 14.53.32


まずは
「Clone Git repository and install all requirements」
と書かれているコードセルを実行します。


そうするとプロジェクトが
ディレクトリにコピーされます。
スクリーンショット 2020-08-30 14.55.32



次に
「Save the weights of the pretrained model and mount Google Drive」
と書かれたコードセルに移動して
そこに書かれたGoogleDriveのリンクを開きましょう。

ドライブに移動したら
「BabyGAN」のディレクトリを右クリックして
「ドライブにショートカットを追加」を選択します。
スクリーンショット 2020-08-30 14.57.40
これを先にやっておかないとエラーになります。
ショートカット追加の作業が終わったら
このコードセルを実行しましょう。

続いて
「Upload portrait of a MAN」
と書かれたコードセルを実行すると
父親画像のファイルアップロードボタンが現れるので
これをクリックして、ファイル選択して
アップロードします。

「Upload portrait of a WOMAN」
と書かれたコードセルを実行して
母親画像も同様にアップロードします。

今回は
父親に「クロちゃん」
母親に「フワちゃん」
でやってみました。

続いて
「Get latent representation」
と書かれたコードセルを実行すると
学習が始まるようです。

0%から始まり100%になって
「Generation of latent representation is complete! Now comes the fun part.」
と表示されたら終わりです。

だいたい五分くらいかかるので
遊んで待っていましょう。

学習が終わったら
「Generating a child's face」
と書かれたコードセルを実行すると
父親、母親の画像とともに
子供画像が生成されます。

パラメータをいじれるようですね。
「genes_influence:」の部分では
0.01-0.99で遺伝要素の割合を設定できます。

0に近いほど父親の要素を強くし
1に近いほど母親の要素を強くする設定です。

「person_age:」の部分では年齢設定ができます。
10-50歳を指定できるようです。

スクリーンショット 2020-08-30 15.07.16

パラメータをいじると色々なパターンで試せるので
遊んでみてください。

画像を変えるとつど学習で
時間かかるのが難点ですが
試してみるのは面白いと思います。

生成結果がどうなったかは
動画を見ていただければと思います。

父親に「クロちゃん」
母親に「フワちゃん」

だから
子供は「クワちゃん」
ですね!!!

今回はこれまでです
それでは。

世の中から悪しきモザイクを排除したい!!!

そう考えてプログラマーは立ち上がり
モザイク撲滅委員会を発足しました。

解説動画はこちら

 

さて元ネタは
GIGAZINEさんに載っていたこの記事
「モザイク画像の解像度を64倍にする研究」・・

のリンクにあるGoogleColabのコードです。

コードはこちら

スクリーンショット 2020-07-11 14.39.12


早速試してみるとコードを
実行するだけで試せるようですね。

初回はGithubからのコードのダウンロードなどがあり
少し時間かかります。

容量が結構大きなものをDLするため
場合によっては実行時にエラーになる可能性があります。
(colabの上に注意書きがしてあります。)

その場合は少し時間を置いて待つ必要があるようです。

ネタはこちらのgithubのコードみたいですね。

ダウンロードなどが終わると
画像のアップロードを求められます。

スクリーンショット 2020-07-11 14.41.11
ファイル選択を押して
ファイルを選択しましょう。

今回はこちらのモザイク画像を
使用することにしました。

96chan2

このモザイクが外れたものが生成できれば
晴れてモザイク除去に成功と言えるでしょう!!!

アップロードして暫し待ちます。

ドキドキ!!!

・・・・

・・・

・・



チーーーん
出来上がりました。

結果は!?!?!?!?!?!

download

誰やねん!!!!!!

右側誰やねん!!!


このプログラムは
元の画像とモザイク画像を比べて

モザイクをかけた画像に近くなるような
オリジナル画像を生成するものです。

オリジナルの画像生成の学習に用いられた
画像に近いものを生成しようとするわけで
当然、学習データに無いものは
生成しても精度は程遠いのでした。

まあ当たり前の結果ですねーーー。

うーーーん残念
も少し近めの画像に
なってもらえると良かったのですが

ほんと誰やねん!!!

モザイクと人類の戦いは
まだまだ続くのでした!!

このページのトップヘ