AI 이미지/AUTOMATIC1111

Stable Diffusion - 콘트롤넷(ControlNet) 1.1 사용방법(2)

하늘이푸른오늘 2023. 7. 5. 11:25

Stable Diffusion - photo of a young man, wearing glasses, sitting in museum, sculptures, by Rembrandt Harmenszoon van Rijn
Stable Diffusion - photo of a young man, wearing glasses, sitting in museum, sculptures, by Rembrandt Harmenszoon van Rijn

(이 글은 ControlNet 1.1의 변경 내용을 포함하여 많은 내용을 수정하여 재발행한 글입니다)

ControlNet이란 인물이나 배경 등의 배치, 형상, 자세 등을 잡아내어, 이를 바탕으로 이미지를 생성해주는 Stable Diffusion 모델의 일부입니다. 이 글에서는 지난 글에 이어 ControlNet에 대한 좀더 자세한 정보를 알아보겠습니다. 

이 글의 목차는 다음과 같습니다.

ControlNet 모델 요약

ControlNet 모델은 매우 다양합니다.  사실 너무 많다보니, 어떤 것이 적당한지 알기가 힘든 편입니다. 아래는 제가 나름대로 정리한 결과입니다. 대략적인 특징과 전처리기의 종류, 그리고 대표적인 전처리 결과과 적용결과를 표로 정리했습니다. 제목을 누르면 해당 글로 이동하니 참고하세요. 

종류 및 특징 전처리 결과
Canny
- 곡선 및 직선 외곽선 추출
- 노이즈에 취약
- 형태를 완전히 모사함, 무늬까지 복제
Depth
- 전반적으로 형태를 잘 복제함
- 무늬는 달라짐
- midas, leres, leres++, zoe 
InPaint
- img2img의 inpaint사용시, 훨씬 전체적인 이미지와 일관성이 높도록 생성해줌
   
IP-adapter
- Image Prompt
- 이미지를 프롬프트로 사용
- 이미지의 전반적인 분위를 살려냄
   
IP2P
- InstructPix2Pix
- 명령어를 입력해 이미지를 편집
- turn him into a cyborg 프롬프트를 사용
Line art
- 외곽선을 감지하여 그림 형태로 변환
- Line art anime, Line art anime denoise, Line art coarse, Line art realistic, Line art standard
mlsd
- 빠른 직선 감지
- 실내, 빌딩, 거리 등 외곽선 감지에 유리
Normal Map(수직맵)
- 3차원 형상 추출
- Normal Bae, Nomal Midas
OpenPose
- 인간의 자세만 추출. 
- 얼굴과 손을 처리해주는 전처리기도 있음
- OpenPose, OpenPose_face, OpenPose_hand, OpenPose_faceonly, OpenPose_full
Reference
- 참조 이미지와 유사한 이미지 생성
- 특히 AI 이미지를 생성한 후, 동일한 모델을 사용하면 비슷한 얼굴의 다른 모습을 생성하기 쉬움
- reference adain, reference adain+attn, reference only
Scribble
- 이미지를 손으로 그린 낙서 스타일로 바꿔줌.
- scribble hed, scribble pidinet, scribble xdog
Segmentation(Seg)
- 대상의 종류에 따라 분류하여 color map을 만들고, 동일한 종류를 배치함
-  동일한 유형이 유지되는 특징
- seg_ofade20k, seg_ofcoco, seg_uface20k
Soft Edge
- 곡선 및 직선 외곽선 감지
- Softedge hed, Softedge hedsafe, Softedge pidinet, Softedge pidisafe
Suffle
- 입력된 이미지를 섞어버림
- 형태는 유지되지 않고, 색감만 사용함

Tile resample
- 이미지에 상세한 디테일 추가
- AI 확대도구와 함께 사용시 유용
   
Color grid T2I adapter
- 64배로 축소했다가 확대하여 color 그리드 생성
- 이 그리드를 해당지역 평균 색감으로 사용
- Suffle처럼 색감만 사용함

콘트롤넷 모델의 종류

콘트롤넷 전처리기와 모델 개요

콘트롤넷(ControlNet)을 사용하기 위해서는 제일 먼저 적절한 전처리기와 이에 맞는 모델을 선택해야 합니다. 예전에는 전처리기(Preprocessor)와 모델을 따로따로 선택해야 했습니다. 하지만, 전처리가와 모델을 서로 관계없는 것을 선택할 경우 이상한 결과가 나올 수 있었습니다. 그런데 얼마전부터 아래 중간에 보이는 Control Type 영역이 생겨서 여기를 클릭하면 바로 아래쪽에 관계된 전처리기와 모델이 자동 선택되도록 바꼈습니다. 그래도 좀 더 안심하고 사용할 수 있게 되었습니다. 

이렇게 ControlType 영역에서 원하는 모델(이 그림에서는 Depth)를 선택하더라도 전처리기는 여러가지 종류 중 하나를 선택할 수 있습니다. 원하는 것을 선택한 후, 바로 오른쪽에 있는 💥 모양의 단추[Run preprocess]가 있는데, 이걸 누르면 전처리기만 작동되어 입력한 그림 오른쪽에 전처리 결과가 표시됩니다. 따라서 전처리기마다 어떠한 특성이 있는지를 직접 시험해 볼 수 있습니다.

또한 Pixel Perfect 는 전처리기의 해상도를 결정하는 옵션으로서, 이를 선택하게 되면, text-to-image에서 설정한 이미지의 크기를 ControlNet의 해상도로 사용한다는 뜻입니다. 그냥 항상 켜두어도 될 것 같습니다.

여기에서는 Stable Diffusion의 다양한 ControlNet 모델/전처리기들을 설명합니다. 사례는 아래의 그림을 사용하겠습니다.

ControlNet 사용 예에서 사용할 이미지 - 박은빈
ControlNet 사용 예에서 사용할 이미지 - 박은빈

Canny 모델

캐니는 매우 오래된 범용 외곽선 감지기입니다. 곡선과 직선 외곽선을 모두 잘 추출합니다. 하지만 노이즈에 취약할 수도 있습니다. 

Control Type에서 Canny를 선택하면, 전처리기는 canny와 invert(from white bg & blackline) 두가지가 나옵니다. 모델은 control_xxx_canny 하나만 존재합니다.

ControlNet - Canny 모
ControlNet - Canny 모

색만 반전시키는 것이므로 알고리듬 자체는 한 가지라고 생각해도 됩니다. 아래는 Canny로 전처리한 결과입니다.

ControlNet - Canny 전처리기
ControlNet - Canny 전처리기

아래가 적용 결과입니다. 얼굴 선까지 그대로 사용해서 생성되는 얼굴이 대부분 비슷합니다. 머리카락의 형태도 비슷하고, 손가락 방향까지 그대로 복제했습니다. 옷의 색이 바뀌더라도 무늬는 그대로고요.

프롬프트 :  a beautiful woman sitting at a table, brown eyes, looking at me, atmospheric cafe,  
부정적 프롬프트 : ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, b&w, nude, nsfw, EasyNegative

Depth 모델

깊이 맵은 이미지에서 촬영대상이 얼마나 멀리있는지 알아보는데 유용합니다. 하얀색일수록 카메라에 가깝고, 어두운 색일수록 먼 곳에 있음을 나타냅니다. 아래는 Control Type에서 Depth를 선택했을 때의 모습입니다. depth_midas가 기본 전처리기로 잡힙니다.

ControlNet - Depth 모델
ControlNet - Depth 모델

Depth 모델에는 다음과 같이 전처리기가 4가지 종류가 있습니다.

  • Depth Midas : 전통적인 Depth 추정기. 공식 v2 depth-to-image모델에도 사용된다고합니다.
  • Depth Leres : 좀더 자세하며, 이 때문에 배경도 비슷하게 그리는 경향이 있습니다.
  • Depth Leres++ : Depth Leres 보다도 더 자세합니다.
  • Zoe :  Midas 와  Leres의 중간쯤입니다.

이 네가지 Depth 전처리기를 비교해 보겠습니다. 아래는 참조 이미지입니다.

ControlNet Depth 전처리기 비교를 위한 참조 이미지
ControlNet Depth 전처리기 비교를 위한 참조 이미지

아래는 여러가지 Preprocessor로 생성한 Depth map입니다. midas 는 대략적인 윤곽만 감지하는데 비해 leres++은 눈 코 입 등 세밀한 부분까지 감지하네요.

midas leres
leres++ zoe

아래는 depth_zoe 전처리기를 적용한 결과입니다. 머리카락이 모두 살아 있습니다. Canny 외곽선 감지기와는 달리 옷의 질감 형태 등은 완전히 달라졌구요. 오른쪽 사진의 경우, 어깨 보호대?가 옷깃으로 살아난 부분이 흥미롭네요. 

ControlNet Inpainting

ControlNet Inpainting 을 사용하면 인페인트에서 높은 노이즈 강도를 사용하여 전체 사진의 일관성을 떨어뜨리지 않으면서도 큰 변화를 생성할 수 있습니다. 

여기에서는 사실적 인물 사진을 생성하는 방법에서 사용했던 프롬프트를 사용해 이미지를 생성하고, 이를 변형하는 예를 들어 콘트롤넷 Inpainting 모델을 설명하겠습니다. 환경은 아래와 같습니다.

모델: HenMixReal v4.0
프롬프트: photo of young woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores
부정적 프롬프트: ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, b&w, nude, nsfw, EasyNegative

아래가 이 과정을 통해 생성한 이미지입니다. 이 이미지를 인페인트를 사용해 얼굴과 왼손을 다시 생성하려고 합니다.

Stable Diffusion -   photo of young woman, highlight hair, sitting outside restaurant, wearing dress
Stable Diffusion -   photo of young woman, highlight hair, sitting outside restaurant, wearing dress

얼굴을 인페인트할 때 잡음 제거 강도(denoising strength)를 높일 경우(>0.4), 전체적으로 이상한 결과가 발생할 가능성이 높습니다. 아래는 잡음 제거 강도를 1로 두고 인페인트를 실시한 결과입니다. (그런데 실제로 해보니 나쁜 이미지가 그다지 많이 안나오네요.)

잡음제거 강도를 1로 두고 인페인트한 결과
잡음제거 강도를 1로 두고 인페인트한 결과

이럴 때 ControlNet Inpainting 모델을 사용하면 됩니다.

  1. 이미지를 생성할 때 사용했던 모델을 사용하는 것이 가장 좋습니다. txt2img 페이지에서 이미지를 생성한 후 이미지 결과물 아래에 있는 [Send to Inpaint]를 클릭해서 Img2Img 페이지의 Inpaint 탭으로 보냅니다.
  2. 브러시 도구를 이용해 재 생성하고자 하는 구역을 마스킹 처리합니다. 잘 모르시겠으면 인페인트 가이드를 참고하세요.
    인페인트 마스크
    인페인트 마스크
  3. Inpaint area 를 Only masked 로 둡니다.(Whole picture도 괜찮습니다.)
  4. 잡음제거강도(denoising strength)를 1로 둡니다. (일반적으로 ControlNet 을 사용하지 않을 경우엔 이렇게 높은 값을 사용하면 안됩니다)
  5. ControlNet  구역을 펼치고 아래와 같이 설정합니다. (캔버스에는 원래 이미지가 자동으로 들어가 있습니다)
    Enable: Yes
    전처리기(Preprocessor): Inpainting_global_harmonious
    모델: controlnet_xxxx_inpaint
    ControlNet 인페인트 설정
    ControlNet 인페인트 설정
  6. 이제 [Generate] 버튼을 누르고 이미지를 생성합니다.

아래가 그 결과입니다. 최대 잡음 강도를 1로 설정한 상태에서도 전체 이미지의 일관성을 해치지 않는 이미지가 생성되었습니다. 일단 그냥 인페인트했을 때 보다 나은 것 같습니다. 

ControlNet Inpaint를 적용한 결과
ControlNet Inpaint를 적용한 결과

제가 예전에 여러번 인페인트할 때마다 느꼈던 건데, 원래 이미지와 잘 어울리지 않는 모습으로 생성되는 경우가 많았었거든요. 이 방법을 적용하니 나쁜 이미지 생성비율이 훨씬 낮아진 것 같습니다. 12장을 뽑았는데, 그중에서 이상하다 싶은게 하나도 없었으니까요. 어쨌든 앞으로 인페인트를 할 때에는 이 방법을 사용해야겠습니다.

현재 inpaint용 전처리기는 아래와 같이 3가지가 존재합니다.

  • inpaint_global_harmonious: 잡음제거 강도를 높여도 전반적인 일관성을 향상시켜줍니다. 
  • inpaint_only: 마스킹하지 않은 구역은 변경되지 않습니다. AUTOMATIC1111에서는 inpaint_global_harmonious와 동일합니다.
  • inpaint_only+lama: 이미지를 lama 모델로 처리합니다. 물체를 제거할 때 보다 깨끗한 결과물이 생성됩니다.

IP-adapter

이미지 프롬프트 어댑터는 이미지를 프롬프트로 사용할 수 있는 ControlNet 모델입니다. 즉, 입력한 이미지와 유사한 분위기의 이미지를 만들어줍니다. 자세한 내용은 이 논문을 읽어보시기 바랍니다. 

아래는 참조 이미지구요

아래 왼쪽은 ControlNet을 사용하지 않았을 경우, 오른쪽은 IP-Adapter를 사용했을 경우입니다.

자세한 설정 및 사용방법은 이 글을 참고하세요.

IP2P

이 ControlNet 모델은 원래 InstructPix2Pix라고 불렀는데, ip2p로 이름이 변경되었습니다. ip2p는 instruction based image editing Instructions, 즉 텍스트 명령을 입력해 이미지를 편집하는 방식입니다. 자세한 내용은 여기를 읽어보시기 바랍니다. 

이 모델은 아래에서 보는 것처럼 전처리기가 존재하지 않습니다. 그냥 ip2p를 선택하면 모델이 결정됩니다. 

ControlNet Shuffle 모델
ControlNet Shuffle 모델

사용법은 간단합니다. 원본 사진을 ControlNet 캔버스에 올리고, 바꾸고자 하는 내용을 프롬프트로 입력해준 뒤 [Generate]를 눌러주면 됩니다. 예를 들어 아래의 다비드 상을 바꾸려고 하면, 아래와 같이 ControlNet을 설정한 후...

ControlNet IP2P 설정
ControlNet IP2P 설정

텍스트 프롬프트에 "turn him into a cyborg"라고 입력하여 실행시키면 아래와 같이 생성됩니다.

사실 별로 마음에 안듭니다. 제가 원한 것은 아래 사진에서 나오는 것처럼 변형할 수 있으면 재미있겠다... 적어도 배경은 바뀌지 않고 다비드 상만 바뀌리라 생각하며 시작했습니다만, 위에서 나온 것처럼 거의 모든 이미지가 완전히 바뀌어버리면 이 콘트롤넷 모델은 의미가 없으니까요.

다비드 상을 사이보그로
다비드 상을 사이보그로

마찬가지로 이 글에 있는 예제를 몇가지 실행시켜봤는데, 될 때도 있지만, 심지어 똑같은 사진을 사용핼 때도 완전히 다른 그림을 그리는 경우가 너무나 많아서 아무래도 실용적으로 쓰기엔 문제가 있다... 싶네요. 

LineArt

 Line Art는 이미지의 외곽선을 감지하여, 간단한 그림으로 변환합니다. Line Art 전처리기는 아래와 같이 5가지 종류가 있습니다.

ControlNet Line Art 모델
ControlNet Line Art 모델

  • Line art anime: 애니 스타일의 선

ControlNet - Line art anime 전처리기
ControlNet - Line art anime 전처리기

  • Line art anime denoise: 애니 스타일인데 약간 세밀함은 떨어짐

ControlNet - Line art anime denoise 전처리기
ControlNet - Line art anime denoise 전처리기

  • Line art coarse: 사실적 스타일이되 가중치를 더 많이 부여

ControlNet - Line art coarse 전처리기
ControlNet - Line art coarse 전처리기

  • Line art realistic: 사실적 스타일의 선

ControlNet - Line art realistic 전처리기
ControlNet - Line art realistic 전처리기

  • Line art standard : 일반적인 스타일의 선

ControlNet - Line art standard 전처리기
ControlNet - Line art standard 전처리기

아래에서 맨 위 2개는 Line art anime 전처리기를 사용하고, "a woman retrofuturism"으로 생성한 이미지입니다. 그런데 보시는 것처럼 선을 anime 스타일로 했다고 이미지가 애니 스타일로 나오는 건 아닙니다. 왜 anime 스타일의 선이라고 하는지 잘 모르겠네요. 그래서 중간 2개는 "2D anime of a woman retrofuturism"로 프롬프트를 변경해서 생성한 결과입니다. 이러니까 애니 스타일이 확실히 살긴 삽니다.

마지막 두개는 Line art realistic 전처리기를 사용하고 "2D anime of a woman retrofuturism"로 프롬프트로 생성한 결과입니다. 제가 그림하는 사람이 아니다보니 선자체가 애니스타일인지 사실적 스타일인지 구분은 안되는데... 어쨌든요. ㅠ

MLSD

M-LSD(Mobile Line Segment Dettection, 모바일 선분 감지)은 빠른 직선 감지기입니다. 인테리어 디자인, 빌딩, 거리, 액자 등과 같이 직선으로 구성된 외곽선을 감지하는 데 유용합니다. 곡선은 무시됩니다.

전처리기는 아래와 같이 두 종류가 있지만, 배경색만 바꾸는 거라 한가지로 보시면 됩니다.

ControlNet MLSD 모델
ControlNet MLSD 모델

전처리기로는 mlsd, 모델은 control_v11p_sd15_mlsd를 선택했습니다. 여기에서는 아래 이미지를 이용했습니다. 우측 결과를 보시면 아시겠지만, 사람의 외곽선은 거의 감지되지 않고, 배경에 있는 기둥들만 감지되었습니다.

아래는 이 ControlNet을 적용한 결과입니다. 프롬프트는 아래와 같습니다.

프롬프트 : half-body, a beautiful woman, brown eyes, sitting beside windows, smile, small breast
부정적 프롬프트 : disfigured, ugly, bad, immature, b&w

두 사진 모두 나쁜 건 아닌데, 이 자세가 프롬프트 덕분인지 아니면 ControlNet 덕분인지는 잘 모르곘네요. 그런데 한가지 확실한 것은 뒤쪽 창문선은 정말 잘 나온 듯 싶네요. 

인테리어 사진에 좋다고 하니 한번 적용해 보았습니다. 왼쪽 위가 원본 사진, 아래 두 이미지는 이 ControlNet을 적용하여 생성한 이미지입니다. mlsd 를 적용하니 직선은 확실하게 감지해 냅니다. 의자 손잡이는 날라갔고, 천장 등도 전혀 감지 못했지만, 직선 부분은 거의 모두 잡아냈네요. 

프롬프트는 "a photo of a living room, large glass doors, sofa, ring shape ceiling lights, TV and speaker, flower pot, photorealistic, HDR, UHD" 로 넣어주었는데... 보시는 것처럼 링 형태의 천장 등은 없어졌지만, 다른 부분은 모두 적절히 살려냈내요. 전문가의 디자인이라고 해도 손색이 없을 듯 싶습니다.

Normal Map

Normal Map(수직맵)이란, 픽셀이 위치한 곳의 수직방향 벡터를 보여주는 방식으로, 일반적으로 가상 텍스처 또는 3D 모델의 깊이를 표현하는 데 사용됩니다. 픽셀의 RGB 값에 색깔 대신 벡터 값이 저장됩니다. 물론 우리는 2D 이미지만을 사용하므로, 깊이 맵을 사용해서 수직 맵이 만들어집니다.

Normal Map 의 전처리기는 아래 그림과 같이 Normal Midas와 Normal Bae등 두가지가 존재합니다.

ControlNet - Normal Map모델
ControlNet - Normal Map모델

  • Normal Bae: Bae 등이 제안한 normal uncertainty method를 사용하여 수직 값을 예측합니다.
  • Normap Midas: Midas 깊이 지도로 부터 수직 값을 예측합니다.

아래는 참조 이미지입니다.

ControlNet Depth Map  참조 이미지
ControlNet Depth Map  참조 이미지

여기에서는 알렉스 모건 사진으로 테스트해 보았습니다. 수직 맵 관련 전처리기는 normal_bae 와 normalmidas가 있는데, 좌측이 normal_bae, 우측이 normal_midas입니다. 그런데 우측은 수직맵이라기 보다는... 뭔가 이상해 보여서 좌측 normal_bae를 사용했고, 모델은 control_v11p_sd15_normalbae를 사용했습니다.

normal_bae normal midas

아래가 그 결과입니다. 대략 괜찮게 나온 듯 싶습니다.

OpenPose

OpenPose는 사람의 머리, 어깨, 손의 위치와 같은 핵심적인 점들을 감지하고, 이를 사용하여 이미지를 생성하는 모델로서, 기본적이면서도 가장 중요한 모델입니다. 이 모델은 옷이나 헤어스타일, 배경 등은 완전히 무시하고 오로지 사람의 자세만 복사할 때 유용합니다. 제가 개인적으로 제일 마음에 드는 모델이 이 Openpose입니다. 자세만 정확하게 캐치해서 다른 것은 자유롭게 그려주니, 다른 모델에 비해 창조성?이 가장 높은 것 같아서입니다. 

OpenPose 모델에는 아래와 같이 여러가지 전처리기가 존재합니다.

OpenPose 모델
OpenPose 모델

  • OpenPose : 눈, 코, 목, 어깨, 손목, 팔꿈치, 무릎, 발 등
  • OpenPose_face: OpenPose + 자세한 얼굴
  • OpenPose_hand: OpenPose + 손과 손가락
  • OpenPose_faceonly: 자세한 얼굴 만
  • OpenPose_full: 위의 모든 사항
  • dw_openPose_full: openpose_full의 개선버전 

OpenPose 전처리기

OpenPose 모델의 가장 기본적인 전처리기로서, 눈, 코, 목, 어깨, 손목, 팔꿈치, 무릎, 발 등의 위치를 감지합니다.

OpenPose 전처리기
OpenPose 전처리기

아래는 적용 결과입니다. 보시는 것처럼 자세는 잘 복사하였지만, 머리카락이나 복장 등은 원본 이미지와는 완전히 다른 이미지가 생성되었습니다. 

프롬프트 :  a beautiful woman sitting at a table, brown eyes, looking at me, atmospheric cafe,  
부정적 프롬프트 : ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, b&w, watermark, EasyNegative

OpenPose_face 전처리기

OpenPose_face 전처리기는 OpenPose 전처리기에서 감지하는 것에 다하여, 자세한 얼굴 요소를 감지합니다. 이 모델은 얼굴의 표정을 복사하는 데 유용합니다.

OpenPose_face 전처리기
OpenPose_face 전처리기

OpenPose_faceonly 전처리기

이 전처리기는 다른 핵심 점은 무시하고 얼굴만 감지합니다. 얼굴만 복사할 때 유용합니다.

아래는 동일한 프롬프트 "a beautiful woman sitting at a table, brown eyes, looking at me, atmospheric cafe"를 적용한 결과입니다. 얼굴 위치는 거의 동일하며, 표정도 비슷한 편입니다. 자세는 원본과 아무런 관련 없이 생성되었네요.

아래는 생성된 12장의 이미지를 모두 사용해서 움짤로 만든 결과입니다. 얼굴은 모두 정확히 동일한 자리에 있을 뿐 아니라, 거의 비슷하고 웃는 표정도 거의 일치하는 것을 볼 수 있습니다.

OpenPose_hand 전처리

OpenPose_hand 전처리기는 눈, 코, 목, 어깨, 손목, 팔꿈치, 무릎, 발 등의 핵심점 외에 손과 손가락을 세밀하게 감지하는 모델입니다. 

OpenPose_hand 전처리
OpenPose_hand 전처리

아래는 동일한 프롬프트 "half-body, a beautiful woman, brown eyes, running"를 실행해 본 예입니다. 손을 표현한 자세는 잘 표현이 되었습니다. 다만, 원본에서는 깍지를 꼈는데, 전처리기가 이를 제대로 반영하지 못한 결과 오른손만 잘 표현되었네요(위의 오른쪽을 보시면 오른손 손가락만 표현이 되어 있습니다) 

그리고 얼굴을 보시면 웃는 모습이 사라지고 무표정한 모습이 되었습니다. 이는 얼굴은 위치만 잡고 세밀한 디테일은 감지하지 않은 결과입니다.

OpenPose_full 전처리기

이 전처리기는 몸체와 얼굴, 손 등 모든 핵심점을 감지하는 전처리기 입니다. 예제는 생략합니다.

OpenPose_full 전처리
OpenPose_full 전처리

dw_openpose_full

DW_Pose 는 Effective Whole-body Pose Estimation with Two-stages Distillation이라는 논문을 기초로 한 새로운 자세 감지 알고리즘입니다. 아래에서 보시는 바와 같이, 대체적으로 openpose_full과 비슷한 기능성능이 더 좋습니다. 따라서 openpose_full 대신 dw_openpose_full을 사용하는 것이 좋습니다.(dw_openpose_full이 안보이면 controlnet 확장을 업데이트 하세요)

참조 이미지
원본 Openpose_full DW Openpose_full

Reference

레퍼펀스(Reference) 모델은 1.1에서 새로 등장한 모델로서, 참조 이미지와 유사한 이미지를 생성할 수 있도록 해줍니다. 이미지는 프롬프트와 스테이블 디퓨전 모델에 의해서 영향을 받습니다. 

레퍼런스 모델의 경우, 전처리기와 콘트롤 모델이 구분되지 않고, 전처리기(Preprocessor)만 존재하는 점이 다른 콘트롤넷 모델과 차이가 있습니다. 아래와 같이 제어 유형에서 reference를 선택하면 모델 드롭다운은 감춰집니다.

ControlNet Reference 전처리기
ControlNet Reference 전처리기

레퍼런스 모델에는 세가지 전처리기가 존재합니다.

  • Reference adain : Style transfer via Adaptive Instance Normalization(논문)
  • Reference only : 참조 이미지를 직접 attention layer에 연결함
  • Reference adain+attn : 위 두가지를 결합함

아래의 이미지를 참조 이미지로 사용하여 이미지를 생성해 보겠습니다.

ControlNet Reference 모델의 참조이미지
ControlNet Reference 모델의 참조이미지

프롬프트는 Img2img 에 포함되어 있는 Interrogate CLIP을 사용해 나온 프롬프트를 그냥 사용했습니다. 

모델: ChilloutMix
프롬프트: a woman with pink hair and a futuristic suit with chains on her head and a sci - fi filament on her face, Artgerm, cyberpunk style, cyberpunk art, retrofuturism 
부정적프롬프트: ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, b&w, watermark, EasyNegative 

아래는 이 세가지 전처리기를 적용한 결과를 보여드리겠습니다. 테스트 방법은 동일한 시드 번호를 사용하고, 한번에 4장을 생성한 후 골라내지 않고 모두 보여드리는 걸로 했습니다.

Reference Adain

Reference only

Reference  adain +attn

제 생각을 말씀드리면, 일단 참조로 사용된 이미지와 생성된 이미지의 얼굴이 약간 공통되는 특징이 있기는 하지만 닮았다고 보기는 힘든 것 같습니다. 그러나, 일단 생성된 이미지 사이에는 연관성이 높아서 동일한 모델이라고 해도 괜찮을 만한 이미지가 많이 생성되는 것 같습니다. 

Reference adain, Reference only, Reference adain+attn 이 세가지 전처리기중에서 어떤 것이 좋냐... 라고 한다면 저는 별로 어떤게 좋다고 할만 하지 못하지 않나... 어떤 전처리기를 사용해도 무방하지 않나... 싶네요.

한가지 더... 참조 이미지와 생성된 이미지가 비슷하지 않은 것은 아무래도 모델의 차이가 아닌가 하는 생각이 들었거든요. 그래서 이렇게 생성된 이미지중 하나를 다시 참조 이미지로 사용하여 생성하면 어떨까 하고 생각해 봤습니다.

아래가 그 결과입니다. 왼쪽 위는 참조 이미지이고요, 나머지 5개는 시드 번호를 -1(무작위)로 두고 생성한 이미지를 선별하지 않고 그냥 순서대로 올린 겁니다. 이렇게 해보니 참조한 이미지와 생성된 이미지들이 정말 비슷하다 싶네요. 물론 복장이나 장식 등은 조금씩 달라지긴 하지만, 동일 인물이라고 주장해도 대부분 고개를 끄덕이지 않을까... 싶습니다. 

Scribble

스크리블 모델은 그림을 손으로 그린 낙서(Scribble)처럼 만들어줍니다. 스크리블 모델의 전처리기는 아래와 같이 3가지 종류가 있습니다.

ControlNet Soft Edge 모델
ControlNet Soft Edge 모델

  • Scribble HED: 전체적으로 중첩된 가장자리 감지(HED, Holistically-Nested Edge Detection)는 실제 사람처럼 윤곽선을 생성하는 데 능숙한 가장자리 감지기입니다. ControlNet의 저자에 따르면 HED는 이미지의 색과 스타일을 변경하는 데 적합합니다.

ControlNet - Scribble HED 전처리기
ControlNet - Scribble HED 전처리기

  • Scribble Pidinet : Pidinet은 세부 디테일이 사라진 거친 선을 생성합니다. 개략적인 외곽선을 복제하는 데 유용합니다.

ControlNet - Scribble PidiNet 전처리기
ControlNet - Scribble PidiNet 전처리기

  • Scribble xDoG : XDoG threshold를 사용하여 상세도를 조절할 있어, 다양한 scribble 을 생성하는데 매우 유용한 전처리기입니다.

ControlNet - Scribble xDoG 전처리기
ControlNet - Scribble xDoG 전처리기

아래는 Scribble PidiNet 전처리기를 적용하고, "a beautiful woman sitting at a table, brown eyes, looking at me, atmospheric cafe" 프롬프트를 사용해 생성한 이미지입니다. (모델: ProtoGen v2.2)

Segmentation

Segmentatin은 이미지에 들어있는 대상의 종류에 따라 다른 색으로 부여하는 기법입니다. 아래 그림에서 보는 것 처럼, 건물, 나무, 사람 등이 각각 다른 색깔로 분류되어 있습니다. ufade20k 와 ofade20k의 경우, 어떤 분류가 어떤 색으로 표현되는지는 여기 Color map을 보면 알 수 있습니다.  COCO 세그멘트이션(ofcoco)의 color map은 다르다고 합니다.

전처리기로는 아래와 같이 seg_ofade20k, seg_ofcoco, seg_uface20k 등 세가지가 있습니다.

ControlNet Segmentation 모델
ControlNet Segmentation 모델

  • ofade20k: ADE20k 데이터세트로 학습한 OneFormer 세그멘테이션
  • ofcoco: COCO 데이터세트로 학습한 OneFormer 세그멘테이션
  • ufade20k: ADE20k 데이터세트로 학습한 UniFormer 세그멘테이션

세그멘테이션을 사용할 경우, 분류된 내용에 따라 이미지가 생성됩니다. 즉, 건물에 해당하는 구역에는 건물이 생성되고, 사람이 있는 구역에는 사람이 생성되는 식입니다.

아래는 Ofade20k 전처리기를 적용한 결과입니다. 프롬프트는 "Futuristic city, tree, buildings, cyberpunk"입니다.

Soft Edge

Soft Edge 콘트롤 모델은 일반적으로 그림이나 예술적 스타일을 잘 표현한다고 하고요, 이전 버전에서는 HED 모델로 불렸다고 합니다. 아래와 같이 4가지 전처리기가 존재합니다. 

ControlNet Soft Edge 모델
ControlNet Soft Edge 모델

  • Softedge HED : 전체적으로 중첩된 가장자리 감지(HED, Holistically-Nested Edge Detection)는 실제 사람처럼 윤곽선을 생성하는 데 능숙한 가장자리 감지기입니다. ControlNet의 저자에 따르면 HED는 이미지의 색과 스타일을 변경하는 데 적합합니다.

ControlNet - Softedge hed 전처리기
ControlNet - Softedge hed 전처리기

  • Softedge hedsafe

ControlNet - Softedge hedsafe 전처리기
ControlNet - Softedge hedsafe 전처리기

  • Softedge pidinet : Pidinet은 세부 디테일이 사라진 거친 선을 생성합니다. 개략적인 외곽선을 복제하는 데 유용합니다.

ontrolNet - Softedge pidi 전처리기
ontrolNet - Softedge pidi 전처리기

  • Softedge pidisafe

ControlNet - Softedge pidisafe 전처리기
ControlNet - Softedge pidisafe 전처리기

Shuffle

셔플 전처리기는 입력된 이미지를 섞어버립니다. 아래에서 왼쪽위는 원본이고, 나머지는 전처리 결과입니다. 다른 전처리기와는 달리 매번 시행될 때마다 다른 형태로 (무작위로) 생성되며, 시드 값에 영향을 받습니다. 이렇게 모양이 바뀌므로 형태는 유지되지 않고 그 대신 색 스키마가 전달되게 됩니다. 

전처리기는 아래와 같이  shuffle 한가지만 존재합니다. 그런데 이 전처리기를 사용하지 않아도 모델만으로도 동작됩니다.

ControlNet Shuffle 모델
ControlNet Shuffle 모델

아래는 동일한 프롬프트 "Futuristic city, tree, buildings, cyberpunk"로 생성한 결과입니다. 위쪽 2개는 Shuffle ControlNet을 사용하였을 때, 아래쪽은 ControlNet을 껐을 때 입니다. Suffle 을 사용하면 색감은 그대로 유지됨을 알 수 있습니다.

Tile resample

Tile resample 모델은 이미지에 상세한 디테일을 추가하는 데 사용되는데, 특히 AI 확대도구와 함께 사용하여 확대하는 동시에 이미지의 상세함을 추가하는데 사용됩니다. 

자세한 내용은 여기를 읽어보세요(저는 확대는 별로 좋아하지 않아 정리하지 않았습니다).

Color grid T2I adapter

Color grid T2i adapter는 참조이미지를 64배로 축소시킨 뒤 다시 원래 크기로 확대하는 방식으로 모자이크를 만든 후, 이를  그 구역의 평균 색으로 사용하는 방식입니다. T2I adapter는 위에서 설명한 ControlNet 과는 방식이 달라서 그런지 T2I를 누르고 원하는 전처리기와 모델을 선택해야 하는데, Color grid는 다음과 같이 설정하면 됩니다.

ControlNet -T2ia color grid 모델
ControlNet -T2ia color grid 모델

이렇게 설정한 뒤 캔버스에 참조 이미지를 넣고 별 모양의 단추 💥 [Run preprocess]를 눌러주면 아래와 같이 처리됩니다.

ControlNet T2IA color grid 전처리기
ControlNet T2IA color grid 전처리기

이 모델도 Shuffle 모델과 같이 형태는 사용하지 않고 색감만 사용하므로, 완전히 다른 이미지를 생성할 수 있습니다. 예를 들어 프롬프트를 "A modern living room"라고 입력하면 아래와 같은 이미지가 생성됩니다. 대략적으로 색감이 비슷함을 알 수 있습니다.

===

이상입니다. 이 글은 Andrew님의 글을 읽으면서, 일부는 번역하고 일부는 추가/삭제하기도 하고, 샘플은 다른 걸로 대체하기도 하면서... 한마디로 마음대로 작성한 글입니다. 아마 심각한 저작권 위반이 아닐까 싶네요.

민, 푸른하늘