본문 바로가기
Stalbe Diffusion/Stalbe Diffusion 사용법 및 팁 정리

Stable Diffusion Web UI 사용해보기 (5) - ControlNet 사용해보기 (구체적인 자세 만들기)

by Daily Ideas 2023. 3. 22.
반응형

요즈음 가장 화제로 떠오르고 있는 WebUI 확장 기능 중 하나인, ControlNet 을 소개하고 이것의 사용법을 간략히 소개합니다.


ControlNet이란?


기본적으로, Web UI 에서의 컨트롤넷은 이미지를 뽑기 전에, 참고할 이미지를 사용해 출력에 제한을 거는 시스템입니다.

제공되는 여러 프리프로세서와 확장 기능을 이용해, 그림의 상태를 크게 제한함으로서 원하는 결과물을 출력하도록 유도할 수 있습니다.

(특히 자세, 특히 손모양)

더 자세히 알고싶다면..

더보기

 

DL-Convolution의-정의

 

[DL] Convolution의 정의

보통 Convolution이라고 사전에서 찾아보면 합성이라는 뜻이 많이 나온다. 그래서 CNN을 합성곱 신경망이라고 표현하는 곳이 많다. 왜 이걸 합성이라고 표현했을까? 사실 전자공학을 전공한 사람이

talkingaboutme.tistory.com

선행학습이 필요합니다.

 

ControlNet은 추가 조건을 추가하여 확산 모델을 제어하는 신경망 구조입니다.

신경망 블록의 가중치를 "잠긴" 복사본과 "훈련 가능한" 복사본으로 구분한 후,

원래 모델을 건드리지 않고 추가 학습된 내용을 얹어서 디코딩에 활용합니다.

여기에서 Zreo-convolution 을 활용해서 conv 레이어를 만듭니다.

FAQ(https://github.com/lllyasviel/ControlNet/blob/main/docs/faq.md)

위의 구조를 Stable Diffusion 에 활용하면 다음과 같이 표현됩니다.

다음과 같이, 인코딩 과정에서 원본 모델과 훈련 가능한 모델들을 분리하고, 디코딩 할때 이를 관여시켜 모델들을 변형시키지 않고 새로 학습된

(프리프로세서에 따라, 들어간 학습용 데이터에 따라 다른) 모델을 통해 디코딩을 하게 됩니다.

엄청 간단하게 요약하면,

AI가 그림을 그리기 전에

미리 이전 데이터 1장을 가지고 학습한 모델을 사용해서 미리 판을 깔아놓고,

그 위에 출력을 한다(?) 고 생각하시면 됩니다.

 

컨트롤넷은 어떻게 사용할까요?

더보기

https://github.com/Mikubill/sd-webui-controlnet - 확장 기능 Github 주소

 

확장기능 탭에 해당 주소를 넣고 설치 버튼

** 다만, 공유되는 링크를 받아 접속하신 클라이언트 사용자의 경우 설치를 할 수 없을 가능성이 높습니다.

(Web UI 는 Share 옵션을 켜서 실행할 경우 익스텐션의 추가 설치가 불가능하게 설정되어 있음)

** 사용하기 위해 필수적으로 아래 모델들을 다운받으셔야 합니다.

https://huggingface.co/lllyasviel/ControlNet/tree/main/models

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

다운받으신 모델은 다음 주소에 넣어주세요.

이후 UI 를 리로드하면 컨트롤넷이 설치됩니다.

 

 

컨트롤넷 사용하기 (기본)


컨트롤넷 확장을 펴보면, 다음과 같은 메뉴를 보실 수 있습니다.

ControlNet에서 가장 중요한 것은 역시 PreProcessor 와 Model 인데요,

컨트롤넷은 입력 데이터를 기반으로 결과물에 변형을 가하는 것이기 때문에,

반드시 특정 형식에 맞는 "데이터"가 필요합니다.

모델과 프리프로세서의 사용


Model 은 사용하고자 하는 컨트롤넷의 기능을 담당합니다.

Preprocessor 는 넣은 이미지에서 컨트롤넷의 기능 사용에 필요한 데이터를 뽑아낼 것인지,

넣은 이미지 자체를 데이터로 사용할 것인지를 결정합니다.

따라서 프리프로세서는 이럴 때 사용하는 것으로 체크하시면 됩니다.

Preprocessor None = 직접 생성한 뼈대, 뎁스맵 등의 이미지를 넣을 때

Preprocessor 설정 = 사진에서 뼈대, 뎁스맵 등을 추출할 때

=>생성 결과

다음과 같이 진행하면, 이런 식으로 결과물과,

기반 데이터 가 하나씩 나옵니다.

=>데이터 저장

프리프로세서를 사용해서 데이터를 추출하는 것은 시간이 오래 걸리므로,

만약 일단 데이터를 뽑았다면 다음에는 PreProcessor 를 None 으로 두고

데이터를 입력하여 다음에는 빠른 작업을 진행합시다.

모델의 종류


현재 Controlnet 에서 사용할 수 있는 모델의 종류는 다음과 같습니다.

아래에서는 모델의 종류와 간단한 프리뷰를 제공합니다.

OPEN POSE

더보기

Pose 설정방법 (사진/그림에서 뼈대 추출할 때)
=> 결과물
=> 인풋 모델에서 포즈 데이터를 추출하고, 해당 포즈를 기반으로 인물을 그립니다.


Pose 설정방법 (직접 만든 뼈대를 입력할 때)
=> 입력받은 포즈 모델로 사람을 만듭니다.

 

포즈 관련 확장기능


포즈는 유저들의 연구가 상당히 진행된 모델입니다.
위 포즈 데이터를 직접 만들기 위해, 유저들은 다양한 방법을 시도했고, 여러 가지 기능이 확장으로 준비되어 있습니다. (여기부터 컨트롤넷이 복잡해지기 시작합니다...)

3D Open pose Editor


https://github.com/fkunn1326/openpose-editor

• 3D 모델을 직접 포징해서 사용할 수 있게 합니다.
• 멀티 컨트롤넷 (2개 이상의 컨트롤넷을 적용) 을 사용하고 계실 경우, 아래와 같이 손발 데이터도 준비해줍니다.

3D Model Loader



아예 직접 모델을 로드하는 방법도 있습니다.
https://github.com/jtydhr88/sd-3dmodel-loader

모델의 스크린샷을 직접 컨트롤넷에 이미지로 넣을 수 있게 지원합니다..

 

 


Canny

더보기

Canny 는 기본적으로 Input 이미지의 선을 따서 그 안의 그림과 색 등을 채웁니다.
따라서 데이터라고 할 만한 것이 없으니 반드시 PreProcessor 를 사용하게 됩니다.
100% 선만 따서 사용하므로 구체적으로 어떤 이미지를 원하는지 프롬프트를 자세하게 작성해야 AI 가 선이 어떤 거구나 하고 이해할 수 있습니다.
따라서 예시 프롬프트를 첨부합니다.

masterpiece, best quality, (colorful:1.4), park, sky, sidelighting, 1 girl,  red dress,
lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name

=> 결과물


Depth

더보기

Depth 는 이미지를 기반으로 뎁스맵을 따줍니다.

사진에서 훨씬 더 유효하며, 2D 이미지의 경우 (사람이 다 표현할 수 없는 부분이 있으므로) 문제가 발생하기 쉬운 편입니다.

 

관련 확장기능 - Depth 로 손 모양 고쳐보기

 

Depth Library


Pose 와 함께 가장 많이 쓰는 컨트롤넷 기능 중 하나라고 볼 수 있습니다.

주로 손을 고치는데 사용하며, Depth 다양한 Depth 맵을 통해 그림의 일부를 고칠 때 사용합니다.

예를 들면 다음과 같습니다.

1. 원하는 이미지를 중간에 넣고 Add를 클릭합니다.

2. Depth Library 에서 원하는 모양을 골라 Add를 클릭해 우측 결과물에 넣고, 두 그림의 위치와 크기를 조정해 원하는 모형을 배치합니다.

이렇게 수정 후 Send To Controlent 으로 보냅니다.

일단 대충 만든 자료...

=> 결과물

손 모양이 Depth 맵에 맞추어 일부 수정된 걸 확인할 수 있습니다. (제가 잘 못해서 ㅠㅠ 퀄리티가 좀 낮네요)


MSLD

더보기
  • 직선으로 따줍니다.
  • 인테리어나 빌딩을 그리는데 특화되어 있습니다.

Normal Map

더보기

Normal map 을 뽑아줍니다.

  • 깊이를 꽤 잘 파악하는 것을 알 수 있습니다.
  • Depth 와 비슷하게 사진을 더 잘 인식합니다.

Scribble

더보기

콘트라스트(?)데이터를 뽑아 기반으로 그림을 그립니다.

  • Canny 와 비슷한 효과를 기대할 수 있지만 방식이 다르므로 결과물이 조금 다를 수 있습니다.
  • Depth 데이터를 가지고 있지 않으므로 자세가 약간 달라질 수 있습니다.

Segmentation

더보기

색깔로 각 그림의 위치를 구분하여 작업을 합니다.

기능을 명확히 보여드리기 위해 외부 자료를 가져왔습니다.

출처 : https://arca.live/b/aiart/70614008

Seg 데이터를 직접 그려서 넣었으므로 여기서는 None 을 씁니다.


멀티 컨트롤넷 사용해보기


위의 컨트롤넷을 조합 사용하는 방법입니다.

컨트롤넷을 2개 이상 사용하여 좀더 다양한 제한을 줄 수 있습니다.

외부 자료 출처 : https://arca.live/b/aiart/70614008

반응형

댓글