Post's Content

원래는 KSampler/KSamplerAdvanced 에 대한 자세한 소개를 하려고 하다가 생각보다 그림이 복잡한 관계로 차일 피일 미루고 있었는데...
이건 나중으로 미루고 요즘 핫한 SDXL 과 관련 된 따끈따끈한 기술의 소개를 해보려고 합니다.

SDXL 이 궁금해서 ComfyUI 를 찾는 사람들이 요즘 늘고 있는데, ComfyUI 에서 SDXL 을 지원하기 위해 최근에 추가된 노드가 몇가지 있습니다.
바로 CLIPTextEncodeSDXL 이라고 하는 노드입니다.



위와 같이 생긴 노드이죠.

일단 기존의 CLIPTextEncode 노드와 마찬가지로, text prompt 를 받아서 conditioning 이라고 하는 결과를 생성해주는 역할을 합니다.
그런데, 다양한 파라미터들이 더 붙어 있습니다.

SDXL은 모델의 내부 구조가 SD1.5/SD2.x 와 조금 다릅니다.
그중에서 텍스트 프롬프트를 처리하기 위한 CLIP 모델이 내부적으로 하나 더 추가 되었습니다.
일종의 실험적인 성격으로 추가된 것으로, 더 큰 언어모델을 통해 프롬프트가 더 잘 먹힐거라고 기대한 것이라고 합니다.
두 CLIP 모델은 학습된 형태가 다르기 때문에, 프롬프트에 대한 반응도 조금씩 다릅니다.

SDXL에서는 두개의 CLIP모델을 통해 텍스트를 인코딩하고 이어 붙여서 하나의 컨디셔닝으로 만듭니다.
SDXL 모델을 기존의 CLIPTextEncode 를 사용해서 프롬프트를 설정할 경우 CLIP_G와 CLIP_L에는 동일한 텍스트가 들어간 것과 같은 효과를 줍니다.

CLIPTextEncodeSDXL 은 그 둘을 다르게 줄 수 있는 조금 더 고급자용 인코더라고 생각하면 됩니다.
아직 SDXL의 학습 결과는 미지의 영역이기 때문에 그 둘을 다르게 줬을 때 얼마나 이득이 있는지에 대해서는 밝혀지지 않았습니다.
여러분도 실험하면서 탐구해봐야 하는 부분입니다. 단지, 동일한 프롬프트를 각각에 넣었을 때 생성되는 그림이 다른 양상을 보이는 것은 분명합니다.

그러면, 나머지 width, height, crop_width, crop_height, target_width, target_height는 무엇인지 의문이 남을 겁니다.
이 파라미터들이 등장한 것은 아래 이슈를 해결하는 과정에서 사용된 독특한 학습 형태에서 기인합니다.



'프랑스 황제 나폴레옹의 옷을 입고 있는 고양이가 치즈를 들고 있는 프로파간다 포스터 그림' 과 같은 형태의 프롬프트를 주었을 때,
SD1.5 와 SD2.1 에서는 다들 제대로 표현이 안되고 어딘가 잘려나간 것을 볼 수 있습니다.

학습을 할 때 하나의 이미지는 한번만 사용되는게 아닙니다. 다양한 크기와 비율로 여러 조각을 내어서 학습에 활용합니다.
기존에 SD1.5/SD2.1 을 학습할 때는 이렇게 조각내어 학습한 것이 결과물의 생성에 큰 영향을 주는 이슈가 발견됩니다.
'나폴레옹' 혹은 '고양이' 라고 하는 단어에 연관된 이미지를 학습할 때 부분적으로 잘려나간 그림들이 엄청나게 많이 사용되게되니, 잘려나간 이미지를 정상적인 고양이나 나폴레옹의 그림으로 인식하는 거죠.

SDXL에서는 이 이슈를 해결하기 위해서 학습 단계에서 조각내어 사용하는 그림의 경우 '학습에 사용된 이미지의 원래 크기', '이미지를 잘라낸 크기', '잘라내고 남은 이미지의 크기'의 정보를 같이 학습에 사용하도록 했습니다.
이를 통해 조각난 그림의 학습은 더이상 그냥 '나폴레옹' 이나 '고양이' 가 아니라 특정한 크기로 잘라진 '나폴레옹'이나 '고양이'라는 형태로 학습이 되는 것입니다.
그렇게 위의 그림에서와 같이 SDXL에서는 일반적인 텍스트 프롬프트에서 잘려지지 않은 그림을 잘 생성 할 수 있게 된 것입니다.



그 학습에 사용된 파라미터의 정보들을 도식화 하면 위 그림과 같습니다.
그런데, 이 학습 방법에서 재미난 성질이 생깁니다. 원본 그림의 크기와 그림을 잘라낸 형태가 어떻게 되는지가 같이 학습이 되었으니 그 수치적 값을 함께 프롬프트로 주게되면 그 특성이 드러나게 됩니다.

기본 CLIPTextEncode와 동일하게 CLIPTextEncodeSDXL을 설정하면 설정값은 다음과 같게 됩니다.

* width/height - 생성할 이미지 크기
* crop_width/crop_height - 0, 0
* target_width/target_height - 생성할 이미지 크기
* CLIP_G, CLIP_L - 동일한 프롬프트로 통일

위와 같이 설정하면 CLIPTextEncodeSDXL로 기존의 CLIPTextEncode로 설정한 것과 동일한 이미지를 생성하게 됩니다.
자 그리고 여기서 수치를 살짝 조정해 보겠습니다.



위 그림에서 왼쪽 그림은 기존의 CLIPTextEncode를 통해 생성한 그림이고, 오른쪽 그림은 CLIPTextEncodeSDXL에서 width 와 height의 수치값을 조절한 것입니다.
마치 zoomout을 한 것과 같은 효과가 생기죠?

그렇다고 해서 width, height, ... 를 통해서 이미지의 결과물을 완벽하게 통제할 수 있다는 의미는 아닙니다.
width, height, ... 등도 텍스트 프롬프트 처럼 프롬프트에 불과합니다.
gpt 가 수학적인 문제 풀이를 요구하면 엉터리 답을 주는 경우가 많다는 사실을 알 것입니다.
학습에 기반해 패턴화 된 응답을 하는 것이기 때문에 그런거죠. 이 파라미터들도 마찬가지입니다.
그게 정확하게 특정 형태의 이미지를 보장하는게 아니고, 학습에 사용된 이미지의 크롭 패턴이 드러나는 경향을 조절하는 것이라고 보면 됩니다.

때문에 어떤 프롬프트의 조합과 함께 사용하느냐에 따라 수치 파라미터에 따라 나타나는 효과가 다릅니다.

다음번에 SDXL의 핫템인 Refiner 모델에 대해서 소개를 하기전에는 정말로 KSamplerAdvanced 에 대한 설명을 먼져 해드려야 겠네요.


참고자료: https://comfyui.creamlab.net/nodes/CLIPTextEncodeSDXL (일본어라 번역기가 필요합니다)


Uploader's Information

Prompter: Dr.Lt.Data https://prompts.co.kr/Dr_Lt_Data

Related Pictures

Picture's Exif Data

  • Prompt
    prompt 정보가 없습니다.
    COPY
  • Negative Prompt
    negative prompt 정보가 없습니다.
    COPY
  • Info
    info 정보가 없습니다.

Picture's Exif Data

  • Prompt
    prompt 정보가 없습니다.
    COPY
  • Negative Prompt
    negative prompt 정보가 없습니다.
    COPY
  • Info
    info 정보가 없습니다.

Picture's Exif Data

  • Prompt
    prompt 정보가 없습니다.
    COPY
  • Negative Prompt
    negative prompt 정보가 없습니다.
    COPY
  • Info
    info 정보가 없습니다.

Picture's Exif Data

  • Prompt
    prompt 정보가 없습니다.
    COPY
  • Negative Prompt
    negative prompt 정보가 없습니다.
    COPY
  • Info
    info 정보가 없습니다.
  • DokgoSam2

    SDXL이 무척 기대되는 군요

    2023-07-16 14:19:13 +0900