AI 이미지/Stable Diffusion

Stable Diffusion으로 비슷한 얼굴 만드는 방법

하늘이푸른오늘 2023. 8. 23. 00:01

인공지능을 이용해 아기들 동화책을 만들고 싶거나, 만화책을 만들고 싶다면, 비슷한 모습이 유지되는 것이 중요할 겁니다. 매 페이지마다 혹은 한칸 한칸 얼굴이나 복장이 달라진다면 집중도가 떨어질 수 밖에 없겠죠. 하지만, 기본적인 방법만으로는 Stable Diffusion을 사용하면 모든 얼굴이 달라질 수 밖에 없습니다. 이 글에서는 이것을 방지할 수 있는 방법을 소개시켜드립니다. 

이 글의 목차는 아래와 같습니다.

소프트웨어

이 글의 내용을 따라하기 위해서는 먼저 스테이블 디퓨전용 AUTOMATIC1111 웹UI를 설치해야 합니다.  윈도에 설치하는 방법은 이 글을 참고하시기 바랍니다. 참고로 맥이나 구글 Colab에도 설치할 수 있지만, 방법은 따로 찾아보시기 바랍니다. 스테이블 디퓨전이 처음이라면 초보자 가이드기본적인 이론을 참고하시기 바랍니다.

유명인 이름을 사용하는 방법

유명인 이름을 사용하면 얼굴을 일관성있게 유지할 수 있습니다. 너무 알려진 얼굴이 나오는 것이 싫다면 여러 이름을 섞어서 사용하는 방법도 있습니다. 

먼저 일반적으로 사실적인 인물 사진을 생성하는 기본적인 프롬프트를 사용하여 이미지를 생성해 보겠습니다. 

모델: Deliberate v2
프롬프트: photo of young woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores
부정적 프롬프트: disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w
샘플러: DPM++ 2M Karras
이미지 크기: 512x512

참고로 부정적 프롬프트는 이 글에서 생성하는 이미지에 모두 동일합니다.

모두 멋집니다. 하지만, 모두 얼굴이 조금씩 다릅니다. 이렇게 일반적인 프롬프트만 넣어서는 여러장의 이미지가 얼굴이 비슷할 가능성은 매우 낮습니다. 

스테이블 디퓨전 프롬프트 작성법에서 설명드린 것처럼, 유명인의 이름은 매우 강력한 효과를 나타냅니다. 예를 들어 Audrey Hepburn 을 프롬프트에 넣으면 누가봐도 확실히 헵번님이라고 알 수 있는 얼굴이 생성됩니다. 아래는 프롬프트 맨 앞에 Audrey Hepburn을 넣어 동일한 프롬프트로 실행시킨 결과입니다. 다른 조건은 동일합니다.

프롬프트: Audrey Hepburn, photo of young woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores

확실히 얼굴은 일관성있게 생성됩니다. 이는 스테이블 디퓨전 모델을 학습시킬 때 유명인의 사진이 많이 포함된 결과입니다. 그런데, 문제는 생성된 얼굴이 너무 유명인 그대로이라는 점입니다. 그래서 여러 얼굴을 섞어서 특정인의 얼굴이 두드러지지 않게 만드는 게 좋을 수 있습니다.

아래는 여러 배우의 이름을 섞은 프롬프트입니다.

프롬프트: Emma Watson, Tara Reid, Ana de Armas, photo of young woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores

그런데... 세명의 이름을 섞었는데도 불구하고 너무 엠마 왓슨이 많이 보이네요. 이는 "Emma Watson"이 매우 강력한 키워드이기 때문입니다. 학습에 매우 많이 사용되었다는 뜻입니다. 이럴 경우, 키워드 가중치를 줄는 방법으로 해결할 수 있습니다. (keyword:weight) 처럼 사용하면 됩니다. 

아래는 Emma Watson의 가중치를 줄이고 Ana de Armas의 가중치는 높인 프롬프트입니다.

프롬프트: (Emma Watson:0.5), (Tara Reid:0.9), (Ana de Armas:1.2), photo of young woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores

훌륭합니다. 여러 여배우를 섞었으니 예쁜 모습은 유지되면서도 누구를 특별히 닮은 것이 아닌 모습이 여러 이미지에 일관성있게 등장합니다. 

그러나 이 방법은 안타깝게도 동양인의 얼굴에는 잘 적용되지 않습니다. 동양인 사진은 그다지 많이 학습되지 않았기 때문입니다. 대신 LoRA를 사용하여 비스산 효과를 거둘 수 있습니다. 물론 가중치를 조정하는 것도 가능합니다.

ReActor 확장을 사용하는 방법

AUTOMATIC1111의 ReActor 확장을 사용하면 참조 이미지의 얼굴을 사용하여 이미지를 생성할 수 있습니다. 이 확장은 Roop 확장의 Fork입니다.

ReActor 확장 설치

ReActor 확장의 주소는 아래와 같습니다. 이 주소를 사용하 확장(extension) 설치방법에 따라 설치하시면 됩니다.

https://github.com/Gourieff/sd-webui-reactor

ReActor를 사용하여 새로운 이미지 생성하기

아래와 같이 설정해서 이미지를 생성하겠습니다.

모델: DreamShaperXL
프롬프트: photo of a 25 year old woman, new york city standing, skirt, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores
부정적 프롬프트: disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w

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

아래는 결과입니다. 완전히 닮지는 않지만 그런데로 얼굴이 반영되었네요.

그런데 이 결과물은 서양인 얼굴이 기본인 모델을 사용해서 나온 결과물이므로, ChilloutMix 모델을 사용해 다시한번 테스트해봤습니다. 위보다 낫기는 나은 것 같네요. 그렇다고 얼굴이 완전히 닮은 건 아니지만요.

DreamBooth로 학습시키는 방법

원본 글에는 DreamBooth로 학습시키는 것이 가장 좋은 방법이라고 소개하고 있습니다. 그런데, 제가 아직 드림부스는 잘 모르는지라 생략합니다. 원하시면 원래 글을 읽어보세요.

이상입니다. 이 글은 https://stable-diffusion-art.com/consistent-face/ 의 글을 번역하면서 일부는 제가 원하는대로 수정하여 작성한 글입니다.

LoRA를 사용하는 방법

LoRA는 체크포인트 모델을 수정하기 위한 작은 패치 파일입니다. LoRA 모델도 드림부스와 비슷한 방법으로 학습시킬 수 있습니다. 이 방법도 나중에 정리하겠습니다.

콘트롤넷 IP-adapter를 사용하는 방법

콘트롤넷은 스테이블 디퓨전에서 이미지를 생성할 때 영향을 미치도록 설계된 신경망입니다. 주로 이미지 구도 혹은 인간의 자세롤 복제하는 용도로 많이 사용합니다. 하지만, IP-adapter plus face 모델을 사용하면 얼굴도 복제할 수 있습니다.

IP-adapter plus face 모델 설치 방법

  1. 먼저 AUTOMATIC1111 의 ControlNet 확장이 설치되어 있어야 합니다.
  2. ip-adpater-plus-face_sd15.bin 파일을 다운로드 받아 stable-diffusion-webui\models\ControlNet 폴더에 넣어줍니다. 
  3. 파일의 확장자를 .bin에서 .pth로 변경해줍니다.

IP-adapter plus face 모델 사용 방법

IP-adapter를 사용해서 얼굴을 복제하려면, 먼저 txt2img 페이지에서 ControlNet 영역을 열고 원하는 참조 이미지를 넣어줍니다. 

다음과 같이 설정합니다.

  • Enable : Yes
  • Preprocessor : ip-adapter-clip_sd15
  • Model : ip-adapter-plus-face_sd15

'control weight' 는 1에 가까워야 합니다. 만약 여러가지 ip-adapter face ControlNet을 사용할 경우, 모든 가중치의 합이 1이 되어야 합니다.

프롬프트: A woman sitting outside of a restaurant in casual dress
부정적 프롬프트: ugly, deformed, nsfw, disfigured

아래는 결과입니다. 얼굴이 일관성이 있기는 한데, 그다지 송혜교씨와 닮은 점은 없네요. 

민, 푸른하늘