AI 이미지/Stable Diffusion

Stable Diffusion에서 임베딩 사용하는 방법

하늘이푸른오늘 2024. 1. 19. 23:40

임베딩(embedding) 혹은 텍스트 인버전(textual inversion)은 스테이블 디퓨전에서 이미지 스타일을 제어할 수 있는 또다른 방법입니다. 이 글에서는 임베딩이 무엇인지, 어디에서 받을 수 있는지, 어떻게 사용할 수 있는지 알아보겠습니다. 

임베딩이란?

임베딩은 모델을 변경시키지 않고 새로운 키워드를 정의하는 방법인 텍스트 인버전의 결과입니다. 이 기법은 3~5개의 샘플 이미지 만으로 모델에 새로운 스타일이나 새로운 객체를 삽입할 수 있어서 주목을 받았습니다.

텍스트 인버전의 원리

텍스트 인버전(textual inversion)의 놀라운 점은 새로운 스타일 또는 객체를 추가할 수 있다는 게 아닙니다. 사실 다른 미세조정 기법을 사용하면 스타일이나 객체를 더 확실하게 삽입할 수 있거든요. 텍스트 인버전은 모델 자체는 건드리지 않고 할 삽입할 수 있다는 것입니다.

아래 그림은 원래의 연구 논문에서 가젿온 것으로 작동원리를 보인 것입니다. 

먼저 새로운 객체 또는 스타일에 새로운 키워드를 정의합니다. 단, 이 키워드는 기존의 모델에 존재하지 않아야 합니다. 이 새로운 키워드는 프롬프트에 있는 다른 키워드와 마찬가지 방법으로 토큰화됩니다(숫자로 표현됩니다),

각각의 토큰은 고유한 임베딩 벡터로 변환디어 이미지 생성에 사용됩니다. 

텍스트 인버전은 모델의 어떤 부분도 변경하지 않고 해당하는 새로운 스타일 또는 객체를 가장 잘 표현하는 새 키워드의 임베딩 벡터를 찾습니다. 이는 언어 모델에서 새로운 개념을 설명하는 방법을 찾는 것과 비슷하다고 생각할 수 있습니다.

임베딩 예제

임베딩은 새로운 객체에 대해 사용할 수 있습니다. 아래는 장난감 고양이를 삽입한 예입니다. 주목할 점은 "toy cat"이라는 새로운 개념을 모델에 기존 존재하는 개념(boat, backpack 등)과 함께 사용할 수 있다는 것입니다.

임베딩은 새로운 스타일에도 사용할 수 있습니다. 아래는 새로운 스타일을 임베딩하여 다른 개념의 스타일로 전파시키는 예입니다.

임베딩을 찾을 수 있는 곳

임베딩을 가장 많이 찾을 수 있는 곳은 Civitai.com입니다. 아래 그림과 같이 Embedding으로 필터링하면 임베딩만 볼 수 있습니다.

또한 Hugging Faces에는 스테이블 디퓨전 컨셉 라이브러리가 있는데, 여기에 들어가면 수많은 맞춤형 임베딩을 볼 수 있습니다.

임베딩 사용방법

웹 인터페이스

스테이블 디퓨전 컨셉 적용기(Conceptuallizer)는 다운로드하지 않고 임베딩을 시험해 볼 수 있는 좋은 방법입니다.

먼저 Concetp Library에서 시험하고 싶은 임베딩을 찾습니다. 예를 들어 Marc Allante style을 사용하고 싶다고 해보겠습니다. 그 다음 이 스타일을 나타나게 할 토큰을 찾습니다( 예제 그림이 없어서  찾기가 엄청 힘드네요 ㅠㅠ) 이것은 token_identifier.txt 파일에 있는데,  Marc Allante style 의 경우엔 <Mark_Allante> 입니다. 

이제 컨센 적용기 화면에서  프롬프트를 아래와 같이 입력합니다.

<Marc_Allante>  a dog

그러면 아래와 이 Marc Allante 스타일의 멍뭉이 이미지가 생성됩니다. (그런데, 구글에서 나오는 Marc Allante의 느낌... 물감이 흐르거나 튀는 느낌은 좀 덜하네요. 계속 생성하면 하나쯤 걸릴 수 있을려나...)

이 웹 인터페이스에서는 다른 모델로 바꿔서 적용해보거나, 매개변수를 변경하는 방법등을 사용할 수 없다는 단점이 있습니다. 참고하세요.

AUTOMATIC1111에서 임베딩 사용법

AUTOMATIC1111에서 임베딩을 사용하는 방법은 간단합니다 먼저 Civitai.com 또는 Concept Library에서 임베딩을 다운로드 받습니다.

만약 Concept Libray에서 다운로드 받을 경우 임베딩이름이 learned_embedds.bin으로 되어 있는데(아래 빨간 선), 이것을 우클릭해서 다운로드 받으면 안됩니다(웹페이지가 다운로드 됩니다). 그 파일명을 클릭하거나, 오른쪽에 있는 아래쪽 화살표를 클릭하면 다운로드 받을 수 있습니다.

다음으로 이 파일의 이름을 임베딩에 사용하고자 하는 키워드로 변경합니다. 위의 파일이라면 marc_allante.bin 정도로 바꿔주면 됩니다(모델에 존재하지 않는 키워드여야 합니다). 마지막으로 이 파일을 아래 폴더에 넣어주면 됩니다.

stable-diffusion-webui/embeddings

그 다음 AUTOMATIC1111을 다시 시작하면 사용할 수 있습니다. 임베딩을 사용할 때는 그냥 프롬프트에 일반 키워드처럼 사용하면 됩니다. 즉, 아래와 같이 입력하면 임베딩이 적용됩니다.

프롬프트: (marc_allante:1.2)  a dog

아래는 결과입니다.

AUTOMATIC1111 에서 임베딩을 간단하게 적용하는 방법

임베딩은 한 글자라도 틀리면 작동되지 않습니다. 또한 SD 1.5용 임베딩을 v2에 사용할 수 없고 반대도 마찬가지입니다. 언어모델이 다르기 때문입니다. 

이렇게 직접 입력하면 임베딩을 사용하는지, 일반 키워드인지 의심스러울 수 있습니다. marc_allante의 경우엔 효과가 확실하지만, 경우에 따라서는 효과가 미묘해서 알아보기 힘들 수 있거든요.

이렇게 임베딩 파일명을 직접 입력하는 대신, AUTOMATIC1111 GUI에서 클릭하는 방식이 더 좋습니다. 아래와 같이 txt2img 혹은 img2img 페이지에서 Textual Inversion 탭을 연뒤 원하는 인베딩을 선택해 주면 됩니다. 클릭하는 즉시 프롬프트에 해당 내용이 나타나거나 사라집니다.

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

위의 프롬프트를 보면, 임베딩을 촉발하는 키워드 marc_allante에 가중치를 증가시켰음을 아실 겁니다. 즉, (marc_allante:1.2)는 가중치를 120%로 올린 것입니다. 때로 이렇게 키워드 가중치를 올려야 할 경우가 있습니다. 아마도 AUTOMATIC1111이 임베딩을 불러오는 방법과 관련이 있을 듯 합니다.

아래는 키워드의 가중치를 변화시키며 테스트해본 결과입니다. 이렇게 변화시키면서 어떤 값이 좋을지 테스트해보시는 게 좋습니다. 가중치가 1.0 아래로 가니까 실사 그림에 가까워지고, 1.4이상 되니까 그림이 무너지는 것 같네요. 

0.6 0.8 1.0
1.2 1.4 1.6

유용한 임베딩

텍스트 인버전을 사용해 이렇게 스타일이나 객체를 추가하는 경우도 있지만, 사실 더 유용한 것은 부정적 임베딩(negative embeddings)입니다. (부정적 임베딩은 반드시 부정적 프롬프트에 추가해야 합니다!!!!)

BadDream

BadDreamDreamShaper 모델을 위한 부정적 임베딩입니다.

UnrealisticDream

UnrealisticDream은 사실적 스타일의 이미지를 위한 부정적 임베딩입니다. Realistic Vision과 같은 사실적 모델에 사용하셔야 합니다.

이 부정적 임베딩은 BadDream과 함께 사용할 필요가 있습니다. 즉, 부정적 프롬프트에 아래와 같이 포함시킵니다.

BadDream, UnrealisticDream

EasyNegative

EasyNegativeAnithing v3OrangeMix와 같은 애니 모델을 위한 부정적 임베딩입니다.

추천 임베딩

wlop_style

Stable Diffusion base 모델을 사용할 경우, 아무리 프롬프트를 조작해도 wlop 스타일을 생성하는 것은 불가능하다는 것을 아실 겁니다. 적절한 모델과 함께 이 임베딩을 사용하면 이 스타일의 이미지를 얼마든지 생성할 수 있습니다.

wlop_style 임베딩을 사용하면 아티스트 wlop의 멋진 일러스트레이션 스타일을 생성할 수 있습니다. 이때 반드시 SirVeggie의 wlop-any 모델을 사용하여야 합니다. 여기에 들어가면 여러가지 모델이 있는데, 어떤 것을 설치할지는 이 가이드를 읽어보시기 바랍니다.

wlop_style 임베딩 다운로드 링크

wlop-any 모델 다운로드 링크

그냥 사용해서는 좋은 작품이 안나올 수도 있습니다. 이럴때는 프롬프트의 가중치를 조정해야 합니다.

AUTOMATIC1111에서는 아래와 같이 가중치를 조정해주면 좋습니다.

프롬프트: (wlop_style :0.6) (m_wlop:1.4) woman wearing dress, perfect face, beautiful detailed eyes, long hair, birds
부정적 프롬프트: closed eyes, disfigured, deformed

여기에서 wlop_style은 임베딩 활성화 키워드이고, m_wlop은 모델을 위한 키워드입니다. 

원하는 스타일이 안나오더라도 짜증내지 마시고, 위의 두가지 키워드의 가중치를 조정하면서 시도해보시기 바랍니다. 또 임베딩이 먹히지 않는 물체도 있으니, wlop 의 작품을 보시고 자주 나오는 물체로 시도해 보시기 바랍니다.

Kuvshinov

Kuvshinov는 러시아 일러스트레이션 작가입니다. kuvshinov 임베딩Stable Diffusion v1.4와 함께 사용할 수 있습니다.

다운로드 링크

프롬프트: (_kuvshinov:1), a woman with beautiful detailed eyes, highlight hair
부정적 프롬프트: disfigured, deformed

참고로 임베딩을 다운로드 받은 후, _kuvshinov.bin으로 파일명을 변경했습니다.

임베딩의 장단점

임베딩을 사용하는 장점중 하나는 파일 크기가 매우 작다는 것입니다. 대부분 100KB 내외여서 아무리 많은 임베딩을 저장해도 별 부당이 없습니다. 또한 임베딩은 새로운 키워드일 뿐이므로, 어떤 이미지에도 사용할 수 있다는 점도 장점입니다.

임베딩의 단점중 하나는 어떤 모델과 사용해야 하는지 알기 힘들다는 것입니다. 따라서 적어도 애니용 모델인지 사실적 모델인지를 확인하고 사용하셔야 합니다.

이렇게 파일 사이즈가 작다는 장점은 있지만, 일반적인 미세 조정 모델보다 사용하기 힘듭니다. 임베딩만으로는 원하는 효과를 얻기 힘든 경우가 종종 발생합니다.

이상입니다. 이 글은 https://stable-diffusion-art.com/embedding/ 을 번역하며 악간 수정해 작성했습니다.

민, 푸른하늘

====