メインコンテンツへスキップ
見出し画像

Google Colab ではじめる Stable Diffusion 1.5

    「Google Colab」で「Stable Diffusion」によるテキストから画像を生成する方法をまとめました。

    ・Stable Diffusion 1.5
    ・HuggingFace Diffusers 0.8.1

    1. Stable Diffusion

    「Stable Diffusion」は、2022年8月に無償公開された画像生成AIです。ユーザが画像内容を説明するテキスト(プロンプト)を指定することで、それに応じて画像が自動生成されます。

    2. HuggingFace Diffusers

    「HuggingFace」は、人工知能のライブラリ、モデル、データセットの共有サイトです。「HuggingFace Diffusers」は、「Stable Diffusion」をはじめとする拡散モデルの各種実装およびモデルを、共通インタフェースで簡単に利用するためのパッケージになります。

    3. Colabでの実行

    Colabでの実行手順は、次のとおりです。

    (1) メニュー「編集→ノートブックの設定」で、「ハードウェアアクセラレータ」に「GPU」を選択。

    (2) パッケージのインストール。

    # パッケージのインストール
    !pip install diffusers[torch]==0.8.1 transformers

    (3) パイプラインの準備。

    from diffusers import StableDiffusionPipeline
    import torch
    
    # パイプラインの準備
    pipe = StableDiffusionPipeline.from_pretrained(
        "runwayml/stable-diffusion-v1-5", 
        torch_dtype=torch.float16, 
        revision="fp16"
    ).to("cuda")

    (4) 推論の実行。

    # 推論の実行
    prompt = "cute cat ear maid"
    image = pipe(prompt).images[0]  
    
    # 画像の保存と表示
    image.save("output.png")
    image

    画像が出力されます。

    画像

    4. StableDiffusionPipelineの引数

    「StableDiffusionPipeline」の引数は、次のとおり。

    ・prompt (str or List[str]) - プロンプト
    ・height (int, optional, defaults to 512) - 画像幅 (pixel)
    ・width (int, optional, defaults to 512) - 画像高さ (pixel)
    ・num_inference_steps (int, optional, defaults to 50) - ノイズ除去ステップ数。通常、ノイズ除去ステップを増やすと、推論が遅くなるが、画像の品質が高くなる
    ・guidance_scale (float, optional, defaults to 7.5) - ガイダンススケール。通常、ガイダンススケールを増やすと、画質が低下するが、プロンプトに関連した画像が生成されやすくなる
    ・negative_prompt (str or List[str], optional) - ネガティブプロンプト
    ・num_images_per_prompt (int, optional, defaults to 1) - プロンプトごとに生成する画像数
    ・eta (float, optional, defaults to 0.0) - DDIMのパラメータ eta (η)。schedulers.DDIMScheduler にのみ適用
    ・generator (torch.Generator, optional) - 生成を決定論的にするtorchジェネレータ。
    ・latents (torch.FloatTensor, optional) - 画像入力として使用するPre-generated noisy latents
    ・output_type (str, optional, defaults to "pil") - 画像出力形式 (PIL.Image.Image or np.array)
    ・return_dict (bool, optional, defaults to True) - Tupleの代わりに StableDiffusionPipelineOutputを返すかどうか
    ・callback (Callable, optional) - 推論中にcallback_stepsステップごとに呼び出される関数。callback(step: int, timestep: int, latents: torch.FloatTensor)
    ・callback_steps (int, optional, defaults to 1) — コールバック関数の呼び出し頻度

    5. Stable Diffusionモデルの一覧

    「Stable Diffusion」のモデルには、標準モデルの他に、追加学習が行われた数多くのモデルが提供されています。基本的に上記と同じ手順で、パイプラインを書き換えるだけで利用できます。

    diffusers対応モデルは、以下のサイトで確認できます。

    画像

    ◎ Waifu Diffusion 1.3
    2次元絵が得意で有名なモデルです。

    画像

    パイプラインの作成手順は、次のとおりです。

    from diffusers import StableDiffusionPipeline
    import torch
    
    # パイプラインの準備
    pipe = StableDiffusionPipeline.from_pretrained(
        "hakurei/waifu-diffusion", 
        torch_dtype=torch.float16, 
        revision="fp16"
    ).to("cuda")

    ◎ Trinart Diffusion v2
    「Trinart Diffusion」は、やわらかいタッチの2次元絵が得意なモデルです。

    画像

    パイプラインの作成手順は、次のとおりです。revisionには、diffusers-60k / diffusers-95k / diffusers-115k を指定する必要があります。

    from diffusers import StableDiffusionPipeline
    
    # パイプラインの準備
    pipe = StableDiffusionPipeline.from_pretrained(
        "naclbit/trinart_stable_diffusion_v2", 
        torch_dtype=torch.float16, 
        revision="diffusers-115k",
    ).to("cuda")

    ◎ shirayu/sd-tohoku-v1
    東北ずん子プロジェクトのキャラクターイラストを用いて学習したモデルです。

    画像

    以下の5名のキャラクターのキーワードを使えます。

    ・itako : 東北イタコ
    ・zunko : 東北ずん子
    ・kiritan : 東北きりたん
    ・zundamon : ずんだもん (人間形態)
    ・metan : 四国めたん

    パイプラインの作成手順は、次のとおりです。DiffusionPipelineを使います。

    from diffusers import DiffusionPipeline
    
    # パイプラインの準備
    pipe = DiffusionPipeline.from_pretrained(
        "shirayu/sd-tohoku-v1"
    ).to("cuda")



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ