Stable Diffusionで画像を使って指示をするimg2imgで画像を生成する方法

  • URLをコピーしました!

イラストを生成できる描画AI、Stable Diffusionで画像で指示を与えるimg2imgを実装する方法を解説します。簡単なコードで実装できますので、構図や配色に与える変化をぜひ試してみてください。

また、Stable Diffusionに関連する記事を以下にまとめていますので、あわせてご覧ください。

\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /

講座単位で購入できます!

目次

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を使用する際にGoogle ColaboratoryやWebサービスを利用されている方も多いかと思います。しかし、最近Google Colabの無料での使用範囲が大きく制限されたり、Webサービスでは月額費用がかかったりします。

欲しいイラストを生成するにはかなりの回数をトライする必要があるため、これらの制約に縛られることなく使用できるローカル環境を構築するのがおすすめです。

ローカルのPCに搭載するグラフィックボード

ローカルマシンで実行する上で重要になってくるのがグラフィックボードです。
Stable Diffusionでイラストを生成するために実行される推論処理を、グラフィックボード上のGPUを使って大幅に高速化することができます。
トライする回数が増えれば品質の高いイラストが生成される可能性が上がりますので、グラフィックボードは重要です。

Stable Diffusionで使用するためのGPUはRTX 3060以上、VRAM12GB以上のものがおすすめです。最近はビットコインマイニング需要も落ち着いてきたこともあり、かなりお手頃価格で入手できるようになってきました。

予算に余裕がある方は、RTX3070がおすすめです。

MSI GeForce RTX 3080 GAMING Z TRIO 12G LHR グラフィックスボード VD7960


また、グラフィックボードの取付などが難しいという方には、これらのボードを搭載したゲーミングPCもおすすめです。

PC-TECHゲーミングパソコン 最新第12世代 Core i5 12400F / RTX 3060 / メモリーDDR4-16GB / サムスン NVMe M.2 SSD 500GB + HDD 2TB / B660 / 650W 80Plus / Windows 11 pro

Pythonによる自動化、UIの作成

当ブログでもソースコードを公開していますが、Stable Diffusionを使用するためのコードはPythonで簡単に実装することができます。Pythonの初歩的なプログラミングを習得することで、Promptを自動で生成、組み合わせ変更してトライするプログラムを作成したり、他の方が配布されているオープンソースのUIを自分好みにカスタマイズすることも可能です。

Pythonのプログラミングを学びたい方には、講座単体で購入でき、自分のペースで学べるUdemyの講座がおすすめです。

icon icon はじめてのPython 少しずつ丁寧に学ぶプログラミング言語Python3のエッセンス icon


私自身もUdemyの講座は多数受講していますので、皆さんもぜひ活用してみてください。

まとめ

今回はStable Diffusionでimg2imgでイラストを生成するためのコードを解説してみました。文字では指示がしにくい構図や配色をある程度コントロールできるようになったことで、かなり活用の幅が広がるのではないでしょうか。

それでは、また次の記事でお会いしましょう。

\ Pythonのプログラミングを学びたい人には自宅で学べるUdemyがおすすめ!  /

講座単位で購入できます!

よかったらシェアしてね!
  • URLをコピーしました!
目次