안녕하세요. kakarot 입니다.


이번에는 저의  Kohya_ss 얼굴 로라 만들기 마지막 단계인 -심화 과정- 을 진행 하겠습니다.



*본 글은 12.7일 Kohya_ss V22.0.1 기준으로 작성하였으며, 기술의 발전에 따라 결과는 달라질 수 있다.

*본 글은 본인의 개인적인 경험에 의한, 사견이 많이 들어가 있는 나의 테스트 과정을 적은 글이다.

*언제든지 이 글을 통하여, 잘못된 정보가 있거나 좀 더 좋은 방법이 있으면 피드백 해주길 바란다.

*지금까지의 과정 중에서 질문이나 문의사항은 본 글에서 하여도 괜찮다.

(본인이 아니여도 다른 분들께서 답변을 해주는 곳이 되었으면 한다.)

*이 글에서는 Text Encoder 학습률과와 Unet 학습률에 대해서는 다루지 않았다.

*참고된 자료의 모든 로라 가중치는 1이며, 네거티브 임베딩만 사용하였다.



그동안 즐거운 로라 만들기를 하였는가? 본 글은 나의 궁금증을 추상적인 개념과 나의 개인적인 사견으로 진행된다.


시작은 이렇다.


'로라 만들기는 너무 무겁다.'


왜?

하나의 로라를 만드는데 완성되는 시간이 너무 오래 걸리기 때문이다. 하나의 로라를 만들고 그에 따른 에포크(Epoch)를 진행 하면은

본인의 그래픽 카드(4070ti) 기준으로 많게는 1시간 40분 정도의 시간이 소요된다.(10~15 에포크)

(준비된 자료와 반복 학습이 많으면 시간은 더욱 늘어나게 된다.)

*파일 정제와 자료 수집까지하면 시간은 더욱 많이 늘어나게 된다. 이것은 모든 준비가 완료 되었을때의 기준이다.


1개의 이미지는 보통 100번의 반복 학습을 하면 충분히 완료가 된다고 한다. 그 이상의 반복 학습을 하게 되면, 너무 사소한 것까지 학습을 하기때문에

로라의 오염도가 늘어날 가능성이 높다.


그렇다면. 적은 반복 학습과 학습률, Network Rank&Alpha(성능을 높이는 기능) 그리고 다른 고급 설정들로 시간을 줄일 수는 없을까?


그렇게 시작하게 되었다.


*전문적인 용어보다는 우리가 아는 보다 친근한 것들로 설명을 진행한다.


네트워크 랭크와 알파 말고 또 다른 화질(또는 성능)을 높이는 설정 중에는 LR Scheduler와 Optimizer가 있다.


옵티마이저는 샘플러라고 생각하면 되고, 스케쥴러는 업스케일 종류라고 생각하면 편하다.


여러 옵티마이저가 있는데, 본인 그래픽 카드 기준으로는 작동되는 것이 없었다. DAdaptAdam이라고 좀 더 고품질로 만들 수 있게 한다고 하는데

최소 사용이 VRAM 6g이지만 본인의 그래픽 카드로는 작동이 되질 않았다.(4070ti VRAM 12g)

그래서 옵티마이저는 제일 안정성이 높은 AdamW8bit(기본 옵션)로 진행하였다.


스케쥴러는 크게 네 개가 있는데 본인 기준으로는 cosine이 (기본 옵션) 제일 무난하였으며, 판단은 개인의 판단에 맡긴다.

cosineconstantlinearpoly

constant도 많이 사용한다. 특유의 색감이 좋다.


반복 학습은 5번, 10번, 25번, 50번, 100번으로 테스트 하였다.

학습률의 진행은 0.0001부터 0.001, 0.01, 0.1, 1, 10, 50, 100으로 테스트 하였다.

네트워크 랭크는 64, 128, 256, 512로 테스트 하였다. (64로 진행된 테스트는 유의미한 결과값이 나오지 않았기때문에 포함하지 않았다.)

에포크는 2번의 에포크 설정으로 테스트 하였다.


총 94번의 테스트를 진행 하였고, 두 종류의 정제된 파일 묶음으로 진행 하였다. (밑에 사진에 나오는 12.5_test1과 12.5_face2)

12.5_face2는 test1로 어느정도의 확신을 가진 상태에서 확인하는 과정으로 진행되어 적은 수의 테스트를 하였다.



*face2 정제된 파일 묶음




face2)     반복 학습 100번 Network Rank&Alpha 128  학습률 0.0001 결과물(목표하는 결과값)






face2)     반복 학습 25번 Network Rank&Alpha 256  학습률 100 결과물






face2)     반복 학습 50번 Network Rank&Alpha 128  학습률 100 결과물




face2)     반복 학습 50번 Network Rank&Alpha 256  학습률 100 결과물




 Network Rank&Alpha 512는 오염도가 많이 진행 되었고, 로라의 용량 또한 576메가 정도가 나오기 때문에 256를 최대치로 잡았다.


원본과 제일 비슷하게 나왔던 결과물은

 반복 학습 50번 Network Rank&Alpha 128  학습률 100

 반복 학습 50번 Network Rank&Alpha 256  학습률 100


으로 진행 하였을 때  반복 학습 100번 Network Rank&Alpha 128  학습률 0.0001로 진행 하였을때의 결과물과 비슷하게 나왔다.

자료가 적고, 특색이 강하지가 않기 때문에 위에 설정으로 하였을때의 결과 값은 달라질 수 있다.


본인이 찾은 적은 반복 학습으로 원본(반복 학습 100번 Network Rank&Alpha 128  학습률 0.0001 결과물)과 비슷하게 만들 수 있는 최적의 세팅값이라고 생각한다.


물론 그 외 다른 설정 값으로도 유의미한 결과를 만들었지만, 특색이 강하지 않은 자료기 때문에 정보의 정확도는 떨어질 수 있어서 언급은 하지 않겠다.


이 글을 마지막으로 저의 Kohya_ss 얼굴 로라 만들기는 종료 하였습니다.

그동안 따라 오시느라 고생 많으셨습니다.

모두 즐거운 AI 생활 하시길 바랍니다.




번외

*최적화는 낮은 네트워크 랭크로 정제된 많은 자료로, 적은 용량으로 만드는게 목표이며, 내가 원하는 결과물에 따라 이 결과 값은 더 낮아 질수 있다.

(이론상 50번의 반복 학습으로 얻을 수 있는 결과 값은 더 낮은 반복 학습과 네트워크 알파, 학습률 변경으로 비슷한 결과 값을 얻을 수 있다는 뜻)


*위에 살짝 언급한 txt 학습률과 unet 학습률은 sdxl 로라를 만들때나(sdxl 로라는 추상적인 프롬프트 설정을 넣는 것이 매우 중요하다.)

좀 더 복잡한 설정의 효과들이나 의상 만들때 필요한 블록 웨이트를 쓸때 더 유의미한 결과를 나타낼 수 있다.

(아직은 관심이 없어서 공부를 하지 않았다.)


*한번 정제된 파일을 잘 만들어 놓으면, 정제된 파일들의 조합으로 무수히 다양한 로라를 만들 수 있으며, 기술의 발전으로 기존에 방식들이 변경이 되더라도 정제된 파일은 추후 많은 시간동안은 로라를 만들때 나의 귀중한 자료들로 활용 할 수 있을 것으로 판단된다.

(sdxl 로라 만들때도 물론 사용할 수 있다.)

*네트워크 랭크 256으로 로라를 만들 었을때 용량은 약 288메가로 만들어 진다.

*준비된 파일이 많을 수록 학습률을 낮추고, 준비된 파일이 적을 수록 학습률을 높인다.

(물론 전제 조건은 잘 정제된 파일이다.정제가 안된 파일로 학습률을 높이면 오염도가 높아진다.)