イラストを生成できる描画AI、Stable Diffusionで画像で指示を与えるimg2imgを実装する方法を解説します。簡単なコードで実装できますので、構図や配色に与える変化をぜひ試してみてください。
Stable Diffusion 2.0でimg2imgを使ったイラストを生成する方法は以下の記事で解説していますので、こちらをご覧ください。
また、当ブログ内のStable Diffusionに関するトピックを以下の記事でまとめていますので、あわせてご覧ください。
Hugging Faceのトークンを作成する
Stable Diffusionを実行するために必要なトークンをHugging Faceのサイトで取得します。手順は以下の記事で解説していますので、実行前に取得しておいてください。
Stable Diffusionのインストール
Stable Diffusionをインストールするため以下のコマンドを実行してください。(2022/10現在最新の0.3.0をインストールします)
pip install diffusers==0.3.0 transformers scipy ftfy
作成したソースコード
ここからは実際にStable Diffusionに絵を描かせるためのコードを実装していきます。
ソースコード解説
6行目で先ほどHugging Faceのサイトで取得したトークンを定数に代入しますします。
#HuggingFaceのトークン
HF_TOKEN = "(取得したトークン)"
使用するモデルとトークンをパイプラインに設定します。今回は2022/10時点で最新のver1.5のモデルを使用します。
#StableDiffusionパイプライン設定
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_auth_token=HF_TOKEN)
16行目からが指示となる画像を取り込む処理となります。あらかじめ画像を用意しておき、そのパスを設定してください)
init_image = Image.open("(画像のパスを指定)")
init_image = init_image.convert("RGB")
init_image = init_image.resize((768, 512))
どのような画像を生成するかの指示を文字列で指定します。img2imgでは文字列と画像の両方で指示を与えることができます。
#生成したい画像を指示
prompt = "(promptを指定)"
画像を生成するための推論処理を実行します。pipeメソッドの引数として文字列のpromptと画像の両方を指示として設定します。
#画像生成
images = pipe(prompt=prompt, init_image=init_image, strength=0.75, guidance_scale=7.5).images
作成した全体のソースコード
以下が全体のソースコードです。
from PIL import Image
from datetime import datetime
from diffusers import StableDiffusionImg2ImgPipeline
#HuggingFaceのトークン
HF_TOKEN = "(取得したトークン)"
#StableDiffusionパイプライン設定
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_auth_token=HF_TOKEN)
#使用するデバイスを設定
pipe.to("cuda")
#pipe.to("cpu")
#初期画像を取得
init_image = Image.open("(画像のパスを指定)")
init_image = init_image.convert("RGB")
init_image = init_image.resize((768, 512))
#生成したい画像を指示
prompt = "(promptを指定)"
#画像生成
images = pipe(prompt=prompt, init_image=init_image, strength=0.75, guidance_scale=7.5).images
#生成した画像をファイル出力
date = datetime.now().strftime("%Y%m%d_%H%M%S") #現在の日時を取得
path = date + ".png" #ファイル名を生成した日時にする
images[0].save(path)
img2imgで実行した結果
Promptと初期画像
今回は文字列での指示として以下のようなpromptを用意しました。
prompt = "a film still of tron legacy cityscape in tassel squatting blue_dress from_side ice pink_background looking_up arms_behind_back thighhighs polearm school_uniform yukata sparkle blush frilled_skirt hand_in_own_hair convenient_censoring reflection"
さらに画像での指示として、私が適当にペイントで描いた以下の絵を用意して初期画像としました。
生成された画像
推論を実行した結果、出力された画像が以下となります。
1枚生成しただけですが、なんと構図や配色が初期画像と同じような感じで生成されています。
img2imgを使って絵で指示を与えることで構図などを狙って生成できることがわかりました。
Stable Diffusionのテクニックを効率よく学ぶには?
Stable Diffusionを使ってみたいけど、ネットで調べた情報を試してもうまくいかない…
そんな時は、操作方法の説明が動画で見られるUdemyがおすすめだよ!
動画学習プラットフォームUdemyでは、画像生成AIで高品質なイラストを生成する方法や、AIの内部で使われているアルゴリズムについて学べる講座が用意されています。
Udemyは講座単体で購入できるため安価で(セール時1500円くらいから購入できます)、PCが無くてもスマホでいつでもどこでも手軽に学習できます。
Stable Diffusionに特化して学ぶ
Stable Diffusionに特化し、クラウドコンピューティングサービスPaperspaceでの環境構築方法から、モデルのマージ方法、ControlNetを使った構図のコントロールなど、中級者以上のレベルを目指したい方に最適な講座です。
画像生成AIの仕組みを学ぶ
画像生成AIの仕組みについて学びたい方には、以下の講座がおすすめです。
画像生成AIで使用される変分オートエンコーダやGANのアーキテクチャを理解することで、よりクオリティの高いイラストを生成することができます。
まとめ
今回はStable Diffusionでimg2imgでイラストを生成するためのコードを解説してみました。文字では指示がしにくい構図や配色をある程度コントロールできるようになったことで、かなり活用の幅が広がるのではないでしょうか。
以下のページで自然言語処理モデルGPT-3を使ったライティングツールCatchyで、Stable DiffusionのPromptを自動生成する方法について解説していますので、あわせてご覧ください。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント