요즘 SD1.5 베이스 모델에 파인튜닝하면서 여러가지 테스트해보고 있는데

Text Encoder 학습도 고려해볼만한 옵션인 것 같아서 올려봄.






보통 Text Encoder는 학습할 때 훈련하지 않는 게 일반적이지?


Stable Diffusion 1.5는 CLIP의 Text Encoder를 그대로 가져와서 사용하는데,

Text Encoder는 따로 학습시키지 않고 CLIP이 만들어내는 결과에 Unet이 맞춰지는 방식으로 주로 학습함.


NAI1(animefull)도 따로 Text Encoder는 학습하지 않은 것 같음.





그런데 직접 학습시키면서 실험해보니까

태그 형식의 프롬프트 입력을 가정한다면, Text Encoder 학습도 꽤 괜찮은 옵션 같음.

특히 베이스 모델을 만드는 대규모 파인튜닝에 있어서는 모델 성능 향상에 도움을 꽤 줄 수 있을 것 같음.



아래는 실험해본 결과물들임.

SD1.5 BASE에 Danbooru에 올라온 그림 5천장으로 40epoch까지 파인튜닝하면서 생성한 결과들임.

태그는 Danbooru의 태그(_제외)를 사용해서 학습시켰음.





자연어나 비교적 일반적인 태그들에서 실험한 결과는 Text Encoder를 학습시키나 학습시키지 않나 결과가 비교적 고만고만하지만

(위의 1girl, blonde hair, purple eyes, hands on chest),


캐릭터 이름처럼 비교적 특수한 태그─CLIP학습시 데이터셋에 미량만 있었을 태그들─ (ex.hatsune miku)나

Danbooru에 비교적 많이 등장하는 태그(ex.cat ears)들로 생성한 그림들에서는

그 차이가 매우 뚜렷하게 나타남.


hatsune miku쪽에서는 Text Encoder를 학습한 쪽의 퀄리티가 훨씬 낫고,

cat ears쪽에서는 특히 아니메 게열 그림체로 제대로 튜닝되었음.

cat ears에서 Text Encoder를 학습시키지 않은 쪽은, 진짜로 실제 고양이 모습이 나와버리기도 함.




전체 데이터셋에 hatsune miku나 cat ears 태그의 비중이 그렇게 많은 것도 아님.

hatsune miku는 5000장 중 33장(0.66%), cat ears는 150장(3%)정도임.

전체 데이터셋에서 차지하는 비중이 적더라도 그게 Danbooru에 있는 특수한 태그라면, 

Text Encoder를 학습하는 것으로 저정도 차이를 보여줄 수 있음





이런 결과를 봤을때,

SD1.5 BASE의 Unet이 CLIP에 이미 맞춰져있기 때문에, 아니메 파인튜닝이 잘 안되는 거라고 생각함.

물론 데이터의 양을 늘리고, 학습량을 늘리면 Unet학습만 해도 계속 변하기는 하겠지만,

어차피 파라미터 수는 정해져 있고 아니메 계열 특화 베이스 모델을 만드는 거라면 

Text Encoder까지 Danbooru형식 태그에 맞춰서 학습시키는 게 좋을 것 같음.


특히 SDXL은 아직까지 제대로 된 모델이 없는데, 

범용성 있는 아니메 베이스 모델을 만든다면 Text Encoder까지 같이 학습시키는게 좋을듯.

SDXL은 Text Encoder가 2개인데, 하나는 자연어로 놔두고, 하나는 단보루 태그로 학습시켜는 방식도 생각해봤음.


NAI3는 엄청난 캐릭터, 아티스트 태그 인식력을 보여줌.

물론 모델 규모에서 오는 차이도 있겠지만,

이번엔 SDXL의 Text Encoder를 학습시켜서 이 정도 성능이 나오는 거 아닐까 싶기도 함.

실제로 SDXL BASE보다는 자연어 태그 인식률이 떨어지기도 했음.




사실 SD1.5는 이미 거의 다 animefull기반으로 학습되어 있고

SDXL은 파인튜닝 컷이 높아서

누가 쓸까 싶겠냐만 

요즘 NAI3보고 저런거 어떻게 만들었나 궁금해서

여러가지 테스트하던 와중에 좀 의미 있는 발견같아서 써봄.