AI 이미지/Stable Diffusion

Stable Diffusion - LoRA 모델 사용법

하늘이푸른오늘 2023. 4. 27. 12:38

ghibli style, 3 girls, full body, cheering, smile, playing with rabbit and deer, landscape, snow mountain in the distance,
ghibli style, 3 girls, full body, cheering, smile, playing with rabbit and deer, landscape, snow mountain in the distance,

그림 생성형 인공지능인 Stable Diffusion을 사용해서 이미지를 생성하다보면 LoRA라는 단어를 자주 만날 수 있습니다. 이 글은 LoRA 모델이 무엇인지, 일반적인 checkpoint 모델과는 무엇이 다른지, 그리고 어떻게 사용해야 하는지 등에 대해 간단히 정리합니다.

로라 모델은 일반적인 checkpoint 모델에서 작은 변화만 일으키는, 크기가 작은 Stable Diffusion 모델입니다. 일반적으로 체크포인트 모델보다 1/10 ~ 1/100 정도 크기뿐이 안되어서 여러가지 모델을 수집하는 사람들에게 매우 인기가 높습니다. 

이 글은 이제까지 LoRA를 사용해 보지 않은 초보자를 위한 튜토리얼입니다. LoRA가 무엇인지, 어디에 있는지, AUTOMATIC1111에서 어떻게 사용하는지 등을 설명할 예정입니다. 마지막으로 LoRA 모델 데모도 몇개 보여드리겠습니다.

LoRA 모델이란?

LoRA(Low-Rank Adaptation, 저 랭크 적응?)은 Stable Diffusion 모델을 세부 조정하기 위한 학습 기법입니다. Stable Diffusion에는 Dreambooth와 textual inversion과 같은 학습기법도 있는데, LoRA 는 뭐가 다를까요? LoLA는 파일 크기와 학습 능력간에 적절한 균형을 이루고 있습니다. Dreambooth는 강력하지만, 모델 파일의 크기가 매우 큽니다(2~7GB). 텍스 인버전(textual inversion)은 파일이 아주 작지만(100KB 정도), 할 수 있는 게 많지 않습니다. LoRA는 이 두가지의 중간쯤이라고 보시면 됩니다. 파일 크기는 2~200MB 정도로 부담스럽지 않으며, 학습능력도 괜찮은 편입니다.

모델을 사용해 여러가지 실험을 하는 Stable Diffusion 사용자라면, 저장용량이 얼마나 빨리 소모되는지 이미 알고 계실 겁니다. 파일 크기가 너무 커서 원하는 모델을 모두 수집하기엔 부담이 큽니다. 하지만 LoRA를 사용하면 저장 용량 문제를 어느정도 피해갈 수 있습니다.

텍스추얼 인버전과 마찬가지로 LORA 모델은 단독으로 사용할 수 없고, 모델 체크포인트 파일과 함께 사용해야 합니다. LoRA 은 함께 사용하는 모델 파일에 작은 변화을 가하여 스타일을 변경시키는 역할만 하기 때문입니다.

LoRA 작동 원리

LoRA는 스테이블 디퓨전 모델 중 가장 중요한 부분인 교차 인지(cross-attention) 레이어에 작은 변화를 가합니다. 여기가 이미지와 프롬프트가 만나는 지점입니다. 연구자들은 모델의 이 부분만 잘 세부조정해도 좋은 학습 결과를 달성하는데 충분하다는 것을 발견했습니다. 교차 인지 레이어는 아래의 스테이블 디퓨전 아키텍처 그림에서 노란색 부분에 해당합니다. 아래 그림은 Stable Diffusion 논문에서 가져온 것입니다.

LoRA 는 교차 인지 레이어(U-Net 잡음 예측기중 QKV)를 세부조정한다.
LoRA 는 교차 인지 레이어(U-Net 잡음 예측기중 QKV)를 세부조정한다.

교차 인지 레[이어의 가중치는 행렬에 저장됩니다. 행렬은 기본적으로 엑셀 스프레드시트처럼 열과 행으로 나열된 숫자들에 불과합니다. LoRA 모델은 이러한 행렬에 가중치를 추가함으로써 모델을 미세 조정합니다.

LoRA 모델이 동일한 수의 가중치를 저장하면서도 파일 크기가 작은 이유는 뭘까요? LoRA는 행렬을 랭크가 낮은(low-rank)  두 개의  행렬로 분해하기 때문입니다. 이렇게 함으로써 훨씬 더 적은 숫자를 저장할 수 있습니다. 아직 이해가 잘 안되실텐데 (글을 쓰는 저도 잘 이해가 안됩니다. ㅠㅠ) 예를 들어 설명해 보겠습니다.

어떤 모델이 1000개의 행과 2000개의 열로 구성된 행렬을 가지고 있다고 가정하겠습니다. 그러면 그 모델 파일에는 2백만 (1000x2000)개의 숫자가 저장됩니다. LoRA는 이 행렬을 1000x2 행렬과 2x2000 행렬로 쪼갭니다. 이렇게 하면 총 6천개(1000x2 + 2x2000)의 숫자만 필요하고, 따라서 원래의 행렬에 비해 1/333 으로 줄어듭니다.이 때문에 LoRA 파일의 크기가 훨씬 작은 것입니다.

LoRA 는 큰 행렬을 두개의 작은 하위 행렬로 분해한다.
LoRA 는 큰 행렬을 두개의 작은 하위 행렬로 분해한다.

이 예제에서 LoRA에 저장되는 행렬의 랭크(rank)는 2입니다. 원래의 차원의 랭크는 2000 이니 훨씬 작죠. 그래서 저 랭크 행렬(low-rank matirix)라고 합니다. 하지만, 이렇게 행렬의 크기를 줄이면 문제가 발생하지 않을까 하는 의문이 들 수 밖에 없습니다. 그런데, 연구자들에 따르면 교차 주의(cross-attention) 레이어에서는 이렇게 해도 미세 조정 성능에 큰 영향을 미치지 않는다고 합니다. 다행스럽게도요.

LoRA  모델을 다운 받을 수 있는 곳

civitai 에 들어가시면 LoRA 모델이 아주 많습니다. 이 링크를 누르면 LoRA 모델만 보실 수 있습니다. 아니면 아래처럼 설정하면 LoRA 모델만 표시됩니다. 대부분의 LoRA가 여성, anime, 사실적인 일러스트레이션 스타일 등 비슷비슷한 경향이라는 걸 느끼실 것입니다. 유명인 LoRA를 찾는다면 이곳이 유일한 대안일 것 같습니다. (주의 : civitai에는 노골적인 (NSFW, 후방주의) 이미지가 많습니다!!)

civitai - LoRA 필터 적용
civitai - LoRA 필터 적용

Hugging Face 에도 LoRA 가 많이 저장되어 있습니다. 하지만 클릭해야만 모양을 볼 수 있어 불편하고, 다운로드한 숫자도 많지 않는 걸로 보아 그냥 civitai를 이용하는 게 나을 것 같네요.

LoRA 사용법

이 절에서는 Stable Diffusion의 대표적인 UI인 AUTOMATIC1111에서 LoRA 를 사용하는 방법을 설명합니다. 참고로 AUTOMATIC1111은 윈도, 맥 및 Google Colab에서 설치할 수 있습니다.

AUTOMATIC1111은 기본적으로 LoRA를 지원합니다. 따라서 확장 프로그램을 설치할 필요가 없습니다.

1 단계 LoRA 모델 설치 : civitai 등에서 다운로드 받은 LoRA 모델 파일을 아래의 폴더에 넣어줍니다. 준비는 이게 끝!

           stable-diffusion-webui/models/Lora

2 단계 LoRA 모델 사용 : LoRA 를 사용하려면 프롬프트에 다음과 같은 형식으로 입력하면 됩니다. 

          <lora:filename:multiplier>

여기에서 filename은 LoRA 모델의 파일명입니다. 단, 확장자는 제외합니다. multiplier는 LoRA 모델에 적용할 가중치로서 기본값은 1입니다. 0으로 설정하면 해당 LoRA 파일을 사용하지 않게 됩니다.

LoRA 파일명을 입력할 때 정확하게 입력하기 힘들거나, 어떤 LoRA를 써야 할지 모르겠다면, 아래처럼 [Generate]버튼 아래에 있는 화투 모양의 버튼을 클릭합니다.

AUTOMATIC1111 - 모델 버튼
AUTOMATIC1111 - 모델 버튼

그러면 아래와 같이 텍스트 인버전, Hypernetworks 등 체크포인트 모델과 함께 사용할 수 있는 여러가지 보조 모델들이 나타납니다. 여기에서 LoRA 탭을 클릭한 뒤, 원하는 LoRA 파일을 클릭하면 자동적으로 해당 LoRA 파일의 내용이 프롬프트에 들어가게 됩니다.

Stable Diffusion AUTOMATIC1111 - LoRA 선택 방법
Stable Diffusion AUTOMATIC1111 - LoRA 선택 방법

LoRA 사용시 주의 점

LoRA를 사용하는 문법 <lora:filename:multiplier> 에서 multiplier 값은 0~1 사이로 지정하면 됩니다. 0으로 지정하면 해당 LoRA를 사용하지 않는다는 뜻이 되고, 1로 지정하면 LoRA를 완전히 강하게 적용한다는 뜻입니다. 

일부 LoRA 모델은 Dreambooth를 사용하여 학습하였습니다. 이 경우, LoRA 모델을 사용하려면 "발동 키워드(trigger keyword)"를 함께 사용해야 합니다. 따라서 LoRA 모델을 가져올 때 해당 페이지에 trigger keyword가 지정되어 있는지 확인할 필요가 있습니다. 아래는 지브리 스타일로 만들어주는 LoRA인데, 보시는 것처럼 트리거 키워드가 'ghibli style'로 되어 있음을 알 수 있습니다.

Ghibli style LoRA
Ghibli style LoRA

또 LoRA는 임베딩(embdding)과 비슷하게 여러개의 LoRA 모델을 한꺼번에 사용할 수 있으며, 또한 임베딩과 LoRA를 함께 사용하여도 무방합니다.

AUTOMATIC1111에서 LoRA관련 단어는 프롬프트에 들어가기는 하지만, 프롬프트의 일부는 아닙니다. LoRA관련 단어는 모델이 적용된 후 제거됩니다. 따라서 [keyword1:keyword2:0.8]과 같은 프롬프트 문법을 사용할 수 없습니다.

LoRA 모델의 예

아래는 Andrew님의 글에 있는 것중 일부, 그리고 제가 좋아하는 LoRA를 몇개 소개합니다.

수묵화 LoRA 모델

수묵화 LoRA 모델은 동양의 수묵화 형태의 그림을 그려주는 LoRA입니다. 疏可走马(Shukezouma) 는 수묵화에서 비어있는 여백이 하도 커서 말이 지나갈 수 있을 정도로 넉넉하다는 뜻이라고 하네요. 

수묵화 LoRA 모델 페이지: 墨心 MoXin

Andrew님은 중국 여인이 등장하는 国风3 GuoFeng3 모델과 함께 사용했다는데, 저는 구지 필요가 없다 싶어서 ChilloutMix 모델을 기반으로 작업했습니다.  프롬프트는 아래와 같습니다.

프롬프트 : (shukezouma:0.5) , <lora:Moxin_10:1> , chinese painting, half body, female, perfect symmetric face, detailed chinese dress, mountains, flowers, 1girl, tiger
부정적 프롬프트 : disfigured, ugly, bad, immature

아래는 이렇게 만들어진 결과입니다. 만들고 보니... 여자 얼굴이 아이돌 스타일이라 약간 수묵화 느낌이 덜 나네요. 

흠... 비교라도 해 볼 목적으로 国风3 GuoFeng3 모델로 작업해 보았습니다. 옷 스타일과 머리 스타일이 중국풍이 많이 느껴지긴 하네요. 전체적으로 뒷배경의 산이나... 나무에 핀 꽃 등도 수묵화 느낌이 나고요. 재미있는 LoRA 같습니다. 

보시는 것처럼, 그냥 LoRA 만있다고 아무 모델과 함께 사용하면 원하는 이미지가 만들어지지 않습니다. LoRA 페이지를 읽어보면 어떤 모델과 함께 사용할 때 가장 효과가 좋은지 쓰여있으니 이를 참고해서 작업하셔야 합니다.

Cyberpunk 2077 타로 카드

이 LoRA 모델은 사이보그와 사이버펑크 스타일의 도시를 생성해줍니다.

LoRA 모델 페이지

함께 사용한 모델은 Anything v4.5 모델입니다. 이 모델은 안 사용해봤지만, 애니 혹은 만화 관련 이미지를 만드는 데 특화된 모양이네요. 프롬프트는 아래와 같습니다.

프롬프트: cyberpunk, tarot card, close up, portrait, bionic body, cat, young man, perfect human symmetric face, leather metallic jacket, circuit, city street in background, natural lighting, masterpiece <lora:cyberpunk2077Tarot_tarotCard512x1024:0.6> 
부정적 프롬프트: (worst quality, low quality:1.4), (painting by bad-artist-anime:0.9), (painting by bad-artist:0.9), watermark, text, error, blurry, jpeg artifacts, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, artist name, bad anatomy, big breast

아래는 그 결과입니다. 앞쪽 두개는 제가 생성한 것이고, 뒤쪽 두개는 Andrew님 글에서 가져온 건데.... 아무래도 모델을 바꿔야 하는 건가... 싶기도 하네요~~

지브리 스타일 LoRA

제가 지브리 스타일을 좋아하다보니, 이 LoRA를 찾아보게 되었습니다. 애니메이션의 주인공이 그대로 나오는 건 아니니 기분이 좀 묘하달까... 아무튼 그래도....

LoRA 페이지: Studio Ghibli Style LoRA 

이 페이지에 들어가보면, 역시 Anything v4.5 혹은 AbyssOrangeMix2 를 사용하면 좋다고 하네요. 저는 Anything v4.5  모델을 사용했습니다.  프롬프트는 아래와 같습니다. 참고로 맨 앞에 있는 'ghibli style'이 발동 키워드입니다.

프롬프트: ghibli style, 1girl, smile,  jewelry, armlet, bangs, black hair, earrings, grassland with flowers, mountain in the distant, looking at viewer, medium breasts, nature, white shirt , ((masterpiece)) <lora:studioGhibliStyle_offset:1>

아래는 이 결과입니다. 이중에는 프롬프트가 약간 달라진 것도 있으니 감안해서 보시길...

====

이상입니다. 이 글은 Andrew님의 글을 번역하면서 일부는 제가 좋아하는 스타일로 변경한 것입니다. 

민, 푸른하늘