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

Google Colab で Flux の ControlNet を試す

    「Google Colab」で「Flux」の「ControlNet」を試したのでまとめました。

    【注意】Google Colab Pro/Pro+のA100で動作確認しています。

    前回

    1. ControlNet

    「ControlNet」は、「Stable Diffusion」モデルにおいて、新たな条件を指定することで生成される画像をコントロールする機能です。プロンプトでは指示しきれないポーズや構図の指定が可能になります。

    今回は、「InstantX」提供の「ControlNet」を使います。

    2. Canny

    「Canny」は、「Canny Edge検出」で構図を指定する「ControlNet」です。

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

    # パッケージのインストール
    !pip install git+https://github.com/huggingface/diffusers
    !pip install controlnet_aux opencv-python

    (2) モデルカードで「Agree and access repository」をクリック。

    画像

    (3) HuggingFaceのログイン。

    !huggingface-cli login

    指示に従って次の情報を入力します。

    ・Enter your token (input will not be visible) : HuggingFaceのトークン
    ・Add token as git credential? (Y/n) : n (認証情報として保存するか)

    (4) 初期画像の準備。
    Colab右端のフォルダアイコンから初期画像 (init_image.png) をアップロードして読み込む。

    ・init_image.png

    画像
    from diffusers.utils import load_image
    
    # 初期画像の準備
    init_image = load_image("init_image.png")
    init_image = init_image.resize((1024, 1024))
    
    # 確認
    init_image

    (5) 初期画像をCanny画像に変換。

    from controlnet_aux import CannyDetector
    
    # Canny画像の準備
    canny_detector = CannyDetector()
    canny_image = canny_detector(init_image, image_resolution=1024)
    
    # 確認
    canny_image
    画像

    (6) パイプラインの準備。
    「InstantX/FLUX.1-dev-Controlnet-Canny」と「black-forest-labs/FLUX.1-dev」をダウンロードします。

    import torch
    from diffusers.pipelines.flux.pipeline_flux_controlnet import FluxControlNetPipeline
    from diffusers.models.controlnet_flux import FluxControlNetModel
    
    # パイプラインの準備
    controlnet = FluxControlNetModel.from_pretrained(
        'InstantX/FLUX.1-dev-Controlnet-Canny', 
        torch_dtype=torch.bfloat16
    )
    pipe = FluxControlNetPipeline.from_pretrained(
        'black-forest-labs/FLUX.1-dev', 
        controlnet=controlnet, 
        torch_dtype=torch.bfloat16
    )
    pipe.to("cuda")

    (7) プロンプトの準備と画像生成の実行。

    from diffusers.utils import load_image
    
    # プロンプトの準備
    prompt = "cute cat-ear maid, white background, japanese anime style"
    
    # 画像生成
    image = pipe(
        prompt, 
        control_image=canny_image,
        controlnet_conditioning_scale=0.5,
        num_inference_steps=50, 
        guidance_scale=3.5,
    ).images[0]
    image.save("image.png")
    画像

    関連



     
     

    npaka

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

    あなたへのおすすめ