AI 이미지/Stable Diffusion

Easy Diffusion 프롬프트 작성 방법

하늘이푸른오늘 2023. 3. 28. 00:06

Stable Diffusion은 두가지 방식의 이미지 생성을 지원한다. 첫번째는 img-to-img 즉, 그림을 입력하여 그 그림을 기반으로 이미지를 생성하는 방법이며, 두번째는 txt-to-img, 즉 문자를 입력하여 이미지를 생성하는 방법이다(대부분의 이미지 생성형 AI는 이 두가지 방식을 지원한다).

txt-to-img 방식에서 입력하는 문자를 프롬프트(prompt)라고 한다. 프롬프트는 생성할 이미지에 반영하고 싶은 여러가지 속성을 짧은 어구로 입력하는데, 프롬프트를 얼마나 잘 입력하느냐에 따라 생성되는 이미지가 자신이 원하는 이미지와 가까와질 확률이 높아진다. 즉, 프롬프트는 txt-to-img 방식에서 가장 핵심이라고 할 수 있다. 이 글에서는 프롬프트를 작성하기 위한 기본적인 사항을 설명한다.

프롬프트 작성 방법

기초

프롬프트(Prompt)는 완전한 문장으로 작성하지 말고, 짧게 작성한다. 내용은 생성할 이미지에 반영하고 싶은 여러가지 속성으로, 콤마(,)로 분리한다. 아래는 프롬프트의 예이다.

girl on a swing, green grass, pink trousers

스테이블 디퓨전은 75개의 "토큰"만 고려한다. 토큰은 대부분 하나의 단어에 대응되지만, 긴 단어의 경우 두개 이상의 토큰으로 계산될 수도 있다. 숫자의 경우 각 자리가 모두 토큰이다. 따라서 1920s 는 5개의 토큰으로 계산된다. (이 부분은 Stable Diffusion v1 에만 해당된다.)

스테이블 디퓨전에 사용하는 모델을 학습한 방식에 따라, 특정 단어가 이미지의 품질을 향상시킬 수 있다(이는 모델에 따라 다를 수 있다). 예) 아래 좌측은 painting of a hut in the forest(숲속에 있는 오두막 그림)이며, 아래 우측는 여기에 highly detailed 또는 trending on artstation 을 추가한 결과, 품질이 좋아졌다.

Stable Diffusion 프롬프트 작성 예
Stable Diffusion 프롬프트 작성 예

그림 스타일, 화가 이름, 컴퓨터 프로그램 등을 지정하여 생성된 영상의 형태를 변경할 수 있다. 이를 "이미지 수식어"라고 하는데, 화면 좌측의 맨 아래에 "Image Modifier(art styles, tags etc)"라고 된 부분을 보면 된다. 자세한 내용은 Stable Diffusion 메뉴의 해당 항목을 보라.

Stable Diffusion - 이미지 수식어 메뉴
Stable Diffusion - 이미지 수식어 메뉴

이미지 수식어는 프롬프트에 직접 입력할 수도 있다. 아래는 여려가지 수식어를 추가했을 때의 모습이다.

프롬프트 : painting a hut in the forest, {minecraft, impressionistic, watercolor, by Vincent van GOGH}

이 프롬프트를 사용할 때, 동일한 모델(sd-v1-4), 동일한 시드(4334719)를 사용하여, 수식어의 효과만 확인하였다. 보는 것처럼, 동일한 모델, 동일한 시드를 사용해도 완전히 다른 그림이 그려짐을 확인할 수 있다.

Minecraft
Minecraft
impressionistic
impressionistic
WaterColor
WaterColor
Vincent van GOGH
Vincent van GOGH

프롬프트 중 일부 강조 방법

단어 뒤에 숫자를 추가하여 중요도("가중치")를 부여할 수 있다. 예) girl on a swing:1.2 green grass:1.0 pink trousers:0.8 이렇게 입력하면 girl on a swing 의 가중치는 1.2, green grass의 가중치는 1.0이 된다.

가중치는 구분 기호의 역할을 하므로, 가중치 뒤에 콤마를 삽입할 필요가 있다. 단,가중치 뒤에는 반드시 공백(space 문자)가 있어야 한다. 쉼표나 대괄호를 사용할 경우, "WARNING cuda:0" 또는 "Warning: '2.0,' is not a value, are you missing a space?" 와 같은 경고가 표시된다.

프롬프트 변형 시험 방법

프롬프트에 중괄호'{}' 를 사용하여 여러 단어의 효과를 실험해 볼 수 있다. 예를 들어 man riding a {horse, motorcycle} 이라고 프롬프트를 입력하면 man riding a horse 라는 프롬프트와, man riding a motorcycle 이라는 프롬프트에 대해 각각 두가지 렌더링이 이루어진다. (위의 예에서는 {minecraft, impressionistic, watercolor, by Vincent van GOGH} 라고 입력했으므로 4개의 이미지가 생성되었다)

프롬프트에서 중괄호를 사용하여 여러 단어의 효과 실험
프롬프트에서 중괄호를 사용하여 여러 단어의 효과 실험

부정적 프롬프트(Negative Prompt)

부정적 프롬프트는 생성하고자 이미지에 반영되지 않기를 원하는 속성을 입력한다. AI는 일부 부정적 프롬프트를 무시하는 경향이 있는데, 특히, 프롬프트와 부정적 프롬프트에 유사한 용어가 사용된 경우, 부정적 프롬프트는 무시된다. 일반적으로는 부정적 프롬프트가 이미지 구성에 큰 영향을 미친다. 예를 들어 부정적 프롬프트에 "shoes"를 입력하면 신을 신지 않은 사람이 나오거나 발이 프레임 밖에 있는 이미지가 나올 가능성이 높아진다.
다음은 몇가지 유용한 부정적 프롬프트의 예이다.

Deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, missing limb, blurry, floating limbs, disconnected limbs, malformed hands, blur, out of focus, long neck, long body, ((((mutated hands and fingers)))), (((out of frame)))

관련 자료

프롬프트는 txt2img 방식의 이미지 생성에서 가장 중요하다. 프롬프트를 얼마나 잘 다룰 수 있는지에 따라 자신이 원하는 결과물을 얻을 수 있으므로 충분한 공부가 필요하다.

  • "The PromptBook" : AI 관련 콘텐츠 전용 플랫폼이자 커뮤니티인 Open Art에서 해당 커뮤니티 회원들이 작성함. 별도로 정리할 계획입니다.
  • "Stable Diffusion Modifier Studies" : 수백 가지 다양한 스타일 수식어 목록
  • "lexica.Art" : 프롬프트와 이미지 아이디어를 위한 검색 엔진. 이 사이트의 이미지 중 일부는 NSFW(성인 등급)이므로 주의하여 사용하시길.
  • "Prompt Examples and Experiments"

(원문: https://github.com/cmdr2/stable-diffusion-ui/wiki/Writing-prompts)에서 필요에 따라 수정함

민, 푸른하늘

Easy Diffusion 사용법에 관한 글 모음