AI 이미지/Stable Diffusion

Stable Diffusion - 프롬프트에 관한 모든 것

하늘이푸른오늘 2024. 1. 12. 15:00

좋은 프롬프트를 만드는 과정은 모든 스테이블 디퓨전 사용자가 마주치는 첫번째 단계입니다. 이 글에서는 여러가지 실험과 사용자 들의 반응을 종합한 프롬프트 제작 절차 및 기법을 요약한 글입니다.

참고: 이 글을 읽고 실제 프롬프트를 작성할 때에는 chatGPT로 프롬프트를 만드는 방법도 추천드립니다.

아래는 이 글의 목차입니다.

좋은 프롬프트의 구성

좋은 프롬프트는 상세하고 구체적이어야 합니다. 좋은 프롬프트를 작성하려면 아래와 같은 키워드 카테고리를 살펴보면서 어떤 것을 사용할 것인지 결정하는 것이 좋습니다. 여기를 보시면 이들 키워드의 목록의 예가 있습니다.

  1. 피사체(Subject, 주제)
  2. 이미지의 종류(Media): 사진, 그림 등 
  3. 스타일(Style)
  4. 예술 작품 공유 웹사이트(Art-sharing website)
  5. 해상도(Resolution)
  6. 추가 세부사항(Additional detail)
  7. 색상(Color)
  8. 조명(Lighting)

그렇다고 모든 종류의 키워드를 포함시킬 필요는 없습니다. 단지 프롬프트를 작성할 때 체크리스트로 활용하면 됩니다.

지금부터 키워드를 추가해 가면서 이미지를 생성해 보겠습니다. 여기에서는 아주 훌륭한 SD 1.5 미세조정 모델로서, 초보자들도 쉽게 사용할 수 있는 DreamShaper을 사용하겠습니다. 또한 프롬프트의 효과를 살펴보기위해 부정적 프롬프트는 사용하지 않겠습니다.

모든 이미지는 DPM 2++ 2M Karras 샘플러플 사용하였으며, 샘플링 단계는 25단계, 이미지 크기는 512x768로 생성했습니다. 

또한, AUTOMATIC1111 을 사용해서 생성할 수도 있지만, 저는 ComfyUI를 사용했습니다. 사실 이 두 GUI를 사용하면 약간 생성된 결과가 달라지지만 큰 차이는 없고, 다만  ComfyUI가 더 빠르고 사용하기 편하기 때문입니다. 아래 그림은 제가 사용한 워크플로입니다. 이 그림을 ComfyUI 캔버스에 떨어뜨리면 직접 사용할 수 있습니다. 특히 이 글에서는 프롬프트만 변경하시면 그대로 사용할 수 있습니다.

피사체(Subject, 주제)

피사체(주제)는 이미지에 표현할 대상입니다. 이것은 반드시 존재해야 하고 가능한 한 자세하게 기술하는 것이 좋습니다. 영어로 기술하는 것이 자신이 없으시면 DeepL과 같은 번역 사이트를 사용해도 좋고, ChatGPT를 사용해 프롬프트를 생성해도 됩니다. 다음은 그 예입니다. 

프롬프트: A sorceress

멋진 이미지가 생성되었습니다만, 이 프롬프트는 상상력이 발휘될, 즉 마음대로 생성될 여지가 너무 많습니다. 

당신은 어떤 모습의 마법사를 원합니까? 좀더 구체적으로 설명할 수 있는 키워드가 있나요? 어떤 옷을 입히고 싶나요? 무슨 마법을 쓰게 할 것인가요? 서있는 자세, 달리는 자세, 혹은 공중에 떠있는 모습은 어떤가요? 배경은 어떤 것을 원하나요?

스테이블 디퓨전은 당신의 마음을 읽어낼 수 없습니다. 그러니까 원하는 것을 정확하게 표현해야죠.

예들 들어, 강력하고 신비로우며 번개 마술을 사용한다고 해보죠. 보석으로 장식된 가죽옷을 입고 모자를 쓰고 바위위에 앉아있다고 해봅시다. 배경은 성으로 하고요.

프롬프트: a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background

이렇게 프롬프트가 구체적이 될 수록 생성되는 이미지가 일관성있게 생성됩니다. (물론 완벽하지는 않습니다. 왼쪽 이미지엔 성이 표현되지 않았죠. SD1.5는 특히 프롬프트를 이해하고 따르는 능력이 떨어지는 편입니다. 현재로선 DALL-E 3 가 최고 수준이라고합니다만, 점점 나아질 겁니다.)

이미지 종류(Media)

이미지 종류란 이미지를 생성하는데 사용된 물질입니다. 일러스트레이션(illustration), 유화(oil painting), 3D 렌더링(rendering), 사진(photography) 등이 예입니다. 이미지 종류는 매우 강력한 효과가 있습니다. 이런 키워드 하나만 들어가도 이미지의 스타일이 완전히 바뀐다는 뜻입니다.

위의 프롬프트에 digital art 라는 키워드를 추가해 보겠습니다.

프롬프트 : a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background, digital art

사실적 사진에서 컴퓨터 그래픽에 가깝게 바뀌었습니다.

스타일(Style)

 스타일이란 이미지의 예술적  스타일을 말합니다. 인상주의(impressionist), 초현실주의(surrealist), 팝아트(pop art)등이 그러한 예입니다.

이제 프롬프트에 hyperrealistic, fantasy, dark art를 추가해 보겠습니다.

프롬프트 :  a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background, digital art, hyperrealistic, fantasy, dark art

분위기가 좀더 어둡고 음침해졌나요? ㅎㅎ 워낙 원래 이미지 자체가 그런 분위기다 보니 그다지 차이는 안납니다만, 이해해주시길 부탁드리며 넘어가겠습니다.

예술 작품 공유 웹사이트(Art-sharing website)

 ArtstationDeviant Art과 같은 그래픽 웹사이트에는 다양한 장르의 수많은 이미지가 들어있습니다. 프롬프트에 이런 단어를 넣으면, 특정 사이트의 분위기가 나는 이미지로 만들 수 있습니다.

이번에는 artstation을 프롬프트에 추가해 보겠습니다.

프롬프트 : a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background, digital art, hyperrealistic, fantasy, dark art, artstation

제가 보기에는 그다지 큰 변화가 없는 것 같은데, Artstation에서 자주 보이는 분위기가 나타난다고 하네요. ㅠㅠ

해상도(Resolution)

해상도는 이미지가 얼마나 깔끔하고 상세한지를 표현합니다. 때로는 8k, UHD 와 같은 키워드도 사용되지만, 여기에서는  highly detailed 와 sharp focus라는 키워드를 추가해 보겠습니다. 

프롬프트 : a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background, digital art, hyperrealistic, fantasy, dark art, artstation, highly detailed, sharp focus

그다지 차이는 보이지 않는 것 같은데, 이는 앞의 이미지가 충분이 깔금하고 상세했기 때문입니다. 뭐... 그렇다고 나빠지는 효과는 없으니 충분히 쓸만 합니다.

추가 세부사항(Additional detail)

추가 세부사항은 이미지를 수정하는 데 사용되는 감미료쯤 됩니다. sci-fi와 dystopian을 사용하여 위의 이미지에 약간의 분위기를 추가해 보겠습니다.

프롬프트 : a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background, digital art, hyperrealistic, fantasy, dark art, artstation, highly detailed, sharp focus, sci-fi, dystopian

색(Color)

색 관련 키워드를 추가하여 이미지의 전반적인 색을 제어할 수 있습니다. 지정된 색상은 이미지 톤 혹은 피사체에 나타나게 됩니다. 

여기에서는 무지개 빛깔의 금색(iridescent gold) 키워드를 추가해 보겠습니다.

프롬프트: a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background, digital art, hyperrealistic, fantasy, dark art, artstation, highly detailed, sharp focus, sci-fi, dystopian, iridescent gold

장식이 구리빛에서 금색으로 변했네요!

조명(Lighting)

사진 작가라면 누구나 조명이 멋진 사진의 비결이라고들 이야기 합니다. 조명 키워드는 이미지의 표현에 엄청난 효과를 미칩니다. 

여기에서는 studio lighting을 추가해 보겠습니다.

프롬프트 : a beautiful and powerful mysterious sorceress, smile, sitting on a rock, lightning magic, hat, detailed leather clothing with gemstones, dress, castle background, digital art, hyperrealistic, fantasy, dark art, artstation, highly detailed, sharp focus, sci-fi, dystopian, iridescent gold, studio lighting

피사체에 조명이 집중되어 더 두드러지게 나타나는 효과가 발생했네요.

여기까지가 예제 프롬프트를 사용해서 프롬프트용 키워드에 대해 테스트입니다.

참고

키워드 몇개만 추가해도 이미지가 훨씬 예뻐지는 것을 보실 수 있습니다. 키워드를 많이 넣는다고 항상 좋은 결과가 나오는 것은 아닙니다. 적절한 키워드 몇개만 있어도 멋진 이미지를 얻을 수 있을 것입니다.

부정적 프롬프트

부정적 프롬프트를 사용하여 이미지를 원하는 대로 생성하는 데 도움이 됩니다. 다만, 원하는 것이 아닌 원하지 않는 것을 지정합니다. 물건을 지정할 수도 있지만, 스타일이나 속성(ugly, deformed)을 지정할 수도 있습니다.

특히 스테이블 디퓨전 v2 모델의 경우, 부정적 프롬프트가 반드시 필요합니다. 부정적 프롬프트가 없으면 이미지 품질이 v1 모델보다 못해집니다. v1 모델과 SDXL  모델의 경우 넣어도 되고 안넣어도 되지만, 입력해서 나쁠 것은 없기 때문에 일상적으로 사용하는 부정적 프롬프트를 넣어주는 편입니다.  

부정적 프롬프트: disfigured, deformed, ugly

키워드 목록

이미지 종류

  • Portrait: 얼굴 버스트샷 이미지가 나타남. 대부분 사진 스타일
  • Digital Painting: 디지털 아트
  • Concept art: 일러스트레이션 스타일, 2D
  • Ultra realistic illustration: 매우 사실적인 그림 스타일. 사람에 사용하면 좋음
  • Underwater portrait: 사람과 함께 사용하면 환상적인 분위기 연출 가능. Hair floating 키워드와 함께 사용
  • Underwater steampunk: 빛이 바랜 듯한 물 속 느낌.
Underwater steampunk painting of a young woman with light blue dress, hair floating,  artstation, 8k, extremely detailed, ornate, cinematic lighting, vivid.

스타일

  • Hyperrealistic: 해상도와 세부 표현이 정교해짐
  • Pop-art: 팝아트 스타일
  • Modernist: 생생한 색상, 높은 대비
  • art nouveau: 아르누보. 장식과 세부 표현이 증가됨. 특히 건축물
A 19th-century Brougeois-style couple strolling along an Art Nouveau street, capturing the romantic ambiance of the era. Sunlight casts enchanting shadows on the winding alleys as they don elegant attire and hats, while the photo exudes a retro charm with intricate details reminiscent of a bygone era. (이 프롬프트는 ChatGPT를 활용해 작성했습니다.)

이런 스타일의 사진은 학습된 게 없나 봅니다. 모델을 바꾸어봐도 대부분 얼굴이 제대로 표현되지 않네요.

예술가

예술가 목록은 따로 추가하지 않겠습니다. 저 개인적으로는 인상파 특히 고흐(Van Gogh)를 좋아하고, 알폰스 무하(Alphonse Mucha)의 그래픽 스타일을 좋아하고, 구스타프 클림트(Gustav Klimt)를 좋아하지만, 모두 개취일 뿐이죠. 

다만, 인터넷에서 검색해서 나오는 정도의 예술가들의 작품은 이미 기본 모델에서 학습되었을 가능성이 높기 때문에 어떤 예술가 이름을 추가한다고 해도 거의 반영될 가능성이 높다는 점만 기억해두시면 됩니다. 몇번이나 강조한 것처럼 예술가 이름이 들어가면 거의 모든 스타일이 고정된다고 봐도 될 정도로 효과가 강력하다는 점도 기억하세요.

A young woman adorned with flower motifs in a graphic inspired by the style of Alphonse Mucha. Intricate linework and decorative elements bring the artwork to life, capturing the elegance and grace of the Art Nouveau era (이 프롬프트도 ChatGPT를 활용해 작성했습니다.)

기타 추가적인 세부사항

  • dramatic: 얼굴의 감정 표현이 증가함. 생동감이 높아짐
  • low angle shot : 하방 촬영
  • psychedelic: 사이키델릭 조명, 왜곡이 있는 선명한 색

좋은 프롬프트를 만드는 절차

반복식 프롬프트 조정

프롬프트 구축은 대화식, 반복식이라고 생각하는 것이 좋습니다. 앞절에서 보는 것처럼 키워드 몇개만 추가해도 이미지 품질이 좋아지므로, 먼저 적당한 프롬프트를 만들어 이미지를 생성하고, 부족하다 싶은 부분을 앞 절에 있는 키워드를 이용하여 보충하여 다시 생성하는 등, 계속 반복하여 프롬프트를 수정해 가는 것이 좋습니다.

저의 경우엔 맨 처음엔 주제, 이미지 종류, 스타일만 지정한 간단한 프롬프트로 시작합니다. 그 다음 4장 정도를 뽑아보며 검토합니다. 대부분의 경우 이 정도로는 만족스런 이미지를 얻기 힘듧니다(특히 SD1.5를 사용할 경우)

그 다음 한번에 키워드 2개씩을 추가해서 이미지를 생성하고, 검토후 또다시 반복하는 방식을 사용합니다. 

하지만, 이런 시행착오를 줄이려면, 인공지능을 이용해 프롬프트를 생성하는 방법을 고려해보는 것도 좋습니다. 특히 영어가 부족한 저같은 사람에게는 매우 유용합니다. 

부정적 프롬프트(Negative Prompt) 사용하기

인공지능 이미지 공유사이트에 올라온 이미지들을 살펴보면, 매우 긴 목록의 부정적 프롬프트를 사용하는 것을 볼 수 있습니다. 

하지만, 저는 그냥 아래와 같은 프롬프트만 넣어놓고 계속 사용하고 있습니다. 머... 그다지 변경할 필요성을 못느끼네요. 

ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, b&w, watermark EasyNegative

참고로, 맨 마지막에 있는 EasyNegative는 팔이 2개 달린다는 등 해부학적으로 말이 안되는 경우를 없애는 텍스트 인버전(임베딩)입니다.

그런데 SDXL로 가면서 부정적 프롬프트의 필요성이 많이 낮아졌습니다. 미드저니달리3에서 부정적 프롬프트를 넣을 수 없는 것처럼, SDXL도 아직 부족하기는 하지만 왠만해서는 이상한 이미지는 만들어지지 않습니다. 새로운 버전이 나온다면 아얘 부정적 프롬프트는 필요없어지지 않을까 싶네요.

프롬프트 관련 기술적 사항

모든 프롬프트 키워드가 동일한 가치를 갖는 것은 아닙니다. 강력한 영향을 미치는 키워드(유명인 이름이나 예술가 이름)도 있고 그렇지 않은 키워드도 있습니다. 그런데, 키워드의 중요도를 강제로 바꿀 수도 있습니다.  특정 샘플링 단계에서 다른 키워드로 전환하면 키워드의 중요성을 수정할 수 있습니다.

아래의 문법은 AUTOMATIC1111 GUI 에 적용됩니다. ComfyUI 등 다른 GUI의 경우 문법이 약간 다를 수 있습니다. 

키워드 가중치

키워드들 (keyword: weight)와 같은 형태로 사용하면 가중치를 변경시킬 수 있습니다. weight 를 0 이하로 하면 가중치가 낮아지고 1 이상이면 가중치가 높아지게 됩니다. 

예를 들어, 아래의 프롬프트에서 dog 에 대한 가중치를 변경해가면서 이미지를 생성해보겠습니다. 일단 한번 돌려서 적당한 이미지를 선정한 후, 이 이미지의 seed 값을 사용하면 비슷한 이미지가 생성됩니다.

dog, autumn in paris, ornate, beautiful, atmosphere, vibe, mist, smoke, fire, chimney, rain, wet, pristine, puddles, melting, dripping, snow, creek, lush, ice, bridge, forest, roses, flowers, by stanley artgerm lau, greg rutkowski, thomas kindkade, alphonse mucha, loish, norman rockwell.
( dog:0.5) dog (dog:1.5)

dog의 가중치를 올리면 더 많은 강아지가 생성되는 경향이 있습니다. 가중치를 낮추면 덜 생성되고요. 그렇다고 항상 이런 것은 아니고 확률적으로 그렇다는 말씀입니다. 

이 기술은 모든 종류의 키워드에 적용됩니다. 즉, 피사체 뿐만 아니라, 스타일, 조명 등의 키워드에도 가중치를 적용할 수 있습니다.

괄호와 대괄호 () / []

괄호와 대괄호 () 또는 [] 를 사용해도 키워드의 중요도를 조정할 수 있습니다. (keyword)와 같이 사용하면 키워드의 가중치가 1.1 배 올라갑니다. 즉, (keyword:1.1)과 동일합니다. 반대로 [keyword]는 가중치를 0.9만큼 내려줍니다. 즉, (keyword:0.9)와 동일합니다. 

괄호와 대괄호를 겹쳐서 사용할 수 있습니다. 그러면 1.1배 혹은 0.9배를 곱한 결과가 됩니다.

(keyword): 1.1
((keyword)): 1.21
(((keyword))): 1.33
[keyword]: 0.9
[[keyword]]: 0.81
[[[keyword]]]: 0.73

키워드 블렌딩

두개의 키워드를 섞어서 사용할 수 있습니다. 이를 프롬프트 스케줄링(prompt scheduling)이라고 하며 문법은 아래와 같습니다.

[keyword1 : keyword2: factor]

여기에서 factor 는 keyword1에서  keyword2로 바뀌는 스텝을 제어합니다. factor 는 0과 1사이의 값이어야 합니다. 예를 들어 샘플링 스텝이 30인 경우, 아래와 같이 사용한다면, 

Oil painting portrait of [Joe Biden: Donald Trump: 0.2]

1~6 단계에서는 "Oil painting portrait of Joe Biden"이 적용되고, 7~30 단계에서는 "Oil painting portrait of Donald Trump"이 적용된다는 뜻입니다. 아래는 factor를 변경하면서 적용해본 예입니다.

0.2 0.4 0.6 0.8

이때, Joe Biden과 Donald Trump의 순서를 바꾸면 다른 이미지가 생성됩니다. 아래는 기본 프롬프트입니다.

Oil painting portrait of [Donald Trump: Joe Biden: 0.2]
0.2 0.4 0.6 0.8

이와 같이 키워드 블렌딩을 사용할 때, 첫번째에 등장하는 키워드가 전체적인 분위기를 결정하게 됩니다. 즉, 바로 위의 예에서 Trump 가 앞쪽에 있기 때문에 양복이 트럼프의 양복이 된 것입니다.

얼굴 섞기

프롬프트 스케줄링을 가장 많이 활용하는 예가 유명인의 얼굴을 적당히 섞어서 새로운 얼굴을 창조하는 것입니다. 아래는 [Emma Watson: Natalie Portman: 0.6]을 적용한 예입니다.

모델: Dreamlike Photoreal
프롬프트: photo realistic portrait of [Emma Watson: Natalie Portman: 0.6], exquisitely rendered, stunning artistry, grace, enigmatic aura, rim lighting,  Meticulous attention, masterful brushwork
부정적 프롬프트: ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, b&w  watermark, EasyNegative 
0.2 0.4 0.6 0.8

엠마 왓슨의 효과가 너무 강해서 나탈리 포트만 얼굴은 거의 안보이네요.ㅎㅎ

이와 같이 키워드 블렌딩을 사용하지 않고, 그냥 키워드에 가중치를 사용하는 방법도 있습니다. 아래처럼요. 저는 이 방법을 더 추천하고 싶네요.

(Emma Watson:0.5), (Tara Reid:0.9), (Ana de Armas:1.2)

이렇게 하면 얼굴이 일관성있게 비슷비슷하게 생성됩니다. 일관성있는 얼굴을 만드는 방법은 이 글을 읽어보시기 바랍니다.

비슷한 얼굴 생성 방법

유명인의 이름을 여럿 섞어서 사용하면 여러장의 이미지에서 비슷한 얼굴을 얻을 수 있습니다. 여러개의 이름을 사용하면 스테이블 디퓨전은 여러 사람의 얼굴 특징이 섞인 한사람을 생성한다는 것을 이해합니다.

아래는 세 사람의 이름에 각기 가중치를 달리하여 사용하는 예입니다.

프롬프트 : 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

이상에서 보는 것처럼, 여러장의 이미지를 생성하더라도 비슷한 얼굴이 반복됩니다. 다만, 이 기법은 동양인에는 잘 적용이 안됩니다. 동양의 유명인이 올려진 사진이 많지 않더든요. 

비슷한 얼굴을 생성하기위한 더 자세한 사항은 이 글을 읽어보세요.

프롬프트 길이

어떤 스테이블 디퓨전 서비스를 사용하느냐에 따라 다르지만, 최대 키워드 숫자가 정해져 있습니다. 기본 스테이블 디퓨전 v1 모델의 경우, 그 한계는 75 토큰입니다.

토큰은 단어의 수와 일치하지 않습니다. 스테이블 디퓨전이 사용하는 CLIP 모델은 프롬프트를 자동적으로 토큰으로 변환합니다. 토큰이란 CLIP 모델이 알고있는 단어에 대한 숫자 표현이라고 할 수 있습니다. CLIP이 알고있는 단어는 1개의 토큰이 되지만, 모르는 단어의 경우 자신이 아는 단어가 될때까지 분할 되므로 토큰의 갯수가 늘어날 수 있습니다.  이처럼 CLIP 모델이 알고 있는 단어를 토큰이라고 하며, 숫자로 표현됩니다.

예를 들어, dream은 하나의 토큰이고, beach도 하나의 토큰입니다. 그렇지만, dreambeach 는 2개의 토큰입니다. 모델이 이 단어를 모르기 때문에 dreambeach를 dream 과 beach로 분리시키기 때문입니다. 

AUTOMATIC1111에서의 프롬프트 길이 제한

AUTOMATIC1111은 토큰 길이 제한이 없습니다. 프롬프트가 CLIP 토큰기(tokenizer)의 한계인 75 토큰 보다 길다면, 75 토큰 길이의 새로운 뭉치를 시작하므로 "제한"이 150이 됩니다. 이런 방식으로 계속 늘어나게 되므로 프롬프트의 길이는 제한이 없는 것입니다.

75개 묶음의 덩어리는 독립적으로 처리되며, 그 결과로 만들어진 토큰 표현은 서로 연결된 뒤 스테이블 디퓨전의 U-Net에 공급됩니다.

AUTOMATIC1111 GUI에서는 토큰의 수를 직접 확인할 수 있ㅅ브니다. 예를 들어, 바로 위의 이미지를 생성하는 데 사용되었던 프롬프트는 대략 23개 정도의 단어로 이루어져 있는데, 아래 그림에서 볼 수 있는 것처럼 토큰의 수는 31개로 표현되어 있습니다.

단어와 토큰의 관계

새로운 프롬프트 덩어리 시작하기

75 토큰이 되기전에 프롬프트의 토큰 덩어리를 분리하고 새로운 프롬프트를 시작하고 싶다면 어떻게 해야 할까요. 이렇게 하는 이유는 앞쪽에 있는 토큰이 영향이 강하다는 이유도 있고, 관련된 내용만 서로 묶고 싶은 이유도 있습니다

키워드 BREAK를 사용하면 새로운 덩어리를 시작할 수 있습니다. 아래의 프롬프트는 하얀 모자와 파란 원피스를 분리한 2개의 청크가 만들어집니다. (ComfyUI에서는 이 키워드가 먹히지 않아서 AUTOMATIC1111으로 생성했습니다)

photo of a woman in white hat
BREAK
blue dress

BREAK 키워드를 사용하지 않았을때는 아래와 같이 원피스 색이 하얀색으로 나오는 경우도 많습니다.

그런데... 직접 해보시면 색이 섞이는 경우가 많습니다. 위의 이미지 들도 모자의 밴드가 청색으로 되어 있는 게 이런 효과 때문입니다. 이런 미묘한 프롬프트 처리는 DALL-E 3가 최고라고 합니다. 아래는 " photo of a woman in white hat and blue dress" 로 그린 결과입니다. 머... 그런데 모자 밴드가 청색이 되는 건 비슷하네요. ㅎㅎ

키워드 확인

civitai.com 과 같은 AI 이미지 공유 사이트에 돌아다니다가 멋진 이미지를 발견하면, 프롬프트를 복사해 와서 비슷한 그림을 생성해보려고 하는 경우가 종종 있습니다. (적어도 저는 많이 합니다. ^^) 이럴 때 가져온 프롬프트를 그냥 아무 생각없이 그대로 쓰는 경우가 많습니다.

하지만, 프롬프트에 이상한 단어, 못보던 이름 등이 나타나면 한번쯤 확인해 보는 것이 좋습니다. 물론 그 단어로 구글에서 검색해 보는 방법도 있지만, 그 단어를 사용해서 이미지를 생성하면서 어떤 효과가 있는지 확인하는 것도 좋습니다. 예를 들어, 미국 초상화 작가인 John Singer Sargent의 효과를 보려면 그냥 이 작가 이름을 프롬프트로 사용해 보면 됩니다.

프롬프트: John Singer Sargent

그런데 이건 ComfyUI에서 뽑은 결과이고, AUTOMATIC1111에서는 아래와 같은 그림들이 뽑힌다고 합니다. 어쨌든, 이 작가 이름은 효과가 있는 거네요.

Artstation에서 센세이션을 일으키고 있는 wlop은 어떨까요?

흠... ComfyUI에서 dreamshaper_8 모델을 사용하니 잘 나오네요. 그런데, 기본 모델인 v-1-5-pruned-emaonly 모델을 사용하니 아래와 같이 나오는군요.  v-1-5-pruned-emaonly 를 사용할 일은 없지만, 만약 사용한다고 가정할 경우, wlop 키워드는 아무런 효과가 없겠네요. 오히려 이미지를 망칠 가능성이 높겠죠.

이상에서 보시는 것처럼 모델에 따라 지원되는 키워드가 달라지므로, 결과물이 이상하게 나온다면 키워드를 확인해 보는 게 좋을 듯하네요.

변화 제한하기

좋은 프롬프트를 만들려면, Stable Diffusion 처럼 생각할 필요가 있습니다. 스테이블 디퓨전의 핵심은 이미지 샘플러(image sampler)로서, 사람이 보기에 정상적이고 보기 좋다 싶은 픽셀값을 생성하는 역할을 합니다. 이미지 샘플러는 사실 프롬프트 없이도 동작합니다. 아래가 그 예입니다. 그냥 아무 관계없는 뜻없는 이미지를 생성하죠. 기술적 용어로 조건없는(unconditioned) 혹은 가이드 없는(unguided) 디퓨전이라고 합니다.

프롬프트는 디퓨전 프로세스를 그에 맞는 샘플링 공간으로 안내하는 방법입니다. 앞서 프롬프트를 보다 자세하게, 구체적으로 적을 수록 좋다고 말씀드렸는데, 프롬프트가 자세할 수록 샘플링 공간이 좁아지기 때문입니다. 예를 들어 살펴보죠.

프롬프트: castle
프롬프트: castle, blue sky background
프롬프트: wide angle view of castle, blue sky background

이처럼 키워드가 늘어갈수록 생성하는 성의 범위가 줄어듭니다. 그러면서 생성되는 이미지가 점점 비슷해지게 되는 거죠. 이처럼 프롬프트를 상세하게 지정할 수록 이미지에서 변화가 줄어들게 됩니다.

연관 효과

속성 연관

일부 속성은 아주 강하게 상호연관됩니다. 어떤 하나를 지정하면 이것이 다른 것들에도 영향을 미치게 됩니다. 

아래의 프롬프트로 파란 눈(blue eye)의 여성 이미지를 생성해 보겠습니다.

프롬프트 : a young female with blue eyes, highlights in hair, sitting outside restaurant, wearing a white outfit, side light

검은색 눈(black eyes)로 바꿔보면 아래와 같습니다.

프롬프트를 다시 살펴보면 어디에도 인종은 명시되지 않았습니다. 그러나 파란눈은 백인종에서 많기 때문에 백인이 주로 나타나고 검은색 눈은 다른 인종들도 많기 때문에 피부색이 다양함을 알 수 있습니다.

이처럼 선입견(Stereotyping)과 편견(bias)는 AI 모델에서 아주 큰 논쟁거리입니다. 예를 들면 변호사를 그리라고 하면 흑은은 거의 나타나지 않는 등의 문제가 나타나죠. 이 글에서는 논쟁 그자체가 아니라, 기술적인 이유만 제시한 것입니다.

유명인 이름과의 연관

모든 키워드에는 의도되지 않은 연관효과가 있습니다. 유명인의 이름도 비슷합니다. 배우들은 특정한 포즈 혹은 특정한 옷을 입고 사진을 찍는 경우가 많아서, 그렇게 학습되기 마련입니다. 사실 모델 학습이란 연관관계를 배우는 것에 불과하니까요. 만약 학습 데이터에서 Taylor Swift가 항상 다리를 꼬고 있었다면, 해당 모델을 사용해 Taylor Swift를 생성하면 항상 다리를 꼰 모습만 나오게 됩니다.

프롬프트 : full body Taylor Swift in future high tech dystopian city

프롬프트에 Taylor Swift를 쓴 이유는 얼굴을 사용하고 싶다는 뜻이겠지만, 자세와 복장도 효과가 있습니다. 이러한 효과는 프롬프트에 이름만 사용하면 알 수 있습니다. 

얼굴은 사용하되 복장과 자세는 사용하고 싶지 않다면 키워드 블렌딩을 사용해서 나중에 그 이름을 넣는 방법이 좋습니다. 아래처럼요.

프롬프트 : full body [a woman : Taylor Swift : 0.6] in future high tech dystopian city

예술가 이름 연관 효과

연관 효과가 가장 두드러지게 나타나는 키워드가 예술가 이름일 것입니다.

19세기 체코 화가 알폰소 무하는 초상화 프롬프트에 자주 사용됩니다. 흥미로운 장식을 만들어내는 데 도움이 되고, 스타일이 디지털 일러스트와 잘 어울리기 때문입니다. 하지만 원형 또는 돔 모양의 패턴이 나타나는 경우가 많습니다. 그래서 특히 배경이 야외인 경우 잘 어울리지 않는 경우가 많습니다.

프롬프트: digital painting of [Emma Watson: Audrey Hepburn : 0.6] by Alphonso Mucha

 

미세조정 모델의 효과

미세조정 모델을 사용하면 원하는 스트일을 확실하게 얻을 수 있습니다. 이것이 바로 스테이블 디퓨전의 매력입니다. 미드저니나 달리3가 쉽게 고품질의 이미지를 뽑을 수 있는 것은 확실하지만, 스타일을 바꿔주기는 쉽지 않거든요. 스테이블 디퓨전은 오픈 소스이고 사용자가 많아서 수많은 미세조정 모델을 자유롭게 사용할 수 있습니다. 

모델을 사용할 때, 키워드의 의미가 변한다는 점에 유의해야 합니다. 특히 스타일은 크게 변화합니다.

아래는 John Singer Sargent을 SD v1.5 모델에 넣어서 생성한 결과입니다. 

하지만 DreamShaper 모델을 사용하면(다른 조건은 완전히 동일) 아래와 같이 변합니다.

스타일이 좀더 사실적으로 변했죠. DreamShaper 모델은 깔끔하고 예쁜 여성 얼굴을 생성하는 쪽으로 편향되어 있기 때문입니다. 

따라서 미세조정 모델마다 스타일을 확인해보시면 좋습니다. "by van Gogh"를 넣어도 고흐 스타일 답지 않게 생성될 수 있으니까요.

구역 프롬프트(Regional Prompt)

이미지 어느 쪽에 무엇이 나타나도록 제어할 수 있다는 사실을 알고 계신가요?

예를 들어, 아래 사진은 달을 왼쪽 위에 배치한 것이고...

아래는 달을 오른쪽 위로 배치한 것입니다.

이것을 구역 프롬프트(Regional Prompt)를 사용하여 제어한 것입니다. AUTOMATIC1111의 구역 프롬프트ComfyUI 구역 프롬프트를 읽어보세요~

이 글은 https://stable-diffusion-art.com/prompt-guide/를 번역하면서 제 생각대로 편집도 하여 작성한 글입니다.

 

민, 푸른하늘

====