예전 글 읽고 오면 더 이해가 잘 될거임



stable diffusion 모델 원리 학술적 대충 설명

https://arca.live/b/aiart/62020706






혹시 설명보기 귀찮으면 아래 세줄만 보고 나가도 괜찮



 


세 줄 요약

-임베딩은 어떤 특징만 골라서 담겨있는 새로운 프롬프트 하나 만들기

-하이퍼네트워크는 새로운 혹은 기존의 같은 프롬프트여도 적당히 다르게 특징이 적용되게 만듬

-드림부스는 그냥 프롬프트든 이미지든 싹 바꿀 수 있게 해줌


  







혹시 AI의 심연을 계속 보고 싶으면

아래를 쭉 보십시오 휴먼






임베딩: Textual inversion


입력: 어떤 특징 1개(화풍이나 사물, 행동 등)의 이미지 모음

출력: 새로운 프롬프트를 획득, 그에 매칭되는 특징 1개를 프롬프트에 적용 가능 (임베딩 pt 파일) 

특징: 해당 새로운 특징만 갖는 프롬프트만 얻고 SD 모델의 가중치들 자체는 건드리지 않음. 


장점: 

-SD모델의 가중치를 직접 건드리지 않기 때문에 한 번 이미지 생성할 때 여러 개의 임베딩 적용 가능

-모델의 가중치를 건드리지 않기 때문에 또한 다른 SD모델에도 적용가능


단점: 

-특정 특징 1개를 프롬프트 텍스트에 임베딩 시키기는 방법이기 때문에 학습을 위한 이미지 전처리가 까다로움

(다른 특징이 섞이면 원하는 특징이 아니라 다른 엉뚱한 특징이 학습될 수도 있음)

-가중치를 건드리지 않기 때문에 원하는 특징을 뽑아내지 못 할 수도 있음




============================================================================




하이퍼네트워크: Cross-attention을 위해서 사용되는 QKV(Query, Key, Value)중에서 KV에 해당하는 가중치를 훈련시키는 방법

위 그림에서 노랗게 칠해놓은데가 하이퍼 네트워크임



SD 모델에서 사용되는 Cross-attention에 대해 간략하게 설명하면

Query는 이미지의 기저 정보를 담고 있고 (비유하자면 찰흙 같은 소재라고 보면 되고)

Key는 텍스트 및 조건들의 기저 정보 등을 담고 있고 (찰흙으로 뭐 만들지 명령하는 것)

Value는 텍스트 및 조건들에서 이미지로 연결되는 정보를 담고 있음 (실제로 명령대로 찰흙을 주물럭 주물럭 하는 것)


Key 값과 Query 간의 상관 정도(현재 찰흙의 상태와 명령이 얼마나 가까운가)를 파악해서 attention 밀도 값을 얻고 

이 것을 바탕으로 Value 값을 수정해서 attention Value값(찰흙을 더 명령에 가깝게 만드는 것)을 출력함


입력: 이미지와 해당 이미지의 특징이 라벨링된 텍스트

출력: SD 모델의 하이퍼 네트워크에서 변경된 KV가중치(하이퍼네트워크 pt 파일)

특징: Q 가중치는 안 건드리고 KV 가중치만 건드림(찰흙이라는 소재는 변경하지 않고 뭐를 만들지랑 어떻게 만드는지만 변경)


장점: 

-라벨링만 잘되어있으면 학습이 용이함

-가중치를 일부 직접 조정하기 때문에 임베딩보다 자유도가 높음


단점: 

-SD 모델의 가중치를 직접 건드리는 모델이며 SD 모델의 일부이므로, 하이퍼 네트워크는 단 하나만 적용가능

-Q가중치를 안건드리기 때문에 애니풍->실사 이런 것 불가 (마치 찰흙에 물감 대신 붓질로 써서 그림 그리겠다는 소리)  

(이 단점은 가중치를 건드리지 않는 임베딩도 공유하는 문제임)




============================================================================




드림부스: fine 튜닝 혹은 전이 학습이라고 불리는 방식 적용

기존 학습된 SD모델 기반으로 해서, 새로운 이미지를 넣어서 모든 가중치를 재조정하는 것

 

입력: 학습시키고 싶은 이미지(화풍, 사물 등등)들, 과적합 방지 정규화 이미지, 학습시키고자하는 프롬프트

출력: 모든 가중치가 조정된 SD 모델(체크포인트 ckpt 파일)

특징: 기존 가중치로부터 모든 가중치를 변경함 


장점: 

-임베딩이나 하이퍼네트워크보다 자유도가 높음 

-기존 모델을 기반으로 원하는 방식으로 SD모델을 학습가능

(처음부터 SD모델을 학습시키는 것보다 적은 데이터로 굉장히 빠르게 학습 가능)


단점: 

-모든 가중치를 훈련 시키기 위해 고성능 GPU가 필요

-적은 이미지를 써서 과적합하기 쉽기 때문에 정규화 이미지를 통해서 완화해야함