Stable Diffusion: 임베딩을 활용하여 이미지 스타일 제어하기

0

이번 글에서는 스테이블 디퓨전에서 이미지 스타일을 제어할 수 있는 방법 중 하나인 임베딩 혹은 텍스트 인버전에 대해 알아보려 합니다. 임베딩은 이미지 생성 모델의 잠재 공간에 사용자 정의된 패턴을 추가하여 특정 스타일이나 테마를 적용할 수 있게 해주는 방법입니다. 이를 통해 텍스트 프롬프트만으로는 얻기 어려운 독특하고 일관된 이미지 스타일링을 구현할 수 있습니다.

먼저, 임베딩이 무엇인지 간단하게 살펴본 뒤, 어디에서 임베딩을 받을 수 있는지, 어떻게 효과적으로 사용하는지 알아보도록 하겠습니다. 이러한 과정을 이해하면 스테이블 디퓨전으로 더욱 창의적인 이미지 스타일링을 할 수 있을 것입니다. 여러분이 이미 가진 창작 아이디어에 날개를 달아줄 수 있는 임베딩의 매력을 함께 발견해보시죠.

임베딩이란 무엇인가요?

임베딩은 모델을 변경하지 않고도 새로운 키워드를 정의하는 방법인 텍스트 인버전의 결과물을 뜻합니다. [이 기법은 3~5개의 샘플 이미지만으로도 모델에 새로운 스타일이나 객체를 삽입할 수 있어 주목을 받았습니다.] 즉, 기존의 미세 조정 기법과 비교했을 때 훨씬 간단하면서도 창의적인 이미지 스타일링이 가능해진 것이죠.

텍스트 인버전의 원리

[텍스트 인버전의 핵심은 모델 자체를 변경하지 않고, 새로운 스타일이나 객체를 추가할 수 있다는 것입니다.] 실제로 다른 미세 조정 기법을 사용하면 스타일이나 객체를 더욱 확실하게 삽입할 수 있지만, 텍스트 인버전은 모델을 손대지 않고 새로운 키워드를 추가할 수 있다는 점에서 특별하죠.

아래 그림은 텍스트 인버전의 작동 원리를 보여줍니다.

텍스트 인버전 작동 원리
  • 새로운 키워드 정의: 먼저 새롭게 추가할 객체 또는 스타일에 대한 키워드를 정의합니다. 이 키워드는 기존 모델에 존재하지 않아야 하며, 프롬프트에 있는 다른 키워드와 마찬가지로 토큰화되어 숫자로 표현됩니다.
  • 토큰 임베딩: 각 토큰은 고유한 임베딩 벡터로 변환되어 이미지 생성에 사용됩니다.
  • 최적화된 임베딩 벡터 찾기: 텍스트 인버전은 모델의 어떤 부분도 변경하지 않고, 해당 스타일이나 객체를 가장 잘 표현하는 새 키워드의 임베딩 벡터를 찾습니다. 이를 통해 모델은 기존의 스타일이나 객체와는 다른 새로운 요소를 이미지에 반영하게 됩니다.

임베딩으로 스타일 제어하기

임베딩의 작동 원리를 이해했다면, 이를 실제로 활용하여 스테이블 디퓨전에서 이미지 스타일을 제어하는 방법을 알아보겠습니다.

  • 임베딩 받기: 인터넷에서 여러 사용자들이 공유한 임베딩을 받을 수 있습니다. Hugging FaceGitHub 등에서 임베딩을 다운로드할 수 있는 다양한 리소스가 있습니다.
  • 임베딩 사용하기: 다운로드한 임베딩 파일을 스테이블 디퓨전 모델이 접근할 수 있는 디렉터리에 넣고, 프롬프트에서 해당 키워드를 사용하면 됩니다. 예를 들어, “photo of a [custom style]”과 같이 프롬프트에 사용하면 됩니다.
  • 직접 임베딩 만들기: 자신만의 고유한 임베딩을 만들고 싶다면 몇 가지 샘플 이미지로 텍스트 인버전 과정을 거쳐 직접 정의할 수 있습니다.

새로운 객체와 스타일을 추가해보세요

임베딩을 사용하면 모델에 새로운 객체를 쉽게 추가할 수 있습니다. 아래 이미지는 장난감 고양이를 모델에 삽입한 예시입니다. 주목할 점은 “toy cat”이라는 새로운 개념을 모델에 기존의 개념인 , 배낭 등과 함께 사용할 수 있다는 점입니다.

임베딩 예제 – 장난감 고양이

임베딩은 새로운 스타일을 추가하는 데도 유용합니다. 아래 이미지는 새로운 스타일을 임베딩하여 여러 가지 개념에 적용한 사례입니다. 이처럼 텍스트 인버전을 통해 자신만의 독특한 스타일을 다른 이미지에 전파할 수 있습니다.

임베딩 예제 – 새로운 스타일

임베딩을 찾을 수 있는 곳

임베딩을 가장 많이 찾을 수 있는 곳은 Civitai.com입니다. 사이트에서 Embedding으로 필터링하면 다양한 임베딩을 볼 수 있죠. 아래 이미지와 같이 Civitai에서 embedding 필터를 설정하여 임베딩을 쉽게 찾을 수 있습니다.

Civitai에서 임베딩 찾기

또한, Hugging Face의 스테이블 디퓨전 컨셉 라이브러리에서도 수많은 임베딩을 찾을 수 있습니다.

Hugging Face 컨셉 라이브러리

직접 임베딩 만들기

임베딩을 다운로드하는 것뿐만 아니라, 직접 임베딩을 만들어볼 수도 있습니다. 이를 위해 필요한 것은 몇 가지 샘플 이미지와 프롬프트를 통해 새 키워드에 적합한 임베딩 벡터를 찾는 과정입니다.

직접 임베딩을 만드는 단계
  • 샘플 이미지 수집: 임베딩하려는 객체나 스타일의 샘플 이미지를 3~5장 정도 준비합니다.
  • 새 키워드 정의: 기존 모델에 없는 새 키워드를 프롬프트로 정의합니다.
  • 학습 프로세스: 샘플 이미지와 키워드를 통해 새 임베딩을 학습합니다.
  • 사용하기: 학습한 임베딩을 모델에 적용하고 프롬프트로 새 키워드를 사용하여 이미지 생성에 활용합니다.
임베딩을 직접 만들 때 유용한 팁
  • 샘플 이미지는 가능한 다양한 각도와 배경에서 수집합니다.
  • 키워드는 모델에 이미 존재하지 않는 독특한 것을 선택합니다.
  • 임베딩 학습 과정에서는 충분한 반복을 통해 정확한 벡터를 찾습니다.
toy cat whimsical design, plush textures, vibrant colors, playful setting, (tv_Adelaide_MXAI:1)

AUTOMATIC1111에서 임베딩 사용법

임베딩을 사용하는 방법은 간단합니다. 먼저, Civitai.com이나 Hugging Face의 Concept Library에서 임베딩을 다운로드받습니다. Concept Library에서 다운로드할 때에는 임베딩 파일의 이름이 learned_embeds.bin으로 되어있는 파일명을 클릭하거나, 오른쪽의 다운로드 아이콘을 클릭해서 다운로드 받으면 됩니다.

임베딩 사용 단계

  • 파일명 변경: 다운로드한 파일의 이름을 임베딩에 사용할 키워드로 변경합니다. 즉, learned_embeds.binmarc_allante.bin처럼 바꾸면 되는데, 이때 키워드는 모델에 존재하지 않는 것이어야 합니다.
  • 임베딩 폴더에 저장: 변경한 파일을 stable-diffusion-webui/embeddings 폴더에 넣습니다.
  • AUTOMATIC1111 재시작: AUTOMATIC1111을 재시작하면 임베딩을 사용할 수 있습니다.
  • 프롬프트에 입력: 프롬프트에 일반 키워드처럼 입력하면 임베딩이 적용됩니다. 예를 들어 “(marc_allante:1.2) a dog”과 같이 프롬프트에 임베딩의 이름을 넣어 사용하면 됩니다.

GUI에서 간편하게 임베딩 적용하기

프롬프트에 직접 입력하는 대신, AUTOMATIC1111의 GUI를 활용하면 편리하게 임베딩을 적용할 수 있습니다. txt2img 또는 img2img 페이지의 Textual Inversion 탭을 열어 원하는 임베딩을 클릭하면 해당 키워드가 자동으로 프롬프트에 추가되거나 사라집니다.

Textual Inversion 탭

AUTOMATIC1111에서 임베딩을 사용할 때 주의할 점

프롬프트에서 임베딩 키워드의 가중치를 조정할 수 있습니다. 예를 들어, (marc_allante:1.2)는 marc_allante의 가중치를 120%로 올린 것입니다. 경우에 따라 가중치를 높여야 할 때가 있는데, 이는 AUTOMATIC1111이 임베딩을 불러오는 방식과 관련이 있을 수 있습니다.

아래는 키워드 가중치에 따른 이미지 변화를 보여줍니다. [가중치를 변화시키면서 어떤 값이 최적인지 테스트해보세요]. 가중치가 1.0 이하로 내려가면 실제 사진에 가까워지고, 1.4 이상이면 이미지가 무너지는 경향이 있습니다.

가중치 변화에 따른 이미지, 위에서 부터 시계 방향으로 0.6, 0.8, 1.0, 1.2

유용한 임베딩 활용법

텍스트 인버전을 사용하여 스타일이나 객체를 추가할 수도 있지만, 부정적 임베딩이 더 유용할 때가 많습니다. 이 때 부정적 임베딩은 반드시 부정적 프롬프트에 추가해야 합니다. 아래는 다양한 부정적 임베딩과 특정 스타일을 위한 임베딩 예시입니다.

1. BadDream

BadDream은 DreamShaper 모델을 위한 부정적 임베딩입니다. 이미지를 생성할 때 불필요한 요소를 제거해 더욱 선명하고 깨끗한 이미지를 만들어줍니다. Negative 프롬프트에 아래와 같이 사용합니다.

Prompt:

fashion photography of caucasian woman

Negative Prompt:

BadDream

fashion photography of caucasian woman

2. UnrealisticDream

UnrealisticDream은 사실적 스타일 이미지를 위한 부정적 임베딩입니다. Realistic Vision과 같은 사실적 모델에 사용할 수 있습니다. 이 임베딩은 BadDream과 함께 사용해야 효과가 극대화됩니다.

Prompt:

fashion photography of caucasian woman

Negative Prompt:

BadDream, (UnrealisticDream:1.2)

fashion photography of caucasian woman

3. EasyNegative

EasyNegativeAnithing v3OrangeMix와 같은 애니메이션 모델을 위한 부정적 임베딩입니다. 애니메이션 스타일의 이미지를 더욱 선명하게 만들 수 있습니다.

Prompt:

fashion photography of caucasian woman

Negative Prompt:

EasyNegative

prompt

fashion photography of caucasian woman

4. Kuvshinov

Kuvshinov는 러시아 일러스트레이션 작가로, 그의 스타일을 구현하기 위한 kuvshinov 임베딩은 Stable Diffusion v1.4 모델과 함께 사용할 수 있습니다.

Prompt:

(kuvshinov:1), a woman with beautiful detailed eyes, highlight hair

(kuvshinov:1), a woman with beautiful detailed eyes, highlight hair

마치며

스테이블 디퓨전에서 임베딩을 사용하는 것은 텍스트 인버전 기법을 통해 새로운 스타일이나 객체를 간편하게 추가할 수 있다는 점에서 창의적인 이미지 제작자들에게 혁신적인 도구가 될 수 있습니다. [임베딩은 파일 크기가 작고 특정 키워드만 추가하면 다양한 모델과 함께 사용할 수 있다는 장점 덕분에, 많은 임베딩을 손쉽게 저장하고 적용할 수 있습니다.]

하지만 단점도 분명 존재합니다. 어떤 모델과 함께 사용할지 파악하기 어려워 임베딩의 효과가 미묘해지는 경우가 있고, [특정 스타일이나 객체를 완벽히 구현하려면 부정적 임베딩이나 모델 선택 등 추가적인 조정이 필요할 수 있습니다.] 특히, 애니메이션 모델이나 사실적인 모델에 따라 사용하는 임베딩을 선택해야 하는 점도 주의할 필요가 있습니다.

그럼에도 불구하고 [임베딩은 텍스트 프롬프트만으로는 얻기 어려운 독특하고 일관된 스타일링을 구현할 수 있는 강력한 도구입니다.] BadDream, EasyNegative와 같은 부정적 임베딩을 통해 이미지를 더욱 선명하고 깨끗하게 만들거나, kuvshinov와 같은 특정 스타일의 임베딩을 사용하여 원하는 이미지를 쉽게 제작할 수 있습니다.

결국 임베딩은 파일 크기가 작고 사용이 간편하면서도 창의적인 이미지 제작에 무궁무진한 가능성을 열어주는 도구로, 다양한 이미지 스타일링을 원하는 사용자들에게 적합합니다. 스테이블 디퓨전에서 원하는 스타일을 구현하고자 한다면, 임베딩을 활용하여 더욱 다양하고 매력적인 창작물을 만들어보시기 바랍니다.

Leave a Reply