Stable Diffusionとは何か

スポンサーリンク

「Stable Diffusion」は、テキスト(プロンプト)を入力するだけで画像を生成できるAIモデルです。2022年にStability AI社がオープンソースで公開し、誰でも無料で使えることから爆発的に普及しました。

仕組みをざっくり説明すると、「ランダムなノイズから少しずつノイズを除去していく」という拡散モデル(Diffusion Model)を使っています。最初は砂嵐のような画像から始まり、20〜50ステップかけて徐々にプロンプト通りの画像に「引き寄せられて」いくイメージです。

GPU(グラフィックカード)を使うことが多いですが、Apple Silicon(M1〜M4チップ)には MPS(Metal Performance Shaders) という独自のGPUアクセラレーション機能があり、これを使えばMacのみで十分な速度で動作します。

MacでStable Diffusionを動かす方法の選択肢

Macで動かす方法はいくつかあります。今回は全て試しながら最適解を探しました。

方法特徴難易度
AUTOMATIC1111
(Stable Diffusion WebUI)
最も有名なWebUIツール。ブラウザで操作できる。ただし最新macOS・Python環境では依存パッケージのビルドエラーが発生しやすい ⭐⭐⭐(環境依存あり)
Hugging Face diffusers PythonライブラリでAPIレベルから使う方法。pip install diffusersだけで動く。今回採用 ⭐⭐(中程度)
Draw Things Mac App Store配布のネイティブアプリ。インストール最簡単。設定の自由度は低め ⭐(簡単)
ComfyUI ノードを繋いでワークフローを組む上級者向けUI。柔軟性が高い ⭐⭐⭐(上級者向け)

今回は Hugging Face diffusers を使います。依存パッケージが少なく、Pythonさえあれば動くので最もトラブルが少ないためです。また「中で何が起きているか」が見えやすく、エンジニアとして理解しやすい点も気に入っています。

セットアップ手順(全ステップ解説)

Stable Diffusion セットアップの流れ
セットアップの全体的な流れ。GPUなし・クラウドなし、Apple M4のMPSだけで動かします

① Python環境の準備

まず pyenv で Python 3.12 系を使います。ただし、注意点があります。pyenv でビルドした Python は、依存ライブラリ(xz など)が不足していると後でエラーになることがあります。以下の手順で確実にセットアップしてください。

# xz(lzmaモジュールに必要)を先にインストール
brew install xz

# Pythonビルド時にxzをリンクするよう指定してインストール
LDFLAGS="-L/opt/homebrew/opt/xz/lib" \
CPPFLAGS="-I/opt/homebrew/opt/xz/include" \
pyenv install 3.12.5

⚠️ ハマりポイント①:xz を Homebrew でインストール済みでも、Python をビルドする前に環境変数を設定しないとリンクされません。後から python3 -c "import lzma" でエラーが出たら、上記の手順で Python を再ビルドしてください。

② PyTorch(MPS対応版)のインストール

pip install torch torchvision

Apple Silicon 向けの PyTorch は pip install だけで MPS サポート付きでインストールされます。インストール後に動作確認しましょう。

python3 -c "
import torch
print('PyTorch version:', torch.__version__)
print('MPS available:', torch.backends.mps.is_available())
"

MPS available: True と表示されれば成功です。Apple M4 で確認した結果、PyTorch 2.12.0 / MPS = True でした。

③ diffusersとツール類のインストール

pip install diffusers transformers accelerate safetensors

これだけです。4つ合わせて数分でインストール完了します。

最初の画像を生成してみる

セットアップが完了したら、以下のスクリプトで最初の画像を生成できます。

import os, torch
os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"  # MPS非対応の演算をCPUにフォールバック

from diffusers import StableDiffusionPipeline

# モデルをダウンロード(初回のみ約4.3GB)
pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float32,   # MPSではfloat32が安定
    safety_checker=None,
)
pipe = pipe.to("mps")
pipe.enable_attention_slicing()  # メモリ節約

# 画像を生成
image = pipe(
    "a beautiful sunset over mountains, photorealistic, golden hour, 4k",
    num_inference_steps=20,
    guidance_scale=7.5,
    generator=torch.Generator("mps").manual_seed(42)
).images[0]

image.save("output.png")

初回実行時はモデルのダウンロード(約4.3GB)が走ります。2回目からはキャッシュを使うので数秒でロード完了します。

実際に生成した画像がこちらです。

SD1.5で生成した夕日の山の風景
プロンプト: "a beautiful sunset over mountains, photorealistic, golden hour, 4k"(20steps, 27秒)
SD1.5で生成したロボットのイラスト
プロンプト: "a cute robot sitting at a desk programming, digital art, anime style"(20steps, 26秒)
SD1.5で生成した和風神社
プロンプト: "traditional Japanese shrine, cherry blossoms, misty morning, studio ghibli style"(30steps, 38秒)

ハマったポイントと対処法

実際に動かすまでにいくつかハマりました。同じところで詰まる方のために対処法をまとめます。

① xz/lzmaエラー(ModuleNotFoundError: No module named '_lzma')

pyenv でビルドした Python に xz がリンクされていないと発生します。前述の通り、brew install xz の後に LDFLAGS/CPPFLAGS を指定して Python を再ビルドすれば解消します。

② 黒画像(真っ黒の512×512が出力される)

これが一番ハマりました。torch_dtype=torch.float16 を使うと、MPS上でVAE(画像デコーダ)がNaN(計算不能値)を出力して黒画像になることがあります。

対策は2つです:

  • 【推奨】torch.float32 を使う。速度は少し落ちますが確実に動きます
  • PYTORCH_ENABLE_MPS_FALLBACK=1 を設定しつつ torch.float16 を試す(機種によっては動く)

AUTOMATIC1111 の macOS 用スクリプト(webui-macos-env.sh)でも --no-half-vae オプションで同じ問題を回避しています。

③ AUTOMATIC1111のインストールで詰まった

今回 AUTOMATIC1111 も試しましたが、Python 3.11 + pip の最新版の組み合わせで CLIP パッケージのビルド時に pkg_resources が見つからないエラーが出ました。setuptools のバージョンを 67.8.0 に固定することで回避できましたが、このあたりの依存関係は環境によって変わります。Python のバージョン依存の問題が頻繁に起きるため、diffusers での実行の方がシンプルです。

ステップ数と生成時間・品質の比較

ステップ数を変えて同じプロンプトで生成した結果を比較しました。使用環境は Apple M4 / PyTorch 2.12.0 / float32 です。

ステップ数と生成時間の比較グラフ
ステップ数と生成時間の関係。20stepsがバランスのよい設定
ステップ数生成時間品質感おすすめ用途
10steps約14秒粗い・ぼやけ気味プロンプト確認など素早いテスト
20steps約26秒実用的な品質 ★推奨日常使いのバランス設定
30steps約38秒高品質・細部が整うSNS投稿・ブログ掲載など
50steps約60秒最高品質・改善は微細印刷・拡大表示など

実際に4つを見比べると、10steps では輪郭がぼやけていますが、20steps からは実用的な品質になります。30→50 の差は微妙で、時間をかけるわりに見た目の変化は小さいです。20stepsがコスパ最良だと感じました。

各ステップで実際に生成した画像を並べて確認してみてください。

10steps
10steps (14秒)
20steps
20steps (26秒) ★
30steps
30steps (38秒)
50steps
50steps (60秒)

プロンプトの書き方

Stable Diffusion はプロンプトの書き方で結果が大きく変わります。基本的な構造を押さえておきましょう。

プロンプトの構造解説
プロンプトは4要素で構成するとコントロールしやすい

よく使うスタイルキーワード

カテゴリキーワード例
写真風photorealistic, photography, DSLR, sharp focus
イラスト・アニメanime style, digital art, illustration, manga
絵画風oil painting, watercolor, impressionism, studio ghibli style
品質向上highly detailed, masterpiece, best quality, 4k, 8k
照明・雰囲気golden hour, cinematic lighting, dramatic shadows, neon lights

ネガティブプロンプトの効果

ネガティブプロンプトとは「生成してほしくない要素」を指定するものです。negative_prompt パラメータで渡します。

image = pipe(
    "portrait of a person, oil painting",
    negative_prompt="ugly, blurry, low quality, bad anatomy, extra limbs, watermark",
    num_inference_steps=20,
).images[0]

同じシード値・同じプロンプトで、ネガティブプロンプトの有無を比較しました。

ネガティブプロンプトなし
ネガティブプロンプト:なし
ネガティブプロンプトあり
ネガティブプロンプト:あり(ugly, blurry…)

ネガティブプロンプトを入れると全体的に整った印象になります。生成時間はほぼ変わらないので、常に入れておくのがおすすめです。よく使うネガティブプロンプトをまとめておくと便利です。

# 汎用ネガティブプロンプト(コピペ用)
BASE_NEGATIVE = (
    "ugly, blurry, low quality, bad anatomy, "
    "extra limbs, deformed, watermark, text, signature"
)

CFG Scale(忠実度)の調整

guidance_scale(CFG Scale)は「プロンプトにどれだけ忠実に生成するか」を制御するパラメータです。

CFG Scaleの効果解説
CFG Scaleの設定による見た目の違い。デフォルトの7.5が最もバランスよい

同じプロンプト・同じシードで CFG Scale を変えて比較しました。

CFG 3.0
CFG=3.0(自由すぎる)
CFG 7.5
CFG=7.5(バランス ★)
CFG 12.0
CFG=12.0(硬くなりがち)

CFG=3.0 は自由で創造的ですがプロンプトから外れやすく、CFG=12.0 はプロンプト通りでも不自然さが出ることがあります。デフォルトの7.5が最もバランスよく、まずここから始めるのが無難です。

著作権・倫理面について

Stable Diffusion を使う上で知っておきたいことがいくつかあります。

モデルのライセンス

今回使用した SD 1.5 は CreativeML Open RAIL-M ライセンスで公開されています。商用利用は可能ですが、有害なコンテンツの生成や、人物を偽って作成したコンテンツの無断公開などは禁止されています。

生成画像の権利

AI が生成した画像の著作権については各国で議論が続いています。日本では現時点では「AIが生成した画像には著作権が発生しない」という見解が一般的です。ただし、他者の著作物に似た画像を意図的に生成・公開することはリスクを伴います。

悪用の禁止

実在する人物の画像を無断で学習させたり、フェイク画像を作って拡散するといった行為は法的・倫理的に問題になります。安全フィルター(safety_checker)を無効にして不適切なコンテンツを生成することも同様です。あくまで個人の創作やプロトタイピングの用途で楽しく使いましょう。

まとめ

今回 Apple M4 Mac 上で Stable Diffusion 1.5 を実際に動かして検証しました。結果をまとめます。

項目結果
セットアップpip install 3行だけ。ただし Python のビルド設定に要注意
生成速度(M4 MPS)20steps で約26秒。実用的な速度
ハマりポイント① lzmaエラー(xzのビルドリンク忘れ)② float16での黒画像(→float32で解決)
おすすめ設定steps=20, CFG=7.5, float32, PYTORCH_ENABLE_MPS_FALLBACK=1

クラウドもGPUサーバーも不要で、手元の Mac だけで本格的な AI 画像生成ができます。プロンプトを変えるだけで風景・キャラクター・アート作品など様々な画像を作れるのは純粋に楽しいです😊 ぜひ試してみてください。

なお、今回使ったのは SD 1.5 ですが、より高精細な Stable Diffusion XL(SDXL) や、ノードを組み合わせてワークフローを作れる ComfyUI もあります。次回はそちらも試してみたいと思います。

それでは、今回はここまで。ありがとうございました😊