はじめに

シード値を控えておいたのに、もう一度生成したら微妙に違う絵が出てきた ── そんな経験、おありではないでしょうか?

実はこれ、バグではなく仕様なのですわ。 使っているサンプラーの種類によっては、同じシード・同じプロンプトでも完全に同じ画像にならないことがあります。

この記事では、なぜサンプラーによって再現性が変わるのかを技術的に解説し、 さらに画像生成の「エンジン」にあたるdiffusersというライブラリの仕組みについても掘り下げていきます。

📝 この記事で分かること
  • DPM++ SDE Karrasで同じ絵が出ない理由
  • ODE / SDE の違いとサンプラーごとの再現性一覧
  • diffusersとは何か、他のバックエンドとの違い
  • アプリ間で画像を共有するとき、本当に必要な情報
  • 画像を確実に保存するためのベストプラクティス
🗺️ この記事の位置づけ

この記事は生成パラメータ解説の 「サンプラー」セクションをさらに深掘りした内容です。 まだお読みでない方は、先にそちらをご覧になるとより理解が深まりますわ。

第1章:DPM++ SDE Karras で同じ絵が出ない理由

💡 一言で言うと

DPM++ SDE Karrasは「確率的」なサンプラーです。 同じシード・同じプロンプト・同じ設定でも、毎回微妙に異なる画像が生成されることがあります。 その秘密は、サンプラーの名前に隠されていますの。

名前に答えがある ─ ODE と SDE

サンプラー名の「SDE」という3文字に注目してみてくださいませ。 この略語こそが、再現性を左右する最大のカギなのです。

✅ 決定論的

ODE(常微分方程式)

Ordinary Differential Equationの略。 計算の過程が完全に決定論的で、同じ入力なら何度やっても必ず同じ結果になります。 まさに、優等生なサンプラーですわね。

⚠️ 確率的

SDE(確率微分方程式)

Stochastic Differential Equationの略。 計算の途中にランダム要素が含まれるため、同じ入力でも実行のたびに結果が微妙に揺れるのです。

🎨 わかりやすいたとえ

水彩画にたとえてみましょう

ODE系(DPM++ 2M Karras など)は、 鉛筆で下書き → 輪郭を清書 → 色を塗る → 完成、という決まった手順です。 毎回まったく同じ工程なので、同じ絵が仕上がります

SDE系(DPM++ SDE Karras など)は、 途中で画面に水を飛ばして偶然の模様を作る工程が入ります。 その模様を活かして色を塗るので、水の飛び方が毎回わずかに違い、仕上がりが微妙に変わります

技術的に何が起きているのか

ODE(決定論的)
毎回同じ経路を通る
1
ノイズ画像からスタート 除去
2
ノイズをさらに除去 除去
同じ操作を繰り返す…
N
最終除去 → 画像完成 除去
✅ 毎回同じ結果になる
🎲
SDE(確率的)
毎回微妙に異なる経路
1
ノイズ画像からスタート 除去 + 再注入 🎲 ランダム
2
ノイズをさらに処理 除去 + 再注入 🎲 ランダム
毎回異なるノイズが混入…
N
最終処理 → 画像完成 除去 + 再注入
⚠️ 毎回微妙に異なる結果に

SDE系サンプラーは各ステップで「ノイズの除去」と「新しいノイズの再注入」を同時に行います。 この再注入されるノイズが、GPUの浮動小数点演算の丸め順序に影響され、実行ごとにごくわずかな差が生まれるんですのよ。

第2章:サンプラー別 再現性一覧

では、どのサンプラーなら確実に再現できるのでしょうか? 見分けるポイントは2つです。

🔑 見分け方
  • サンプラー名に「SDE」が含まれていたら → 再現性は不安定
  • サンプラー名に「a」(Ancestral)が含まれていたら → こちらも不安定

✅ 再現可能なサンプラー

✅ 完全再現可能

Euler

最もシンプルで高速。決定論的なため、シード固定で確実に同じ画像が得られますわ。

✅ 完全再現可能

DDIM

安定した品質。ランダム性がないため再現性が高く、img2imgやControlNetとの相性も◎ですわ。

✅ 完全再現可能

DPM++ 2M Karras

品質と速度のバランスが最良。ODE系なので再現性も完璧。多くのモデル作者が推奨しています。

✅ 完全再現可能

UniPC

少ないステップ(10〜15)でも高品質。決定論的で安定感があり、大量生成にも最適ですわ。

⚠️ 揺れが生じるサンプラー

⚠️ 揺れあり

Euler a

Ancestral(ランダム性あり)。ステップ数を変えると構図ごと変わることもあります。多様性を求めるのに向いていますわ。

⚠️ 揺れあり

DPM++ SDE Karras

ディテールは豊かですが、SDE特有のランダム性により完全再現は困難。品質重視の場面で活躍しますの。

💡 Ancestral系との違い

生成パラメータ解説でもAncestral系の特徴として「毎ステップでランダムノイズを追加する」と解説しています。 SDE系も同様の原理ですが、ノイズの注入方法がより数学的に洗練されているのが違いですわ。

じゃあ SDE系を使うメリットは?

「再現できないなら使わなければいいのでは?」── ごもっともなご意見ですわ。

しかしSDE系のサンプラーには品質面での確かな強みがあります。 ノイズの再注入には画像の多様性を高め、ディテールを豊かにする効果があるのです。 特にリアル系の画像やキャラクターの肌・布の質感表現では、SDE系の方が美しく仕上がる傾向があります。

🎯 用途別おすすめ
  • 気に入った画像を正確に再現したい → 「DPM++ 2M Karras
  • 品質重視でガチャ感を楽しみたい → 「DPM++ SDE Karras」
  • 最速で構図を探したい → 「Euler a」または「UniPC」

第3章:他のアプリでも同じシードで再現できる?

💡 一言で言うと

同じシード・同じプロンプトを入力しても、アプリケーションが異なれば同じ画像にはなりません。 これには「バックエンド」の違いが関係しています。

画像生成の「エンジン」は1つではない

画像生成AIを動かすには「エンジン」(バックエンド)が必要です。 自動車にエンジンの種類があるように、画像生成にもエンジンの種類がありますのよ。

🔧 バックエンド

diffusers

Hugging Faceが開発。 InvokeAIなど多くのPythonベースツールが採用。パイプラインが豊富で拡張性が高いですわ。

🔧 バックエンド

k-diffusion

Katherine Crowsonが開発。 AUTOMATIC1111 WebUIが採用。サンプラーの実装方法がdiffusersとは異なります。

🔧 バックエンド

ComfyUI内蔵

ComfyUI開発チームが独自に実装。 ノードベースで柔軟ですが、内部の計算処理はまた独自ですの。

これらは同じモデルファイル(.safetensors)を読み込めますが、 内部のノイズ計算処理の実装が異なるため、同じシード・同じプロンプトでも結果が一致しないのです。

🗺️ 既存記事との関連

Stable Diffusionとは?で解説した 3つのコンポーネント(CLIP / U-Net / VAE)は同じですが、 U-Netにノイズ除去を指示するスケジューラーの実装がバックエンドごとに異なります。

🎨 わかりやすいたとえ

キッチンのたとえ

同じレシピ(モデル)と同じ食材(シード、プロンプト)を使っても、 キッチンAとキッチンBでは火加減の微妙な癖調味料を入れるタイミングが異なります。 結果、「似ているけれど微妙に違うお料理」が出来上がる ── というイメージですわ。

技術的な差異の原因

🔧 スケジューラー実装の差

同じ「DPM++ 2M Karras」でも、ライブラリごとに係数の計算方法がわずかに異なります。 これが結果の差に直結するのです。

📝 トークナイザーの処理差

プロンプトをCLIPに渡す前の分割方法(プロンプトガイドで解説したトークン化の処理)が微妙に違う場合があります。

🖥️ 浮動小数点の演算順序

GPUでの計算順序の差により、結果が蓄積的に分岐していきます。 これは同じライブラリの異なるバージョン間でも起こりうることですの。

第4章:画像を正確に再現するための条件

他の方に画像の再現情報を共有する場合、シードとプロンプトだけでは不十分です。 以下のすべてが一致している必要があります。

🔑 必須パラメータ

シード値 ★★★★★ 画像のDNA。必須中の必須
プロンプト / ネガティブ ★★★★★ 1文字でも違うと変わる
モデル(チェックポイント) ★★★★★ 完全に同一の.safetensorsファイル
サンプラー ★★★★☆ 同じアルゴリズム名
ステップ数 ★★★★☆ 結果に直結
画像サイズ(W×H) ★★★★☆ サイズが違うと構図ごと変わる

📋 影響度が高いパラメータ

CFGスケール ★★★☆☆ 値の完全一致が必要
CLIP Skip ★★☆☆☆ 特にリアル系で影響大
VAE ★★☆☆☆ 色味に影響
生成ツール + バージョン ★★★☆☆ diffusers 0.30 と 0.32 でも差が出る
⚠️ 既存記事の補足

生成パラメータ解説で 「同じシード+同じ設定=同じ画像が再現されます」と解説していますが、 これは同じツール・同じ環境・決定論的なサンプラーを使った場合の話です。 ツールが変わったり、SDE系サンプラーを使う場合は同じシードでも結果が変わりますので、ご注意くださいませ。

✨ 一番確実な保存方法

気に入った画像を確実に残す方法は、とてもシンプルですわ。

💡 結論

生成済みの画像ファイルそのものを保存してください。
シード値やパラメータは「似た画像を再生成するための参考情報」と考えて、 原本は画像ファイル自体と割り切ることをおすすめいたしますわ。

第5章:diffusers のバージョンについて

diffusers自体に「種類」はありませんが、バージョンは頻繁にアップデートされています。 バージョンが変わると内部の計算ロジックが改善・変更されるため、同じシード・同じ設定でも出力が微妙に変化することがあります。

依存パッケージの互換性に注意

diffusersのバージョンアップ時には、関連パッケージとの互換性に気をつけてくださいませ。

🔥 PyTorch

GPU計算の基盤。CUDAドライバーとの相性があり、むやみにバージョンを上げるとエラーの原因に。 Stable Diffusionとは?で解説した U-Netの計算をすべて担っている重要なパッケージです。

🧠 transformers

テキストエンコーダー(CLIP)の処理を担当。diffusersと密接に連携しており、 バージョンの組み合わせが重要です。

⚡ accelerate

GPU最適化ライブラリ。メモリ効率や計算速度に影響します。 こちらもバージョンの整合性が大切ですわ。

✨ 筆者の経験談

実際に筆者がdiffusersを最新版にアップグレードしようとしたところ、 PyTorchのバージョンが古くて互換性エラーが出たことがありましたの。 バージョンアップは慎重に、テスト環境で検証してからが安心ですわ。

まとめ

📝 この記事のポイント
  • DPM++ SDE Karrasは「確率的」 ─ 同一シードでも完全な再現はできません。再現が必要ならDPM++ 2M Karrasをお使いくださいませ
  • 画像生成のエンジンは複数ある ─ diffusers、k-diffusion、ComfyUI内蔵は同じモデルを使えますが、結果は一致しません
  • 画像の保存はファイルで ─ シード値は参考情報。確実に残したい画像はファイル保存が一番ですわ
  • バージョン管理は慎重に ─ diffusersのアップグレードは依存パッケージとの互換性を確認してから行いましょう

関連記事

❀ この記事が役に立ったら

サイト運営のモチベーションになります。よろしければ応援お願いします!

❀ お布施する(OFuse)

📚 参考資料

※本記事は筆者の実体験および技術調査に基づくものです。
※ソフトウェアのバージョンや仕様は変更される場合があります。最新情報は各ツールの公式ドキュメントをご確認ください。