今回は2022年8月に公開された、高性能画像生成モデルである「Stable Diffusion」を実装する方法を紹介します。
第1回目は「txt2img」により、任意のキーワードから様々な画像を生成して遊んでみましょう。
Google colabを使用して簡単に実装することができますので、ぜひ最後までご覧ください。
今回の目標
・Stable Diffusionとは
・Stable Diffusionの導入方法
・Stable Diffusionの実装(txt2img)
Stable Diffusionとは
Stable Diffusionは拡散モデルによる画像生成モデルで、スタートアップ企業であるStability AIが2022年8月に「Stable Diffusion」と、それを使用したサービス「DreamStudio」のβ版をリリースしました。
Stable Diffusionは、SNSなどで話題になっている「Midjourney」と同様で、テキストから画像を生成することができます。
無料で公開されており、商用利用も可能なライセンスの下でリリースされているため、様々なシーンでの活用が期待されます。
Latent Diffusionをベースとしており、非常に大規模なデータセットであるLAION-5Bを用いてトレーニングされています。
参考URL:https://huggingface.co/blog/stable_diffusion
Stable Diffusionの導入
Hugging Faceの登録とNewTokenの発行
Hugging Faceのアカウント作成
初めにHuggingFaceのアカウントを作成します。
※Hugging Faceとは米国のHugging Face社が提供している、自然言語処理に特化したディープラーニングのフレームワークです。
ソースコードは全てGitHub上で公開されており、誰でも無料で使うことができます。
HuggingFaceにアクセスし、画面右上のSignUpよりアカウントを作成することができます。
登録したメールアドレスに認証メールが届くので、メールに記載されたリンクにアクセスすれば、アカウント登録は完了です。
Access Repositoryの承諾
こちらのCompVis/stable-diffusion-v1-4にアクセスし記載の内容を確認の上、「Access Repository」をクリックすることで権限を得ることができます。
この時点で、モデルの作者にメールアドレスとユーザー名が共有されることになりますので注意してください。
モデルの使用にあたっては、意図的に違法または有害な出力やコンテンツを作成・共有することが禁止されています。
CreativeML OpenRAIL Licenseに準拠した上で、再配布や商用利用のルールなどについての記載に同意する必要があります。
Access Tokensの発行
画面右上のアカウントのアイコンから[Settings]->[Access Tokens]に移動しNewTokenを発行します。
後ほど使用しますので、メモしておきましょう。
Google colabの準備
ここからは、Google colab環境で進めていきます。
まずはGPUを使用できるように設定をします。
「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更
まずはgoogleドライブをマウントします。
次に今回作成した画像を保存するフォルダを作成します。
フォルダ名は変えても問題ありありません。
from google.colab import drive
drive.mount('/content/drive')
#保存フォルダを作成する
!mkdir -p '/content/drive/My Drive/Stable Diffusion_main/'
%cd '/content/drive/My Drive/Stable Diffusion_main/'
以上で導入が完了しました。
Stable Diffusionの実装(txt2img)
ここからはStable Diffusionによる「txt2img」を実装していきます。
なお、「img2img」はこちらの記事で紹介しています。
まずは必要なライブリをインストールします。
!pip install diffusers==0.2.4 transformers scipy ftfy
次にモデルをダウンロードしましょう。
ここで先程取得した、Access Tokensが必要となります。
from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt
# ここに先程取得したAccess Tokensを貼り付ける
access_tokens="ここにAccess Tokensを貼り付け"
# モデルを読み込む
model = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=access_tokens)
model.to("cuda")
画像生成
まずは生成したい画像のキーワードを英語で指定します。
prompt ='Samurai walking in a Japanese castle with cherry blossoms in full bloom '
次に今回生成する画像の保管先のフォルダを作成します。
ここでは「outputs」というフォルダ名にしました。
!mkdir outputs
先程設定したキーワードをテキストファイルとして出力します。
txt_path = 'outputs/prompt.txt'
with open(txt_path,mode='w') as f:
f.write(prompt)
最後に生成する画像の枚数を設定して、実行します。
ここでは100枚の画像を生成してみることにします。
# 生成する画像の枚数
num = 100
for i in range(num):
# モデルにpromptを入力し画像生成
image = model(prompt)["sample"][0]
# 保存
image.save(f"outputs/test_{i:04}.png")
以上をまとめると以下のようになります。
あとはひたらす、キーワードを変えて画像を生成してみましょう。
prompt ='Samurai walking in a Japanese castle with cherry blossoms in full bloom'
!mkdir outputs
num = 100
txt_path = 'outputs/prompt.txt'
with open(txt_path,mode='w') as f:
f.write(prompt)
for i in range(num):
# モデルにpromptを入力し画像生成
image = model(prompt)["sample"][0]
# 保存
image.save(f"outputs/test_{i:04}.png")
生成した画像の紹介
いくつかの例を紹介します。
A family of white seals walking in an old town in Japan
Samurai walking in a Japanese castle with cherry blossoms in full bloom
A asian couple of high school students walking on a country road at sunset
A asian couple of high school students walking on the beach at sunset
A boy and girl are dating in the classroom by japanese animation
まとめ
最後までご覧いただきありがとうございました。
今回は2022年8月に公開された、高性能画像生成モデルである「Stable Diffusion」を実装する方法を紹介しました。
「txt2img」により、任意のキーワードから様々な画像を生成することができました。
なお、作成した画像をより高解像度にする方法も別の記事で紹介しています。ぜひご覧ください。