見出し画像

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")

関連



この記事が気に入ったらサポートをしてみませんか?