이번 포스팅에서 다룰 컨트롤넷까지 살펴보면 이제 Stable Diffusion에 대한 기초적인 내용은 다 훓어봤다고 해도 될 것 같습니다. 1편부터 제 포스팅을 다 보셨다면 이제 꽤 진지하게 SD에 대해서 접근하고 있다고 생각합니다.

앞선 과정에서 이미지를 만들면서 프롬프트를 열심히 입력하지만 매번 예상치 못한, 혹은 의도한 대로 결과가 안나오는 경험을 다들 해보셨을 겁니다. 물론 프롬프트의 내용에는 부합하지만 세세한 조정을 하기가 힘드셨을거에요.

ControlNet(컨트롤넷) 이란?

ControlNet을 정의하자면 참고할 수 있는 입력 이미지를 기반으로 새로운 이미지를 생성할 수 있는 강력한 확장기능(Extension)입니다. 대표적인 기능으로는 자세를 따라한다거나 물건의 배치,색상정보를 따라하는 것이 가능합니다.

아마 다들 컨트롤넷이라 하면 자세 지정해주는 기능으로 알고 계시는 분이 많은데 OpenPose는 컨트롤넷의 한 종류입니다.

ControlNet is a neural network structure to control diffusion models by adding extra conditions.

말로만 설명하면 이해가 잘 안될 것이기 때문에, 대표적인 Pose 와 관련된 기능을 보여드리겠습니다. 참조이미지에서 Pose에 해당하는 Keypoint를 감지해서 이 키포인트의 위치를 포함하는 control map으로 지정합니다. 이를 텍스트 프롬프트와 함께 추가적인 조건을 부여해서 결과물에 반영하는 방식입니다.

참조이미지
ControlNet Preprocess 과정
Stable Diffusion ControlNet OpenPose
ControlNet-openPose 적용한 결과

결과이미지에 사용한 체크포인트가 궁금하시면 이 글을 참고해주세요. 이제 이러한 컨트롤넷의 설치방법과 각각 어떤 기능이 있는지, 그리고 사용법에 대해서 알아보도록 하겠습니다.

컨트롤넷(ControlNet) 설치방법

우선 Stable Diffusion WebUI 에서 Extensions 메뉴로 이동합니다. 그리고 Install from URL 탭에서 아래와 같이 git repository 주소를 입력해줍니다. 그리고 Install 버튼을 누릅니다.

https://github.com/Mikubill/sd-webui-controlnet
위의 git repository 를 입력하고 Install 을 누른다.

설치가 다 완료되면 Extension > Installed 탭으로 이동해서 Apply and restart UI 를 눌러서 새로 시작합니다. 설치 끝!

Installed 탭에서 Apply and restart UI 를 누른다.

컨트롤넷(ControlNet) 모델 다운로드 받기

Extension만 다운로드 받고 끝이면 참 좋겠지만, ControlNet도 여러가지 모델이 있습니다. 그에 맞게 다운을 받아줘야합니다.

아래 링크에서 Tile, Depth, OpenPose, Canny, MLSD, Scribble, Softedge, Normal, Seg, Shuffle, pix2Pix, Inpaint, Lineart, AnimeLine 등의 ControlNet 모델을 다운받습니다.

https://civitai.com/models/38784?modelVersionId=44877

각각 다른 모델이기 때문에 전부 다운 받아서 아래 폴더에 복사해줍니다. 다운 받을때 모델과 config (yaml) 파일이 세트로 구성되어있으니 2개 파일을 다운 받아야합니다.

{SD설치폴더}\extensions\sd-webui-controlnet\models

복사할 폴더의 위치가 extensions의 하위입니다. 체크포인트와 이름이 같아서 헷갈릴수 있으니 꼭 해당 폴더에 넣어주세요. 이 모델들은 프롬프트나 이미지 생성용이 아니라 OG ControlNet 모델입니다. ControlNet Extension이 반드시 필요합니다.

ControlNet UI 옵션 설정

얘도 참 복잡한 설정화면을 가지고 있습니다. 하나하나 알아보도록 하죠. 일단 상단에 Single Image에 참조할 이미지를 업로드 합니다.

ControlNet 설정화면

1. ControlNet Unit

  • ControlNet Unit : 0,1,2 탭이 있는데 보통 한개의 ControlNet만 사용합니다. 여러 개를 사용하는 경우는 하나의 처리결과를 다른 ControlNet의 입력값으로 사용할 때 사용합니다. (다중 컨트롤넷)
  • Single Image : 참조할 이미지를 업로드합니다. 업로드한 이미지를 기반으로 컨트롤넷 결과를 만듭니다.

우측하단에 아이콘 4개가 있습니다. 마우스를 갖다대도 뭐 나오는게 없어서 뭔가 했을겁니다.

  • 메모장 아이콘 : New Canvas 기능입니다. Brush로 직접 그리고 싶을때 빈 캔버스를 생성해주는 기능입니다.
  • 카메라 아이콘 : 웹캠이 설치되어 있다면 웹캠으로 포즈를 취해서 소스로 사용할 수 있습니다.
  • 좌우화살표 : 미러링 기능으로, 웹캠 촬영시에 좌우대칭으로 적용합니다.
  • 올라가는 화살표 아이콘 : 참조이미지의 크기와 생성하려는 이미지의 사이즈를 똑같이 맞춰줍니다.

참조이미지로 전처리가 잘 되지 않을때 수동조정 방법

이렇게 오른쪽 다리의 Key Point가 인식되지 않은 경우에 Preview 화면 우측에 Edit 버튼을 누르면 각 포인트를 직접 이동시켜서 잡아줄 수가 있습니다.

좌측하단에 Person 1 을 누르고 부위 명칭을 찾아서 숫자를 입력할 수도 있고, 우측 뷰어에서 Point를 마우스로 직접 잡고 드래그해서 맞춰줄 수도 있습니다. 왼쪽인지 오른쪽인지 봐서 잘 모를수 있기 때문에 좌측 패널정보를 함께 보면 됩니다.

이렇게 조정한 다음에는 좌측패널을 상단으로 스크롤해서 <ControlNet에 자세보내기> 버튼을 눌러서 적용해줍니다.

그러면 아래처럼 Preview 값이 변경된 걸 확인할 수 있을겁니다.

2. 상단 체크박스

  • Enable : 이 옵션이 켜있어야 컨트롤넷이 동작합니다.
  • Low VRAM : 그래픽카드의 VRAM이 작은 경우에 체크해줘야 합니다. 8GB 이하면 체크해주세요. 메모리 오류가 발생할 때 키면 일부 작업을 CPU가 대신하는 것 같습니다. 속도가 느려집니다.
  • Pixel Perfect : 이미지가 최적의 해당도로 처리되도록 보장합니다. 번거로운 수동 조정 없이 가장 적합한 해상도 설정을 알려줍니다. 작업중인 참조 이미지와 일치하도록 이미치 전처리기(preprocessor) 의 해상도를 조정하는 자동화 기능입니다.
  • Allow Preview : 체크하면 Preprocessor Preview창이 보입니다. 현재 선택한 전처리기의 결과의 미리보기를 허용하겠냐는 옵션이라 체크해줍니다.

3. Control Type

컨트롤넷의 모델을 어떤걸 사용할지 선택하는 부분입니다. 정말 다양한 모델이 있는데 차이점은 다음 포스팅에 따로 자세히 알아보도록 하겠습니다. 각 모델별로 간단하게 설명만 하고 넘어갈께요.

  • Canny : 참조이미지를 스케치한 듯한 결과를 주고, 이 결과물을 통해 이미지를 생성하는 방법입니다. 그림체는 비슷하고 색감이나 질감 등을 바꿀때 유용합니다.
  • Depth : 말 그대로 깊이를 표현하는 결과물이 추출되고, 참조 이미지와 거의 동일한 구도로 이미지가 생성됩니다. Canny에 비해서 입체감을 재현하는데 더 유리합니다.
  • NormalMap : Depth와 비슷한 기능을 하는데, NormalMap은 피사체의 입체감을 표현하는데 더 강점이 있고 Depth는 주위 배경의 입체감까지 표현할때 유리합니다.
  • OpenPose : 가장 유명하고 많이 이용하는 모델입니다. 이미지에서 자세를 결과로 주고 원하는 자세를 생성할때 유용합니다. Depth나 NormalMap도 이런 용도로 사용가능합니다.
  • MLSD : 직선을 감지하여 직선만 추출해주는 형태의 결과물을 줍니다. 인테리어나 건물 등의 직선형태의 이미지를 만들때 유용합니다.
  • Lineart : Canny와 비슷한 용도의 모델입니다. 주관적으로는 Canny보다 좀 더 성능이 좋은 것 같습니다.
  • SoftEdge : 기존에 HED라고 불리던 모델이며, Canny와 비슷한 용도로 색을 빼는 느낌이로 색감만 다르게 재구성할때 유용합니다.
  • Scribble/Sketch : 직접 그린 그림을 기반으로 이미지를 생성합니다.
  • Segmentation : 색을 분리해서 결과물을 생성합니다.
  • Shuffle : 비슷한 색감과 분위기로 이미지를 생성합니다. 레이아웃이나 형태는 무시됩니다.
  • Tile/Blur : 이미지를 더 디테일하게 만들때 사용되며, 보통 Upscaler와 함께 사용됩니다. blur모델도 마찬가지로 blur처리된 이미지를 복원하는 느낌으로 활용할 수 있습니다. 정말 복원이 되지는 않습니다. 선명하게 재생성되는거죠.
  • Inpaint : I2I (img2img) 의 inpaint 시 더 좋은 결과물을 만들 수 있습니다.
  • InstructP2P : Instruct Pix2Pix 약자로 명령어를 입력해서 이미지를 조정합니다.
  • Reference : 컨트롤넷 1.1에 새로 생긴 모델인데, 체크포인트 모델에 영향을 받지 않고 업로드한 참고 이미지만을 이용해서 유사한 이미지를 생성합니다.
  • Recolor : 흑백사진을 컬러사진으로 바꿔주는 기능을 제공합니다.
  • Revision : 예전에 Clip Vision이라고 불리던 모델입니다. T2IA에서 Clip Vision과 비슷한 기능을 수행합니다. 참조이미지를 Clip Vision 임베딩으로 변환해서 이를 토대로 이미지를 생성해내는 방식입니다. 다음 포스팅에서 자세히 보여드리도록 하겠습니다.
  • T2I-Adapter : Text to Image Adapter 의 약자로 Color Grid 와 Clip Vision이 대표적이고, Color Grid는 64배 작게 축소한다음 원래 크기로 확장해서 그 컬러값일 참조하는 형태입니다. Shuffle과 비슷하게 동작합니다. Clip Vision은 Revision과 비슷하게 수행하는데 동작하는 형태는 Reference와 유사합니다.
  • IP-Adapter : Image Prompt Adapter 의 약자로 이미지 자체를 프롬프트로 사용하는 모델입니다. 참조이미지를 기준으로 프롬프트 내용에 따라 변형이 가능합니다.

(각 모델을 설명하면서 샘플이미지를 첨부하면 좋겠다는 생각을 하면서.. 다음 포스팅에 각각 모델들을 다뤄보도록 하겠습니다.)

이렇게 다양한 모델은 전처리기(Preprocessor)와 함께 동작합니다. Type을 선택하면 자동으로 그에 맞는 전처리 모델이 선택되게 되어있습니다.

UI상 알아두어야 할 부분은 Preprocessor와 Model을 선택하고 중간에 불꽃 모양의 아이콘을 눌러야 Process가 진행된다는 점입니다. UI가 좀.. 이상합니다.

위의 저 아이콘을 누르면 Preprocessor Preview에 결과물이 나옵니다.

4. Control Weight (제어 가중치)

Control Weight(제어 가중치)는 프롬프트와 ControlNet 사이에서 어느 쪽에 더 가중치를 둘 지에 대한 항목입니다. OpenPose를 예로 들자면 참조 이미지와 프롬프트 상의 자세가 서로 다른 경우에 차이를 자세가 변형되는 과정을 볼 수 있습니다.

1girl,hair with bangs,black long dress,orange background
원본 이미지
Control Weight : 0.0
Control Weight : 0.2
Control Weight : 0.4
Control Weight : 1.0
Control Weight : 2.0

마지막 2.0 weight를 주었을때는 옷 색깔이 다르게 나올 정도로 프롬프트를 임의로 해석하는군요..

5. ControlNet Step(제어단계)

Starting Control StepEnding Control Step은 시작단계와 마지막단계의 수치를 정하는 것입니다. 전체 Step을 30으로 설정했을 때 0.5~1로 지정하면 16~30단계를 ControlNet에 적용한다는 의미입니다.

위의 동일한 참조이미지를 가지고 Control Weight(제어가중치)를 1.0 으로 설정하고 Step의 차이를 비교해보겠습니다. (예시를 0~0.5 / 0.5~1.0 으로 보여드리려고 했는데 너무 다른 결과가 나와서 3단계로 나눠봤습니다.)

Control Step : 0.0 ~ 0.33
0.33 ~ 0.66
0.66 ~ 1.0

이렇게 확연한 차이를 보이는 만큼 Control Step 의 시작/끝점도 잘 조절해서 만들어야됩니다.

6. Control Mode

위의 Weight, Step 하고 비슷한 내용인데, Prompt와 ControlNet 중에 어떤 걸 더 중요시할 지를 설정하는 항목입니다.

7. Resize Mode

참조 이미지와 생성할 이미지의 이미지 비율이 다를 때 처리하는 방법을 정하는 옵션입니다. 위에서 Pixel Perfect 옵션을 켜두면 이 부분을 최적화해줄텐데 어떻게 동작하는지 한번 옵션별로 생성해보도록 하겠습니다.

원본 이미지는 위에서 사용한 1:1 비율로 하고 생성 이미지는 가로를 늘려서 768 x 512 로 세팅하고 만들어보겠습니다.

Just Resize 선택한 결과
Crop and Resize 선택한 결과
Resize and Fill

결과를 보면 알겠지만 ControlNet 결과가 Resize 되어 적용되면서 서로 다른 결과물을 만들어 냅니다.

  • Just Resize : 비율을 무시한 채 강제로 가로로 사이즈를 늘리다보니 팔다리가 뒤바뀔 정도로 문제가 발생합니다.
  • Crop and Resize : 결과값을 가로폭에 맞추어 확대하고, 남는 부분을 Crop 하는 원리라서 Pose 중에 중요한 Key Point가 없어질 수 있어서 동세가 완전 달라지기도 합니다.
  • Resize and Fill : 결과값이 다 보이도록 조정하고 남는 여백 부분을 임의로 생성하는 원리입니다. ControlNet 결과를 모두 사용하므로 피사체에는 영향을 주지 않습니다.

이렇게 컨트롤넷을 살펴보았는데요. 갑자기 이미지를 만들 때 제어할 수 있는 방법들을 소개해드리다 보니 깊이가 좀 없었던 것 같아서 다음 포스팅에서는 각 ControlNet 모델별로 어떻게 동작하는지, 어떻게 활용하면 좋은지를 자세히 알아보도록 하겠습니다.

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here