AI 이미지/워크플로 따라하기

여러 각도에서 일관된 캐릭터 생성 방법

하늘이푸른오늘 2024. 12. 23. 13:11

바라보는 방향이 달라져도 일관된 AI 캐릭터를 생성해야 하는 경우가 있으신가요? 이 글에서는 아래와 같이 동일한 캐릭터의 9x9 그리드를 그리는 방법을 설명합니다. 여러 이미지에 동일한 캐릭터가 필요한 아트웤에 사용할 수 있습니다.

소프트웨어

 이 글에서는 가장 널리 사용되고 있는 스테이블 디퓨전용 웹 UI인 AUTOMATIC1111과, 점점 사용자가 늘어나고 있는 ComfyUI 를 사용합니다.

AUTOMATIC1111

AUTOMATIC1111은 스테이블 디퓨전 모델의 웹 GUI 중에서 가장 대중적이고 널리 사용되고 있습니다. 설치 방법은 이 글은 보시고, 메뉴를 비롯한 기초적인 내용은 AUTOMATIC1111 가이드를 읽어보세요.

ComfyUI

ComfyUI 는 노드 링크식으로 워크플로를 생성할 수 있어 아주 유연한 웹 UI입니다.  ComfyUI를 설치하는 방법 및 기본적인 사용법은 이 글을 참고하시고, 이 글을 보시면 기타  ComfyUI를 사용할 때 유용한 정보를 만나실 수 있습니다.

이 워크플로의 작동 원리

체크포인트 모델

이 워크플로는 일부 SDXL 모델에서만 작동합니다. 다른 체크포인트 모델의 경우 직접 실험해 보시고 사용하셔야 합니다. 그 이유는 학습데이터 때문으로 보이며,  "character sheet"라는 프롬프트 키워드에 반응하는 모델에서만 사용가능합니다.

시야각 그리드 제어

적절한 모델을 선택했다면, ControlNet을 적용하기 위한 템플릿이 필요합니다. 이 기법은 Canny SDXL ControlNet을 사용하여 아래 오른쪽과 같이 캐릭터 시트의 외곽선을 복제합니다. 

ControlNet은 위와같은 컨트롤 이미지를 사용합니다. 새로운 참조 이미지를 사용하고 싶을 경우에는 먼저 제어 이미지를 전처리(preprocessing) 하여 원하는 세부 사항이 잘 들어 있는지 확인해보시는 것이 좋습니다.

얼굴 복제

이 글에서는 IP-adapter Face ID Plus v2를 사용해 다른 참조이미지로부터 얼굴을 복제합니다. 이 IP-adapter는 얼굴만 복제합니다. Insight Face를 사용하여 참조 이미지에 포함된 얼굴의 특징을 추출하므로, 여러 방향에서 바라본 얼굴도 정확하게 생성할 수 있습니다.

얼굴 보정

전체적인 일관성을 유지하기 위해, 1024x1024와 같이 SDXL에 호환되는 이미지 사이즈를 사용해야 합니다. 하지만, 이 경우 얼굴 크기가 작기 때문에 올바르게 렌더링되지 않을 수 있습니다.

여기에서는 높은 해상도로 자동 인페인트하는 방식으로 이를 수정합니다.

AUTOMATIC1111

 체크포인트 모델

이 글에서는 ProtoVision XL 모델을 사용합니다. 다운로드 받은 뒤, stable-diffusion-webui/models/Stable-Diffusion에 넣어주시면 됩니다. 

확장

이 글에서는 ControlNet과 ADetailer 확장을 사용합니다. 각각의 URL은 아래와 같습니다.

AUTOMATIC1111에서는 Extensions>Install from URL로 들어가서 위의 URL을 [URL for extension's git repository] 입력란에 넣어주고 [Install] 버튼을 눌러줍니다. 

설치가 끝나면 AUTOMATIC1111을 완전히 새로 시작해줍니다.

다시 시작된 후, txt2img 페이지 아래의 ControlNet 섹션으로 내려가서 ControlNet Unit이 3개가 있는지 확인합니다. 아니라면 Settings->ControlNet으로 들어가 Multi-ControlNet: ControlNet unit number 를 3으로 설정한 뒤 새로 시작해줍니다.

IP-adapter 및 콘트롤넷 모델

이 글을 실행시키기 위해서는 아래와 같은 2개의 모델이 필요합니다.

이 파일들을 stable-diffusion-webui/models/ControlNet 폴더에 넣어줍니다.

1단계: txt2img 설정

txt2img 페이지에서 아래와 같이 설정합니다.

프롬프트: character sheet, color photo of woman, white background, blonde long hair, beautiful eyes, black shirt
부정적 프롬프트: disfigured, deformed, ugly, text, logo
샘플링 방법: DPM++ 2M Karras
샘플링 단계: 20
CFG 척도: 7
씨드: -1
이미지 크기: 1024x1024

2단계: controlNet 설정

txt2img 페이지 아래쪽 ControlNet 영역으로 내려가서 아래와 같이 설정합니다.

ControlNet Unit 0

ControlNet Unit 0에서는 Canny 를 사용합니다.

아래의 이미지를 자신의 컴퓨터에 다운로드 받은 후, ControlNet의 [Single Image]의 이미지 캔버스에 불러옵니다.

기타 ControlNet 설정은 아래와 같습니다. 나머지는 기본값으로 두시면 됩니다.

  • Enable: Yes
  • Pixel Perfect: Yes
  • Control Type: Canny
  • Preprocessor: canny
  • Model: diffusers_xl_canny_mid
  • Control Weight: 0.4
  • Starting Control Step: 0
  • Ending Control Step: 0.5

ControlNet Unit 1

ControlNet Unit 1에서는 얼굴을 복제하기 위해 IP-adapter를 설정합니다.

아래의 이미지를 자신의 컴퓨터에 저장하고, ControlNet Unit 1의 이미지 캔버스에 불러옵니다. 원하시면 다른 이미지를 사용하셔도 됩니다.

아래는 기타 설정입니다.

  • Enable: Yes
  • Pixel Perfect: No
  • Control Type: IP-Adapter
  • Preprocessor: ip-adapter_face_id_plus (or ip-adapter-auto)
  • Model: ip-adapter-faceid-plusv2_sdxl (or ip-adapter-faceid_sdxl for Colab)
  • Control Weight: 0.7
  • Starting Control Step: 0
  • Ending Control Step: 1

3 단계: ADetailer 설정

이 워크플로는 ADetailer를 사용해 얼굴을 자동적으로 수정합니다. 먼저 txt2img 페이지 아래쪽 ADtailer 영역으로 내려가서 아래와 같이 설정합니다. 나머지는 기본 값을 사용합니다.

  • Enable ADetailer: Yes

4 단계: 이미지 생성

이제 [Generate]버튼을 누르면 이미지 생성 프로세스가 시작됩니다. 최종적으로 아래와 같은 이미지를 얻을 수 있습니다.

아래는 송혜교님의 얼굴을 사용해 생성해본 결과입니다. 그런데.. 전혀 닮질 않았네요. ㅠㅠ

ComfyUI 

소프트웨어 설정

아래의 워크플로 다운로드를 받아, 화면에 Drag&Drop 합니다. 또는 메뉴 Workflow -> Open에서 아래 파일을 불러와도 됩니다.

consistent_character_comfyui.json
0.02MB

대부분 그냥 그대로 사용할 수 있지만, 때때로 오류가 발생할 수 있습니다. 그러한 경우, 다음과 같은 작업이 필요할 수 있습니다.

체크포인트 모델

이 워크플로는 ProtoVision XL 모델을 사용합니다. 다운로드 받은 후, comfyui/models/checkpoints 폴더에 넣어주면 됩니다. (Automatic1111 과 모델을 공유할 경우, 이 글을 참고하세요)

ControlNet 모델

아래의 콘트롤넷 모델을 다운로드 받아 comfyui/models/controlnet 폴더에 넣어줍니다.

IP-adpater 모델

FaceID Plus v2 모델 (ip-adapter-faceid-plusv2_sdxl.bin) 을 다운로드 받아, comfyui/models/ipadapter 폴더에 넣어줍니다. 폴더가 존재하지 않으면 새로 생성하면 됩니다.

그 다음 FaceID Plus v2 LoRA 모델(ip-adapter-faceid-plusv2_sdxl_lora.safetensors)을 다운로드 받아, comfyui/models/loras 폴더에 넣어줍니다.

1 단계: 체크포인트 모델 선택

[Load Checkpoint] 노드에서 ProtoVision XL 모델을 선택합니다.

2 단계: ControlNet을 위한 참조 이미지 업로드

아래의 이미지를 다운로드 받은 후, 

ControlNet Canny preprocessor에 업로드 해줍니다.

3 단계: IP-adapter 이미지 업로드

아래의 이미지를 다운로드 받은 후,

IP-adpater 그룹의 [Load Image] 노드에 불러옵니다.

4 단계: 이미지 생성

이제 [Queue] 버튼을 누릅니다. 그러면 아래와 같이 두가지 종류의 이미지가 생성됩니다. 오른쪽은 얼굴이 수정된 이미지입니다.

이번에도 전지현씨 얼굴로 시험해 봤습니다. 역시나 전지현씨와는 거리가 먼 얼굴이 생성되었네요.

참고

얼굴을 수정하는 프로세스는 상당히 시간이 걸리는 편입니다. 그러므로 프롬프트 테스트를 할 때에는 [FaceDetailer] 노드를 뮤트(Cntl-M)시키고 작업한 뒤, 마음에 드는 결과물이 나오면 또다시 Cnt-M을 누르고 이미지를 생성하면 됩니다.

문제 해결

FaceID를 사용하다보면 생각보다 얼굴이 닮지 않은 경우가 발생합니다. 이 경우 아래와 같이 조치해볼 수 있습니다.

  • IP adapter의 control weight를 올려본다
  • 반대로 IP adapter의 control weight와 Canny ControlNet의 ending control step 을 낮춰본다.

이떄 두 가지 ControlNet의 weight 합이 1보다 너무 많이 커지지 않도록 해야 합니다. 많이 커지면 결함이 발생하게 됩니다.

참고: 전지현님 사진으로 테스트해봤습니다만, 비슷한 얼굴을 생성하는데는 실패했습니다. 아마도 "character sheet" 키워드를 지원하는 다른 모델로 대체하면서 시험해봐야 할듯 싶은데, 제 역량 부족이네요. ㅠㅠ

참고: 저는 시험해보지 않았지만, 실제 사람 사진보다는 AI로 생성한 이미지를 참조이미지로 넣어주면 훨씬 잘나오는 걸로 압니다.

이상입니다.

이 글은 stable-diffusion-art.com 의 글을 번역하면서 필요에 따라 수정하여 작성한 글입니다.

민, 푸른하늘