以前、Google Colaboratoryを使って無料の画像生成AI「Stable Diffusion」を動かす方法について、ブログ記事と動画で解説しました。しかし、2023年1月現在、その方法が使えなくなっているので、改めて利用方法を紹介します。
新しい方法ではトークンが不要です。また、使用するモデルも簡単に切り替えできるようです。
YouTube動画でもトークンなしVer.の使い方を解説しています。
説明に動きがあった方が分かりやすいと思うので、一緒にご覧ください。
使用コード
Google Colaboratoryに下記のコードを入力してください。YouTube動画のほうでは、Google Colaboratoryプロジェクトの作成方法などについても詳しく説明しています。
Google Colab のサンプルコードも載せておきます。自分で入力するのが面倒な人はどうぞ。
https://colab.research.google.com/drive/1f0R-Obi14Yh6ohspen6vSBqvvyRrRH5j?usp=sharing
Stable Diffusionのインストール
パッケージをインストールします。
#stable diffusionのインストール
!pip install --upgrade diffusers[torch] transformers
パイプラインの準備
パイプラインの準備です。model_idを変更することで別のモデルを試すこともできます
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
# パイプラインの準備
model_id = "stabilityai/stable-diffusion-2-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
scheduler=EulerDiscreteScheduler.from_pretrained(
model_id,
subfolder="scheduler"
),
torch_dtype=torch.float16
).to("cuda")
pipe.enable_attention_slicing()
画像の生成
画像を生成します。promptに生成したい画像のキーワードを入力して実行してください。
# 画像の生成
prompt = "dancing cat"
image = pipe(prompt, height=512, width=512).images[0]
image
このような画像が生成されます。(人によって画像は違います)
実行前に…
ハードウェアアクセラレータの設定
Google Colaboratory で GPU を使用するように設定します。
Google Colaboratoryを開き、メニューの
編集>ノートブックの設定
と進み、ハードウェアアクセラレータをGPUに設定して保存します。
注意点
トークン不要
トークンについては取得不要です。以前の記事やYouTube動画で解説したトークンを取得する方法については飛ばしてもらって構いません。
画像のダウンロード
画像をダウンロードする際は、画像を右クリックしてWindowsの場合は「名前を付けて画像を保存」を押せば、ファイル名などを決めた後、自分のPCにダウンロードすることができます。
画像ファイルは画像を生成しなおすと、上書きされてしまいますので、画像を消したくないという場合はダウンロードをしておきましょう。
Google ドライブへの自動保存
# ドライブのマウント
from google.colab import drive
drive.mount('/content/drive')
# 出力先の指定
import os
os.chdir('/content/drive/MyDrive/生成画像')
# 画像の生成
prompt = "dancing_cat"
image = pipe(prompt, height=512, width=512).images[0]
# 画像を保存(ファイル名はdancing_cat.png)
image.save(f"踊る猫.png")
image
画像の生成のプログラムをこちらに書き換えると、生成画像が Google ドライブに自動保存されます。上のセルを実行すると、Google ドライブへのアクセスを要求されますので、許可を押してください。
AIのパラメータ変更
学習のステップ数、画像のサイズなどを変更します。
imageに代入するpipeの引数を、以下のように変えるとできます。
image = pipe(prompt, # キーワード
height=512, # 画像の高さ
width=512, # 画像の幅
guidance_scale=7.5, # テキストとの類似度
num_inference_steps=50, # 画像生成に費やすステップ数
generator=torch.Generator("cuda").manual_seed(0), # 乱数シードジェネレータ
).images[0]
複数画像の同時生成
2023-6-14追記
トークンありのときに紹介した、複数画像を同時に生成する方法を、トークンなしのバージョンで行う方法です。
from PIL import Image
def image_grid(imgs, rows, cols):
assert len(imgs) == rows*cols
w, h = imgs[0].size
grid = Image.new('RGB', size=(cols*w, rows*h))
grid_w, grid_h = grid.size
for i, img in enumerate(imgs):
grid.paste(img, box=(i%cols*w, i//cols*h))
return grid
from torch import autocast
import datetime
#3枚の画像を1×3の形に並べて生成します。
num_rows = 1
num_cols = 3
prompt_single = "dancing cat"
prompt = [prompt_single] * num_cols
all_images = []
for i in range(num_rows):
# images = pipe(prompt, height=512, width=512).images
images = pipe(prompt, # キーワード
height=512, # 画像の高さ
width=512, # 画像の幅
guidance_scale=7.5, # テキストとの類似度
num_inference_steps=50, # 画像生成に費やすステップ数
generator=torch.Generator("cuda").manual_seed(0), # 乱数シードジェネレータ
).images
all_images.extend(images)
# 画像を保存(ファイル名は「踊る猫_dancing cat_2022-2-22_22-22-22」などのようになる)
now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=9)))
filename = "踊る猫"
i = 1
for image in all_images:
image.save(f"{filename}_{prompt_single}_{now.strftime('%Y-%m-%d_%H-%M-%S')}_({i}).png")
i += 1
grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid
複数の画像をグリッド状に並べて表示します。
- num_rows と num_cols
- prompt_single
- filename
を変更してください。
num_rowsが行数(縦の数)、num_colsが列数(横の数)です。3×3ぐらいがおすすめ
prompt_singleにプロンプトを記述します。(dancing_catなど)
filenameにファイル名を記載します。(踊る猫など)
生成しなおす場合は、最後のセル(prompt_singleなどが書かれたセル)を再度実行してください。
また、画像のサイズや乱数の種なども、単体の画像生成と同じように変更することができます。
参考
Google Colab で Stable Diffusion 2.1 を試す - diffusers版:https://note.com/npaka/n/n1f4e2bcad037
Stable Diffusion を Google Colabで実行する際に便利なコード:https://zenn.dev/6uclz1/articles/d7736b06d24f1a
コメント