집와서 사용법 쓴다했는데 numpy곤해서 간단하게만 씀

이걸로 드림부스 하고싶은데 어케하는지 몰라서 못쓰는사람은 없길바람



ShivamSharo

https://colab.research.google.com/github/ShivamShrirao/diffusers/blob/main/examples/dreambooth/DreamBooth_Stable_Diffusion.ipynb

지금 WebUI에 포크돼서 올라가있는 버전. 

기본 골자는 모든 드림부스가 그렇듯 인스턴스(학습) 이미지셋과 클래스(정규화) 데이터셋을 사용해서 새로운 프롬프트에 속하는 개념을 만드는 거임. 

만약 캐릭터를 학습하고 싶거나, 캐릭터가 담긴 작가의 화풍을 학습하고 싶으면 인스턴트와 클래스 설정은 요런 식으로



이렇게 한 뒤에 뽑힌 checkpoint에 프롬프트로 jakga를 넣으면 girl 대신 그 캐릭(또는 그 스타일) 이 나온다. 


이 레포의 colab 자체는 굉장히 잘 만들어놨지만 nai 모델에 대한 서포트가 전무함. 그래서 diffuser로 변환하고 어쩌구 등등 굉장히 그지같은 프로세스를 거쳐야 하지만 어떤 고마운 챈럼이 해당 부분을 추가를 해줘서 더이상 번거롭게 건드릴 필요가 없게 됐다 

근데 이걸로 nai full (7GB짜리) checkpoint 변환은 잘 돌아가던데, pruned (4GB짜리)는 오류가 뜨는 경우가 있더라. 그래서 여기서 추가로 코드 갱신을 해서 여기 올려놨으니 요걸로 테스트해주길 바람

딸깍으로 넘어가는 곳은 스킵


1. 경로설정


ORIG_MODEL_PATH랑 ORIG_YAML_PATH의 경우 약간씩 다르지만 거의 다 WebUI의 models 폴더 안에 있음. 왼쪽 colab 파일 탐색기를 쓰면 어딨는지 찾을 수 있다.


2. AI 트레이닝

위처럼 인스턴스 프롬프트(학습대상) / 클래스 프롬프트(큰 범주) 이렇게 이름붙이면 됨.

그리고 instance data나 class data가 많으면 미리 구드에 올려놓고 하는게 빠름. 이 경우에는 밑에 ~_data_dir들을 /content/drive/MyDrive/{폴더} 로 바꾸고 하면 밑에 셀 실행 안해도된다. 


3. 이미지 파일 업로드

설정을 안건드렸으면 이 셀로 업로드 .인스턴스/클래스 순서대로 업로드함. 512x512가 디폴트이다. 

인스턴스 이미지는 말 그대로 학습 대상이 담긴 이미지이고, 클래스 이미지는 저 대범주 (저기선 girl) 에 해당하는 이미지를 넣어주면 됨. 대충 WebUI로 대량으로 뽑아내도 되고, 비슷한 그림이라면 외부에서 갖고와도 됨. (다만 WebUI로 뽑을 경우 전체적으로 퀄리티가 낮으면 결과물에 영향을 끼칠 수 있으니 quality tag 달고 뽑는걸 추천함)


4. AI 훈련 시작

- 배치 크기: 너무 높으면 코랩이라 터짐. 1로밖에 실험 안해봤다

- 해상도: 기본 512. 높아지면 또 터질지도 모름

- 클래스 이미지: 방금 올린 클래스 이미지 수. 본인은 30장/200장 선호함

- 학습률: lr_scheduler가 꺼져 있기 때문에 저대로 끝까지 가게 됨. 디폴트는 1e-6

- 훈련 횟수: 인스턴스 이미지 x 100 추천

- N회마다 훈련 저장: 위에 output_dir을 드라이브로 했을 경우 거기 저장되면서 용량 바로 다차니까 경로변경 하거나 꺼놓으셈


5. weight->ckpt


이때 ckpt_path를 드라이브 경로로 바꿔놓으면 바로 해당위치에 저장이 됨

이제 저거 들고 WebUI로 시험해보면 OK

+ 다음에 또 training할때 weight 저장 안해놨다면 또 모델 파일 디퓨저 포맷으로 변환할 필요가 있음. 




TheLastBen

https://colab.research.google.com/github/TheLastBen/fast-stable-diffusion/blob/main/fast-DreamBooth.ipynb

편의성 면에선 최고이긴 하다

다만 단점은 클래스(정규화) 이미지를 사용하지 않는다는 것

클래스 이미지의 역할은 과적합을 방지해서 이 프롬프트가 클래스 프롬프트 바깥에서 드러나지 않도록 하는 역할인데 여긴 그런 기능이 없다

하지만 오히려 화풍이나 캐릭터 하나만을 학습시키거나 해서 그것만을 위해서 쓸 경우에는 그렇게 큰 문제가 되지 않는다. 

그 외에도 그냥 클래스 이미지 만들기가 귀찮거나 할 때 빠르게 성과를 낼 수 있다


이건 그대로 영판을 써도 아무 문제가 없으니 바로 설명하겠다

1. Downloading the model


허깅페이스에서 모델을 퍼올게 아니기 때문에 CKPT_Path에 구드 nai모델 위치를 넣어주자

그리고 꼭! Compatibility Mode를 켜줘야 한다. 모델 파일 디퓨저 모델로 변환하는 것과 똑같은 역할을 한다


2. Create/Load a Session

여긴 재활용이 편하게 세션이란 이름으로 폴더를 만들어 데이터를 보관한다


- 세션명: 인스턴스 프롬프트랑 반드시 맞출 필욘 없지만 맞추는걸 권장함 (헷갈리니까)

- 링크: 전에꺼 불러오기용 (처음 켰으면 blank)

- Contains Faces: 얼굴이 있으면 Man이냐 Women이냐 Mixed냐를 물어보는데, 이건 No로 가는 걸 권장함. 만약 여기서 하나를 선택했다면 자동으로 남or녀 Regularization Image 200장을 붙여주는데, 이게 실사짤이라 NAI랑은 하나도 안 맞음. 

**사실 여기서 저 사진들을 지우고 그 자리에 제대로 된 클래스 이미지를 넣으면 유효할 수 있겠지만, 그럴거면 걍 ShivamShrirao 쓰자.클래스 프롬도 Man/Women/Mixed 고정이다. 


3. Instance Images


TheLastBen이 올려놓은 가이드이다. 올리기 전에 꼭 이런 식으로 이미지 이름을 바꾸고 올리라고 당부하는데, 이 이름이 인스턴스 프롬프트가 된다. 윈도우 기준 모두선택 + F2하면 일괄 변경되니 참조


4. Training

- ShivamShrirao랑 크게 다른 건 없지만 text encoder training이란 옵션이 있다. t2i의 과정에서 사용될 text prompt 내에 인스턴스 프롬프트의 개념을 넣는 과정이라고 생각하는데, 디폴트는 35%이다. 본인은 20%를 많이 사용한다. 

- 마찬가지 인스턴스 이미지 x 100의 스텝을 추천한다

- 트레이닝 꺼지면 자동으로 구드에 ckpt 형태로 저장된다. 만약 여러 번 Training해서 새 버전이 저장되면 구드 모델 우클릭-버전 기록 가면 이전껄로 롤백 가능하니 참고



그리고 이 레포에는 SD를 가져와서 바로 시험해볼 수 있는 기능이 있다. 최근에는 허깅페이스에 모델 자랑하기도 생겼는데 NAI는 huggingface에 못 들고가니 사용 불가



정리(링크)

ShivamShrirao TheLastBen


쓰고보니 시간 꽤 걸림... 

부족한 거 있으면 댓글로 알려주셈. 내일이나 주말에 고치겠읍니다