こんにちは、タカムネ(@takamune_ai)です。
Stable Diffusionで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.
Google翻訳で直訳すると、以下の通り。
NansException: Unet で NaN を含むテンソルが生成されました。画像を表現するのに十分な精度がないか、ビデオカードが half 型をサポートしていないことが原因である可能性があります。「設定」>「安定拡散」で「クロスアテンションレイヤーを float32 にアップキャスト」オプションを設定するか、コマンドライン引数 –no-half を使用してこの問題を修正してください。このチェックを無効にするには、コマンドライン引数 –disable-nan-check を使用してください。
対処法として、「–no-half 」もしくは「–disable-nan-check」のオプションを追加して起動することが記載されていますが、これをやっても私の環境では改善しませんでした。
エラーの原因はいろいろ考えられるため、まずこのオプションを追記して試してみるのもアリです。それでも改善しない場合は、次項の対処法を試してみてください。
img2imgエラーの対処法
私の環境では、以下を実施することで改善しました。
text2imageで任意の画像を生成し、その後にimg2imgを実行する
めちゃくちゃ単純な方法で拍子抜けしたもしれませんが、今のところ、この対処法で改善してます。
原因が全く分からないので、おそらくStable Diffusionのバグ?なんだと思います。ちなみに、私の環境だとStable Diffusion起動直後にimg2imgを行うとほぼ確実にこのエラーになります。
ということで、同じ症状で困ったら試してみてください。


コメント