이번 포스팅에서는 이미지를 생성할 때 작성해야 하는 프롬프트에 대해서 알아보도록 하겠습니다. 좋은 결과물을 만들어내려면 프롬프트에 꼭 들어가면 좋은 키워드 들이 있습니다. 그리고 생성형AI에게 최대한 자세하고 구체적으로 설명할 수록 좋은 결과물이 나옵니다.

이러한 Stable Diffusion의 프롬프트 문법을 알아보겠습니다. 이전 포스팅 3편에서 간단하게 사용하는 걸 보여드리긴 했는데, 이번에는 자세히 살펴보도록 할께요.

T2I (txt2img) 의 프롬프트 입력창

Stable Diffusion Prompt

우선 상단의 프롬프트영역은 Positive Prompt 라고 부르고, 이렇게 이미지가 나왔으면 하는 내용을 적는 부분입니다.

반대로 하단의 프롬프트영역은 Negative Prompt 라고 부르고 이렇게 나오지 말아야 하는 내용을 적는 부분입니다.

이렇게 입력창은 2개 밖에 없지만 수많은 기능과 문법이 숨어있습니다. 문법적인 부분 외에 확장기능(Extension)을 활용하는 방법들은 계속해서 포스팅하겠습니다.

Positive Prompt 의 구성요소

원하는 이미지를 좀 더 좋은 품질과 구체적으로 만들기 위해서는 아래와 같은 요소가 포함되면 좋습니다. 우선순위 별로 나열해볼께요.

  1. 주제(만들고자 하는 객체, 필수요소)
  2. 사진, 그림 등의 이미지 타입 (photograph, animation, illustration, digital painting .. 등)
  3. 이미지 스타일 (Hyperrealistic, art nouveau, Pop-art … 등)
  4. 예술가 (유명한 화가, 작가의 이름)
  5. 해상도 (8k, 4k, vray, sharp focus ..등)
  6. 색상 (vivid, vintage.. 등)
  7. 조명 (volumetric lighting, back light.. 등)
  8. 추가적인 설명 (low angle shot, dramatic, 포즈, 카메라 앵글.. 등)

좋은 프롬프트 만드는 과정

“A [type of picture] of a [main subject], [style cues]*”

좋은 프롬프트는 위와 같은 키워드로 시작됩니다. 먼저 적당한 프롬프트를 만들어서 이미지를 생성해가며 계속 키워드를 추가해가며 테스트를 해나가는 것이 좋습니다. 위의 프롬프트의 형태로 이미지 타입, 주제, 스타일을 적어주고 수정해나갑니다.

이후 소개할 ChatGPT 관련 Extension 이나 아니면 직접 ChatGPT, Bing, Bard 같은 텍스트 생성형AI의 도움을 받아 프롬프트를 만드는 방법도 좋습니다. 이 부분도 따로 포스팅해볼께요.

Negative Prompt 사용하기

Positive Prompt를 아무리 잘 작성해도 Negative가 비어있는 채로 생성하면 정말 괴상한 이미지들을 만나볼 수 있을 겁니다. CivitAI 같은 사이트에서 Negative Prompt 를 참고하면 좋습니다.

이런 이미지들을 보다보면 badhandv4 라던지, NG_DeepNegative_V1_75T 같은 알 수 없는 프롬프트를 많이 보셨을 겁니다. 순수하게 키워드로 Negative 설정을 하는데 한계가 있다보니 Embedding(TI모델) 형태의 모델도 많이 공유되고 있습니다. 이런 임베딩 모델도 적극 활용하는 게 좋습니다.

paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, glans, extra fingers, fewer fingers, ((watermark:2)), (white letters:1), (multi nipples), bad anatomy, bad hands, text, error, missing fingers, missing arms, missing legs, extra digit, fewer digits, cropped, worst quality, jpeg artifacts, signature, watermark, username, bad feet, {Multiple people}, blurry, poorly drawn hands, poorly drawn face, mutation, deformed, extra limbs, extra arms, extra legs, malformed limbs, fused fingers, too many fingers, long neck, cross-eyed, mutated hands, polar lowres, bad body, bad proportions, gross proportions, wrong feet bottom render, abdominal stretch, briefs, knickers, kecks, thong, {{fused fingers}}, {{bad body}}, bad-picture-chill-75v, ng_deepnegative_v1_75t, EasyNegative, bad proportion body to legs, wrong toes, extra toes, missing toes, weird toes, 2 body, 2 pussy, 2 upper, 2 lower, 2 head, 3 hand, 3 feet, extra long leg, super long leg, mirrored image, mirrored noise, (bad_prompt_version2:0.8), aged up, old,

위의 프롬프트는 ChilloutMix 모델을 사용하는 이미지에 적용된 프롬프트를 발췌한 내용입니다. 키워드를 하나하나 살펴보면 도움이 될 겁니다.

프롬프트 키워드의 가중치 설정하기

프롬프트에 적는 키워드들은 학습과정 상에서 특징이 강할 수록 그 미치는 영향도 또한 큽니다. 그래서 모든 키워드는 상대적인 가중치를 가지고 있습니다. 하지만 그 가중치를 수동으로 조정하는 옵션이 있습니다.

({KEYWORD}:WEIGHT)
예시> (black hair:1.1)
예시> ((black hair))

weight값은 1을 기본으로, 1보다 작아지면 가중치가 낮아지고, 1보다 크면 가중치가 높아집니다.

(black hair:1.1) 의 경우는 가중치를 10% 높힌게 되겠죠. 아무리 가중치를 높혀도 변화가 없는 경우도 있으니까 많은 테스트를 필요로 합니다.

위의 예시에서 weight값 없이 괄호만 친 형태가 있습니다. weight값이 생략되면 10% 씩 조정한다는 의미이고 () 괄호는 plus 의미, [] 괄호는 minus 의미입니다.

(dog) = 1.1
((dog)) = 1.1 * 1.1 = 1.21
(((dog))) = 1.21 * 1.1 = 1.331
[dog] = 0.9
[[dog]] = 0.9 * 0.9 = 0.81
[[[dog]]] = 0.81 * 0.9 = 0.73

이런 의미를 가지고 있으니 다른 프롬프트를 볼때 참고해서 보세요.

프롬프트 스케줄링

2개의 키워드를 섞어쓰는 방법입니다. 문법은 아래와 같습니다.

[{KEYWORD1}:{KEYWORD2}:FACTOR]

여기서 Factor는 각 키워드 간에 바뀌는 Step을 제어합니다. 키워드의 혼합비율이라고 생각하면 이해가 빠를겁니다. 0.2~0.8 사이값을 사용하면 되고, 키워드에 따라서 적용되는 정도가 차이가 있더라구요.

참고링크

읽어보시면 좋을 만한 포스팅들을 소개합니다.

Stable Diffusion : 사회적/경제적 측면을 다룬 가장 중요한 AI 예술 모델.

잠재 공간에 대한 여행자 가이드: 프롬프트 엔지니어링에 대해 심도 있게 다룬 가이드.

Text2Image AI를 위한 프롬프트 작성 가이드: 프롬프트 엔지니어링과 DALL-E 2/StableDiffusion 또는 기타 텍스트-이미지 AI를 위한 프롬프트 작성에 대해 제가 찾은 최고의 빠른 입문서입니다.

Art Prompt : 미니 DALL-E를 사용한 나의 실험: 텍스트-이미지 AI에 대한 포스팅으로, AI 아트 프롬프트 가이드를 포함했습니다. 여기에서 우리가 얼마나 멀리 왔고 얼마나 빨리 발전했는지 확인할 수 있습니다.

DALL-E 2 실험 : 2주 전 DALL-E 2 베타 버전이 출시되었다는 소식이 전해졌을 때 쓴 이 게시물은 아직 StableDiffusion이 출시되지 않았을 때였습니다. 동일한 프롬프트에서 다른 결과를 발견할 수 있는지 확인하세요.

How to Draw : 사용자가 StableDiffusion의 img2img 버전을 사용하여 MSPaint 드로잉을 사실적인 공상 과학 이미지로 변환하는 경우.

KerasCV에서 스테이블 디퓨전을 사용한 고성능 이미지 생성: 스테이블 디퓨전이 마침내 Keras로 포팅되었습니다. keras가 설치되어 있다면 GPU나 CPU 모두에서 원활하게 실행되며, 저는 이 버전을 로컬 컴퓨터에서 AI 아트를 만드는 데 사용하고 있습니다.

Lexica.art는 프롬프트와 아트웍을 위한 훌륭한 검색 엔진입니다. 좋은 이미지를 찾고 어떤 프롬프트가 그 이미지를 생성했는지 확인한 다음 필요에 따라 복사하고 조정할 수 있는 놀라운 리소스입니다. 다른 사람들이 이미 찾아낸 가장 안정적인 확산 프롬프트를 기반으로 구축할 수 있는 쉬운 방법입니다.

애니메이션을 좋아한다면, Waifu Diffusion은 스테이블 디퓨전을 기본으로 하여 미세 조정을 통해 고품질 애니메이션 이미지에 맞게 조정된 텍스트-이미지 디퓨전 모델입니다. 애니메이션 일러스트를 생성하는 멋진 모델입니다.

Illustrated 스테이블 디퓨전에서는 스테이블 디퓨전의 작동 방식을 단계별로 다양한 추상화 수준을 통해 설명하며 멋진 일러스트가 포함되어 있습니다.

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here