【続】画像生成AI「Stable Diffusion」をローカル環境で実行する(img2img:画像と文章から新たな画像を作成する)

公開日:2022年8月29日
最終更新日:2022年8月30日

上:元画像 下:出力画像



下の画像は「Stable Diffusion」が出力した画像です。一見写真と区別がつきません。

はじめに

前回ローカル環境で「Stable Diffusion」の「txt2img」を実行しました。
touch-sp.hatenablog.com
今回は「Stable Diffusion」に含まれるもう一つの機能、「img2img」を試してみます。


「txt2img」では文章をモデルに与えることで新しい画像を作りました。


「img2img」では画像と文章を与えることで元画像の構図を利用して新しい画像を作ることが可能になります。

結果

結果を先に示します。

元画像

元画像はこちらからダウンロードさせて頂きました。
Ben ThaiによるPixabayからの画像)

元画像(640X320にトリミング済み)

入力したテキスト

上の画像と「A photo of Mt. Fuji, a five-storied pagoda and cherry blossoms」という文章を組み合わせてモデルに与えてみます。
(日本語訳は「富士山と5重の塔と桜が写った写真」です)

結果

出力結果

桜を咲かせることに成功しました。


全く同じ構図にはならないようです。

方法

環境構築は前回と全く同じです。


以下を実行しただけです。
元画像は「mount-fuji-trim.jpg」という名前で準備済みです。

python scripts/img2img.py --prompt "A photo of Mt. Fuji, a five-storied pagoda and cherry blossoms" --init-img mount-fuji-trim.jpg --strength 0.6



strengthは0.0~1.0の間で指定します。
strengthが小さければほとんど元画像のままになります。
strengthが大きければ元画像の構図から離れていくようです。
いろいろ試してみて下さい。


同じコードを実行すると毎回同じ画像が出力されます。
違う画像を出力させたい時にはseedを設定します。デフォルトは42のようです。

注意点

メモリー不足

元画像が大きすぎるとVRAM 12GBを搭載したRTX 3080でもメモリー不足になりました。
1024x512の画像は無理でした。

画像の縦横比

640×480の4:3画像で実行するとエラーがでました。そのため今回は640x320にトリミングしています。