重みが跳ね上がる:Fooocusのバグ解析

最近、Fooocusでもa1111と同じバグがあることに気づきました。この問題は、patch_clip.py内のpatched_encode_token_weightsの実装に起因しています。

z = z * (original_mean / new_mean)

上記のコードで、時折 new_mean が非常に小さい値を取るため、重みが跳ね上がり、正常な描画ができなくなっています。

実際に確認された値は以下の通りです:

original mean0.0004
new mean3.7944e-05

この場合、z は約10.54倍されることになり、結果として描画が大きく乱れる可能性があります。

以下の画像は、実際に乱れた描画結果の一例です:

GitHubのissueにもこの不具合を報告しましたが、Fooocus の issues は現在あまり動いていないようです。open な issue が積み上がる一方なので、自分でフォークした mashb1t 版のベースで対応を進める予定です。ただし、z の計算ロジックの適切な修正方法についてはまだ結論が出ていません。

元々のコードの出所はこちらです:Stable Diffusion XLで生成画像の破綻が起きる問題の解析と対策