AI 이미지/Stable Diffusion

스테이블 디퓨전 프롬프트 작성법

하늘이푸른오늘 2023. 6. 27. 00:08

알폰스 무아 스타일의 꽃으로 장식한 젊은 여자의 그래픽 - Stable Diffusion으로 생성

요약

이 글은 스테이블 디퓨전에서 AI 이미지 작품을 생성하기 위한 좋은 프롬프트 작성법을 다룹니다. 좋은 이미지를 생성하기 위해 프롬프트에 피사체, 이미지 종류, 스타일, 예술가, 웹사이트, 해상도, 색상, 조명, 추가적인 세부사항 등을 포함하는 것이 좋습니다. 또한, 프롬프트 작성에는 자세하고 구체적인 설명, 괄호를 사용하여 가중치를 조절하는 등의 팁을 활용할 수 있습니다. 이러한 디테이블 디퓨전의 프롬프트 관련 문법/제한 등을 설명합니다.

이 글은 스테이이블 초보자 가이드중 네번째 글입니다.

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

스테이블 디퓨전이란?

스테이블 디퓨전은 text-to-image AI 모델입니다. 인터넷상에 존재하는 수백만장의 이미지와, 이들에 대한 텍스트 설명을 함께 학습하여 생성된 것입니다. 즉 이 모델에는 어떤 이미지가 어떤 텍스트와 연관되는지가 담겨 있습니다.

따라서 "A photo of a cat sitting on top of a building"과 같은 프롬프트를 입력하면 아래와 같은 이미지를 생성해줍니다.

이게 뭐가 그렇게 대단한데? 이렇게 생각하실 수도 있습니다. 이정도의 이미지라면 구글에서 검색하면 수백만장 존재할 건데요. 하지만 이 기술이 흥미로운 점은, 모델내에 이전에는 존재하지 않았던 고품질의 이미지를 생산할 수 있다는 겁니다. 예를 들어 엠마 왓슨을 인상파 화가 고흐 스타일로 그려낼 수 있습니다. 아래는 " Vincent van Gogh-inspired oil painting of Emma Watson, standing in a sunflower field, vibrant brushstrokes, expressive color palette, capturing her essence with impasto technique, evoking emotion and movement on canvas" 라는 프롬프트를 사용해 생성한 이미지입니다.

단어와 픽셀의 상관관계만으로 이러한 이미지를 생성할 수 있다니 놀랍지 않을 수 없습니다. 게다가 예술적인 스타일, 얼굴, 그림자 등을 정확하게 표현하고, 이들을 미학적으로 만족스러운 방식으로 섞어 이미지를 생산한다는 것입니다. 

좋은 프롬프트의 구성

높은 품질의 구체적인 이미지를 생성할 수 있는 프롬프트는 다음과 같은 내용을 포함하는 것이 좋습니다.

  1. 피사체(또는 주제. 반드시 있어야 함)
  2. 이미지의 종류: 사진, 그림 등 
  3. 스타일
  4. 예술가
  5. 웹사이트
  6. 해상도
  7. 색상
  8. 조명
  9. 추가적인 세부사항

먼저 피사체(주제)입니다. 가능한 한 자세하게 기술하는 것이 좋습니다. 영어로 기술하는 것이 자신이 없으시면 DeepL과 같은 번역 사이트를 사용해도 좋고, ChatGPT를 사용해 프롬프트를 생성해도 됩니다. 다음은 그 예입니다. 

A young woman with light blue dress sitting next to a wooden window reading a book

다음과 같은 이미지가 생성되었습니다. 상당히 마음에 듭니다. 참고로 모델Deliverate v2을 사용했습니다.

SD- 나무창문 옆에서 책읽는 소녀

이번에는 이미지 종류(Medium)을 추가해 보겠습니다. Digital Painting, Photograph, Oil Painting 등이 가능합니다. 여기에서는 Digital Painting을 추가해보겠습니다. 

프롬프트: Digital painting of a young woman with light blue dress sitting next to a wooden window reading a book

사실적 사진에서 디지털 작품으로 바뀌었습니다.

SD- 나무창문 옆에서 책읽는 소녀, 디지털 아트

이제 다른 항목도 아래와 같이 추가합니다.

  • 예술가: by Stanley Artgerm Lau
  • 웹사이트: artstation
  • 해상도: 8k
  • 색상: vivid
  • 조명: cinematic lighting
  • 추가적인 사항: extremely detailed, ornate, 

아래는 이러한 사항을 모두 반영한 프롬프트입니다.

모델: DreamShaper
프롬프트: Digital painting of a young woman with light blue dress sitting next to a wooden window reading a book, by Stanley Artgerm Lau, artstation, 8k, extremely detailed, ornate, cinematic lighting, vivid

아래는 결과입니다. 다만 모델을 DreamShaper로 바꿨습니다. 원래 모델들마다 특성이 있는데, Deliverate v2는 실사 이미지에 강한편이라, 컴퓨터 그래픽과 실사 중간쯤 이미지를 잘 그리는 DreamShaper가 Digital Painting을 훨씬 더 잘 표현하기 때문입니다. 이처럼 모델에 따라 어떤 이미지를 잘 표현하는지가 달라지므로, 모델에 대해서는 자세히 알아둘 수록 좋습니다. 자세한 사항은 여기를 읽어보시기 바랍니다.

좋은 프롬프트를 위한 팁

  • 피사체에 대해 설명할 때, 가능한 한 자세하게, 구체적으로 기술할 것
  • 가중치를 높이고자할 때(더 많이 반영되도록 할 때는 괄호를 사용하여 묶을 것
  • 이미지의 종류와 예술가는 일관성이 있을 것. 예를 들어 고흐와 사진을 함께 사용하지 말것
  • 예술가 이름은 매우 강력하게 반영되므로, 신중하게 사용할 것
  • 여러가지 스타일을 섞어가며 실험해 볼 것
  • 여러 인공지능 이미지 공유사이트에서 마음에 드는 이미지를 찾아보고, 프롬프트를 연구해볼 것

키워드 목록

이미지 종류

  • 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를 활용해 작성했습니다.)

웹사이트

이미지 공유 사이트 별로 독특한 스타일이 있어서 스타일을 지정하는 데 유용합니다.

  • pixiv: 일본 애니 스타일
  • pixabay: 상업적 사진 판매 사이트
  • artstation: 현대 일러스트레이션, 판타지

해상도

높은 해상도 관련 키워드를 입력하면 대체로 이미지의 품질이 좋아지는 경향이 있습니다.

  • unreal engine : 매우 사실적이고 섬세한 3D 그래픽
  • sharp focus: 해상도 향상
  • 8k: 해상도 증가. 이미지가 좀더 카메라로 찍은듯 사실적이 됨
  • vray: 물건이나, 풍경, 건물등에 아주 좋은 3D 랜더링

색상

  • iridescent gold: 빛이나는 금색
  • vintage: 빈티지 스타일
  • vivid: 생생한 색. 원색에 가까워짐.

조명

  • volumetric lighting: 풍부한 조명
  • rim lighting: 피사체 윤곽이 밝은 조명
  • back light: 역광
  • Crepuscular rays: 빛내림 효과

기타 조명 효과 키워드에 관한 자세한 사항은 이 글을 읽어보세요.

기타 추가적인 세부사항

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

좋은 프롬프트를 만들기 위한 절차

반복식 프롬프트 조정

원하는 이미지를 생성하기 위해서는 먼저 적당한 프롬프트를 만들어 이미지를 생성하고, 부족하다 싶은 부분을 앞 절에 있는 키워드를 이용하여 보충하여 다시 생성하는 등, 계속 반복하여 프롬프트를 수정해 가는 것이 좋습니다. 먼저 주제와 이미지 종류만 들어가는 간단한 프롬프트를 만들어 4장 정도를 뽑아본 후, 수정해가는 방식을 추천합니다. 

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

부정적 프롬프트(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개 달린다는 등 해부학적으로 말이 안되는 경우를 없애는 텍스트 인버전(임베딩)입니다.

프롬프트 관련 기술적 사항

모든 프롬프트 키워드가 동일한 가치를 갖는 것은 아닙니다. 강력한 영향을 미치는 키워드(유명인 이름이나 예술가 이름)도 있고 그렇지 않은 키워드도 있습니다. 그런데, 키워드의 중요도를 강제로 바꿀 수도 있습니다. 이 절에서는 AUTOMATIC1111에 적용되는 문법에 대해 설명합니다. (다른 종류의  UI, 예를 들어 EasyDiffusion은 문법이 다를 수 있습니다.)

키워드 가중치

키워드들 (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.
0.5 - 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

키워드 블렌딩

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

[keyword1 : keyword2: factor]

여기에서 factor 는 keyword1에서  keyword2로 바뀌는 스텝을 제어합니다. 예를 들어 샘플링 스텝이 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.8]
0.8 0.6 0.4 0.2

비율만 따지면 동일하니까 비슷한 이미지가 생성될 것 같지만, 첫번째에 등장하는 키워드가 전체적인 분위기를 결정하기 때문에 이처럼 다른 결과가 나타나게 되는 겁니다.

얼굴 섞기

프롬프트 스케줄링을 가장 많이 활용하는 예가 유명인의 얼굴을 적당히 섞어서 새로운 얼굴을 창조하는 것입니다. 아래는 [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 

전반적으로 나탈리 포트만의 얼굴이 더 많이 드러나는 것 같네요. 

프롬프트 길이 제한

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

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

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

단어와 토큰의 관계

이 그림만 보면  ATUTOMATIC1111 은 최대 토큰이 75개인 것처럼 보입니다. 하지만, AUTOMATIC1111에는 토큰 길이의 제한이 없습니다. 75 토큰(CLIP 토큰 생성기의 제한입니다) 이상이 포함된 프롬프트가 들어오면. 아래 그림처럼 또 다른 75 토큰을 시작하여 "한계"가 150 토큰이 됩니다. 이런 식으로 아무리 긴 프롬프트를 넣어도 계속 확장되므로 한계는 없습니다. 다만, 이때, 75토큰 덩어리씩 독립적으로 처리가 되며, 스테이블 디퓨전의 U-Net에 보내지기 직전에 합쳐지게 됩니다. 

민, 푸른하늘

이 글은 https://stable-diffusion-art.com/how-to-come-up-with-good-prompts-for-ai-image-generation/https://stable-diffusion-art.com/prompt-guide/ 를 번역하면서 제 생각대로 편집도 하여 작성한 글입니다.