예전 글 읽고 오면 더 이해가 잘 될거임
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가 필요
-적은 이미지를 써서 과적합하기 쉽기 때문에 정규화 이미지를 통해서 완화해야함