가장 대표적인 스테이블 디퓨전 얼굴 고정 방법 3가지에 대해서 알아보고자 합니다. 생성형 인공지능 이미지의 특성상 그림을 생성할 때마다 다른 얼굴이 나타나는 것이 일반적인데요, 만약 특정 얼굴의 인물을 이미지의 메인 모델로 사용하여 프로젝트나 사업에 활용해야하는 경우 랜덤 얼굴은 참 난감한 부분입니다.
최근 SD1.5 버전의 여러 병합 모델들은 모델의 퀄리티가 올라간 만큼 모델에서 등장하는 인물의 얼굴도 어느정도 고정으로 생성되는 경향이 있긴 하지만, 여전히 사용자가 원하는 얼굴로 고정하는 것은 사용자가 직접 만들어 사용해야 합니다. 본문에서는 스테이블 디퓨전 얼굴 고정 방법 중 가장 많이 사용되는 3가지 방식인 LoRA, IP-Adapter 및 ReActor 기술에 대해 구체적으로 살펴보고 현실적으로 어떤 방식이 가장 유용한지 비교해 보도록 하겠습니다.
스테이블 디퓨전 얼굴 고정 방법
우선 결론부터 말씀드리자면 스테이블 디퓨전 얼굴 고정 방법 중 가장 고퀄리티를 보장하는 방법이 바로 학습 로라(LoRA)를 이용하는 것입니다. 나머지 2개의 기술 대비 가장 품이 많이 드는 만큼 결과물의 질도 가장 그럴듯합니다.
로라 (LoRA)
로라라는 기술은 일전에 얼굴학습 가이드 글을 통해 소개드린 바 있습니다. 대략적인 스테이블 디퓨전 LoRA의 개념과, 얼굴 로라 만들기 등에 대한 이해가 필요하신 분들은 아래 글을 참고하시기 바랍니다.
직접 얼굴 로라를 만드셨거나, 혹은 Civitai 등에서 로라를 다운 받으신 분들은 해당 로라를 기반으로 아래와 같은 기술을 활용해 스테이블 디퓨전 얼굴 고정이 가능합니다.
인페인트 (Inpaint)
아무리 얼굴을 중점적으로 학습한 로라라고 하더라도 프롬프트와 함께 이미지 생성에 활용할 경우 100% 얼굴에만 적용되는 것은 아닙니다. 이럴 때는 i2i에서 인페인트(inpaint) 기술을 이용해 얼굴을 고정할 수 있습니다. 먼저 로라를 사용하지 않고 인물을 그린 뒤, i2i에서 얼굴부분만 마스킹하여 학습한 얼굴로 바꾸는 것입니다.
이 때 조금 더 사실적으로 얼굴을 그리기 위해 inpaint와 함께 컨트롤넷(ControlNet)의 타일리샘플(tile resample) 기능을 사용해주는 것도 좋습니다. 위 예시에서 사용한 세팅값은 다음과 같습니다.
인페인트는 마스킹 영역만 진행하기 위해 Just resize, Inpaint masked, original, Only masked로 설정했으며, 마스킹 영역만 인페인트 할 때 해상도는 사용자가 마스킹 영역을 고려해 입력하면 됩니다. 여기서는 원본 이미지의 크기가 512×768이기 때문에 마스킹 한 부분만 생성하는데는 512×512면 충분하다고 판단했습니다. 디노이징 강도(Denoising strength)는 최소 0.6 이상으로 해주셔야 얼굴에 적당한 변화가 반영됩니다.
컨트롤넷에서는 Tile Resample을 적용하기 위해 Enable에 체크하고, Tile/Blur를 선택, 전처리 프로세서와 모델을 각각 선택하신 뒤, Control Mode를 Balanced 혹은 My prompt is more important로 체크합니다.Balanced는 원본 이미지를 더 유지하려는 경향이 강하기 때문에 얼굴이 제대로 반영되지 않는다면 디노이징 강도를 높이거나 My prompt is more important로 바꾸어 진행해보시기 바랍니다.
LoRA Block Weight
위의 절차에 따라 로라(LoRA)를 활용해 직접 얼굴을 인페인트 해서 내가 원하는 얼굴로 고정하는 방법도 있지만, 생성 단계에서부터 로라를 얼굴에만 적용하는 방법도 있습니다. 바로 LoRA Block Weight를 적용하는 방법입니다. 로라 블록웨이트 또한 다른 글에서 기초적인 사용방법을 다룬 바 있으므로 해당 내용에 대해서는 아래 글을 참고해주시기 바랍니다.
로라 블록웨이트 설명 글에서는 인물의 복장에만 로라를 적용시켜보았는데요, 이번에는 복장이 아닌 얼굴에만 적용시켜 보겠습니다. 블록웨이트 프리셋 값으로 FACE:1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0를 입력한 뒤 바로 그림을 생성하면 다음과 같습니다.
좌측은 원본 이미지, 우측은 시드 값을 고정하고 동일한 프롬프트에서 <로라:lbw=FACE>만 추가하여 생성한 그림으로 전반적인 모습이 유지된 상태에서 얼굴이 중점적으로 변경된 그림을 결과로 얻을 수 있었습니다. 이렇게 로라 블록웨이트를 활용하면, 프롬프트 자체에 로라를 적용함으로써 인페인트를 거쳐야하는 번거로운 단계를 줄일 수 있다는 점에서 훨씬 편리합니다.
SuperMerger LoRA Merge
마지막으로 로라 블록웨이트를 활용할 때 조금 더 편의성을 향상시키기 위한 방법으로 확장기능인 슈퍼머저(SuperMerger)를 활용해 모델(체크포인트)에 로라(LoRA)를 병합하는 방법이 있습니다. 만약 단발성으로 얼굴을 고정하는 것이 아니라, 꾸준히 해당 얼굴로 그림을 그려내야하는 경우라면, 아예 병합을 통해 얼굴이 고정된 모델을 만들고 이 모델로 그림을 생성하는 방식입니다. 스테이블 디퓨전 슈퍼머저 설치 및 로라 병합 방법에 대해서는 아래 글을 참고해주시기 바랍니다.
병합을 마친 모델로 동일 시드값 및 설정에서 이미지를 생성하면, 아래와 같이 블록웨이트를 적용해 만든 이미지랑 온전히 동일한 그림을 생성할 수 있습니다.
단지 프롬프트에 <로라:lbw=FACE>를 추가하지 않고도 얼굴을 고정해서 사용할 수 있다는 점에서 차이가 있을 뿐입니다. 하지만 경우에 따라서는 프롬프트에 로라 입력을 1단계 줄이는 것만으로도 굉장한 편의성이 향상되기도 하므로 필요에 따라 병합하여 사용하시면 됩니다.
컨트롤넷 (IP-Adapter)
스테이블 디퓨전 얼굴 고정을 위해 로라(LoRA)를 적용하는 것은 매우 귀찮은 일이 될 수 있습니다. 결과물을 모르는 상태에서 로라 학습부터 체크포인트 병합까지 진행하기에는 품이 너무 많이 들기 때문입니다. 만약 본격적인 로라 제작 및 적용에 앞서 스테이블 디퓨전 얼굴 고정을 간편하게 느낌만 보고자 한다면 컨트롤넷의 IP-Adapter 기술을 활용해 보는 것도 좋은 대안입니다.
컨트롤넷의 IP-Adapter 기술은 활용법이 매우 간단합니다. 먼저 ControlNet 모델을 컨트롤넷 모델 폴더에 다운로드 받습니다. 폴더 위치는 [스테이블 디퓨전 WebUI 설치 경로 > extensions > sd-webui-controlnet > model] 입니다.
위의 예시 이미지의 경우 i2i 인페인트 탭에서 원본 이미지를 두고 컨트롤넷 설정을 아래와 같이 해주었습니다.
컨트롤넷 설정에서 Upload independent control image를 선택하여 바꿀 얼굴 사진을 올려준 뒤 이미지를 생성하면 됩니다.
IP-Adapter는 간단히 말해 이미지 프롬프트를 입력하도록 해주는 도구입니다. 우리가 프롬프트를 텍스트로 입력하는 대신, 참조 이미지(reference image)를 던져주면 알아서 해당 이미지를 분석하여 비슷한 그림을 생성하는 방식입니다. 결과 이미지를 보면 눈,코,입 따로따로 보면 입력 이미지와 비슷하지만, 전반적인 얼굴형과 느낌은 사용자가 원하는 참조 이미지와는 많이 다른 것을 확인할 수 있습니다.
ReActor
컨트롤넷에 포함된 IP-Adapter와 달리 아예 따로 하나의 확장 기능으로 동작하는 ReActor 또한 간편하게 스테이블 디퓨전 얼굴 고정을 테스트해볼 수 있는 도구 중 하나입니다.
ReActor를 사용하기 위해서는 먼저 Visual Studio를 설치해야 합니다. 아래 이미지를 참고하여 Community 버전을 설치해주시기 바랍니다. 설치 과정에서 Python 개발, C++를 사용한 데스크톱 개발, Visual Studio 확장 개발 이 세가지를 꼭 설치해주시기 바랍니다.
Visual Studio 설치를 마쳤다면, 이제 WebUI로 돌아와 확장기능으로 이동합니다. 확장기능 Available 탭에서 reactor를 검색한 뒤 설치합니다.
WebUI를 종료 후 다시 시작하면 이제 확장기능으로 ReActor를 사용할 수 있습니다. 아래는 기본 설정을 그대로 두고, 참조 이미지는 위에서 IP-Adapter에 사용한 사진을 그대로 적용한 뒤 이미지를 생성한 결과입니다.
IP-Adapter와 달리 ReActor기능은 inpaint 등의 추가 기술을 적용하지 않고도, 알아서 얼굴을 인식하여 바꿔주고 있으며, 결과 얼굴 또한 참조 이미지와 매우 흡사하게 적용된 것을 볼 수 있습니다. 위 이미지 생성에 사용한 ReActor 세팅값은 다음과 같습니다.
상단의 Enable을 체크해서 활성화 해주면 기능이 동작하며, 예시 이미지에서는 원본 및 참조 이미지 모두 1인 사진이지만, 다수의 인물이 있을 경우에도 설정값을 통해 다대다 매칭을 통한 얼굴 변환이 가능합니다. 단, 지금처럼 1인에 대해서만 작업하신다면 위와 같이 기본 설정으로 진행하셔도 무방합니다.