LoRA Block Weight 로라를 원하는 부분에만 적용하는 방법

스테이블 디퓨전 WebUI로 AI 그림을 생성할 때 모델의 2% 부족한 부분을 채워주는 것이 바로 로라(LoRA)입니다. 그런데 로라를 사용하면서도 그림에서 내가 원하는 부위만 적용하고 싶을 수 있는데요, 이때 사용하는 확장기능이 바로 LoRA Block Weight 입니다. 본 글에서는 로라 블록웨이트 사용법에 대해 알아보도록 하겠습니다.

LoRA Block Weight 설치

로라 블록웨이트 또한 Automatic1111 WebUI의 확장기능이므로, 아래 그림을 참고[Extensions > Available > Load from > lora block 검색 > Install(설치)]하여 WebUI 상에서 찾아 Install을 누르면 쉽게 설치할 수 있습니다.

LoRA Block Weight

만약 Available에서 LoRA Block Weight 검색이 불가하신 분들은 Install from URL탭에서 아래 주소를 입력하여 설치하시면 됩니다.

https://github.com/hako-mikan/sd-webui-lora-block-weight

예시 사진에는 이미 설치가 되어 있기 때문에 Installed라고 나오지만, 설치 하지 않은 분들은 설치 버튼을 누른 뒤 WebUI를 종료 후 다시 실행시켜주시면 아래와 같이 LoRA Block Weight 기능이 활성화 된 것을 확인할 수 있습니다.

lora block weight activated

예시에서는 ControlNet 기능 아래에 추가된 것을 확인할 수 있습니다. 사용자의 확장기능 설치 상태에 따라 LoRA Block Weight 기능이 추가되는 위치는 다를 수 있습니다.

LoRA Block Weight 적용 방법

이제 설치를 마쳤으므로 직접 LoRA Block Weight를 적용해 그림을 생성하는 방법을 살펴보도록 하겠습니다. 로라 자체 사용법에 대해 생소하신 분은 아래 글을 먼저 참고사히기 바랍니다.

일단 LoRA Block Weight를 적용해 그림을 생성하기에 앞서 확장기능 탭을 펼쳐놓고 살펴보면 아래와 같습니다.

LoRA Block Weight Active

기능 활성화를 위해 Active 체크박스를 활성화 합니다. 이후 아래의 Weights Setting을 보면 알 수 없는 숫자들이 나열되어 있습니다. 이 숫자들이 바로 로라를 적용하는 범위를 지정하는 프리셋 입니다. 예를 들어 NONE을 보면 모든 숫자가 0으로 되어 있는데, 이는 로라를 적용하지 않겠다는 의미입니다. 반면, ALL을 보면 모두 1로 되어 있으므로 그림의 전 영역에 로라를 적용한다는 의미입니다. 숫자 0은 미적용, 숫자 1은 적용의 의미이며 각 숫자의 위치별 그림 내 담당 영역이 다르다는 것을 알 수 있습니다.

이제 이 프리셋을 로라 사용시 적용하는 방법을 알아보도록 하겠습니다. 적용 방법은 매우 간단한데요, 프롬프트에 로라를 적을 때 아래와 같이 가중치 뒤에 lbw=프리셋명 으로 작성하면 됩니다.

<lora:hanboka:1:lbw=CLOTHING>

아래는 한복 로라를 적용해 만든 그림을 비교한 것입니다. 순서대로 로라 미적용, 전체 적용(블록웨이트 없이), 부분 적용(블록웨이트 의상만 적용) 결과입니다.

Lora Block Weight Comparison01

그림 생성시 사용한 프롬프트와 시드 등 다른 조건은 모두 동일하며, 오직 LoRA 적용 여부 및 적용 부위만 차이를 뒀습니다.

📌 Positive prompt

(best quality:1.5), (realistic:1.5), wide shot, girl, solo, disheveled hair, korean traditional clothes, hanbok, full body, <lora:hanboka:1:lbw=CLOTHING>

📌 Negative prompt

(worst quality:1.5), japanese clothes, kimono,

순서대로 살펴보면 로라 미적용 그림은 한복 보다는 계량한복 정도의 의상을 표현하고 있는 반면, 로라 전체 적용 이미지는 완벽하게 한복을 입은 여성을 표현하고 있습니다. 반면 LoRA Block Weight를 적용해 의상에만 로라를 적용한 이미지의 경우 마찬가지로 한복을 잘 표현하고 있지만 의상의 색이 조금 옅은 느낌입니다. 동일한 프롬프트로 가로 이미지도 한 번 생성하여 비교해보면 다음과 같습니다.

Lora Block Weight Comparison02

마찬가지로 한복 자체의 표현은 로라가 적용되었을 때 훨씬 자연스러웠으며, 블록으로 적용했을 때는 어딘가 조금 색이 덜 들어간 느낌입니다.

가로 이미지에서 주목할 점은 바로 배경에 있는데요, LoRA를 전체 적용했을 때 배경에 기와집이 등장하는 것을 볼 수 있습니다. 무작위 시드값으로 그림을 여러번 반복 생성해봤을 때 높은 확률로 배경에 기와집이 등장했는데요, 이는 우리가 사용한 로라가 비록 한복 로라라고 할지라도 실제 학습때는 한복과 함께 기와집들도 같이 학습되었을 확률이 높다는 것을 의미합니다.

즉, LoRA Block Weight로 배경에는 로라를 적용하지 않은 경우 의상에만 로라가 영향을 미치고 있는 것을 간접적으로 확인할 수 있다는 것입니다. 따라서 여기서 우리는 사용자가 로라의 적용 범위와 강도 등을 잘 활용하면 조금 더 의도에 맞는 이미지를 생성할 수 있다는 사실을 알 수 있습니다.

LoRA Block Weight 프리셋

확장기능 설치시 기본 제공되는 프리셋 외에 개인적으로 자주 사용하는 LoRA Block Weight 설정값은 다음과 같습니다.

주로 체형, 얼굴, 의상에 선택적으로 LoRA를 적용하고 싶을 때 활용하는 프리셋이며, 해당 프리셋은 로라 자체를 적용할 때도 유용하지만, 로라를 모델에 머지(Merge)할 때도 동일하게 적용할 수 있습니다.

모델 자체에 로라를 머지하게 되면, 해당 로라를 매번 입력하지 않아도, 모델에서 알아서 로라가 적용된 이미지를 생성해주기 때문에 매우 편리합니다. 예를 들어 특정 얼굴을 고정해서 생성하고 싶다면, 모델에 얼굴 로라를 병합하는 것입니다. 따라서 반복적으로 동일 로라를 사용해야 하는 경우라면 SuperMerger를 통해 사용중인 모델에 로라를 병합하는 것을 추천드립니다. 모델 병합에 대해서는 다른 글에서 조금 더 자세히 다루도록 하겠습니다.