본문 바로가기

Stable Diffusion

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

AI 이미지 생성 기술을 대표하는 스테이블 디퓨전에 그릴 대상을 텍스트로 입력하는 공간을 프롬프트(Prompt)라고 부른다. 이제 어느 정도 프롬프트를 작성하는 규칙들이 정립되어 있어서 가장 기본적인 프롬프트 작성법을 정리한다. 

 

CIVITAI에서 차용한 프롬프트
CIVITAI에서 차용한 프롬프트

프롬프트란?

프롬프트는 AI에게 명령을 내리는 표현법을 지칭한다. 스테이블 디퓨전뿐만 아니라 챗GPT 역시 AI에게 질문을 할 때 사용하는 표현법을 프롬프트라고 부른다. 향후 AI 기술이 점점 더 진화할수록 인간이 할 수 있는 고유의 역할은 프롬프트를 작성하는 정도일 것이다. 아니, 프롬프트를 작성하는 자체가 하나의 직업으로 창출할 가능성도 매우 높다. 실제로 ChatGPT와 같은 챗봇 서비스와 DALL-E, Stable Diffusion과 같은 AI 이미지 생성 서비스 등이 초기에는 무료 서비스로 진행하다가 점차 유료화로 전환하고 있다. 그러다보니 AI에게 원하는 결과물을 최소 작업으로 뽑아내는 자체가 더 적은 비용을 소요하므로 경제적으로 이득이다. 이에 따라 챗봇 서비스인 ChatGPT 영역에서는 프롬프트만 전문적으로 작성하는 프롬프트 엔지니어를 구하기도 한다. 아직은 일부 업종에 한해서 프롬프트 엔지니어가 실제로 존재하지만, 점차 많은 분야에서 AI에게 제대로 된 질문 또는 명령을 하는 프롬프트를 제대로 작성하는 프롬프트 엔지니어가 필요할 전망이다. 하지만 챗GPT에서 작성하는 프롬프트와 스테이블 디퓨전에서 작성하는 프롬프트에는 차이가 존재한다. 여기에서는 스테이블 디퓨전에서 프롬프트를 작성하는 방법만 살펴본다.  

 

 

우선 스테이블 디퓨전에서 프롬프트를 작성할 때 기본적으로 염두에 두어야 할 요소는 순서, 괄호, 조합어이다. 프롬프트를 작성할 때 앞에 위치한 어휘가 뒤에 위치한 어휘보다 더 중요하다. 즉, AI는 앞에 위치한 어휘를 중심으로 뒤에 위치한 어휘들을 고려해서 이미지를 생성한다. 이때 뒤에 위치한 어휘라도 괄호 안에 담으면, 괄호 없이 맨 앞에 위치한 어휘보다 더 중요하다고 AI는 받아들인다. 괄호는 많을수록 더 중요하다는 표현인데, 일반적으로 괄호는 2개 많아도 3개 정도까지만 사용한다. 이 방법은 프롬프트로 입력한 내용대로 결과물이 제대로 나오지 않았을 때, 강조해야 할 어휘에 추가로 괄호로 감싸서 다시 작업을 할 때 용이하다. 마지막으로 조합어인데, 이 부분은 영어 단어인 and로 두 어휘를 결합하는 표현이다. 예를 들어 소녀, 안경이라는 표현보다 소녀와 안경 즉, girl and  glasses가 더 효과적이다. 이외에도 가중치를 두거나 2가지 또는 3가지 중에서 선택하는 표현법 등도 있지만, 앞에서 언급한 순서, 괄호, 조합어만 사용해도 기본적으로 효과적인 프롬프트 작성이 가능하다. 다음에서 가장 기본이지만 강력한 프롬프트 작성법인 순서, 괄호, 조합어를 중심으로 조금 더 자세히 살펴본다.

 

프롬프트 예시프롬프트 예시
프롬프트 예시

 

참고로, 해당 프롬프트는 스테이블 디퓨전을 구글 코랩 서버를 활용해서 구현하는 Stable Diffusion web UI를 토대로 한다. 현재 대다수 AI 이미지 생성 사이트 또는 프로그램들이 오픈소스로 공개한 스테이블 디퓨전을 토대로 하므로 여기에서 제시하는 프롬프트 작성법을 통용한다. 하지만 DALL-E는 GPT를 기반으로 하므로 프롬프트 작성법에 차이가 존재할 수 있다. 따라서 기본적으로 Stable Diffusion web UI 설치와 checkpoint 항목에 위치하는 주모델 사용법은 알고 있어야 한다. 

 

 

스테이블 디퓨전 최소 설치 & 빠른 실행

Stable Diffusion을 누구나 무료로 사용할 수 있는 오픈소스로 공개한 후에 스테이블 디퓨전을 설치하거나 실행할 수 있는 다양한 방식이 등장하고 있다. 스테이블 디퓨전의 대명사처럼 불리는 Stable

dasfl.com

 

위에 링크한 콘텐츠는 초기 버전에 비해서 용량이 크게 증가한 Stable Diffusion web UI를 설치할 때 전부 설치가 아니라 필요한 요소만 설치하는 최신 버전이다. 아래에 링크한 콘텐츠는 Stable Diffusion web UI에서 가장 중요한 주모델을 설치 또는 교체하는 방법이다. 스테이블 디퓨전에서 가장 중요한 요소를 하나만 뽑으라면 단연 chekpoint 항목에 들어가는 주모델이다. 이러한 주모델은 개발자들이 계속해서 더 진화한 모델들을 무료로 제공하고 있으므로, 현재 나온 주모델을 사용하는 방법보다 향후 나올 진화한 주모델로 빠르게 교체하는 방법을 반드시 숙지하고 있어야 한다. Stable Diffusion web UI에 많은 주모델을 설치하더라도 사용할 때에는 단 1개의 주모델만 사용할 수 있다.

 

 

 

스테이블 디퓨전 모델 다운로드

인공지능으로 그림을 생성하는 프로그램 중 스테이블 디퓨전에 모델을 다운로드하고 설치하는 방법을 소개한다. 현재 가장 인기 있는 모델로 꼽히는 동양적인 실사화 이미지로 인기를 끄는 학

dasfl.com

 

이후에야 프롬프트 작성법을 살펴보는 게 순서이다. 기본적인 프롬프트 작성법과 함께 Stable Diffusion web UI 사용법도 알아둘 필요가 있다. 아래에 링크한 Stable Diffusion web UI 가이드는 Stable Diffusion web UI 구조를 토대로 순서대로 기본적인 용어와 사용법을 요약한 내용이다. 

 

 

Stable Diffusion web UI 가이드

오픈소스로 배포한 Stable Diffusion을 컴퓨터 사양과 무관하게 실행하는 Stable Diffusion web UI 가이드를 정리한다. Stable Diffusion web UI에서 반드시 알아야 할 용어부터 실제 AI 이미지를 생성할 때 필요한

dasfl.com

 

그런 후에 마지막에 도전해야 할 영역이 확장모델이라 불리는 ControlNet이다. 하지만 이 ControlNet은 기존의 Stable Diffusion과 별개의 기술이라는 점도 인지해야 한다. 그만큼 오픈소스로 배포한 Stable Diffusion을 토대로 다양한 추가 기술들이 등장하고 있는데, 그중에서 현재 가장 강력한 기술이 바로 ControlNet 영역에 들어가는 확장모델이다. 이 부분은 취미로 인공지능 이미지 생성 기술을 다루는 일반인들은 몰라도 되는 내용이다. 

 

 

스테이블 디퓨전 확장 모델 ControlNet

스테이블 디퓨전에는 checkpoint 항목에 들어가는 주모델 이외에도 lora, vae 등 보조모델이 존재한다. 여기에 2023년에 ControlNet이라는 확장 모델을 추가했다. 여기에서는 ControlNet 확장 모델을 Stable Dif

dasfl.com

 

위에 링크한 스테이블 디퓨전 확장모델인 ControlNet은 스테이블 디퓨전 주모델 못지 않게 AI 이미지를 생성할 때 강력한 기능을 제공한다. 하지만 현재 스테이블 디퓨전의 개발 상황을 볼 때 향후 주모델과 확장모델 등이 합쳐진 단 하나의 모델로 작동하는 기술이 등장할 것으로 여측되므로, ControlNet 영역에 포함된 확장모델이 매력적이긴 하지만 지금 시점에서는 그 부분에 너무 많은 시간을 할애할 필요는 없을 듯하다. 그보다는 변하지 않을 프롬프트 작성법과 Stable Diffusion web UI의 기본 요소인 Sampling Steps, CFG Scale 등 수치를 미세 조정하면서 자신만의 감각을 확보하는 게 중요하다.

 

프롬프트 기본 작성법

앞에서 언급했듯이 여기에서 다루는 프롬프트는 스테이블 디퓨전에 한정한 내용이다. 우선 프롬프트는 AI에게 생성해야 할 내용을 입력하는 Prompt와 이미지를 생성할 때 배제해야 할 내용을 입력하는 Negative Prompt 공간으로 크게 나뉜다.  Prompt 공간이든 Negative Prompt 공간이든 스테이블 디퓨전에서 프롬프트를 작성하는 방법은 다음과 같이 동일하다.

 

 

1) 문장이 아니라 키워드로 표현한다.

프롬프트 공간에 거리를 거니는 소녀라는 문장 보다는 소녀, 거닐다, 거리처럼 키워드를 쉼표로 연결해서 표현한다. 물론 여기에서는 예시이므로 한국어로 표현했지만 프롬프트에는 영어로 입력해야 한다.

 

2) 중요한 키워드를 앞에 위치한다.

거리, 거닐다, 소녀라고 프롬프트를 작성하면 AI는 거리에 초점을 맞추고 소녀는 아예 나오지 않거나 나오더라도 비중이 덜 하게 이미지를 생성한다. 따라서 소녀가 중심이 되어야 한다면 소녀, 거닐다, 거리처럼 소녀를 맨 앞에 두어야 한다.

 

중요한 키워드 배치 예시
중요한 키워드 배치 예시

 

3) 괄호는 모든 것에 우선한다.

소녀, 거닐다, 거리, ((아름다움)), (얼굴) 이라고 프롬프트를 작성하면 AI는 아름다움을 가장 중요하게 고려하고 다음에 얼굴 이후에 순서대로 소녀, 거닐다, 거리에 비중을 두어 이미지를 생성한다. 괄호는 많을수록 더 중요하게 받아들이는데, 일반적으로 2개까지 많아도 3개까지만 사용한다. 참고로, 이미 프롬프트를 너무 길게 작성했는데 앞에 중요하지 않은 키워드를 배치했다면, 이 [키워드]를 대괄호로 감싸면 AI는 비중을 낮춘다. 즉, 중요한 키워드는 괄호로 비중이 낮은 키워드는 대괄호로 감싸는 방식이다. 하지만 대괄호는 다른 기능으로 활용하는 중요한 표현법이므로 가급적이면 비중이 낮은 키워드를 표현하려고 대괄호를 사용하는 대신에 프롬프트에서 뒤에 배치하는 방식이 적절하다.

 

 

4) AND 연산자로 조합어를 사용한다.

앞에서도 잠시 언급했듯이 girl, glasses (소녀, 안경)이라는 프롬프트 보다 girl AND glasses라는 프롬프트가 더 효과적이다. 그러면 안경을 쓴 소녀 이미지가 나올 가능성이 더 높아진다. AND로 키워드를 결합했다고 100% 그러한 이미지를 생성한다는 게 아니라 그러한 이미지를 생성할 가능성이 높아진다는 의미이다. 참고로, 연산자 활용 중에서 [소년 | 소녀] 처럼 대괄호 안에 키보드 자판에서 \ 표시 위에 있는 기호로 키워드를 연결하는 방식이 있다. 일반적으로 코딩에서 또는 이라는 기호로 널리 사용하는 | 기호로 키워드를 연결하면, 앞에 위치한 소년이라는 키워드를 이미지로 표현하면서 뒤에 위치한 소녀라는 키워드도 일부 반영하는 방식이다. 즉, 미소년을 염두에 둔 프롬프트 작성법으로, 앞에서 언급했듯이 미소년이 나올 가능성을 높이는 것이지 100% 미소년 이미지가 나오는 것을 보장할 수는 없다.

 

5) 숫자로 가중치를 둔다

앞에서 언급한 4가지만 알아도 기본적으로 효과적인 프롬프트 작성이 가능하다. 이외에도 대괄호와 콜론 결합, 이중 대괄호 등이 있지만 프롬프트 작성도 어렵지만 실제로 효과를 보기도 어렵다. 여기에서는 마지막으로 괄호와 콜론 결합만 추가한다. 이 부분은 보조모델을 사용할 때 가중치를 둘 때에도 사용하는 프롬프트 표현법이므로, 실제로 사용하지 않더라도 남들이 생성한 이미지에서 프롬프트를 차용할 때 많이 등장하므로 알아둘 필요는 있다.

 

 

우선 키워드에 가중치를 두는 방식부터 먼저 살펴본다. 3번에서 중요한 키워드를 괄호를 감싸는 효과와 동일하다. 더 중요하면 괄호를 2개, 더 더 중요하면 괄호를 3개 감싸는 효과를 숫자로 표현한 방식이다. 예를 들어 (아름다움 : 1.5), (소녀 : 0.7), (청바지 : 0.3) 이라고 프롬프트를 작성했다면, 기본인 1을 기준으로 아름다움에 1.5배 가중치를 둔 표현법이다. 이러한 프롬프트는 소녀이든 여자이든 무조건 아름다운 여성이 나오고 청바지를 입었으면 좋겠지만 꼭 청바지가 아니라도 상관없다는 표현이다. 보통 이러한 가중치를 둘 때는 미세한 부분을 표현할 때 사용한다. 예를 들어 사람 얼굴 중에 눈, 입술 등 특정 부위를 도드라지게 표현하고 싶을 때 (sparkling eyes:1.3), (sparkling lips:1.3) 처럼 가중치를 두는 방식으로 사용한다. 이렇듯 콜론 다음에 숫자를 적어서 가중치를 둔다는 정도만 알면, 향후 Lora, VAE 등 보조모델을 사용시에 특정한 보조모델을 사용할 때 가중치를 두는 방식도 쉽게 이해할 수 있을 것이다.

 

가중치 예시 프롬프트
가중치 예시 프롬프트

 

조금 단순화해서 표현하면 <A모델:1.5>, <B모델:0.5>, <C모델:0.3>이라고 프롬프트에 작성하면 A모델이 1보다 더 큰 1.5이므로 이 A모델에 가장 큰 가중치를 두면서, B모델은 50% 정도만 반영하고 C모델은 30% 정도만 반영해서 이미지를 생성하라는 의미이다. 이때 프롬프트에 여러 모델을 사용하라고 표현할 때에는 맨 앞에 담는 게 일반적이다. 이 부분은 다른 사람이 생성한 고퀄리티 이미지에서 프롬프트를 차용하면 흔히 접할 수 있는 프롬프트 표현법이므로, 일반인들은 실제 사용보다는 어떤 의미인지만 파악할 수 있으면 충분하다.   

 

프롬프트 차용하기

다른 사람들이 생성한 AI 이미지에서 프롬프트를 빌려와서 활용하는 방법을 소개한다. 프롬프트를 동일하게 작성하더라도 모델에 따라 판이하게 다른 이미지가 나온다. 따라서 chekpoint에 해당하는 주모델 정도는 반드시 일치하는 주모델을 사용해야만 그나마 해당하는 프롬프트와 근접한 이미지가 나온다. 초기에는 프롬프트를 그대로 입력하면 100% 동일한 이미지를 생성할 수 있었지만, 지금은 Lora, VAE 등 다양한 보조모델과 ControlNet 영역에 들어가는 Openpose를 위시한 다양한 확장모델들과 세부 미세 수치 설정 등으로 100% 동일한 이미지를 생성하기는 점점 어려워지고 있다. 그나마 시드를 제공하는 프롬프트는 매우 근접한 이미지를 생성할 수 있다. 

 

CIVITAI 바로가기

 

다른 사람들이 생성한 AI 이미지를 볼 수 있는 사이트들은 많이 존재한다. 이중에서 스테이블 디퓨전을 사용한다면 반드시 참조해야 하는 CIVITAI 사이트를 소개한다. 이 CIVITAI 사이트는 스테이블 디퓨전에서 사용할 주모델과 보조모델 그리고 확장모델까지 쉽게 다운로드할 수 있는 대표적인 사이트이다. CIVITAI와 함께 인공지능 관련 자료가 많은 대표적인 사이트로 Hugging Face도 존재한다.

 

Hugging Face 바로가기

 

일반인들이 사용하기에는 Hugging Face보다는 CIVITAI 사이트가 더 편할 듯하다. CIVITAI와 Hugging Face는 인공지능 이미지를 대표하는 사이트로, 상기 사이트에서 구할 수 없는 정보는 다른 데서 구할 수 없다고해도 과언이 아니다. 다음에서 CIVITAI 사이트에서 프롬프트를 보는 방법을 살펴본다.

 

 

우선 CIVITAI 사이트에 접속하면 AI 이미지를 수없이 볼 수 있는데, 여기에서 마음에 드는 이미지를 누른 후에 전환한 페이지에서 이미지 우측 하단에 위치한 아이콘을 누르면 해당 이미지를 생성한 프롬프트를 확인할 수 있다. 하지만 이때 중간에 Model 항목에 있는 모델이 동일해야만 그나마 유사한 이미지를 생성할 수 있다. 

 

프롬프트 확인 예시
프롬프트 확인 예시

 

하지만 어떤 방식으로 프롬프트를 작성했는지를 알 수 있으므로 어떤 키워드를 사용해야 하는지 몇 개의 이미지에서 프롬프트를 차용하면, 공통된 키워드를 어렵지 않게 발견할 수 있다.