최근 게시물 중에 얼굴에만 로라 적용하는 방법이있냐는 문의글을 몇 번 봤는데,

관련해서 로라 블록 웨이트 익스텐션 내용 적어봄.


나도 게시판에서 본 내용 따로 복붙했다가 옮겨 놓는거니까 상세한 설명이 없거나

제대로 적용이 안되는 건 이해 부탁드리고


1. Lora block Weight 란?


간단하게 설명하면 로라의 특정 블록만 선택해서 적용할 수 있게 해주는 익스텐션임.

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

위 URL 넣고 설치하면 되고,


2. 일반적인 사용법 

https://arca.live/b/aiart/71644460

위 글을 보면 되고


3. 얼굴만 로라를 적용하고 싶다.

DDSD 나 !Adetailer 로 얼굴 검출하고 해당 디테일러의 프롬프트에 로라를 적어 주거나,

로라 블록 웨이트를 사용해서 얼굴에만 영향을 주는 블록을 지정해주면 됨. 그림 만들 때 로라를 적용할건지, 인페인트로 로라 적용할 건지의 차이는 있겠지


<lora:"lora name":1:0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0>.  
<lora:"lora name":1:0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>.  (a1111-sd-webui-locon, etc.)
<lora:"lora name":1:IN02>  
<lyco:"lora name":1:1:lbw=IN02>  (a1111-sd-webui-lycoris)
<lyco:"lora name":1:1:lbw=1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0>  (a1111-sd-webui-lycoris)

위 처럼 쓰면 되는데, 뒤에 0,0,0,0 ... 들이 바로 해당 로라의 블록별 가중치를 지정해주는 거임.

<lora:로라명:가중치:블록별 가중치> 인데 그림 돌 때 돌아가는 걸 보니

가중치 * 블록별 가중치 값으로 각 블록 가중치 계산함. 

<lora:로라명:0.3:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1> 로 적으면 각 블록별로 0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3, 씩 가중치가 적용됨


그럼, 여기서 어떤 블록이 어디에 영향을 주는 지 알아야 써먹을 텐데, 여기서 프리셋이 등장함


4. 프리셋은 미리 블록별 가중치를 정의해 둔 건데, 이게 예제 비슷하게 설치하면 기본값이 들어있음. 그게 바로 

<lora:"lora name":1:IN02> 

위에서 보는 IN02 임. 근데 이걸로는 IN02가 어디에 영향을 미치는지 알기 힘들잖아. 그래서 중국애들이 정리해놓은 프리셋이 있는데 바로 아래 나오는 프리셋 목록임.


----------------普通LoRA使用----------------


默认预设


NONE:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0


ALL:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1


INS:1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0


IND:1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0


INALL:1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0


MIDD:1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0


MIDD0.2:1,0,0,0,0,0,0.2,0.4,0.4,0.2,0,0,0,0,0,0,0


MIDD0.8:1,0,0,0,0,0.5,0.8,0.8,0.4,0,0,0,0,0,0,0,0


MOUT:1,0,0,0,0,0,1,1,1,1,1,1,1,1,0.5,0,0


OUTD:1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0


OUTS:1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1


OUTALL:1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1


ALL0.5:0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5




身体


BODY:1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1


BODY0.5:1,1,1,1,1,1,0.2,1,0.2,0,0,0.8,1,1,1,1,1


脸部(脸型、发型、眼型、瞳色等)


FACE:1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0


FACE0.5:1,0,0,0,0,0,0,0,0.8,1,1,0.2,0,0,0,0,0


FACE0.2:1,0,0,0,0,0,0,0,0.2,0.6,0.8,0.2,0,0,0,0,0


修手专用


HAND:1,0,1,1,0.2,0,0,0,0,0,0,0,0,0,0,0,0


服装(搭配tag使用)


CLOTHING:1,1,1,1,1,0,0.2,0,0.8,1,1,0.2,0,0,0,0,0


动作(搭配tag使用)


POSE:1,0,0,0,0,0,0.2,1,1,1,0,0,0,0,0,0,0


上色风格(搭配tag使用)


PALETTE:1,0,0,0,0,0,0,0,0,0,0,0.8,1,1,1,1,1


角色(去风格化)


KEEPCHAR:1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0


背景(去风格化)


KEEPBG:1,1,1,1,1,1,0.2,1,0.2,0,0,0.8,1,1,1,0,0


减弱过拟合(等同于OUTALL)


REDUCEFIT:1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1




----Merge Only


NF:1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1


face:1,0,0,0,0,0,0,0,0.8,1,1,0.2,0,0,0,0,0


paint:1,0,0,0,0,0,0,0,0,0,0,0.8,1,1,1,1,1




----------------LyCORIS使用----------------


----------------LoHA / LoCON----------------




身体


LyCOBODY:1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1


LyCOBODY0.5:1,1,1,1,1,1,1,1,1,0.2,0.2,0.5,1,1,0,0,0,0.2,0,0,0.8,1,1,1,1


脸部(脸型、发型、眼型、瞳色等)


LyCOFACE:1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0


LyCOFACE0.5:1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2,0.5,0.8,1,1,1,0.2,0,0,0,0,0


服装、动作、背景和上色风格(未测试)


LyCOCLOTH:1,1,1,1,1,1,1,1,0,0.2,0.2,0.2,0,0,0,0,0.5,0.8,1,1,0.2,0,0,0,0,0


LyCOPOSE:1,0,0,0,0,0,0,0,0,0.2,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0


LyCOKEEPBG:1,1,1,1,1,1,1,1,1,0.2,0.4,0.8,1,1,0.8,0.4,0.2,0.2,0,0,0.8,1,1,1,0,0


LyCOPALETTE:1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,1,1,1,1,1



위 프리셋 넣고 적용하면, 아래 그림처럼 프리셋이 추가됨.




중국어 간체로 적혀있지만, 프리셋 명은 영어라 대충 보면 어디 적용되는지 이해 갈 거임.

이 프리셋을 적고 저장한 뒤에 리로드 프리셋을 하면 이 프리셋이 쭉 추가될 거임.


그럼 이제 

<lora:"lora name":1:FACE> 

형태로 기존 사용법 뒤에  :FACE 라고 추가해서 써주면 얼굴에 영향을 주는 로라 블록만 1의 가중치로 적용됨. 마찬가지로 프리셋 명 보면 BODY, POSE 등 다른 프리셋들도 보일텐데, 얼굴 말고 몸이나 다른 부분에 적용하고 싶을 때 해당 단어들을 쓰면 됨. 


프리셋은 대소문자 구별하니 주의하고, 리코리스도 지원해서 로라 블록 웨이트를 적용할 수 있는데, 리코리스는 블록수가 달라서 따로 프리셋이 하단에 추가되어 있음. 그리고, 어떤 리코리스 익스텐션을 사용하느냐에 따라서 문법이 조금 다름


<lora:"lora name":1:0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0>.  
<lora:"lora name":1:0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>.  (a1111-sd-webui-locon, etc.)
<lora:"lora name":1:IN02>  
<lyco:"lora name":1:1:lbw=IN02>  (a1111-sd-webui-lycoris)
<lyco:"lora name":1:1:lbw=1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0>  (a1111-sd-webui-lycoris)


위를 다시 보면 a1111-sd-webui-locon 익스텐션을 쓸 경우는 그냥 


<lora:"lora name":1:FACE> 


라고 똑같이 쓰면 되는데 나처럼 a1111-sd-webui-lycoris 를 쓰는 사람의 경우는 


<lyco:"lora name":1:1:lbw=FACE>


라는 형태로 써줘야 리코리스에서 블록웨이트를 쓸 수 있음. 근데 이상하게 가중치가 두 번 적혀있는데, 리코리스에서 빠진 블록에 대한 가중치를 설정하는 건지 확실히 모르겠음. ( 핸클미 님 말로는 "lycoris는 lora보다 2배 많은 레이어를 가지고 있어서 저렇게 설정을 해야 한다고 들음" )현재로서는 위의 형태로 쓰지 않으면 에러가 뿜뿜하면서 적용이 안됨. 내가 알기로는 a1111-sd-webui-locon 지원이 끊기고 a1111-sd-webui-lycoris 로 넘어가라고 하는 것 같은데 그래서 사용법이 나중에는 바뀔 수 있을 것 같음.


로라 블록 웨이트 궁금했던 사람들은 프리셋 저장하고 한번 써봐.

전에 누가 프리셋 정리해서 올려줬었는데 다시 찾아보니까 없는 것 같아서 그거 남겨 놓을 겸 정리해봤음.

저 프리셋은 시비타이에서도 로라 설명하면서 적어놓은 사람이 있더라.