[튜토리얼]갬동실화~ 반 고흐가 내 초상화를!?!?!!!!! <dreambooth 깨부수기 -2->
본문 바로가기
ai 만들어보기(feat ai artwork lab)

[튜토리얼]갬동실화~ 반 고흐가 내 초상화를!?!?!!!!! <dreambooth 깨부수기 -2->

by mement0mori 2023. 9. 19.

 

자 그럼 한 번 해봅시다!

 

전체 순서는 이렇습니다.

 

0. 준비 (Dataset 준비 및 xformers 설치)

1. 모델 생성

 

2. 학습 설정하기 및 실행

 

3. 테스트

가봅시다.

0. 준비

본격적으로 모델 학습 전에 학습시킬 사진, 이미지를 준비합시다. 그 다음 하나의 폴더 안에 몰아넣으세요. 디렉토리 위치는 심플하게~ 저 같은 경우 D:\dataset 이라는 폴더를 만들어 넣었습니다. 보통 이렇게 인공지능 학습에 쓰이는 이미지니 뭐니 모아놓은 걸 데이타셋Dataset이라고 합니다. 용어에도 익숙해집시다.

이미지 사이즈는 뭐 알아서 자동으로 조정을 해준다고는 하는데 왠만하면 내가 학습하고자 하는 Model이 학습한 이미지 사이즈에 맞춰서 조정해두는 편이 더 나을 것 같습니다. 저 같은 경우 스테이블 디퓨전stable diffusion 1.5 모델을 학습했는데 이 경우 512 X 512 이미지가 기본이기 때문에 맞춰서 이미지를 전부 리사이징 및 크롭했습니다. 여기서 팁~ 그런 이미지 크롭리사이징 저장까지 한방에 되는 웹서비스가 있습니다. 여기->https://www.birme.net/?target_width=512&target_height=512 이용해보시길.

그 다음 xformers 라이브러리를 설치하고 세팅합니다. 이거는 따로 튜토를 만들진 않겠습니다. 이 페이지(https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Xformers) 에 자세히 나와 있으니 차근차근 따라하시면 쉽게 가능합니다~ 없어도 학습이 가능하긴 한 것으로 아는데 어지간하면;; 설치를 권장드립니다. 참고로 학습 뿐만 아니라 이미지 생성도 더 빨라집니다. 이런 거 설치 익숙하지 않으신 분은 여기가 본 편보다 쬐-끔 더 복잡할 수도 있을지 모르지만~ 그렇다고 아주 어려운 것도 아니니 시도해보시기 바랍니다~

여기까지 왔으면 일단 절반은 성공~

본편으로 갑시다~

1. 모델 생성

처음 Dreambooth 탭을 선택하면 뭐가 막 많이 나올 텐데, 왼쪽부터 순서대로 Model - Input - Output 이렇게 돼 있을 겁니다.

모델생성

거기서 왼쪽 Model탭에 Select와 Create가 보일 겁니다. 거기서 Create 선택하시고 Name에다가 나만의 모델 이름을 적습니다. 마음에 드는 거 아무거나요. 그 다음 Source Checkpoint에서 내가 학습시킬 Model을 선택합니다.

모델생성

이 지점이 또 쥑이는 포인트인데, 한마디로 우리가 civitai에서 파인튜닝된 모델들을 막 다운 받지 않습니까? 그 중에 마음에 드는 모델 아무거나 골라잡아 학습시킬 수 있다는 겁니다! 전 일단 테스트용으로 기본- 스테이블 디퓨전stable diffusion 1.5 모델을 선택했습니다. 기본 모델은 여기서 다운 가능합니다. (https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main). 여기까지 됐으면 노오란 Create Model 클릭~ 그럼 막 또 컴퓨터가 바쁘게 돌아가면서 Output에 뭔가 작업이 이뤄질 겁니다. 이게 끝나면 모델 생성은 끝~

2. 학습 설정하기 및 실행

이제부터 더 쉬워집니다. 중간에 Input으로 갑니다. 거기서 settings 탭부터 봅시다. 다른 거 할 거 없이 우리는 모두 초심자니까 딱 보이는 Performance Wizard(WIP) 클릭!

학습하기

그러면 뭐 휘리릭 세팅을 잡아줄 겁니다. 끝입니다- 하고 넘어가면 좋지만 명색이 Lab이니까 전부 다는 아니고 몇 가지 학습에 도움이 될 만한 설정을 짚고 넘어가봅시다. 넘어가고 싶어도 아래 설명은 꼭 보고 넘어갑시다!

학습하기

먼저 볼만한 것이 Training Steps Per Image(Epochs)입니다. 요거는 뭐 오다가다 보셨을 텐데 한마디로 우리가 제공한 이미지 한 장당 몇 번이나 학습(연산)을 할 것인가?에 대한 설정입니다. 걍 스타일은 기본 100, 사람 얼굴이면 150 정도로 설정이 되더군요. 내가 제공한 사진이 20장이면 20X150=3000번 학습하는 겁니다. 좀 정밀하게 학습시키고 싶다 싶으면 이걸 건드리면 됩니다.

그리고 아래 별표친 Save Preview 부분, 이거는 꿀팁인데 저도 그렇고 이거 때문에 학습 실패하는 사람이 많습니다. 그냥 이 확장기능 오류같은데 저걸 0으로 해둬야 학습이 됩니다. 단 학습 중간에 preview를 보지 못하기 때문에 천지신명께 학습이 잘 되길 빌면서 기다려야 합니다. 저거 외에 해결방안 나오면 공유하겠습니다~.(여기서 다음 편으로 가도 무방하긴 함!ㅋㅋ) 저거 수치 0으로 안 해도 되는 분들은 그렇게 하심 됩니다~

다음 아래 쪽을 보면.

학습하기

이거는 둘 다 체크하면 메모리를 아껴가며 학습할 수 있습니다. 공통적으로 그라디언트Gradient가 들어가있죠? 아주- 쉽게 말해 음... 모델의 오차(손실)가 변화하는 정도를 말합니다. 모델이 얼마나 잘 굴러가는지, 틀려먹었는지 계속 측정하는데 그 변화율이랄까요? 그걸 가지고 이러쿵저러쿵해서 메모리를 최적화하는 겁니다. 성능 좀 딸리다 싶으면 둘다 체크하셔용~

그 다음 아래 쪽 좀 중요한 거?

학습하기

Learning Rate 즉 학습률입니다. 이걸 1e-5, 1e-6 막 이런 식으로 표기하기도 합니다. 이런 web UI말고 직접 코딩해서 학습할 땐 그렇게 쓰죠. 작은 실수를 표기하는 방법인데 0.000002 = 2e-6 입니다. 이거 뭐 별건 아니고 "2에 10의 -6승을 곱한 값"입니다. ㅎㅎ 가끔 드림부스 다른 사람들 세팅보면 저렇게 표기돼 있는 경우가 있는데 이런 겁니다.

이거는 위에 그라디언트랑도 관련이 있는데 저 그라디언트에 얼마나 민감하게 반응할지 정하는 겁니다. 자 그라디언트가 아 이 모델 10만큼 틀려먹었네! 하면 거기에 학습률이 곱해지는겁니다. 그런데 문제는 이 숫자가 너무 커버리면 모델의 수정이 막 이리갔다가 저리갔다 하니까 제대로 결과가 안 나올 수 있겠죠? 반대로 너무 작으면 찔끔찔끔 수정해가면서 어느 세월에 모델 결과를 도출하겠습니까?

장단점이 있겠죠? 학습률이 높으면 속도는 빠르고 자원은 덜 잡아먹는데 모델 정확도, 품질이 떨어질 것이고, 낮으면 속도가 느려지고 자원을 잡아먹는 대신 모델의 정확도와 품질이 나아질 겁니다. 이건 학습환경에 따라 달라질 건데 기본 0.00002로 하면 속도도 크게 느리지 않으면서 학습결과물도 괜찮게 나올 겁니다. 자동으로 잡을 때 시스템이 좀 아니다 싶으면 이거보다 더 큰 숫자로 잡을 수도 있는데 음 찾아보니 권하지는 않더군요. 참고하세요~

Learning Rate Scheduler는 효율적인 학습을 위해서 말그대로 스케쥴링을 하는 겁니다. 예를들어 처음엔 학습률을 좀 높게 잡았다가 줄여나간다던지, 일관되게 유지한다던지 뭐 그런 겁니다. 딱히 이것도 정답은 없고, 데이터셋이나 학습경과에 따라서 이거저거 해보면서 스케쥴러도 바꿔볼 수 있는데, 그냥 자동으로 골라주는 거 쓰면 될 거 같습니다. ㅎㅎ

다음 설정을 봅시다.

 
학습하기

Max Resolution은 우리가 학습할 이미지 사이즈를 결정하는 건데 모델 이미지 사이즈와 맞추기로 합의봤죠? 참고로 스테이블 디퓨전 2.0 모델은 768 학습 가능합니다. 물론 시간도, 자원도 더 잡아먹겠죠? 넘어갑니다.

Tuning에 Use EMA는 체크하지 않습니다. 모델 훈련 기법인데 퀄은 좋아지지만, VRAM을 잡아먹으니 방구석 아티스트에게는 조금 어렵죠. 그밖에 모두 다 최적화와 관련된 것들입니다. 그냥 골라주는대로 두시면 되겠습니다. xformers설치하셨다면 memery attention 설정도 저렇게 됐을 겁니다.

자자 너무 길어지는 거 같네요. 휙휙 가서 하나만 더 봅시다.

학습하기

Prior Loss 이 개념도 알아두면 좋은 게 모델 학습 끝나면 그래프가 띡 나오는데 거기 한 줄 차지하고 있어서 궁금해지거든요. 뭔지. ㅎㅎㅎ 이거는 일반화(generalization)란 개념과 관련이 있는데요. 데이터를 최적화한다는 겁니다. 딱 기능만 말하면 Prior Loss Weight를 올리면 일반화가 더 잘 되도록 합니다.

일반화가 뭐냐고요? 예를들어 봅시다. 제 아들 사진을 학습시킨 다음 반 고흐 스타일로 바꿔줘! 이랬는데 그냥 제 아들 사진만 나오면 이거는 문제잖아요? 일반화가 안 된 겁니다. 이런 걸 과적합(Overfitting)이라고 합니다.

반대 경우도 문제죠. 제 아들 사진을 학습시킨 다음 반 고흐 스타일로 바꿔줘! 이랬는데 걍 반 고흐 그림만 줄창 나오는 겁니다. 이거는 아예 학습 자체가 제대로 안 됐죠. 과소적합(Underfitting)이라고 합니다.

즉 저걸 적당히 설정해야 반 고흐가 그린 것 같은 아들 사진이 나오는 거죠. 설명이 길었는데 결론은 일단 자동 설정 그대로 걍 두자입니다. ㅋㅋㅋ settings 탭은 여기까지만 알아도 많이 아시는 걸 겁니다.

또 한 번 결론은 자동으로 돌리고 걍 둬도 된다 입니다. ㅋㅋㅋㅋㅋㅋㅋ 근데 언제까지 초보일 순 없으니 ㅋㅋ이 개념을 알아두고 있다가 커스터마이징하면서 학습하면 더 좋겠죠?

너무 길어지는 거 같아서 나누겠습니다~ 다음 편에서 만나용~~~

 

 

출처-갬동실화~ 반 고흐가 내 초상화를!?!?!!!!! <dreambooth 깨부수기 -2-> : 네이버 카페 (naver.com)

 

AI ARTWORK LAB : 네이버 카페

stable diffusion 기반 이미지 생성을 비롯한 자연어처리 인공지능을 연구합니다. 쉽고~ 재미있게~

cafe.naver.com