주의 : 약간의 지식이 필요함


임베딩이란? Textual Inversion

해당 그림을 만드는 프롬프트를 역산하는 것

그러나 어떤 개념인지 모호할 수 있음. 예를 들어 A의 사진이라 해놓고 스타일이나 그림체를 넣으면 당연히 안됨.


두가지 이상의 개념이 들어가면 학습이 잘 안됨. 이는 A와 함께 있는 고양이 등으로 아 고양이는 다른거구나 라고 인식하게 시도할 수 있지만, 흔히 개념이 섞이고 제대로 분리가 안되는 Attribute leakage / missing / 기타등등이 일어남. 

그리고 이를 '단어'처럼 사용할 수 있도록 하는 유사 단어 매핑을 제공하는데, 모델에 없는 단어 학습을 하는 것처럼 해석되지만, 사실 일종의 묶인 단어 셋같은 것임.


예를 들어 달마시안을 정의해보자. 개인데 점박이이고 몸체는 길고.... 등의 문장으로 묘사된다면, 이 문장 전체를 묶어서 달마시안으로 불러올 수 있게 하자는 것.


눈치챘겠지만 이미 존재하는 단어를 합쳐서 이를 구현하자는게 임베딩이고, 제한된 길이 내에서 어느 정도의 재현을 하겠다는게 목표임. 왜 어느 정도인가하면, 애초에 어떤 개념을 완벽하게 언어로 묘사하는 것 자체가 불가능하기 때문에...


그러니 이거 자체보다는, 하이퍼네트워크와 섞어 쓰면 제대로 효과가 나온다. 그렇다기보다 하이퍼네트워크를 RNN화해서 쓰는게 원래는 맞는데 정말 대충 구현만 해둔거임 저건;




하이퍼네트워크

하이퍼네트워크는 정말 대충 설명하면 프롬프트의 전처리고, 좀 자세히 설명하면 프롬프트를 변형해서 모델의 가중치가 이를 고려해 적용하도록 하는 것임. 

그러나 현재 구조로는 사실 공통점을 제외하고 차이를 찾아서 이 차이를 반영하기 정도의 성능이고, 그게 맞음. 그런데 그게 우연히 그림체나 스타일에는 매우 정확히 적용할 수 있을 뿐.

그림을 상세히 묘사한 텍스트와 그림이 있다면, 즉 텍스트 -> 그림을 만들어서 유사한 그림이 만들어졌지만 "차이가 존재한다"면 이 차이는 그림체 또는 스타일에 해당할 것이므로 이를 배우도록 하는 것은 가능함. 즉 프롬프트 A에서 만들어진 그림 A'를 원본 B에 가깝도록 차이를 줄이는게 하이퍼네트워크라 할 수 있음


그러면 태그가 많고 자세한게 좋은게 아닌가?


그게 자동생성된 태그가 아니라면, 즉 태그가 완벽하고 믿을 수 있다면 맞음.

이는 Attention이 인간처럼 "주목하고 변형하는"구조이기 때문에 더욱 그럼. 예를 들어 "위에 하늘이 있다. 푸른 색이고 구름이 떠다닌다. 연기가 올라오고 있어서 이를 쫓아가니 공장 굴뚝이다. 무슨 공장인가 하면 도자기 공장이다. 사람들이 몇 명 일하고 있다. 사람들의 특징은, 가장 깊은 구석부터 본다면 어떤 옷을 입었고...." 라는 공장은 인간의 시선의 흐름을 그대로 따라가고, 이런 프롬프트는 잘 먹힘.


반면 자동 생성된 태그는 어떨까?


"남자, 도끼, 콧수염, 파란 눈, 흰수염, 검은수염, 검은머리, 흰머리, 연기, 도자기, 식탁, 푸른색, 하늘, 햇빛, 파란색"


이따위로 쓰는데 알아들을 수 있을까?


이는 태그 달기에만 국한되는게 아니라, 대부분의 프롬프트에도 적용됨. 오히려 단부루는 그런 점에서 약간 실패했다고 볼 수 있는데, 문장형 프롬프트의 성능이 떨어지기 때문이고, 반대로 SD는 문장형 프롬프트에 오히려 강하다. 데이터셋 자체의 차이인거지.


학습할때 "A picture of"...같은게 왜 달리나 싶었을텐데 애초에 언어 모듈은 위와 같은 문장형으로 지속적인 정보가 관련되어 들어오는걸 예측하기 때문임.



그러니 위와 같이 파편화된 태그를 쓸 바에야 아예 필요한거만 딱딱 쓰고 버려서 알아서 학습하게 하도록 놔두는게 100배 낫다.






드림부스


그냥 간단히 모델에다가 더 추가하자는 이야기임. 이미 모델 자체에 학습된 커널이 있으니 이를 활성화시키는 '죽은 연결'을 찾아서 가중치를 해결하자는 건데, 문제가 있음.


죽은 뉴런인지는 어떻게 판단할건데?


이게 정규화 이미지임. 근데 하얀종이같은건 안되고 당연히 흔히 쓰이는 개념을 '일반적으로' 나타내는 사진을 써야 한다. 그런데, 이걸 SD용 정규화 이미지를 WD나 Novel쪽에 적용하면 당연히 안되는게, SD는 3D 포괄적인거고 다른 두개는 2D 집중임.


하얀 종이따위를 쓸 바에는 그냥 masterpiece태그를 넣어서 돌려서 나온걸 떄려박아두자.


참고로 이 정규화 이미지는 학습할 이미지랑 같은 토큰으로 묶어 넣는게 아님. 적어도 논문을 따르자면 이는 이미 존재하는 유사한 토큰으로 구성되어야 함

혹시 "아 혹시 과적합나서 이거 막으려고 아무 상관없는걸 넣나?" 싶어서 넣는거면 절대 그런거 아니니까 아예 넣질 말아야함