(수정.1: clip skip 예제 그림 추가)


CLIP SKIP '텍스트 모델의 정확도'에 대한 설정이라고 이해하고 있어. CLIP SKIP 낮으면 더 디테일하게 높으면 덜 디테일하게.


결론부터 말하면, 실사로라는 CLIP SKIP 1이나 2로 만들어도 로라의 퀄은 비슷하고, 애니로라는 CLIP SKIP 2 이상을 써서 만들어야해.


CLIP SKIP을 변경하면 만든 로라를 비교해보자

CLIP SKIP 변경한 실사로라

실사데이터를 기반으로 한 로라, (베이스 모델은 v1-5-pruned.safetensors)

clip skip 1 (에포크 6-10)

clip skip 2 (에포크 6-10)


자세히 보면 clip skip 1이 확실히 더 디테일하고 자연스럽고 데이터에 근접하기는 한데, 차이가 거의 없지? 
실사로라 만들 때 clip skip 1을 추천하는 데, 2로 만들어도 큰 차이 없어. 
단지 로라를 이용해서 그림을 그릴 때 주로 사용할 clip skip과 맞추면 좋겠지


CLIP SKIP 변경한 애니로라

애니데이터를 기반으로 한 로라, (베이스 모델은 NAI.model.animefull-latest.ckpt)

clip skip 1

clip skip 2


실사로라와는 다르게 차이가 엄청 크지? 

clip skip 1로 애니 로라 만들면 망하는 거야. 

애니에 맞게 학습시켜야 하는데 쓸데없이 너무 복잡한 개념을 학습시켜서 망하는 거야.
혹시 의상이나 텍스처나 그림체같은 거 학습시키고 싶으면,  사람보다 덜 복잡한 개념이니까,  clip skip 3을 추천해.

끄읕 & BREAK
-----------------
여기서 부터는 몰라도 되고 알면 부X을 탁치게 될 수 있어. 복잡한 거 싫어하면 그만 읽어.

그리고 나도 이쪽 전공이 아니라서 완전히 잘못알고 있을 수 있어.
미안해. 그러니 틀린 부분이 있으면 꼭 알려주라. 


CLIP 모델

clip모델은 SD1.5모델에 있는 것인데, 텍스트 임베딩에 있는 최대 12개의 레이어로 이루어진 프롬의 해석에 대한 개념이야. 

(SD2.X에서는 OpenCLIP이어서 CLIP 모델이 없다고 하는데 안써봐서 몰라.)

근데 사람들이 CLIP 모델을 Ai가 정확히 어떻게 사용하는 지 몰라. 

단지 계층적으로 세분화되는 개념으로 사용하고 있지 않을 까 짐작하고 있어. 

이 계층이 사람의 인식구조라서 Ai도 그렇지 않을까 짐작하는 거지. 

각 CLIP 레이어는 4X4 행렬로 구성되는데, 4X4X4 식으로 레이어가 커지면서 행렬도 커져서 12번째 레이어는 정말 큰 행렬이야. 

눈사람 만드는데 점점 커질수록 눈의 부피가 커지는 것을 상상하면 편하더라.

CLIP 레이어 1은 사람, 
CLIP 레이어 2는 남자 여자,  

CLIP 레이어 3은 소년, 젊은 남자, 할부지, 할무이, 젊은 여자, 소녀, 

이런 방식으로 개념을 세분화하는 것이 아닐까 하는 것이 사람이 Ai의 Clip 레이어에 대한 대충의 짐작이야. (이렇게 계층적으로 해석해라라고 사람이 Ai에게 명확하게 알려준것이 아냐. 푸리에나 컨볼루션이 그리 복잡한 산수는 아니니까 )


CLIP 모델 기능/구현: 
각 CLIP 모델의 레이어는 입력된 프롬프트를 한번 해석한 다음 다음 레이어로 넘기고, 다음 레이어는 직전 레이어에서 분석한 내용에 추가하여 다시 프롬프트을 분석하고 다시 다음 레이어로 넘겨.

예를 들어, 

CLIP 레이어 1에서 프롬 woman, big breasts를 가슴 큰 사람을 그리라고 하는구나 하는 정도로 해석해서  "야! 사람 그리래, 근데 가슴은 크게"하고 어떻게 그릴 지를 애매하게 알려주게되고. 그래서 UNET이 알아서 그리게 되지.

그 다음 CLIP 레이어 2에서 직전의 CLIP 레이어 1의 프롬해석에다가 woman, big breasts를 다시 해석하고 다른 프롬과 개념을 스까서 해석하게 돼. 그럼 "야! 사람 그리래. 여자야. 가슴은 크게, sagging형으로, 비키니입고"하고 UNET에 알려주게 되지.


CLIP SKIP: 

근데 CLIP 레이어를 너무 많이 써서 해석을 하면 우리가 준 프롬을 충분히 해석한 거에 과도한 해석을 더해서 개념에 충돌이 생겨. 

특히 고봉밥 프롬을 해석하면 "젋은 여자인데 가슴 큰 빈유이고 슴골이 있어야하고 허리에 비해 커야해" 이런 식으로 프롬에 대한 해석이 뒤틀어지기 시작해.

그래서 적당한 레이어에서 해석을 멈추게 해야해. 

CLIP SKIP 2면 우리가 주는 프롬을 10번째 레이어까지만 해석하라는 것이고. CLIP SKIP 1이면 우리가 주는 프롬을 11번째 레이어까지만 해석하라는 것이라서, CLIP SKIP 2보다 더 디테일이 추가되는 효과를 기대하는 거지.

아참, 멈추는 것(skip)은 레이어의 역순이야. CLIP SKIP 0이면 12번째 레이어에서 멈추고, 1이면 11번째,......

원문을 그대로 인용하면 - "The counter was reversed from what it was in the past. Originally it was displayed as "Stop at clip layer n" as in 12 by default. Now it is "stop this many layers from the bottom". So clip skip on 2 would mean, that in SD1.x model where the CLIP has 12 layers, you would stop at 10th layer."
clip skip이 높아지면 프롬을 개무시하고, 느닷없이 카메라나 이상한 뭔가 튀어나오는 이유야. 프롬의 해석을 안하거나 대충 하고 체크포인트에 있던 원래의 그림을 그려버린거지. 텍스트 인코더는 일종의 번역가이고 UNET은 그림을 그리는 화가인데, 번역가가 프롬을 대충해석하면 화가는 어떻게 할까? 그냥 자기맘대로 그리는 거야.


애니모델의 원조인 NAI모델은 학습할 때 CLIP SKIP 2, 실사모델의 원조인 SD1.5는 학습할 때 CLIP SKIP 1이였다는 것이 당연하지.  실사가 애니보다 프롬을 더 해석해야 하니까.

(근데 기본 clip skip이 1이면 11번째 레이어에서 해석을 멈추라는 것이잖아? clip skip을 0을 선택할 수 없는데 12번째 clip레이어는 뭐지? 이거 나도 뒤져봤는 데 모르겠어. 누가 좀 알려주라! ) 


CLIP SKIP 응용:

의외로 CLIP SKIP이 그림의 퀄에 상당한 효과를 가져올 수 있어. 

- 흔히들 CLIP SKIP을 높게 써야 깔끔한 그림인 나온다는 것은 프롬이 일관성이 없이 후졌다는 거야. 프롬을 이상하게 주고 CLIP SKIP을 높게 쓴다는 거 스스로 바보라는 거야. 차라리 Ai에게 자기 맘대로 할 여지를 줄 수 있게 프롬을 정리해야지.


- 아주 쨍하고 선명한 그림을 그리려면 CLIP SKIP 이 높게 해야해. 디테일을 감소시켜야 더 선명하니까. 선명한 그림을 위해 dynamic threshold나 hires같은 것으로 열심히 최적값을 찾기 전에 적절한 CLIP SKIP을 고르자. 적절하지 않은 CLIP SKIP을 선택하고 

dynamic threshold나 hires 수치를 열심히 바꾸느라 쓰는 전기낭비를 줄일 수 있어.


- GPT같은 것으로 만든 서술형 프롬은 그림을 그리는 명령이 구체적이지 않으니까 해석을 더해야겠지. 그러니까 이경우는 CLIP SKIP을 1로 써야 그림이 잘나온다는 것이 당연하지? 서술이 모호할 수록 CLIP SKIP에 따라 그림이 완전히 달라서 묘한 맛이 있어. 

- 모순적이거나 상반되는 프롬을 섞어서 가챠를 노리는 사람들도 있어. 이럴 경우도  CLIP SKIP을 바꾸어가면서 그려봐. 신기한 것을 볼 수 있어.


- 시드를 고정하고 clip skip을 1부터 3까지 바꾸어 봐. 프롬을 준 의도가 어느 clip skip에서 잘 표현되는 지 알아보는 거지. 특히 가챠를 돌리기 전에 이렇게 적절한 clip skip을 선택하면 마음에 드는 그림을 더 건질 수 있겠지?

예를 들어: portray desolate, abandoned house, overgrown vegetation surrounding structure, broken windows, peeling paint, under eerie, moonlit sky 라고 프롬을 모호하게 주면

clip skip 1
clip skip 2
clip skip 3

이렇게 나와. 그러면 자기가 원하는 그림스타일을 찍어서 clip skip을 결정하고 밤새 돌리는 거지. 만약 아무생각없이 clip skip을 주고 아침에 결과를 보고 우쒸하는 것보다 나을 것 같지?


- 2.5D 이런 중간 모델은 clip skip의 영향을 많이 받아. 당연한 거지


- 2D를 실사화 할 때는 clip skip을 1로 바꾸어서 그리고 있어. 2D로라를 먹일 때 특히 효과가 좋아.


(순전히 개인적인 Ai에 대한 생각: 

사실 사람의 인식의 계층은 Ai에 비하면 정말 간단하다고 하고 사람 뇌의 물리적 레이어를 넘지 않을거래.

5단계 정도인데 Ai에 비해 형편없지. AGI를 무서워하는 것이 사람보다 해석의 계층이 월등히 커서라고 생각해도 돼.

예를 들어, 가끔 색소를 구별하는 눈의 원추세포가 일반사람보다 더 많아서 휘황찬란한 색으로 이루어진 세상을 보던 사람이 일반 사람이 보는 세상을 알게되면 얼마나 단순하고 칙칙할까? 사진과 픽셀그림차이 정도?반대로 일반사람은 저 휘황찬란한 색의 세상을 절대로 인지할 수 가 없어.

Ai의 레이어는 사람의 인식 계층과 비교가 안되니까 그런 Ai가 어떻게 세상을 해석할지 사람 나부랭이는 짐작도 못하지 않을까?)