画像生成AIの「Stable Diffusion」をコマンド操作不要で簡単に使えるソフト「NMKD Stable Diffusion GUI」 のバージョン1.8台の新機能・変更点です。
1.8.0 / 1.8.1
なお2023/4/9時点の最新版はバージョン 1.9.1 です。
(更新が大変遅れてしまいすみませんでした)
バージョン 1.8 台ではついにインペイント専用モデルが使えるようになり、以前に比べてずっと自然に画像の一部を描き変えられるようになりました!
写真に写っているものを初めから存在しなかったかのように消したり、別の物に変えたりすることが魔法のようにできます。
Ver. 1.7.2 → Ver 1.8.1 の変更点
※以下要点です。1.8.0 の更新内容を含みます。
※各機能の詳しい説明は「※基本事項」の項の次に記載しています。
※ソフトダウンロード先:NMKD Stable Diffusion GUI - AI Image Generator
重要な仕様変更
- AMD製GPUでもソフトが動作するように (動作環境拡大)
新機能の追加
Masked Inpainting (画像の一部だけ描き変え) の機能が大幅強化
- Text Mask:描き変えたい部分をマスク描画で指定する代わりに、文章で指定できる機能
- Mask Editor (マスク描画画面) のウィンドウサイズ変更が可能になり、画像の細かい部分のマスキングが容易に
- Mask Editor に貼り付け・反転・保存・元に戻す機能が追加
↑反転 (Invert):マスクする部分としない部分を反転できる (←「この部分以外全部マスクする」といった操作ができるように)
↑保存 (Save)・読込 (Load):マスクを保存できる。後から保存したマスクを呼び出せるようになり便利に
↑元に戻す (Undo)
↑これらの機能は右クリックメニューやショートカットキーから呼び出せる - マスクを一度指定して画像生成した後に、そのマスクを再編集して画像生成できる
↑今までは一度マスクを消してやり直さないといけなかったのでかなり便利に - Inpainting Model の読み込みに対応
その他の新機能
- img2img の初期化画像と自動で同じサイズで画像を生成できるオプションが追加
- img2img の初期化画像名のところに Shift キー を押しながらマウスをホバーすると、指定した初期化画像がその場でプレビュー可能に
- Convert Models:異なる形式のモデルを相互変換する機能が追加
↑Pytorch ( ckpt/pt ファイル ), Diffusers, Diffusers ONNX, SafeTensors の4種に対応
↑他の形式のモデルファイルを、NMKD版ソフトで動かせる Pytorch 形式に変換可能 - 画像インポートウィンドウに「Load Image and Use Settings From Metadata」メニューが追加
↑画像を(img2img用に)読み込み、同時にメタデータから設定も取得してオプションに反映できるように - Dreambooth (オリジナルモデル作成機能) が VRAM メモリ制限 (24 GB 以上) を無視して実行できるように
- Hi-res. Fix (高解像度画像の修正機能) が、画像サイズの縦or横のどちらかだけ 512 px を超えていれば使用可能に
↑従来は縦横両方 512 px を超えていないと使えなかった
利便性改善
- 1度読み込んだモデルへの切り替えが非常に高速に (再ロードは2秒程度で済むように)
- 画像インポートウィンドウに解像度が表示されるように
- ソフトの画像ビューアで前の/次の画像を見るためのショートカットキーの追加
↑「Ctrl + ←」と「Ctrl + →」 - 画像ビューアのホットキー(コピー:Ctrl+C、開く:Ctrl+Oなど)がポップアップ画像ビューアでも動作するように
- ポップアップ画像ビューアでスライドショーモードをデフォルトで有効にするオプションが追加
- プロンプト履歴画面 (Prompt History) の改善:前のエントリーと同じものがある場合は新しいエントリーを重複して保存しないように
- プロンプト履歴画面 (Prompt History) の改善:履歴保存上限を500件に制限 (読み込みに時間がかかるため)
- プロンプトキュー (Prompt Queue) の改善:スタック (先入れ後出し) ではなくキュー (先入れ先出し) としてちゃんと動くように
- ソフトを閉じたり開いたりしても高解像度画像修正オプションが保存/ロードされるように
- ウェルカムスクリーン (ソフト起動時の更新履歴画面) を非表示にできるように
- 起動時にソフトにアプデが無いか自動チェックするように (ただし自動アップデート機能は無い)
- 開発者向け:インストーラーで、カスタムgitコミットを使用できるように
不具合修正
重要な問題の修正
- GPU が 6 GB 未満でもアップスケーラーがデフォルトで無効化されないように
- インターネットに接続されていない状態だとモデルの読み込みに失敗することがある不具合を修正
- Masked Inpainting のぼかしが不可逆で保存され、編集が難しくなっていた問題を修正
- 保存した Masked Inpainting のマスクをリセットしても正しくクリアされないことがあった不具合を修正
公式情報(英語)
ソフト使い方ガイド(公式):NMKD Stable Diffusion GUI
DreamBooth 訓練ガイド(公式):DreamBooth Training GUI
ソフト更新履歴(公式):changelog
※基本事項
初めて NMKD Stable Diffusion GUI を使う方はソフト最新版のインストール方法・基本的な使い方など一通りまとめた以下のページを先にご確認ください。
入力したテキストから画像を生成したり、自分が描いた落書きに説明テキストを加えれば思い通りの絵に変えたりできるAI「Stable Diffusion」 ↑a sleeping cat in the hot spring (温泉で眠る[…]
画面の各項目や設定画面 (Settings) のマニュアルは以下のページです。
画像生成 AI「Stable Diffusion」をコマンド不要で簡単操作で使えるソフト NMKD Stable Diffusion GUI について、ソフト画面と機能・仕様を一覧で説明しています。 こちらのページは機能や設定を一通り[…]
※ 他バージョンで追加された新機能
他のバージョンの追加機能を確認したい場合は以下のページをご覧ください。(画像クリックで該当ページに移動できます)
NMKD Stable Diffusion GUI 記事一覧
以下、本ページではバージョン1.8.0 / 1.8.1 の新機能に絞って概要や使い方を説明していきます。
動作環境の拡大
従来は NVIDIA製GPU が必要でしたが、ソフトが新たに次の環境でも動かせるようになりました。
これで AMD製GPU でも Stable Diffusion をお手軽GUI操作できるようになりましたね! (既に他のソフトでもできたみたいですが)
ただし NVIDIA製GPU を使用した場合と異なりソフトの一部機能が制限され使えないようです。
最新の動作環境についてはこちらのページをご参照ください。
Masked Inpainting の機能強化
Masked Inpainting は、img2img 機能で画像を描き変えるときに、画像の一部領域だけを指定してそこだけ Stable Diffusion に描き変えてもらえる機能です。
img2img を普通に使うと画像の変わってほしくない場所まで変わってしまうことが多いので、Inpainting で描き変えたい部分を指定すると便利です。
描き変える部分のことを Mask (マスク) と呼びます。
ソフトの更新で、マスク指定機能が便利に改善されたほか Inpainting 精度向上のための専用モデルの読み込みが可能になり実用性が向上しました。
※基本的な使い方は以前、こちらのページ記載しました。
画像生成AIの「Stable Diffusion」をコマンド操作不要で簡単に使えるソフト「NMKD Stable Diffusion GUI」が 2022/09/20 に大型アップデートしました! 現在の最新版がバージョン 1.4.0[…]
Text Mask
描き変えたい部分をマスク描画で指定する代わりに、文章で指定できる機能です。
(※ 他のソフトで txt2mask と表記される機能に相当します)
img2img 用に画像を読み込んだ後、「Inpainting」のメニューから「Text Mask (Describe Objects)」を選択します。
すると隣に入力ボックスが現れるので、そこに画像中のマスクしたい対象を英語テキストで入力します。
Generate! を押して画像生成を始めると、文章を基にマスク対象が自動で認識され、テキストで指定したマスク対象の部分だけが描き変わります
試しにやってみる
こちらのねこさんの表情を変えてみます。(怒ったにゃんこにする)
まず、プロンプトにはどのように描き変えたいか指定します。
「怒ったサバトラ猫の写真」という内容のプロンプトです。
※元の画像との変更点が「怒った」部分なので、プロンプト中の angry を強調構文で強めています。(これをやるのは任意ですが、成功率がUPします)
参考ページ:プロンプト強調構文の使い方
次に、「Inpainting」項目の隣に現れた入力ボックスに、画像のどこを描き変えたいのか英語テキストで入力します。
今回は猫の顔の部分を指定して表情を変えたいので、「cat face」と入力しました。
なお、描き変えたい部分がはっきりと変わってくれるように、「Initialization Image Strength (Influence)」の設定値を小さめ (0.25) にしています。
※値が大きいほど元の画像が維持される設定
これで設定ができましたので、画像を生成してみます。
(※初回実行時は実行に必要なファイルのダウンロードが入るため少し時間がかかります。)
photo of an (angry)++ gray tabby cat -s 25 -S 448991457 -W 512 -H 512 -C 8.0 -A k_euler_a -f 0.75 -tm cat face
目つきが鋭くなり、おこにゃんになりました😾
(目つきや口元だけ怒った表情のものになった一方で構図や他の部分には変化がないので、猫の顔部分だけが Text Mask できちんと指定できていると分かります)
プロンプトには Inpainting で描き変える部分だけでなく全体の説明を記述する必要があります。
良い例:photo of an (angry)++ gray tabby cat
悪い例:angry face
例えば今回のように猫の顔を変えるとき、プロンプトには描き変える猫の顔の部分の説明だけでなく、全体の説明を記述する必要があります。
(「怒った顔」ではなく「怒ったサバトラ猫の写真」というように全体についての説明にする)
描き変えたい画像がある場合は、その画像全体の説明を自分でプロンプトに入力しつつ変更したい部分をプロンプトに織り込まなければなりません。
実用性について
ただ、このくらいであれば猫の顔を Image Mask (画像にマスクを直接描き込む機能) で指定することでも可能ではあるので、なかなか Text Mask の活用例は思い浮かばないです。
文章でマスク対象を指定するのはなかなか難しいので… (上手くいった場合は時短にはなるかも)
Mask Editor がとっても便利に!
Mask Editor (マスク描画画面) に便利な機能や仕様が追加され、実用性が向上しました。
改めて画面の機能を一通り説明します。
ブラシの基本操作
画像の描き変えたい部分をブラシで黒く塗りつぶすことで指定できます。
「Brush Size」からブラシのサイズを変更可能です。
「Mask Blur」を変えるとマスクのぼやけ具合が変わります。
↑マスクの境界線をぼかすことで、画像生成後に描き変えた部分の境界線が分かりにくくなり自然な仕上がりになります。
ウィンドウはサイズ変更や最大化が可能なので、画像の細かい部分を塗りたい時はウィンドウを大きくしてください。
右クリックメニュー
Clear 消去 |
マスクを消去 |
Invert 反転 |
マスクする部分としない部分を反転する (「この部分以外全部マスクする」といった操作ができるように) |
Paste 貼り付け |
マスクを貼り付け (※マスクデータがクリップボードにコピーされている場合のみ有効) |
Save 保存 |
マスクをファイルに保存 |
Load 読み込み |
マスクをファイルから読み込み |
Undo 元に戻す |
元に戻す (間違えた場所を塗ってしまった時などに重宝) |
これらの機能は右クリックメニューからはもちろん、ショートカットキーからも実行できます。
マスクをファイルに保存して後から保存したマスクを呼び出せるようになったので、複数のマスクを試して比較する場合や後日同じマスクを使用する場合に便利です。
待望の「元に戻す」も実装されたので、間違えたところを塗っても全消去せず、単に Ctrl + Z キーで戻すだけですみます。
マスク設定後の再編集
マスク設定後はソフト画面の「Inpainting」の項目のところに次のようなボタンが表示されます。
「Clear Mask」を押すと現在設定されているマスクが消去されます。
「Edit Mask」を押すと現在設定されているマスクを Mask Editor 画面で再度編集できます。
Inpainting Model (インペイント専用モデル) の利用
上記で説明した Masked Inpainting の精度を大幅に向上させる方法として、Inpainting Model (インペイント専用モデル) の利用があります。
Stable Diffusion の Inpainting Model である sd-v1-5-inpainting.ckpt を用いた RunwayML Inpainting と呼ばれるインペインティングが、NMKD Stable Diffusion GUI で利用可能です。
インペイント専用モデルのダウンロード
ダウンロードリンク:sd-v1-5-inpainting.ckpt
※配布元サイトの説明ページはこちら:runwayml/stable-diffusion-inpainting
注意:AMD製GPU をお使いの方は上記モデルとは異なるモデルが必要であり、動作させるための手順も異なります。(公式ドキュメント参照)
インペイント専用モデルの準備 (初回)
上記リンクからダウンロードした sd-v1-5-inpainting.ckpt をモデルファイルを入れるフォルダに移動します。
手順は以下の通りです。
- ソフト画面右上の歯車ボタンから、Settings 画面を開く
- 設定項目の「Stable Diffusion Model」のところで「Folders...」ボタンを押してモデル保存先フォルダ一覧画面を表示させる
- 一覧から保存先をクリックして選択し、右上のフォルダアイコンを押す
- モデル保存先フォルダが開くので、そこに sd-v1-5-inpainting.ckpt を入れる
- 保存先フォルダ一覧画面を閉じ「Refresh List」ボタンを押してモデル一覧を更新する
- リストから sd-v1-5-inpainting.ckpt を選ぶ
なお一度モデルを上記手順でフォルダに入れておけば、以後普段はソフト画面で「Ctrl+M」のショートカットキーから普通モデル↔インペイント専用モデルの切り替えがすぐできます。
実際に使ってみる
普段のモデルでインペイントするときと手順は同じです。(Load Image から画像を読み込み、Inpainting の項目を Image Mask に変える)
なおインペイント専用モデルでは以下が使えなくなります。
- ネガティブプロンプト
- Initialization Image Strength (Influence) の値の設定
- ブラシで描いたマスクをぼやけさせる機能
椅子に座る男の子を消してみる
こちらの男の子を写真から消して、椅子だけにしてみます。(ごめんなさい)
photo of a boy sitting on a wood chair outside -s 25 -S 1329026897 -W 512 -H 512 -C 8.0 -A k_euler_a
まず、プロンプトを次のように指定します。
今回は椅子に誰も座らない画像を生成したいので、プロンプト中には boy (男の子) を含めません。
ただの「木製の椅子の写真」とだけ指定しました。
そして上の写真を Load Image(s) で読み込み、Inpainting の項目を Image Mask にして、Generate! ボタンを押します。
マスク描画画面が現れるので、男の子全体をマスクで覆います。
消したい/変えたい対象を少し大きめに覆うのがポイントです。(消したいものにピッタリ合わせて塗らなくて大丈夫です)
ついでに「Save Mask」を押して今塗ったマスクを保存しておくと後で使いたいときに役立ちます。
そして OK ボタンを押し、画像生成を開始します。
写真から綺麗に男の子が消えました! 男の子で隠れていた椅子の残りの部分や後ろの景色も自然に補完されています!
Photoshop 的な画像編集が簡単にできて凄い…!!
photo of a wood chair -s 25 -S 393349116 -W 512 -H 512 -C 8.0 -A k_euler_a -M マスク画像 -f 0.5
※ちなみに、ソフト左画面の「Additional Input Data」の項目の右端のところにある「Show」チェックボックスを ON にすると、画像の描き変え前後の横並び表示で比較が可能になるので便利です。
通常モデルとの比較がこちら。(同じパラメータ・マスク指定範囲)
通常モデルでは Initialization Image Strength の値を最低値 (0.1) に指定して可能な限り画像を描き変えてもらおうとしても、男の子が消えきらなかったり消えた領域に変なものが写り込んだり不自然になります。
それに比べるとインペイント専用モデルはとても自然に画像中の物を描き変えられます。
椅子に座る男の子を猫に変えてみる
今度は先ほどの写真で男の子を消す代わりに猫にしてみました。(やさしいせかい)
プロンプトは次の通り指定しました。
今回は椅子に猫を座らせたいので、プロンプト中には「木製の椅子に座った茶トラ猫の写真」と指定しています。
人を消す場合と異なり、人→猫のような大きな描き変えを行う場合はなかなか良い画像が生成してくれませんでした。
数十枚生成して、次のような画像ができました。
photo of one red tabby cat sitting on a wood chair, detailed -s 25 -S 613850843 -W 512 -H 512 -C 8.0 -A k_euler_a -M マスク画像 -f 0.5
なお、インペイント専用モデルを使わない場合と比較した結果が次の通りです。
photo of one red tabby cat sitting on a wood chair, detailed -s 25 -S 613850843 -W 512 -H 512 -C 8.0 -A k_euler_a -M マスク画像 -f 0.6
通常のモデルで人→猫のような異なる物への描き変えを行うのはほぼ無理でした。(男の子のままです)
専用モデルではそれに比べればずっと良い結果が得られます。
Inpainting Model ( sd-v1-5-inpainting.ckpt ) の活用はとても夢が広がりますね…!!
その他留意事項
インペイント専用モデルを使用した場合は通常のモデルに比べてプロンプトの指定が少し反映されにくいみたいです。
しかしその一方で、プロンプトで与える情報が少なくても描き変え前の画像に描かれているものを認識し、それを踏まえて自然にを描き変えてくれます。
Convert Models
異なる形式のモデル同士を相互変換できる機能です。
例えば .safetensors 形式で配布されているモデルファイルなどを、NMKD Stable Diffusion GUI で実行可能な .ckpt 形式に変換できます。
使い方
画面右上のレンチマークのボタンをクリックし、「Convert Models」を選ぶと変換画面を開けます。
Model Input Format「入力モデル形式」で変換前のモデルファイルの形式を選びます。
Model File「モデルファイル」で変換したいモデルファイルを選択します。
Model Output Format「出力モデル形式」で変換後のモデルファイルの形式を選びます。
Delete Input File If Successful「変換に成功したら入力したモデルファイルを削除」を必要に応じて ON にします。
左下の Convert!「変換!」ボタンを押すと変換が始まります。(私の環境での所要時間は1~2分ほどでした)
※ Pytorch ( ckpt/pt ファイル ), Diffusers, Diffusers ONNX, SafeTensors の4種の形式に対応しています。
※ 変換前のモデルファイルは、普段モデルファイルを入れている場所に置けばソフトから認識されます。(右上のフォルダボタンから移動可能)
使用例:.safetensors モデルを NMKD で実行できる .ckpt に変換する
最近、モデルファイルが .safetensors 形式で配布される機会が増えてきました。
ソフトでその形式のモデルファイルを使うには、.ckpt 形式に一度変換する必要があります。
以下のページで画像付きでやり方を説明しているので、詳しくはそちらをご覧ください。
最近、画像生成AI「Stable Diffusion」で利用するモデルファイルが .safetensors 形式で配布される機会が増えてきました。 NMKD Stable Diffusion GUI でその形式のモデルファイルを使うに[…]
その他の使い道
AMD製GPUをお使いの方は Pytorch の .ckpt 形式のモデルファイルが使用できないので、.ckpt ファイルを Diffusers ONNX (Folder) に変換する必要があります。
また Web 上では Diffuser フォルダ形式でのモデル公開も行われているみたいで .ckpt ファイルが見当たらず .bin ファイルが代わりに入っているなんてことがありますが、恐らくそれは Diffusers (Folder) 形式なので Pytorch の .ckpt 形式 に変換すれば NMKD Stable Diffusion GUI でも使えるようになると思います。
その他の改善事項
※後日追記予定です。ページ上部の変更点リストには一通り記載しています。
特に、Dreambooth (オリジナルモデル作成機能) が VRAM メモリ制限 (24 GB 以上) を無視して実行できるようになったので、自分の VRAM 8 GB 環境でも実行できるか後で確認してみたいと思います。