本記事のソースコードの利用によって生じた損害について、当方は一切の責任を負いません。ご自身の判断と責任のもとで参照・ご利用ください。
自作したSDXL用LoRA(対象:杜野凛世)を使用し、背景が透明な立ち絵素材を生成する際のトラブルシューティング記録です。
プロンプトで「白背景(white background)」を指定しても、完全な単色にはならずノイズ(幾何学模様や部屋の背景など)が混入するため、これではPhotoshop等での切り抜き作業が発生し効率を著しく落とすのは目に見えています。
この工程を省略するため、生成段階で透過画像を書き出す拡張機能「LayerDiffusion」を導入しました。その過程で「モデルのバージョン違い」に起因するエラーに遭遇したため、解決手順を記録します。
1. LayerDiffusionの導入(WebUI Forge)
WebUI (Forge) 環境に拡張機能をインストールします。
- WebUI上部の [Extensions] タブを選択。
- 下層の [Install from URL] タブを選択。
- URL欄にリポジトリURL(https://github.com/layerdiffusion/sd-forge-layerdiffusion)を入力。
- [Install] ボタンを押下。
インストール完了後、[Installed] タブへ移動し、[Apply and restart UI] を実行します。※念のためコンソール(黒い画面)も一度終了させ、完全に再起動を行いました。
2. 発生したエラーと症状
再起動後、生成画面下部に追加された [LayerDiffusion] 項目にて以下の設定を行い、生成を実行しました。
- Enabled: チェックあり
- Method: (SDXL) Generate Transparent Image
結果、画像は生成されず、コンソールに以下のエラーが出力され処理が停止しました。
RuntimeError: The size of tensor a (1280) must match the size of tensor b (640) at non-singleton dimension 0
3. 原因:チェックポイントの規格不一致
エラーログにある数値(1280と640)の差異は、SDXL(大サイズ)とSD1.5(小サイズ)の規格の不一致を示唆しています。
調査の結果、使用していたCheckpointモデル「AnythingXL_v50.safetensors」に原因がありました。名称に「XL」が含まれていますが、このモデルの実態は「SD1.5ベース」であり、SDXL用の設定を行ったLayerDiffusionとは互換性がありませんでした。
自作LoRAおよび拡張機能の設定がSDXL準拠である以上、ベースモデルも完全なSDXL用を使用する必要があります。
4. 解決策:Animagine XL 3.1の導入
SDXL環境における標準的なアニメ調モデル「Animagine XL 3.1」へ変更することで解決を図りました。
入手先について
Civitaiでは検索ノイズが多く、ログイン必須の仕様となっているため、Hugging Faceの公式リポジトリを利用します。
- リポジトリ: Hugging Face: cagliostrolab/animagine-xl-3.1
- 対象ファイル: animagine-xl-3.1.safetensors
- ファイルサイズ: 約 6.46 GB
ダウンロードしたファイルを stable-diffusion-webui\models\Stable-diffusion ディレクトリへ格納し、WebUI上でCheckpointを切り替えます。
5. 最終的な動作確認
モデル変更後、再度以下の手順で生成を実行しました。
- Checkpoint: animagine-xl-3.1.safetensors を選択。
- LayerDiffusion設定:
- Enabled: チェック
- Method: (SDXL) Generate Transparent Image
エラーは解消され、背景がない状態(グレー一色)でキャラクター画像が生成されることを確認しました。
これにより、外部ツールでの切り抜き作業の負担は劇的に軽減され、許容できるレベルの効率化が達成できたとおもいます。
まとめ(教訓)
- tensor size mismatch エラー(特に1280 vs 640)は、SD1.5とSDXLの混在を示唆している。
- モデル名に含まれる「XL」という文字列だけを信用せず、ベースモデルの規格を確認する必要がある。