イラストを生成できる描画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を使用する際にGoogle ColaboratoryやWebサービスを利用されている方も多いかと思います。しかし、最近Google Colabの無料での使用範囲が大きく制限されたり、Webサービスでは月額費用がかかったりします。
欲しいイラストを生成するにはかなりの回数をトライする必要があるため、これらの制約に縛られることなく使用できるローカル環境を構築するのがおすすめです。
ローカルのPCに搭載するグラフィックボード
ローカルマシンで実行する上で重要になってくるのがグラフィックボードです。
Stable Diffusionでイラストを生成するために実行される推論処理を、グラフィックボード上のGPUを使って大幅に高速化することができます。
トライする回数が増えれば品質の高いイラストが生成される可能性が上がりますので、グラフィックボードは重要です。Stable Diffusionで使用するためのGPUは2022年に新たにNVIDIAから発売されたRTX4000シリーズのGPUとVRAM12GB以上のものがおすすめです。最近は半導体不足も一服したこともあり、新しい製品ながら価格が下がりつつあります。
エントリーモデルのGPU
予算を安く抑えたい方向けにはRTX4070を搭載したグラフィックボードがおすすめです。
予算に余裕がある方向け ミドル~ハイエンド
予算に余裕がある方向けにおすすめのRTX 4080、ビデオメモリ16GB以上搭載のモデルです。
大サイズの画像を高速に生成したい方向けのハイエンドGPU、RTX 4090 ビデオメモリ24GB搭載モデルです。
予算とパフォーマンスに合わせて選んでみてください。
画像生成AIについて学ぶ
動画学習プラットフォームUdemyでは、画像生成AIで高品質なイラストを生成する方法や、AIの内部で使われているアルゴリズムについて学べる講座が用意されています。
Udemyは講座単体で購入できるため安価で(セール時1500円くらいから購入できます)、PCが無くてもスマホでいつでもどこでも手軽に学習できます。
画像生成AIの使い方を学ぶ
Stable DiffusionやMidjourneyの使い方や活用方法を勉強したい方には、以下の講座がおすすめです。

画像生成AIの仕組みを学ぶ
画像生成AIの仕組みについて学びたい方には、以下の講座がおすすめです。
画像生成AIで使用される変分オートエンコーダやGANのアーキテクチャを理解することで、よりクオリティの高いイラストを生成することができます。

UdemyのStable Diffusionなど、AIアート関連の講座は海外のものも多いですが、ブラウザのリアルタイム翻訳機能を使うことで日本語字幕付きで視聴できます。
Udemyの海外講座の字幕を日本語化する方法
まとめ
今回はStable Diffusionでimg2imgでイラストを生成するためのコードを解説してみました。文字では指示がしにくい構図や配色をある程度コントロールできるようになったことで、かなり活用の幅が広がるのではないでしょうか。
以下のページで自然言語処理モデルGPT-3を使ったライティングツールCatchyで、Stable DiffusionのPromptを自動生成する方法について解説していますので、あわせてご覧ください。

また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。
\ Pythonのプログラミングを学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!