지난 포스팅에서 컨트롤넷에 대해 설치 및 사용방법에 대해서 알아보았습니다. 오늘은 지난번 포스팅에서 언급만 하고 설명하지 못했던 컨트롤넷의 여러가지 모델에 대해서 자세히 알아보고 어느 곳에서 활용할 수 있을지도 살펴보도록 하겠습니다.

OpenPose

컨트롤넷에서 가장 많이 사용된다고 할 수도 있는 OpenPose는 사람의 머리(얼굴), 어깨, 손, 다리 등의 위치를 포인트로 감지합니다. 사람의 생김새나 의상, 배경 등은 배제하고 포즈를 유사하게 재구성할때 아주 유용합니다.

OpenPose의 모든 전처리기(Pre-processer)는 OpenPose 모델과 함께 사용합니다. 앞선 포스팅에서 제대로 설치하셨다면 아래와 같은 전처리기를 확인할 수 있을 겁니다.

전처리기는 인식률과 인식범위의 차이가 있는데 이름에서 표현되는 것 같이 아래와 같은 특징이 있습니다.

  • OpenPose : 눈, 코, 목, 어깨, 팔꿈치, 손목, 무릎, 발목
  • OpenPose_face : OpenPose + 얼굴 디테일
  • OpenPose_faceonly : 얼굴 디테일
  • OpenPose_full : 얼굴 디테일, 손, 손가락을 포함한 OpenPose 전체
  • OpenPose_ hand : OpenPose + 손, 손가락

1. OpenPose

눈, 코, 목, 어깨, 팔꿈치, 손목, 무릎, 발목의 위치를 추출하는 기본 전처리기입니다.

2. OpenPose_face

위의 OpenPose의 기능에 추가적으로 얼굴의 디테일을 추출합니다. 동세 뿐만 아니라 표정을 재구성할때 좋습니다.

3. OpenPose_faceonly

얼굴만 추출하고 다른 부위의 포인트는 추출하지 않을때 사용합니다.

4. OpenPose_hand

손과 손가락의 디테일까지 추출합니다.

5. OpenPose_full

OpenPose의 얼굴과 손의 모든 디테일을 추출합니다.

Canny (캐니)

캐니는 원본 이미지의 구도를 유지하는데 좋습니다. 이미지의 윤곽선을 추출하는 기능을 가지고 있습니다. ControlNet 데이터를 통해 생성되는 이미지는 윤곽선을 따라 만들어집니다.

Depth (뎁스)

Depth(깊이) 전처리기는 참조이미지에서 Depth 정보를 추출합니다.

위와 같이 4가지의 전처리기가 있습니다. Depth의 정밀도와 범위의 차이가 있습니다.

  • midas : 고전적인 Depth 추출방식.
  • zoe : midas와 leres의 중간 단계
  • leres : 더 디테일하고 배경까지 범위에 포함됨.
  • leres++ : leres보다 더 디테일합니다.
Original Image
Depth-Midas
Depth-Zoe
Depth-Leres
Depth-Leres++
midas 결과물
zoe 결과물
leres 결과물
leres++ 결과물

Line Art (라인아트)

캐니와 비슷하게 이미지의 윤곽선을 만들어줍니다. 윤곽선의 스타일에 따라 여러 종류가 제공되고 있고 선의 굵기나 디테일이 다릅니다. 이번엔 모델을 바꿔서 애니메이션 스타일로 결과물을 만들어보겠습니다.

단일 모델만 예를 들었더니 차이를 잘 못 느끼겠어서 실사풍과 애니풍 2가지로 보여드리도록 하겠습니다.

original image by pexels (https://www.pexels.com/ko-kr/photo/6657433)

1. Lineart_standard (from white bg & black line)

2. Lineart_anime

애니메이션 스타일

3. Lineart_anime_denoise

디테일이 더 적고 선이 굵은 스타일의 선입니다. 형태의 변화가 큽니다.

4. Lineart_realistic

사실적인 스타일입니다.

5. Lineart_coarse

좀 더 굵은 선의 사실적인 스타일입니다.

6. Lineart_Invert (from white bg & black line)

MLSD

Mobile Line Segment Detection의 약자로 직선을 추출합니다. 인테리어나 건물, 거리 풍경과 같이 직선 가장자리가 있는 윤곽선을 추출하는데 좋습니다. 참조이미지의 곡선은 제외됩니다.

위의 참조이미지를 그대로 사용했으나, 결과물이 너무 달라서 다른 참조이미지도 한번 해봤으나.. 결과물이 예상치 못하게 나옵니다.

참조이미지
결과물

NormalMap (노말맵)

2D이미지를 3D화해서 각 표면의 방향을 정하는 방식입니다. 3D 모델링에서 활용하는 매핑방식 중에 하나인데, 각 픽셀이 놓인 표면의 방향성을 지정해서 피사체를 배경에서 분리하는데 좋습니다. Depth 와도 유사한 부분이 있습니다.

NormalMap – Midas
NormalMap – Bae
Midas 결과물
Bae 결과물

Scribbles (낙서)

단어 그대로 낙서한 듯한 참조이미지로 바꿔줍니다. 구도는 유지되지만 체크포인트 모델의 스타일을 많이 따라가는 경향을 보입니다.

Pidinet

Pixel Difference Network의 약자로 곡선과 직선 윤곽선을 감지하는데, HED와 비슷하지만 디테일이 적습니다.

scribble_pidinet
orangemix aom3a1b 모델

HED

Holistically-Nested Edge Detection의 약자로 윤곽선을 추출해줍니다. 이미지의 색을 재구성하고 스타일을 바꾸는데 좋다고 합니다.

XDog

Extended Difference of Gaussian의 약자로 이것도 윤곽선 추출방식입니다. Threshold(임계값)을 조정해서 디테일 수준을 조절할 수 있는데, 수치값에 따라 의도치 않은 결과물이 나오기도 합니다.

Threshold 기본값(32) 일때

threshold : 32

Threshold 16일때

Threshold : 16

Threshold 64 일때

Threshold : 64

Tile/Blur

Resample 모델로 이미지의 디테일을 살리는데 사용하면 좋습니다. Upscaler와 함께 사용하면 좋은데, 오래된 사진이나 픽셀이 깨지는 저해상도 이미지를 복원하는데 활용할 수 있습니다.

프린세스메이커2 원본 이미지
스트리트파이터 춘리

Reference (레퍼런스)

ControlNet 1.1에 새로 들어온 전처리기입니다. 참조이미지와 유사한 스타일을 가진 이미지를 생성할 수 있습니다. 결과물은 참조 이미지 보다는 모델과 프롬프트의 영향도가 높습니다.

참조 이미지와 유사한 느낌이나 오브젝트를 뽑고 싶을때 다양한 방법들이 나왔는데, 딱 만족스러운 결과를 얻기가 어렵습니다. 레퍼런스 전처리기도 비슷한 목적으로 나온 방법입니다.

  • Reference adain : Style transfer via Adaptive Instance Normalization
  • Reference only : 참조이미지를 직접 attention layer에 연결함
  • Reference adain + attn : 위 2개를 합침
a woman in a futuristic suit and lights on her face and chest, Eve Ryder, cyborg, cyberpunk art, retrofuturism
원본이미지
reference_only
reference_adain
reference_adain+attn

참조이미지는 orangemix (anime style)을 사용하고 결과물은 majicmixRealistic 를 사용했더니 모델과 프롬프트의 영향을 더 많이 받는 걸 알 수 있습니다. 아래는 프롬프트를 제거하고 모델만으로 만든 결과물입니다.

reference_only
reference_adain
reference_adain+attn

이번 포스팅에서는 Stable Diffusion의 대표 ControlNet인 OpenPose, Canny, Depth, LineArt, MLSD, NormalMaps, Scribbles, Reference 에 대해서 알아보았습니다. 아직도 설명못한 전처리기가 있는데요.

나머지 Segmentation, Shuffle, T2I Adapter, IP-Adapter, ControlNet Inpaint 는 다음 포스팅에서 알아보도록 하겠습니다. 샘플을 여러 형태로 만들다보니 시간이 오래걸려서 2편으로 나눠서 포스팅 하게 되었네요.

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here