今度は 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)
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
ボストローr...
pipe の clip_skip を使ってみる
色々違うみたいだなぁ。。。難しい
Lineart でやったマイケルも一応出力してみる
まとめ
Lineart と比べて、画風も少し変わった印象ですかね。