はじめに
シード値を控えておいたのに、もう一度生成したら微妙に違う絵が出てきた ── そんな経験、おありではないでしょうか?
実はこれ、バグではなく仕様なのですわ。 使っているサンプラーの種類によっては、同じシード・同じプロンプトでも完全に同じ画像にならないことがあります。
この記事では、なぜサンプラーによって再現性が変わるのかを技術的に解説し、 さらに画像生成の「エンジン」にあたる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 など)は、 途中で画面に水を飛ばして偶然の模様を作る工程が入ります。 その模様を活かして色を塗るので、水の飛び方が毎回わずかに違い、仕上がりが微妙に変わります。
技術的に何が起きているのか
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系の特徴として「毎ステップでランダムノイズを追加する」と解説しています。 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章:画像を正確に再現するための条件
他の方に画像の再現情報を共有する場合、シードとプロンプトだけでは不十分です。 以下のすべてが一致している必要があります。
🔑 必須パラメータ
📋 影響度が高いパラメータ
生成パラメータ解説で 「同じシード+同じ設定=同じ画像が再現されます」と解説していますが、 これは同じツール・同じ環境・決定論的なサンプラーを使った場合の話です。 ツールが変わったり、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のアップグレードは依存パッケージとの互換性を確認してから行いましょう
関連記事
📖 生成パラメータ解説
サンプラー・CFG・ステップ数の基礎知識
📖 Stable Diffusionとは?
CLIP / U-Net / VAEの仕組みをゼロから解説
📖 プロンプトガイド
プロンプトがどう画像に影響するか
📖 SD 1.5 vs SDXL 徹底比較
バージョンの違いを詳しく解説
📚 参考資料
※本記事は筆者の実体験および技術調査に基づくものです。
※ソフトウェアのバージョンや仕様は変更される場合があります。最新情報は各ツールの公式ドキュメントをご確認ください。