ジャコ Lab

プログラミング関連のメモ帳的ブログです

ControlNet の LineartAnime を使ってみる

huggingface.co

今度は LineArt の Anime バージョンです
ControlNet 全部使ってみるシリーズはもう少しで終わります!

LineArtAnime

LineArt との違いはわからないですが、線画がアニメスタイルのようです?

controlnet_aux, transforms が必要です

!pip install -U controlnet_aux transforms 

投入画像の準備

from diffusers.utils import load_image
from controlnet_aux import LineartAnimeDetector

# 投入画像の準備
init_image_url = "https://huggingface.co/lllyasviel/control_v11p_sd15s2_lineart_anime/resolve/main/images/input.png"
init_image = load_image(init_image_url)
init_image = init_image.resize((512, 512))

processor = LineartAnimeDetector.from_pretrained("lllyasviel/Annotators")
control_image = processor(init_image)

(左) LineartDetector で抽出した線画 | (右) LineartAnimeDetector で抽出した線画

ControlNet, Pipeline の準備

import torch
from diffusers import ControlNetModel, StableDiffusionControlNetPipeline, UniPCMultistepScheduler
from transformers import CLIPTextModel

# ControlNet の準備
controlnet = ControlNetModel.from_pretrained(
    "lllyasviel/control_v11p_sd15s2_lineart_anime",
    torch_dtype=torch.float16
)

# Text Encoder? の準備
# we skip one layer of the encoder
text_encoder = CLIPTextModel.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    subfolder="text_encoder",
    num_hidden_layers=11,
    torch_dtype=torch.float16
)

# Pipeline の準備
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16,
    text_encoder=text_encoder,
    controlnet=controlnet
).to("cuda")
pipe.enable_model_cpu_offload()

# スケジューラーの設定
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)

we skip one layer of the encoder のコメントと共に知らない子が出てきました。

もしやこれは、、、前に上手く使えてなかった Clip Skip では?
pipe(prompt, clip_skip=2)
と同義に近い可能性が出てきましたね。

パイプライン実行

# パイプライン実行
prompt = "A warrior girl in the jungle"
image = pipe(
    prompt,
    num_inference_steps=30,
    generator=torch.manual_seed(0),
    image=control_image
).images[0]
image

ControlNet の LineartAnime で生成した画像

ボストローr...

pipe の clip_skip を使ってみる

(左) text_encoder 有り | (中) text_encoder 無し | (右) clip_skip=2

色々違うみたいだなぁ。。。難しい

Lineart でやったマイケルも一応出力してみる

zako-lab929.hatenablog.com

(左) Lineart | (右) LineartAnime

まとめ

Lineart と比べて、画風も少し変わった印象ですかね。