AI 이미지/Stable Diffusion

SDXL - ControlNet 사용하기(AUTOMATIC1111)

하늘이푸른오늘 2023. 10. 1. 16:27

SDXL은 SD1.5에 비해 훨씬 뛰어난 이미지를 생성하는 모델입니다. 많은 경우 LoRA 등을 사용하지 않고 base 모델만으로도 충분히 괜찮은 이미지를 생성해주죠. 다만, 아직도 여러가지 확장은 안정적이지 않고 아직도 지원되지 않는 것들도 많습니다. 그 중 하나가 ControlNet이었습니다.

ControlNet을 사용하면 피사체의 구도, 특히 인물의 자세를 원래의 이미지와 동일하게 복사할 수 있어서 무척 유용한 확장입니다. 거의 모든 확장 중에서 거의 최고의 확장이라고 할 수 있습니다. ControlNet에 대한 좀더 자세한 사항은 이 글(1)이 글(2)을 읽어보시기 바랍니다.

사실 ControlNet에 관한 사항은 위의 글 두개에 모두 담았기 때문에 이 글에서는 반복할 필요가 없으니, 반복되는 내용은 가능한 한 빼고, SDXL 에 관한 내용만 다룰 예정입니다. 또한 이 글에서는 윈도용 AUTOMATIC1111에서 ControlNet을 사용하는 방법에 대해서만 기술하므로 참고하시기 바랍니다. 이 글에서 다루는 내용은 다음과 같습니다.

AUTOMATIC1111 에 ControlNet 설치하는 방법

1 단계. AUTOMATIC1111 업데이트

SDXL 용 ControlNet은 AUTOMATIC1111 1.6.0 버전 이상에서만 사용할 수 있습니다. AUTOMATIC1111 웹 UI를 업데이트하려면 먼저 cmd(명령 프롬프트) 혹은 PowerShell 을 실행하고 automatic1111이 설치된 폴더로 이동하고 git pull 명령을 실행합니다. 아래 명령에서 폴더 위치는 제 환경으로, 자신의 환경에 따라 수정해야 합니다.

cd \sd\stable-diffusion-webui
git pull

다음으로 stable-diffusion-webui 폴더의 venv 폴더를 완전히 삭제한 후 webui-user.bat 파일을 실행시켜 AUTOMATIC1111을 완전히 새로 시작합니다. 저의 경우에는 파일이 5만개 이상이라서 다시 시작하는데 시간이 많이 소요되었네요. 참고하세요.

2 단계. ControlNet 설치(이미 설치한 경우 3으로 건너뛰세요)

    1. AUTOMATIC1111을 실행시키고 Extension 페이지로 들어갑니다.
    2. Install from URL 탭으로 들어가서 [URL for extension's git repository]에 아래와 같이 입력합니다.

AUTOMATIC1111에서 ControlNet 확장 설치방법

  1. 설치가 완료될 때까지 잠시 기다립니다.
  2. 설치가 완료되면 AUTOMATIC1111을 재실행합니다.

3 단계. ControlNet 업데이트 (기존에 ControlNet을 설치했을 경우)

SDXL용 ControlNet을 사용하려면 1.1.400 버전 이상의 ControlNet을 사용해야 합니다. 이보다 낮은 버전이라면 아래와 같이 업데이트 할 수 있습니다.

  1. AUTOMATIC1111에서 Extension 페이지로 들어갑니다.
  2. [Installed] 탭을 누르고 [Check for updates] 버튼을 누릅니다.
  3. 잠시 기다리면 이미 설치된 확장들중에서 최신버전과 아닌 버전을 확인할 수 있습니다.
  4. [Apply and restart UI] 버튼을 눌러집니다. 이렇게 하면 모든 확장이 최신버전으로 업데이트 됩니다. 

AUTOMATIC1111에서 ControlNet 확장 최신버전으로 업데이트하는 방법

4 단계: SDXL ControlNet 모델 다운로드

SDXL 에서는 기존 SD1.5에서 사용하던 ControlNet 모델을 사용할 수 없기 때문에 새로 다운로드 받아야 합니다. 아래 링크에서 다운로드 받을 수 있습니다. 

https://huggingface.co/lllyasviel/sd_control_collection/tree/main

다운로드 받을 폴더는 아래와 같습니다.

stable-diffusion-webui\extensions\sd-webui-controlnet\models
또는
stable-diffusion-webui\models\ControlNet

그런데 저는 SD1.5용 ControlNet과 구분해서 관리하기 위해서 서브폴더를 만들어 넣어줬습니다. 이렇게 서브폴더에 넣어도 동일하게 사용할 수 있습니다. (참고로 저는 체크포인트 파일과 LoRA 파일도 각각 XL 서브폴더에 넣어두고 사용합니다. 이에 대해서는 다시 정리하겠습니다.)

stable-diffusion-webui\extensions\sd-webui-controlnet\models\XL

https://huggingface.co/lllyasviel/sd_control_collection/tree/main 에 들어가면 ControlNet 모델이 아주 많습니다. 저장장치가 넉넉하다면 모두 다운로드 받을 수 있지만, 아래를 읽어보시면서 필요한 것만 다운로드 받으셔도 됩니다.

Canny 모델

Canny 전처리기는 이미지에 있는 외곽선을 추출하고, Canny ControlNet 모델은 이 외곽선을 사용해 이미지를 생성합니다. SD 1.5용 Canny 모델은 이 글을 읽어보시기 바랍니다.

huggingface.co 사이트에는 다음과 같이 여러가지 canny 모델이 올려져 있습니다. 대략적인 특성을 정리하면 다음과 같습니다. 

  • Diffusers 모델 : full 은 가장 파일크기가 크고(2.5 GB) 가장 자세를 잘 복사합니다. small은 반대고요. Control weight 는 0.25 정도로 사용하되, small의 경우 약간 더 올려주는 게 좋습니다.
    • diffusers_xl_canny_full
    • diffusers_xl_canny_mid
    • diffusers_xl_canny_small
  • Kohya 모델: 파일크기가 50MB 정도로 매우 작다는 점이 유용합니다. Control weight는 0.75~1.0 정도로 설정하는 것이 좋습니다.
    • kohya_controllllite_xl_canny_anime
    • kohya_controllllite_xl_canny
  • Stability AI 모델 : 파일사이즈는 400MB 정도로 적당한 편이며, 자세도 잘 복사합니다. Control weight는 0.75~1.0 정도로 설정하는 것이 좋습니다.
    • sai_xl_canny_128lora
    • sai_xl_canny_256lora
  • T2I Adapter 모델: 상당히 빠르게 수행되지만, 생성되는 이미지는 별로 좋지 않은 듯 합니다.
    • t2i-adapter_xl_canny
    • t2i-adapter_diffusers_xl_canny

결론적으로, 아래 세가지를 추천하네요. 저는 그냥 이 세가지를 다운로드 받아서 사용하기로 했습니다.

  • diffusers_xl_canny_full : 저장공간이 문제없고 약간 속도가 늦어도 관계없는 경우. 자세를 가장 잘 복제합니다.
  • kohya_controlllite_xl_canny : 파일크기가 제일 작고 속도가 가장 빠릅니다. 단, 자세를 완전히 복제하지 못합니다.
  • sai_xl_canny_128lora : 파일크기가 적당하고 자세변형도 많지 않습니다.

아래는 테스트를 위한 txt2img 설정입니다. 

모델:  SDXL base 1.0
Refiner 모델: 사용하지 않음
Width: 1216, Height: 832
CFG: 5
Steps: 20
샘플러: DPM++ 2M Karras
프롬프트: Watercolor painting a young man sitting . Vibrant, beautiful, painterly, detailed, textural, artistic
부정적 프롬프트: anime, photorealistic, 35mm film, deformed, glitch, low contrast, noisy

Canny 모델을 위한 ControlNet 설정은 아래와 같습니다.

Enabled: Yes
Pixel Perfect: Yes
Preprocessor: Canny
Model: 위의 모델중 하나
Control Mode: Balanced
Resize Mode: Crop and Resize
Control weight: 모델에 따라 조정

ControlNet용 이미지는 아래와 같습니다.

ControlNet 테스트용 이미지

아래는 콘트롤넷을 사용하지 않고 생성한 이미지와, diffusers_xl_canny_full 을 사용하였을 때의 이미지입니다. 흠... 그런데 머리 방향이 다르게 나오는군요... ㅠㅠ

Depth 모델

Depth 모델은 기본적으로 피사체의 거리를 사용하는 모델입니다. 하얀색일수록 카메라에 가깝고, 어두운 색일수록 먼 곳에 있음을 나타냅니다. 전처리기는 Depth map 을 작성하고, Depth 모델은 이 Depth map을 이용해 이미지를 생성하도록 조건부여합니다. SD 1.5용 Depth 모델은 이 글을 읽어보시기 바랍니다.

huggingface.co 사이트의 Depth 모델을 간략하게 정리하면 아래와 같습니다. 

  • Diffusers 모델 : 가장 파일크기가 크고(~2.5 GB) Depth map을 가장 잘 따릅니다.
    • diffusers_xl_depth_full
    • diffusers_xl_depth_mid
    • diffusers_xl_depth_small
  • Kohya 모델: 파일크기가 매우 작지만, 생성되는 이미지에 약간 애니 스타일이 추가됩니다.
    • kohya_controllllite_xl_depth_anime
    • kohya_controllllite_xl_depth
  • Stability AI 모델 : 두가지 모두 성능이 비슷하며 Depthmap을 잘 따르는 편입니다.
    • sai_xl_depth_128lora
    • sai_xl_depth_256lora
  • Sargezt 모델 : 어떤 이유인지 모르겠지만, 거의 depth map을 무시하는 것 같습니다.
    • sargezt_xl_depth
    • sargezt_xl_depth_faid_vidit
    • sargezt_xl_depth_zeed
  • T2I Adapter 모델: Depth map을 아주 잘 따르는 편입니다. 
    • t2i-adapter_difusers_xl_depth_midas
    • t2i-adapter_diffusers_xl_depth_zoe

결론적으로 원본 글에서는 아래 세가지 모델을 추천했습니다. 저도 물론 이 세가지 모델만 다운로드 받았구요.

  • diffusers_xl_depth_full
  • sai_xl_depth_128lora
  • t2i-adapter_diffusers_xl_depth_midas

아래는 테스트를 위한 txt2img 설정입니다.

모델:  SDXL base 1.0
Refiner 모델: 사용하지 않음
Width: 832, Height: 1216
CFG: 5
Steps: 20
샘플러: DPM++ 2M Karras
프롬프트: a woman in a futuristic suit sitting on a seat with a pink light behind her, sci-fi, Artgerm, mecha, cyberpunk art, retrofuturism 
부정적 프롬프트: anime, deformed, glitch, low contrast, noisy

Depth 모델을 사용할 때의 ControlNet 설정 방법은 아래와 같습니다.

Enabled: Yes
Pixel Perfect: Yes
Preprocessor: Depth_leres
Model: 위의 모델중 하나
Control Mode: Balanced
Resize Mode: Crop and Resize
Control weight: 모델에 따라 조정

아래는 Control 이미지와 sai_xl_depth_128lora  모델을 사용한 결과입니다.

Recolor 모델

Recolor 모델은 흑백사진을 컬러 사진으로 바꿔주는 ControlNet 모델입니다. 이 모델은 SD1.5에서는 없었던 것 같은데, 그래도 재미있게 사용할 수 있을 것 같네요.

huggingface.co 사이트에는 두 가지 Recolor 모델이 올라와 있습니다. 이 두가지 중 어떤 것을 사용하는 것이 좋은지에 대한 평가는 없네요. 저는 일관성 있게 sai_xl_recolor_128lora 만 사용하려고 합니다. 

  • sai_xl_recolor_128lora
  • sai_xl_recolor_256lora

아래는 테스트를 위한 txt2img 설정입니다. 

모델:  SDXL base 1.0
Refiner 모델: 사용하지 않음
Width: 1216, Height: 832
CFG: 7
Steps: 30
샘플러: DPM++ 2M Karras
프롬프트: cinematic photo. 35mm photograph, film, bokeh, professional, 4k, highly detailed 
부정적 프롬프트: drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly 

ControlNet에서 Recolor 모델을 설정하는 방법은 아래와 같습니다. 

Pixel Perfect: Yes
Preprocessor: recolor_intensity
Model: 아래 두개중 하나
Control Mode: Balanced
Resize Mode: Crop and Resize
Control weight: 0.8

이미지 캔버스에는 흑백 사진을 올리면 되는데, 왼쪽의 수지씨 이미지를 오른쪽과 같이 흑백으로 전환하여 사용했습니다. 이 이미지를 ControlNet 캔버스에 올렸습니다.

아래 왼쪽은 recolor_intensity 전처리기를 사용했을 때, 우측은 recolor_ luminance 전처리기를 사용했을 때의 결과입니다. ControlNet 모델은 물론 sai_xl_recolor_128lora 을 사용했습니다. 원본과 비교를 하면 왼쪽이 나은 것 같지만,  색 복원의 자연스러움을 따지자면 양쪽 모두 그럴듯 한 것 같습니다. 원본 글에서도 어떤 전처리기 혹은 어떤 모델을 사용하는 것이 더 좋은지는 케이스바이케이스라서 여러번 테스트를 해보는 게 좋겠다고 하네요.

다만, 색을 입히기만 하는데 프롬프트를 입력할 필요가 있는지 생각해 볼 수 있을텐데요, 원본 글에 따르면 어떤 프롬프트를 사용하는지에 따라 다른 색감이 입혀진다고 합니다. 예를 들어 아래는 SDXL Style Selector를 사용해서 테스트한 결과입니다.

결론적으로 원하는 색감을 얻기 위해서는 그 분위기에 맞는 적절한 프롬프트를 넣어주는 것이 좋습니다!

Blur 모델

CSI 과학수사대와 같은 범죄 수사드라마를 보다보면 가끔 작은 사진을 확대하거나 작은 반사체를 처리해서 범죄자의 얼굴을 찾아내는 장면을 보셨을 겁니다. 물론 그런 건 불가능하죠. 하지만,  이 Blur 모델을 사용하면 흐린 사진의 원래 사진인 것처럼 복구할 수 있습니다. 이 모델도 SD1.5에서는 없었던 것 같은데, 재미있게 사용할 수 있을 것 같네요.

huggingface.co 사이트에는 두 가지 Blur 모델이 올라와 있습니다. 하나는 애니용, 다른 하나는 일반 이미지용입니다.

  • kohya_controllllite_xl_blur_anime
  • kohya_controllllite_xl_blur

다음은 테스트를 위한 txt2img 설정입니다.

모델:  SDXL base 1.0
Refiner 모델: 사용하지 않음
Width: 1216, Height: 832
CFG: 7
Steps: 30
샘플러: DPM++ 2M Karras
프롬프트: cinematic photo. 35mm photograph, film, bokeh, professional, 4k, highly detailed 
부정적 프롬프트: drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly 

ControlNet 은 아래와 같이 설정하면 됩니다. 

Pixel Perfect: Yes
Preprocessor: None
Model: kohya_controllllite_xl_blur
Control Mode: Balanced
Resize Mode: Crop and Resize
Control weight: 1.0

ControlNet 캔버스에는 위에서 사용한 수지씨 사진을 흐리게 만들어 올렸습니다. 그러나, 복원 결과는 원본과 관계없이 외국인이 나타납니다. ㅎㅎㅎ

아래는 kohya_controllllite_xl_blur_anime 모델을 사용하는 예입니다.

프롬프트: anime artwork . anime style, key visual, vibrant, studio anime, highly detailed
부정적 프롬프트: photo, deformed, black and white, realism, disfigured, low contrast

보시는 것처럼, 원본과 가깝게 복원될 것이라는 기대는 접어두시는 게 좋습니다. 단, 이 모델을 사용할 때에도 프롬프트를 적절하게 바꿔주면 원하는 이미지를 얻을 가능성이 높아지니 참고하세요. 

IP-adapter 모델

IP 는 image prompt 즉, 이미지 자체를 프롬프트로 사용한다는 뜻입니다. 즉, 올려진 이미지를 기준으로 프롬프트 내용에 따라 변경할 수 있는 모델을 말합니다. 

huggingface.co 사이트에는 하나의 IP-adapter 모델이 올라와 있습니다. 

  • ip-adapter_xl.pth

Controlnet 1.1.400 사이트에 올려진 이미지를 사용해 테스트해보겠습니다.

테스트를 위한 txt2img 설정은 아래와 같습니다.

Model: SDXL Base 1.0
Refiner: SDXL Refiner 1.0
Width: 1024
Height: 1024
CFG Scale: 7
Steps: 20
Sampler: DPM++ 2M SDE Karras
Prompt: Female Warrior, Digital Art, High Quality, Armor
Negative prompt: anime, cartoon, bad, low quality

ControlNet 설정은 아래와 같습니다.

Pixel Perfect: Yes
Preprocessor: ip-adapter_clip_sdxl
Model: ip-adapter_xl
Control Mode: Balanced
Resize Mode: Crop and Resize
Control weight: 1.0

아래는 ControlNet 캔버스에 올린 그림(왼쪽)과, ControlNet을 사용해서 생성한 이미지를 비교한 것입니다. 보시는 것처럼 왼쪽에 있는 기본 이미지와 상당히 유사하면서도 프롬프트를 따르고 있는 모습을 보이고 있습니다. (비슷하기는 해도 차이가 많아서 정말 이 IP-adapter모델이 잘 작동하는건지는 모르겠네요. ㅠㅠ)

 ControlNet을 꺼버리면 아래와 같이 생성됩니다. 원본 이미지와는 완전히 다른 형태의 이미지가 나옵니다. 당연하겠죠. 

 그럼데... 위의 수지씨 사진을 넣고 테스트해 봤는데, 영 이상한 결과가 나오네요. 왼쪽 프롬프트는 "woman in red shirts" 이고, 오른쪽 프롬프트는 blue hair인데... 솔직히 뭐가 뭔지 모르겠습니다. 

OpenPose 모델

huggingface.co 사이트에는  아래와 같이 여러가지 OpenPose 모델이 올려져 있습니다. 

  • kohya_controllllite_xl_openpose_anime
  • kohya_controllllite_xl_openpose_anime_v2
  • t2i-adapter_xl_openpose
  • t2i-adapter_diffusers_xl_openpose
  • thibaud_xl_openpose
  • thibaud_xl_openpose_256lora

그런데 원본글에 따르면 이걸 테스트해봤는데, 별로 잘 안된다고 하네요. 아무래도 좀 더 기다려봐야 할 듯 싶습니다.