【Stable Diffusion】img2imgエラーの対処法 | 真っ黒の画像が生成される

こんにちは、タカムネ(@takamune_ai)です。

Stable Diffusionでimg2imgを使っていると、真っ黒な画像が生成され、エラーになることがあります。

私の環境では、Stable Diffusionの起動直後にimg2imgを実行すると、ほぼ確実にこの症状が発生します。

いろいろ試してみたところ、先にtxt2imgで一度画像を生成することで、正常に動作するようになりました。

今回の解決方法

先にtxt2imgで一度画像を生成してから、img2imgを実行する。

私の環境では、この方法で正常に動作するようになりました。

非常に簡単な方法ですが、同じ症状で困っている方は試してみてください。

この記事では、発生したエラーの内容と、私の環境で効果があった対処法を紹介します。

目次

img2imgで真っ黒な画像が生成されるエラー

img2imgを実行すると、真っ黒な画像が生成され、次のエラーメッセージが表示されることがあります。

NansException: A tensor with NaNs was produced in Unet. This could be either because there’s not enough precision to represent the picture, or because your video card does not support half type. Try setting the “Upcast cross attention layer to float32” option in Settings > Stable Diffusion or using the --no-half commandline argument to fix this. Use --disable-nan-check commandline argument to disable this check.

このメッセージは、画像生成の計算中にNaN(正常な数値として扱えない値)が発生したことを示しています。

エラーメッセージでは、計算精度やGPUの半精度演算への対応などが原因の候補として挙げられています。

対処法として、以下の設定や起動オプションも案内されています。

  • 「Upcast cross attention layer to float32」を有効にする
  • --no-half を指定する
  • --disable-nan-check を指定する

ただし、私の環境では、起動オプションを変更しても問題は改善しませんでした。

なお、--disable-nan-check はNaNの検出チェックを無効化するもので、NaNが発生する根本原因を解決するものではありません。

私の環境で効果があった対処法

私の場合、次の手順で改善しました。

対応手順
  1. Stable Diffusionを起動する
  2. txt2imgで任意の画像を一度生成する
  3. その後、img2imgに切り替えて画像を生成する

これだけです。

私の環境では、Stable Diffusionの起動直後にimg2imgを実行すると、ほぼ確実にエラーが発生します。

ところが、先にtxt2imgで画像を生成しておくと、その後はimg2imgでも正常に画像が生成されるようになります。

拍子抜けするほど単純な方法ですが、現在もこの方法で対処しています。

原因は不明。環境によっては効果がない可能性も

なぜ先にtxt2imgを実行すると改善するのか、根本的な原因は特定できていません。

また、Stable Diffusion WebUIのバージョンによる挙動の違いや、ほかのPC環境でも同じ方法が有効なのかについては検証していません。

この方法は筆者の環境で確認した回避策です。すべての環境で改善することを保証するものではありません。

あくまで、私の環境で実際に効果があった回避策として紹介しています。

まとめ

Stable Diffusionのimg2imgで真っ黒な画像が生成される場合は、先にtxt2imgで一度画像を生成してから、img2imgを実行する方法を試してみてください。

特に、Stable Diffusionを起動した直後にimg2imgでエラーが発生する場合には、試す価値があると思います。

原因はまだ分かっていませんが、同じ症状で困っている方の参考になれば幸いです。

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

コメント

コメントする

目次