Stable Diffusionをローカルで使おう!〜構築から使い方まで〜

AI

最近話題の画像生成ソフトStable Diffusionをローカルで動かす事に成功したので忘れないためにも共有したいと思います。

NvidiaのGPUが必須なので、自分のPCに入っているか確認してください。

設定する際にファイルの編集を行います。
必須ではないですが、Visual Studio CodeというMicrosoftが無料公開しているエディターを導入すると分かりやすくなります。

Download Visual Studio Code - Mac, Linux, Windows
Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio C...

環境構築編

とにかく面倒で大変なのが環境構築。

今回はこちらの方のYouTube動画とコメント欄を参考に解説していきます。

文字で分かりにくい箇所はこの方のYouTube動画を見るとより理解が深まると思います。

環境を作ろう

Cドライブ直下にフォルダを作ろう

ダウンロードした物を入れたりするフォルダを作成します。
今回はCドライブ直下に「SDtool」というフォルダを作成しました。
同じ名前で作成すると後々便利なので、可能であれば同じように作成して頂きたいです。

必ずしも同じ場所に作成しなくてもいいです

ここにダウンロードしたものを入れたりします。

GitHubからZIPをダウンロードして配置

下記サイトにアクセスして「code」からDOWNLOAD ZIPを選択します。

GitHub - CompVis/stable-diffusion: A latent text-to-image diffusion model
A latent text-to-image diffusion model. Contribute to CompVis/stable-diffusion development by creating an account on Git...

ZIPを解凍すると「stable-diffusion-main」というフォルダが出てくるので、先ほど作成した「SDtool」フォルダに移動させます。

移動させた状態

Anacondaをダウンロード

下記サイトにアクセスしてAnacondaをダウンロード、インストールします。

Attention Required! | Cloudflare

インストールは画像部分のチェックを2つ付ける以外はデフォルトのまま行って下さい。

Add Anaconda3にチェックを入れると後々楽になります。

因みにAnacondaはPythonで機械学習する時に使うツールセットみたいな物らしいです。

画像生成モデルをダウンロード

サイトにアクセスして会員登録をします。
https://huggingface.co/

会員登録を行い、下記のURLアクセスすると以下のような表示がされるので、チェックを付けて「Access repository」を押します。
https://huggingface.co/CompVis/stable-diffusion-v-1-4-original

するとDownload the weightsに「sd-v1-4.ckpt」があるので、クリックしてダウンロードします。

矢印の方をクリック

これは後で使用するので保存場所を覚えておきましょう。(大抵の場合はダウンロードフォルダ)

ファイルの編集

次にファイルの編集を行います。

先程「SDtool」に追加した「stable-diffusion-main」フォルダを開き、その中にある「environment.yaml」を右クリックからVScodeを使って開きます。

21行目のpytorch-lightning==1.4.2を変更

21行目にあるpytorch-lightningのバージョンを1.5.0にします。

dependencies:のすぐ下にgitを追加します。

この部分は動画で説明されていないのですが、これまでGitという物をダウンロードした事がない人はこの処置をしないとうまく動きません。

dependencies:にカーソルを合わせた後Enterを押し、6行目に

  - git

と入力します。
全て半角英数で行って下さい。 全角はダメです

このようになればOK

編集が完了したらctrl+sを押して保存します

最後に全体図を見せます。

gitがずれたりしてないか確認して下さい。

Anacondaプロンプトから実行していく

これで7割終わりました。
もう少しです。

Anacondaプロンプトの起動→ディレクトリの移動

Windowsのスタートメニューから検索で「anaconda」と入力すると「Anaconda prompt(anaconda3)」と表示されるのでクリックします。

すると、コマンド画面が表示されるので

cd C:\SDtool\stable-diffusion-main

と入力しエンターを押します。

これは皆さんが作られたフォルダの場所や名前によって変わります。
同じ名前で作成されているなら先程のコマンドをコピーして貼り付けると移動できます。

因みにコマンドプロンプトでコピーした内容を貼り付ける場合は
1.右クリックを一度押す
2.ctrl+Vのショートカットキーを入力する
と貼り付ける事ができます。
この貼り付けは今後沢山使うことになるので覚えましょう。

場所や名前はエクスプローラーのこの部分をクリックすると表示されるので、コピーして貼り付けましょう。

青い箇所をクリックするとパスが表示される

上手くいくとこのような表示になります

気をつけよう! 半角スペース

コマンドプロンプトは基本半角で指示の間にスペースが必要なので忘れないようにしましょう。

下記のようなcdの間にスペースがない場合はエラーになります。

cdC:\SDtool\stable-diffusion-main

コマンドを入力して準備を始める

ディレクトリの移動が完了したら、下記のコマンドをコピペしてエンターを押します。

conda env create -f environment.yaml

すると色々とダウンロードや更新が始まるので割りと長い間待たされます。

動かないから固まった?と思うかもしれませんが、気長に待ちましょう。

終わると上記のような表示がされる

さて、ダウンロード中にもう一つやることがあるので、並行してやりましょう。

後少しです。

有志作成のファイルをダウンロードしてフォルダに入れる

下記サイトにアクセスして右上からファイルをダウンロードして解凍します。

SD Files.zip

解凍すると「SD Files」というフォルダの中に3つファイルがあるのでそれら全てを「stable-diffusion-main」フォルダに移動させます。

これら3つのファイル・フォルダを移動させる
このような感じになる

次で最後の工程になります。

ダウンロードした学習モデルを移動させて名前を変更する

最初の方にダウンロードした学習モデル「sd-v1-4.ckpt」を「stable-diffusion-main」フォルダに移動させます。

ダウンロードフォルダ内にあります
そのままmainフォルダに移動させます。

移動させた「sd-v1-4.ckpt」の名前を変更して「model 1.3.ckpt」にします。

という訳で完成したフォルダ内部はこうなります。

これで構築は終了です。
ちゃんと動くか確認していきましょう。

実際に動くか確認する

batファイルのクリックとpromptの設定

今回のやり方で導入すると、非常に簡単に試すことが可能になります。

やり方は「stable-diffusion-main」フォルダ内にある「SD LowRam~」のbatファイルをダブルクリックです。

このLowやHighは使用PCのGPUメモリに応じて変更してください。
基本的にHighが動く人(GPUメモリ10G以上)は少ないと思うので、今回はLowの方を利用します。

起動すると以下の画像のようにopitionを入力しろって言ってくるので、適当に入力します。

今回は以下のように入力しました

--prompt "Cute cats"

入力後、エンターを押すとずらっと出てきて生成が始まります。
一番最初の起動はモデルのダウンロード(LowRam用)で時間がかかる場合があるので注意してください。

GPUによって時間が変わります

終わると下記のように待機画面になります。

cmd/kが表示されればOK

画像の保存場所

画像は「stable-diffusion-main」フォルダの「output」に溜まります。

今回は「C:\SDtool\stable-diffusion-main\outputs\txt2img-samples\Cute_cats」に保存されました。

基本的にprompt名のフォルダが作られてそこに画像が保存されます。

さて、これでも十分魅力的なStable Diffusionですが、もっと使いこなせるように次のステップへ進んでみましょう。

1.連続で作ろう

先程はバッチファイルを使用した状態で作成しました。
しかし、これでは連続で作る際に何度もバッチファイルをクリックしなければ行けません。

それは余りにも面倒なので、続けて作れるようになりましょう。

今回、コマンドの解説や雛形を書いたテキスト(メモ)を用意しました。
それを参考にしながら作って頂けると便利だと思います。

便利なバッチファイル公開 追記2022/08/28

最初に公開した手順が面倒だったのでバッチファイルを作りました。

好きな場所に解凍してご利用頂けます。
記事通りに作成されている場合はダブルクリックするだけでディレクトリの移動とAnaconda起動、outputsフォルダも開きます。

ご利用前に一度PCを再起動する必要があります。

@rem 場合によってパス変更
cd C:\SDtool\stable-diffusion-main

@rem anaconda アクティブ
call conda activate ldm

@START EXPLORER "\%%d\outputs"

@echo outputsフォルダを開きます…

@echo コマンドを入力してください!

@cmd/k

保存場所が違う場合はメモ帳等で開きパス変更の部分を書き換えて下さい

コマンドを入力して下さいと出たら別記事やテキストを参考に下記のように貼り付けて下さい。

お詫び8/28

Anacondaを初期状態でインストールすると上記のバッチが正常に動作しません。
現在は加筆しましたが「condaというコマンド~」という文字が出てくる場合はPATHを通さないといけません。

詳しくはこちら

バッチファイルを使用しない場合

バッチファイルを使用しない場合、Anaconda Promptを起動してディレクトリ移動後

conda activate ldm

と入力してからコマンドをコピペして下さい。

お詫び8/31

作業用メモにおいてseedの値を設定しないコマンドになっていた為、同じ絵柄を作り続けるようになっていました。

現在は作業メモを更新してseedをランダ厶に変更するようになっています。

宜しければもう一度ダウンロードして頂けると幸いです。

2.img2imgで画像を作ろう

img2imgを使用する場合、少しファイルを書き換えなければいけません。
ここまで出来た方は全然難しくないのでやってみましょう。

”optimized_img2img.py”を書き換え

「stable-diffusion-main」フォルダにある「optimizedSD」を開いて「optimized_img2img.py」をVSCodeで開きます。

C:\SDtool\stable-diffusion-main\optimizedSD

開くとズラッと出てきますが書き換えるのは50行目と51行目です。

ここのパスが何もない部分を指しているのでエラーが起きてしまいます。
なので、ここを「stable-diffusion-main」フォルダ内にあるものに書き換えます。

50行目 config~を書き換える

50行目にある

config = r”C:\SDtool\stable-diffusion-main\optimizedSD\v1-inference.yaml”

config = r”optimizedSD\v1-inference.yaml

に書き換えます。

51行目 ckpt~を書き換える

51行目にある

ckpt = r”C:\Users\Kaman\Downloads\Stable\stable-diffusion-main\scripts\SD 1.3.ckpt”

ckpt = r”model 1.3.ckpt

に書き換えます。

以下のようになれば「ctrl+s」を押して保存しましょう。

これで書き換えは終了です。

素材用フォルダをstable-diffusion-mainに作る

画像を作る時に元画像の場所を指定する必要がありますが、それを分かりやすくする為「input」フォルダを作成します。

元画像を「input」に入れる

これで準備が完了しました。
実際に画像を作って見ましょう。

batファイルでinputフォルダも開こう

inputフォルダに画像を入れないと作成できないので面倒だと感じる人もいるかも知れません。
そこで、inputとoutputsの両方開くバッチファイルも作成しました。
よければご利用下さい。

画像から画像を作ろう

inputに画像を入れて画像名を入力した後、コマンドを貼り付けます。(詳しくは別記事で)

python optimizedSD\optimized_img2img.py  --init-img  input/画像名 --prompt "指示" --strength 0.8 --H 512 --W 512

画像名の部分は拡張子(.png.jpgなど)も必要です。

元になる画像の解像度が高すぎるとエラーが起きます。
1000px以下、まずは500px程で試した方がいいと思います。

今回はこの初音ミクモドキを元に作成しました。

ネットに上げるのも恥ずかしいレベルの絵

この絵は3.pngという名前でinputフォルダに入れてます。

inputフォルダに入れた状態

この状態で先程と同じようにanaconda プロンプトから作成していきます。

promptや設定は以下のようにしました。

python optimizedSD\optimized_img2img.py  --init-img input/3.png --prompt "hatsune miku anime kawaii pop singer green heir cute" --W 832  --H  576  --ddim_steps 50  --n_samples 3 --n_iter 2 --strength 0.9

出力は先程と同様、outputに保存されます。

こちらが出力結果です。

今回は比較的当たりな部類ですが、原型はほぼ消滅しました。
そして”hair”のスペル間違えてました。

巷でもよく言われてますが、AIは手が苦手でしっかりと書くことが難しいようです。

今回は作成された中で良かったと思う2つを貼っておきます。

これが原型

このようにimg2imgで作成できましたでしょうか。
現時点で公開されている機能はこれで使い切ることが可能です。

Q&A

not found系のエラーが出る場合

一度再起動してもう一度やってみましょう。
それでもだめならインストール時に何らかのエラーが発生して上手く行かなかった可能性があります。

その場合Anacondaプロンプトからディレクトリを移動して

conda env remove -n ldm

と入力して作成した「ldm」を削除します。

その後、PCを再起動してシステムをリフレッシュした後もう一度

conda env create -f environment.yaml

を実行します。

その際「environment.yaml」で訂正した箇所に間違いがないか確認をお願いします。
特に「- git」の部分はスペースが空いているかなどを確認して下さい。

それでも上手く行かない場合

Anacondaをアンインストールして再起動後もう一度最初からやり直してみます。

実は自分も色々弄ってるうちに動かなくなってしまい、Anaconda自体をアンインストールしてやり直しました。

自分の場合はGitHubからZIPをダウンロードする所からやり直したところ上手くいきました。

少しでも参考になれば幸いです。

指示・制約・流れについて

先程書きましたが色々な指示をまとめたテキストを配布しています。
メモ帳で開けるので、promptやコマンドをメモ帳で変更した後、貼り付けるとスムーズに生成が行なえます。

使用例(img2img中精度の部分)

詳しくは別記事で紹介します。

Stable Diffusion コマンドまとめ
お知らせ新たにGUI付きの構築方法を公開しました。良ければ御覧ください前回Stable Diffusionの構築から画像の作成方法を解説しました。今回はコマンドの指示や意味を解説したいと思います。テキストについてコマンドプロンプトに対して送...

終わりに

今回はStable Diffusionの環境構築から使い方を紹介しました。

実は現在GUIバージョンも登場し始めたのですが、まだまだ安定してないのでしっかりと作りたい方はこちらのCUIバージョンのほうをオススメします。

長い記事になりましたが、少しでもお役に立てると幸いです。

それでは!

コメント

  1. adm より:

    いいのか悪いのかはわかりませんが、promptを長すぎる指定にしているため
    エラーが出る方、取り急ぎの回避策として

    optimized_txt2img.py
    158行あたりにある
    sample_path = os.path.join(outpath, “_”.join(opt.prompt.split())[:255])

    sample_path =”Outputimages”
    のような形にするとエラー無く出力できるんじゃないかなーと思っています。
    その場合、何を指定しても作業環境直下にOutputimagesが作られるんじゃないかなと

    もうちょっとスマートにしたければ文字列を頭10文字くらいにカットするとか、、

  2. 菖蒲すいせん より:

    画像の保存をpromptのファイル以外にすることはできますか?
    ファイル名がpromptになってしまうとpromptの長さに限界ができてしまって困っています。
    解決策をご存じならご教示願います。

  3. 名無し より:

    ご紹介記事ありがとうございます。大変助かります。

    この記事の一通りの手順を経て、Lowバッチでねこちゃんの画像を試しに生成させるところまでは行ったのですが。
    outputフォルダや「Cute cat」というフォルダは作成されているのですが、画像は見当たらずフォルダは空っぽです。(pngでSDtool全体に検索をかけても見つからず)
    最後にcmd/kは表示されるのですが。
    なぜ画像が生成されないでしょうか?

    ズブの素人ですみません。

    • GO より:

      この情報だけで判断は難しいですが画像の生成が上手く出来なかったのだと思います。
      以下のようにddim_stepsの値や画像サイズ減らすなどして試して見て下さい。
      –prompt “cute cat” –W 512 –H 512 –ddim_steps 20

      どうしても上手く行かない場合は記事内を参考に構築のやり直しなどをオススメします。

  4. BANANA より:

    こんにちは。質問なのですが、コピペ用作業メモ内でテキストから画像作成の高精度にpython “scripts\img2img.py “ とあるのですが、txt2img.pyではないのでしょうか?素人のため、的外れなことを言っていたら申し訳ございません。

    • GO より:

      コメントありがとうございます。
      確認した所誤っていたので訂正させて頂きました。

  5. sweet より:

    記事がとても参考になり環境構築も実行も問題なくできました。
    ありがとうございます。

    そのうえで質問させていただきたいことがあります。
    現状、非常に似通った画像が生成されることがよくあります。
    1.パラメータを指定した際に一度の出力の中でかなり似通った画像(画像の一部がほぼ一致する)が複数生成されることがある。
    2.パラメータで設定するテキストを少し変えて出力した際、テキスト変更前と同じような画像が生成されることがある。

    仕組みを理解できてはいないので推測になるのですが、
    パラメーターで指定するテキスト以外に、画像生成の際に指定されるシード値のようなものがあるのでしょうか?
    そういった値があり、「テキスト+その値」で画像が生成されるため、指定するテキストが同じような場合は似通った画像が生成されることがあるのではないかと思っております。
    そこで、仮にそのような値があるのであれば、その値をこちらのページに倣って構築した環境で変更することは可能かどうかご存じでしょうか?

    こちらの理解が及んでおらず、稚拙で理解しがたい質問になっておりましたら申し訳ございません。
    もし、お時間があればご回答のほどよろしくお願いいたします。

    • GO より:

      コメントありがとうございます。
      ご推察の通りseedが存在しており、現在のコマンドだと同一のseedにしかならない事を確認しました。
      以下のように–seedに-1を与えると生成する度によりランダムに変わります。
      python optimizedSD/optimized_txt2img.py --prompt "指示" --H 512 --W 512 --seed -1 --n_samples 2 --n_iter 1 --ddim_steps 50
      また、seedに任意の値を与える事で絵柄や構図を固定することも可能なようです。
      作業メモの更新を行いましたのでよければご覧ください。

      コピペ用作業メモv2
    • sweet より:

      seed値の存在と設定方法について、ありがとうございました!
      非常に助かりました。

  6. お姉さんを出力したいのに より:

    こんにちは。色々試していたら美人なお姉さんを生成しようとしたらrick rollの never gonna give you upのワンシーンが出力されたのですが、これってAIがネットから持ってきたのですか?

    • GO より:

      これは不適切な画像だと判断された時にすり替えるプログラムが組んであるからですね。
      自分は試していないので分かりませんが、こちら動画を参考にするといいかもしれないです。
      英語ですが動画と自動翻訳である程度わかると思います。
      https://youtu.be/F-d67sUUFic?t=890

    • お姉さんを出力したいのに より:

      お答えいただきありがとうございます;;
      まさかそんな機能があったとはお恥ずかしい><

  7. しか より:

    こんばんわ、再度ご質問です。
    –prompt “指示” の指示部分に長文の命令文を入れると「指定されたパスが見つかりません」とエラーが出ます。短い文ならいけるのですが、ある一定の文字数をオーバーするとこのようなエラーが出るようで…

    https://lexica.art/

    こちらのpromptをコピペしましたが、長いのかダメでした
    GOさまは長文でもエラーなく書き出せていますか?

  8. しか より:

    はじめまして。質問です。
    導入は出来、キーワードを入れた場合の吐き出しは出来たのですが
    画像から画像を作る、の場合

    Decoding image: 0%| 
    のまま進み、画像が吐き出されません。
    コマンドが間違っているのでしょうか…
    お教えいただけると幸いです。

    プログラムについては全くの素人なので、どう改善したらいいのかさっぱりわかりません…

    • GO より:

      自分も受け売りしかできないズブの素人なのでお役にたてるか分かりませんが
      ・一度PCを再起動する
      ・元になる画像の解像度を下げる
      ・ddim_stepsの値を下げる
      などを試してみて生成されるか確認してみて下さい。
      それでも解決しない場合は自分だと分からないです…すいません

    • しか より:

      ありがとうございます!
      指定した画像の大きさが大きかったようで、今のところ

      –W 768 –H 768 –ddim_steps 40

      で動きました!ありがとうございます!
      もっと大きく出力したいのですがエラーのようなので諦めます(^_^;)

  9. ldm より:

    こんにちは。
    書いてある通りセットアップを進めたのですが、

    (ldm) D:\SDtool\stable-diffusion-main>set /P id=Enter Prompt And Options :
    Enter Prompt And Options : “Cute cats”

    (ldm) D:\SDtool\stable-diffusion-main>python “optimizedSD\optimized_txt2img.py” “Cute cats”
    Traceback (most recent call last):
    File “optimizedSD\optimized_txt2img.py”, line 15, in
    from ldm.util import instantiate_from_config
    ModuleNotFoundError: No module named ‘ldm’

    (ldm) D:\SDtool\stable-diffusion-main>cmd /k

    と表示されて動きませんでした。
    何が原因でしょうか?

    • GO より:

      恐らくインスール中に何かしら失敗したせいだと考えられます。
      anaconda promptからディレクトリを移動した後「conda env remove -n ldm」と入力して一度作成したldmを削除した後再起動します。
      ldmを削除ご再起動

      environment.yamlファイルに書き加えた箇所が誤ってないか確認した後(特にgitの部分)、再び「conda env create -f environment.yaml」を実行して試して見て下さい。
      それでも解決しない場合はAnacondaをアンイストール後再起動し、最初からやり直しを推奨します。

      Not Found omegaconf~と表示される場合はAnaconda promptでディレクトリを移動してから「pip install omegaconf」
      をインストールして試して下さい。