Stable diffusion은 Text encoder, U-Net 등으로 구성되어 있는데 여기서 U-net이 이미지를 생성하는데 중요한 역할을 합니다.
U-net은 In 12개, Out 12개. Mid 1개, 총 25개의 레이어로 구성되어 있으며, 각 레이어마다 이미지 생성에서 담당하는 부분에 차이가 있습니다.
예를 들면 얕은 레이어는 이미지의 포즈를, 깊은 레이어는 이미지의 질감을 담당합니다.
이런 구조를 응용하면 특정 질감과 구성을 다양한 비율로 혼합하는 것이 가능합니다.
(Automatic1111 Webui 기준입니다. : AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI (github.com)
1. 먼저 webui용 익스텐션을 설치합니다.
익스텐션의 주소를 복사해서 Extensions/Install from URL/URL for extension's git repository 에 입력한 다음 Install을 누르고 Webui를 다시 시작해주세요.
Merge Block Weighted - GUI bbc-mc/sdweb-merge-block-weighted-gui: Merge models with separate rate for each 25 U-Net block (input, middle, output). Extension for Stable Diffusion UI by AUTOMATIC1111 (github.com)
2. Merge Block Weighted 탭으로 이동합니다. 뭔가 복잡해보이지만 생각보다 간단합니다.
각 항목의 의미는 다음과 같습니다.
-Rum Merge ; 병합 실행
-Clear values : 설정 초기화
-Reload checkpoint : 모델 리스트 새로고침
-Preset Weights ; 프리셋 설정 리스트
-Weight values : 설정값(아래쪽 In0~In11 등)을 텍스트로 입력하는 부분. 주로 설정값을 공유하는데 사용합니다.
-Apply block weight from text : -Weight values에 입력된 텍스트값을 설정에 적용합니다.
-base_alpha : 병합될 모델이 사용할 Text Encoder、Auto Encoder의 비율을 지정합니다. 0은 Model A 100프로, 100프로는 Model B 100프로를 의미합니다.
-Model A : 병합할 모델 A을 지정합니다.
-Model B : 병합할 모델 B를 지정합니다.
-Output Model Name : 병합이 끝난 모델의 이름을 지정합니다.
-verbose console output ; CMD에 병합에 관련된 정보들을 출력합니다.
-Allow overwrite output-model : Output Model Name에서 지정한 이름과 동일한 모델이 있을 경우 덮어씌울지 여부를 지정합니다.
-In00~In11, M00, Out0~Out11 : U-net 레이어를 병합하는 비율을 지정합니다. 0이면 Model A 100프로, 1이면 Model B 100프로입니다.
3. 여기서 가장 중요한 부분은 아래쪽의 U-net 슬라이더 부분입니다.
좀 헷갈리게 배치되어 있지만 시각화하면 이런 모양입니다.
In00에서 시작해서 M00을 지나 Out11에서 끝납니다.
얕은 레이어는 In00, Out00 ~ In05, Out 05 를 가리키고, 깊은 레이어는 In06, Out06 ~In11, Out11을 가리킵니다.
얕은 레이어는 전체적인 구성(포즈 배경 등)을, 깊은 레이어는 질감(피부, 눈)을 구성합니다.
(전문적인 지식이 있는게 아니라 병합 결과물만 보고 내린 가설이라 틀렸을 가능성도 있으니 그냥 참고만 하시기 바랍니다)
4. 이제 본격적인 모델 병합을 시작합니다.
이번에는 Model A에 2D 모델인 Anythign 3.0, Model B에 실사 모델인 basil_mix를 사용합니다.
Anythign 3.0 : Linaqruf/anything-v3.0 at main (huggingface.co)
basil_mix : nuigurumi/basil_mix · Hugging Face
병합 비율은 Abyss orange mixs 2를 참고해서 입력합니다.
출처 : WarriorMama777/OrangeMixs · Hugging Face
Model A에 애니띵, B에 바실믹스를 지정하고 Base alpha를 0을로 지정합니다.
병합된 모델 이름은 적당히 넣습니다.
마지막으로 Run Merge를 실행하고 기다려줍니다.
귀찮으시면 위의 오렌지 믹스 링크에서 AbyssOrangeMix2_sfw.ckpt를 받아서 사용하셔도 동일한 이미지를 얻으실 수 있습니다.
5. 모델 리스트에서 병합이 끝난 모델을 선택하고 적당히 프롬프트를 입력하면 다음과 같은 이미지가 생성됩니다.
단순 병합 모델인 4번 이미지와 비교했을 때 U-net 병합 모델인 3번 이미지는 1번 이미지에서 전체적인 구성은 유지하면서 질감만 실사풍으로 변했습니다. 병합한 실사 모델의 특징인 DOF 효과가 좀 과한 감이 있습니다.
Anythign 3.0 / Basil Mix / U-net 병합 모델 1 / 일반 병합 모델(0.5/0.5)
여기서 비율을 조금 다르게 조정하면
다음과 같은 이미지가 생성됩니다. 전체적인 질감이 애니띵에 가까워졌습니다.
Anythign 3.0 / Basil Mix / U-net 병합 모델 1 / U-net 병합 모델 2
이번에는 좀 더 극단적인 비율로 섞어봅시다.
U-net 병합 모델 3는 전체적인 장면과 포즈는 애니띵에 가깝지만 질감과 이목구비는 바실믹스에 가깝습니다.
U-net 병합 모델 1과 비교하면 이목구비나 복장같은 디테일에서 차이를 확인할 수 있습니다.
Anythign 3.0 / Basil Mix / U-net 병합 모델 1 / U-net 병합 모델 3
물론 드림부스로 학습된 모델도 같은 방식으로 병합할 수 있습니다.
Anythign 3.0 / Basil Mix / U-net 병합 모델 1 / 드림부스 모델
Anythign 3.0 / Basil Mix / U-net 병합 모델 1 / 드림부스 U-net 병합 모델 1
Anythign 3.0 / Basil Mix / U-net 병합 모델 1 / 드림부스 U-net 병합 모델 2
11편에서 소개한 일반적인 모델 병합 방식과 비교하면 다음과 같습니다.
드림부스 U-net 병합 모델 1 / 드림부스 U-net 병합 모델 2 / 드림부스 모델 + U-net 병합 모델 1 (Add difference 1.0)
(IP보기클릭)112.185.***.***