10/16追記
GUIで利用出来るソフトの記事を公開しました。
この記事よりも簡単に手軽でGUI付きのStable Diffusionを使うことができるのでよければ御覧ください。
最近話題の画像生成ソフトStable Diffusionをローカルで動かす事に成功したので忘れないためにも共有したいと思います。
NvidiaのGPUが必須なので、自分のPCに入っているか確認してください。
設定する際にファイルの編集を行います。
必須ではないですが、Visual Studio CodeというMicrosoftが無料公開しているエディターを導入すると分かりやすくなります。
環境構築編
とにかく面倒で大変なのが環境構築。
今回はこちらの方のYouTube動画とコメント欄を参考に解説していきます。
環境を作ろう
Cドライブ直下にフォルダを作ろう
ダウンロードした物を入れたりするフォルダを作成します。
今回はCドライブ直下に「SDtool」というフォルダを作成しました。
同じ名前で作成すると後々便利なので、可能であれば同じように作成して頂きたいです。
ここにダウンロードしたものを入れたりします。
GitHubからZIPをダウンロードして配置
下記サイトにアクセスして「code」からDOWNLOAD ZIPを選択します。
ZIPを解凍すると「stable-diffusion-main」というフォルダが出てくるので、先ほど作成した「SDtool」フォルダに移動させます。
Anacondaをダウンロード
下記サイトにアクセスしてAnacondaをダウンロード、インストールします。
インストールは画像部分のチェックを2つ付ける以外はデフォルトのまま行って下さい。
因みに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
と入力します。
全て半角英数で行って下さい。 全角はダメです。
編集が完了したらctrl+sを押して保存します。
最後に全体図を見せます。
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」というフォルダの中に3つファイルがあるのでそれら全てを「stable-diffusion-main」フォルダに移動させます。
次で最後の工程になります。
ダウンロードした学習モデルを移動させて名前を変更する
最初の方にダウンロードした学習モデル「sd-v1-4.ckpt」を「stable-diffusion-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用)で時間がかかる場合があるので注意してください。
終わると下記のように待機画面になります。
画像の保存場所
画像は「stable-diffusion-main」フォルダの「output」に溜まります。
今回は「C:\SDtool\stable-diffusion-main\outputs\txt2img-samples\Cute_cats」に保存されました。
基本的にprompt名のフォルダが作られてそこに画像が保存されます。
さて、これでも十分魅力的なStable Diffusionですが、もっと使いこなせるように次のステップへ進んでみましょう。
1.連続で作ろう
先程はバッチファイルを使用した状態で作成しました。
しかし、これでは連続で作る際に何度もバッチファイルをクリックしなければ行けません。
それは余りにも面倒なので、続けて作れるようになりましょう。
今回、コマンドの解説や雛形を書いたテキスト(メモ)を用意しました。
それを参考にしながら作って頂けると便利だと思います。
コピペ用作業メモv2
便利なバッチファイル公開 追記2022/08/28
最初に公開した手順が面倒だったのでバッチファイルを作りました。
簡単batファイル
好きな場所に解凍してご利用頂けます。
記事通りに作成されている場合はダブルクリックするだけでディレクトリの移動と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をランダ厶に変更するようになっています。
宜しければもう一度ダウンロードして頂けると幸いです。
コピペ用作業メモv2
2.img2imgで画像を作ろう
img2imgを使用する場合、少しファイルを書き換えなければいけません。
ここまで出来た方は全然難しくないのでやってみましょう。
”optimized_img2img.py”を書き換え
「stable-diffusion-main」フォルダにある「optimizedSD」を開いて「optimized_img2img.py」をVSCodeで開きます。
開くとズラッと出てきますが書き換えるのは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」フォルダを作成します。
これで準備が完了しました。
実際に画像を作って見ましょう。
batファイルでinputフォルダも開こう
inputフォルダに画像を入れないと作成できないので面倒だと感じる人もいるかも知れません。
そこで、inputとoutputsの両方開くバッチファイルも作成しました。
よければご利用下さい。
input付き実行ファイル
画像から画像を作ろう
inputに画像を入れて画像名を入力した後、コマンドを貼り付けます。(詳しくは別記事で)
python optimizedSD\optimized_img2img.py --init-img input/画像名 --prompt "指示" --strength 0.8 --H 512 --W 512
画像名の部分は拡張子(.png.jpgなど)も必要です。
元になる画像の解像度が高すぎるとエラーが起きます。
1000px以下、まずは500px程で試した方がいいと思います。
今回はこの初音ミクモドキを元に作成しました。
この絵は3.pngという名前で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やコマンドをメモ帳で変更した後、貼り付けるとスムーズに生成が行なえます。
コピペ用作業メモ
詳しくは別記事で紹介します。
終わりに
今回はStable Diffusionの環境構築から使い方を紹介しました。
実は現在GUIバージョンも登場し始めたのですが、まだまだ安定してないのでしっかりと作りたい方はこちらのCUIバージョンのほうをオススメします。
長い記事になりましたが、少しでもお役に立てると幸いです。
それでは!
コメント
いいのか悪いのかはわかりませんが、promptを長すぎる指定にしているため
エラーが出る方、取り急ぎの回避策として
optimized_txt2img.py
158行あたりにある
sample_path = os.path.join(outpath, “_”.join(opt.prompt.split())[:255])
を
sample_path =”Outputimages”
のような形にするとエラー無く出力できるんじゃないかなーと思っています。
その場合、何を指定しても作業環境直下にOutputimagesが作られるんじゃないかなと
もうちょっとスマートにしたければ文字列を頭10文字くらいにカットするとか、、
画像の保存をpromptのファイル以外にすることはできますか?
ファイル名がpromptになってしまうとpromptの長さに限界ができてしまって困っています。
解決策をご存じならご教示願います。
ご紹介記事ありがとうございます。大変助かります。
この記事の一通りの手順を経て、Lowバッチでねこちゃんの画像を試しに生成させるところまでは行ったのですが。
outputフォルダや「Cute cat」というフォルダは作成されているのですが、画像は見当たらずフォルダは空っぽです。(pngでSDtool全体に検索をかけても見つからず)
最後にcmd/kは表示されるのですが。
なぜ画像が生成されないでしょうか?
ズブの素人ですみません。
この情報だけで判断は難しいですが画像の生成が上手く出来なかったのだと思います。
以下のようにddim_stepsの値や画像サイズ減らすなどして試して見て下さい。
–prompt “cute cat” –W 512 –H 512 –ddim_steps 20
どうしても上手く行かない場合は記事内を参考に構築のやり直しなどをオススメします。
こんにちは。質問なのですが、コピペ用作業メモ内でテキストから画像作成の高精度にpython “scripts\img2img.py “ とあるのですが、txt2img.pyではないのでしょうか?素人のため、的外れなことを言っていたら申し訳ございません。
コメントありがとうございます。
確認した所誤っていたので訂正させて頂きました。
記事がとても参考になり環境構築も実行も問題なくできました。
ありがとうございます。
そのうえで質問させていただきたいことがあります。
現状、非常に似通った画像が生成されることがよくあります。
1.パラメータを指定した際に一度の出力の中でかなり似通った画像(画像の一部がほぼ一致する)が複数生成されることがある。
2.パラメータで設定するテキストを少し変えて出力した際、テキスト変更前と同じような画像が生成されることがある。
仕組みを理解できてはいないので推測になるのですが、
パラメーターで指定するテキスト以外に、画像生成の際に指定されるシード値のようなものがあるのでしょうか?
そういった値があり、「テキスト+その値」で画像が生成されるため、指定するテキストが同じような場合は似通った画像が生成されることがあるのではないかと思っております。
そこで、仮にそのような値があるのであれば、その値をこちらのページに倣って構築した環境で変更することは可能かどうかご存じでしょうか?
こちらの理解が及んでおらず、稚拙で理解しがたい質問になっておりましたら申し訳ございません。
もし、お時間があればご回答のほどよろしくお願いいたします。
コメントありがとうございます。
ご推察の通り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に任意の値を与える事で絵柄や構図を固定することも可能なようです。
作業メモの更新を行いましたのでよければご覧ください。
seed値の存在と設定方法について、ありがとうございました!
非常に助かりました。
こんにちは。色々試していたら美人なお姉さんを生成しようとしたらrick rollの never gonna give you upのワンシーンが出力されたのですが、これってAIがネットから持ってきたのですか?
これは不適切な画像だと判断された時にすり替えるプログラムが組んであるからですね。
自分は試していないので分かりませんが、こちら動画を参考にするといいかもしれないです。
英語ですが動画と自動翻訳である程度わかると思います。
https://youtu.be/F-d67sUUFic?t=890
お答えいただきありがとうございます;;
まさかそんな機能があったとはお恥ずかしい><
こんばんわ、再度ご質問です。
–prompt “指示” の指示部分に長文の命令文を入れると「指定されたパスが見つかりません」とエラーが出ます。短い文ならいけるのですが、ある一定の文字数をオーバーするとこのようなエラーが出るようで…
https://lexica.art/
こちらのpromptをコピペしましたが、長いのかダメでした
GOさまは長文でもエラーなく書き出せていますか?
自分の場合は長文でも大丈夫でした。
持ち合わせている知識だと解決できそうにないです。
申し訳ありません。
もしかしたらGUIバージョンだと上手くいくかもしれないです。
もう一度環境構築が必要ですが前回よりは簡単だと思います。
stable diffusionをローカルで実行すると、promptに由来する名前のディレクトリ(フォルダ)が作られ、その中に結果が保存されます。windowsでは絶対パスに最長260文字の制限があるため、これを超えるとフォルダの作成ができずエラーが出ます。そのため、解決策としてパスの制限を解除する方法が挙げられます。
Windows PowerShellを管理者として実行し、以下のコードを実行してください。
Set-ItemProperty “Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem” -Name LongPathsEnabled -value 1
これで実行できるはずです。
また、stable-diffusion-main\optimizedSD\optimized_txt2img.pyの一部を書き換えて保存場所を変えることで解決もできます。
はじめまして。質問です。
導入は出来、キーワードを入れた場合の吐き出しは出来たのですが
画像から画像を作る、の場合
Decoding image: 0%|
のまま進み、画像が吐き出されません。
コマンドが間違っているのでしょうか…
お教えいただけると幸いです。
プログラムについては全くの素人なので、どう改善したらいいのかさっぱりわかりません…
自分も受け売りしかできないズブの素人なのでお役にたてるか分かりませんが
・一度PCを再起動する
・元になる画像の解像度を下げる
・ddim_stepsの値を下げる
などを試してみて生成されるか確認してみて下さい。
それでも解決しない場合は自分だと分からないです…すいません
ありがとうございます!
指定した画像の大きさが大きかったようで、今のところ
–W 768 –H 768 –ddim_steps 40
で動きました!ありがとうございます!
もっと大きく出力したいのですがエラーのようなので諦めます(^_^;)
こんにちは。
書いてある通りセットアップを進めたのですが、
(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
と表示されて動きませんでした。
何が原因でしょうか?
恐らくインスール中に何かしら失敗したせいだと考えられます。
anaconda promptからディレクトリを移動した後「conda env remove -n ldm」と入力して一度作成したldmを削除した後再起動します。
environment.yamlファイルに書き加えた箇所が誤ってないか確認した後(特にgitの部分)、再び「conda env create -f environment.yaml」を実行して試して見て下さい。
それでも解決しない場合はAnacondaをアンイストール後再起動し、最初からやり直しを推奨します。
Not Found omegaconf~と表示される場合はAnaconda promptでディレクトリを移動してから「pip install omegaconf」
をインストールして試して下さい。