본 글에서는 스테이블디퓨젼(Stable diffusion) AI 그림 모델을 기반으로 WEBUI 그림을 그릴 때 필요한 프롬프트의 기본 지식에 대해 살펴볼 예정입니다. 프롬프트는 사용자가 인공지능과 소통하기 위해 사용하는 일종의 소통언어 같은 부분인데요, 다행이도 프롬프트는 사람이 사용하는 자연어를 기반으로 하기 때문에 우리가 컴퓨터 언어를 배울 필요는 없습니다. 단 정확한 의사전달을 위해서 프롬프트를 작성하는 요령이 필요한데요, 급격한 기술발전으로 AI와 함께하는 시대가 앞당겨짐에 따라 본 글을 통해 프롬프트에 대한 기본 지식을 미리 한 번 살펴보시는 것도 도움이 될 것 같습니다.
프롬프트의 기초
앞서 살펴본 바와 같이 프롬프트는 AI 그림이나 챗gpt와 같은 AI Chat을 활용하기 위해 인공지능에게 우리가 던져주는 명령어 덩어리와 같습니다. 그러나 인공지능 등장 이전에 우리가 컴퓨터에게 입력하던 명령어와는 조금의 차이가 있습니다. 명령어 자체가 사람이 사용하는 자연어라는 점인데요, 예를 들어 계산기와 비교해보겠습니다. 컴퓨터(compute: 계산하다)의 시초격인 계산기를 활용해 1+2를 계산하는 경우를 가정해보겠습니다. 우리는 계산기에 숫자 ‘1’, 더하기 기호 ‘+’, 숫자 ‘2’를 차례로 입력하고 마지막으로 계산하라는 기호 ‘=’를 입력합니다. 그러면 계산기는 정확하게 3이란 숫자를 결과로 출력합니다.
그런데 AI 그림을 그릴때는 계산기로 숫자 계산을 할 때와는 다른 조금 더 복합적인 단어를 명령어로 입력하게 됩니다. 예들들어 사과를 그리게 하고 싶다고 가정해보겠습니다. WEBUI를 실행한 뒤 긍정 프롬프트에 apple 한 단어만 입력하면 과연 우리가 상상하는 사과가 그려질까요? 물론 본인이 상상한 사과가 떡 하고 나타날 수도 있지만 대부분은 어딘가 내가 생각했던 것과 다른 사과가 나타날 것입니다.
왜냐하면 각자의 기억속에 있는 사과의 모습이 제각기 다 다른 모습을 하고 있을텐데 이를 ‘사과’라는 단어 하나만으로는 불러내올 수 없기 때문입니다. 가능한 사과의 모습을 정말 생각나는대로 그냥 나열해보겠습니다.
- 2D or 3D
- 빨간사과 or 푸른사과
- 온전한 사과 or 벌레먹은 사과
- 식탁 위의 사과 or 책상 위의 사과
- 위에서 본 사과 or 정면에서 바라본 사과
- 나무에서 떨어지는 사과 or 바구니에 담겨있는 사과
- 야외에 있는 사과 or 실내에 있는 사과
당장 생각나는대로 즉각즉각 작성한 변수만 해도 이만큼입니다. 즉, 사과(apple)라는 단일 명령어만 입력하면 인공지능은 이 외에도 다양한 상황과 시점, 연출 등을 고려해서 그림을 그리게 되고 여기서 굉장한 변화가 일어날 수 있다는 것입니다.
이같은 변화를 사용자가 원하는대로 정확하게 제어하기 위해서 우리는 프롬프트를 잘 다룰 수 있어야 합니다. 제아무리 인공지능이 사람의 말을 알아들을 수 있을 정도로 많이 발전했다하지만, 아무도 사람의 마음을 속속들이 들여다볼 수 있는 것은 아니기 때문입니다. 본문에서는 프롬프트를 잘 작성하기 위한 기본 틀이 되는 내용들을 정리해보도록 하겠습니다. 스테이블 디퓨전 설치와 AI 그림 기초에 대해 추가적인 지식이 필요하신 분들은 아래 글을 참고하시기 바랍니다.
Positive와 Negative 프롬프트
지난 글에서 살펴본 바와같이 아래 그림의 4번, 프롬프트 작성 부분을 보면 칸이 2개로 구분되어 있습니다.
- 긍정 프롬프트(Positive Prompt) : AI가 그려줬으면 하는 내용을 작성합니다.
- 부정 프롬프트(Negative Prompt) : AI가 그리지 않았으면 하는 내용을 작성합니다.
단어 나열 또는 문장
프롬프트를 작성하는 것은 전적으로 사용자의 마음입니다. 단어를 나열해도 되며 필요한 경우 문장으로 작성해도 됩니다. 일반적으로는 구체적인 상황 연출을 위해 문장으로 정확하게 작성하는 것이 AI에게 더욱 정확한 그림을 그리도록 하는데 도움이 된다고 알려져있습니다. 예를 들어 ‘창문이 있는 방 안에 위치한 책상 위에 놓여진 빨간 사과’를 그리라고 주문하는 경우 단어나열 또는 문장구성을 해보면 다음과 같이 입력할 수 있습니다.
- 단어나열 : red_apple, on the desk, in the room, windows, indoors,
- 문장구성 : red_apple is on the desk in the room with large windows,
위의 예시는 사실 매우 간단한 명령이어서 큰 차이가 없을 수 있습니다. 단어와 문장형을 프롬프트에 같이 적어도 상관이 없는데요, 주로 외모나 상태, 배경 등을 묘사할 때는 단순 단어 나열만으로도 충분한 경우가 많고, 특정 행동이나 구도 및 상황 표현을 위해서는 길고 자세한 문장으로 적는 것이 좋다고 합니다.
한 단어로 만들기(복합어)
위의 red_apple의 경우 red와 apple 간에 언더바를 넣었는데요, 이는 red 따로, apple 따로 입력했을 때 red가 apple 외에도 적용될 수 있기 때문에 이를 방지하기 위해 한 단어로 묶은 것입니다. 다른 예로 pencil skirt를 언더바 없이 적게 되면 pencil과 skirt가 각각 따로따로 그려질 수 있습니다.
토큰 – 프롬프트의 길이
프롬프트를 작성하는 칸의 우측 상단을 보면 xx/75와 같이 적혀있는 숫자를 확인할 수 있습니다. 프롬프트를 계속 입력할수록 xx의 숫자가 올라가게 되는데요, 이 수치를 토큰(token)이라고 합니다. 예를 들어 girl을 입력하면 1토큰이 올라가서 1/75가 되는 것입니다.
내가 입력한 토큰이 75를 넘어서더라도 그림을 그리는데 오류가 발생하거나 문제가 되지는 않습니다. 따라서 구체적인 묘사가 필요한 그림은 75토큰을 넘겨서 자세히 묘사하기도 하는데요, 스테이블디퓨젼 AI 모델이 그림을 그릴 때는 75토큰을 단위로 그리고 그 뒤에 75토큰단어를 또 겹처 그리는 방식으로 그림을 그린다고 합니다. 따라서 첫 75토큰에 작성한 내용이 그림에 가장 충실하게 반영이 되는 편이므로, 그림에 꼭 필요한 묘사는 앞쪽에 해주시는 것이 좋습니다.
프롬프트의 순서와 가중치
프롬프트의 순서에 따른 중요도
마찬가지로 AI가 그림을 그릴 때 참고하는 프롬프트는 75토큰 이하의 길이 내에서도 작성된 순서에 따라 중요도를 다르게 해석합니다. 즉 프롬프트의 앞쪽에 적은 글일수록 AI가 해당 설명을 더욱 더 그림에 적극적으로 반영합니다. 이에 따라 보통 인물이 등장하는 그림 또는 사진을 그릴 때는 아래와 같은 순서로 프롬프트를 작성하는 것이 좋습니다.
퀄리티 > 분위기 > 효과 > 상황(구도/인원/자세) > 주인공(인체/의상/머리/표정) > 배경
가중치(괄호) 주는 방법
만약 뒤쪽에 적을 수 밖에 없는데 특정 단어나 문장을 AI에게 강조하고 싶을 때는 해당 부분을 괄호로 감사준 뒤 가중치를 특별히 올려줄 수 있습니다. 예를 들어 인물을 그리는데 긴머리를 강조하고 싶다면 (long hair:1.2) 이런 식으로 프롬프트를 작성하는 것입니다. long hair를 괄호로 감싸고 콜론(:)과 함께 강조하고 싶은 가중치를 숫자로 적는 것인데요, 보통 숫자는 0.1~1.4 사이 값을 작성합니다. 숫자 1을 기준으로 작을수록 반영을 덜 하며, 높을수록 적극 반영합니다.
퀄리티 프롬프트
AI 그림은 웹상의 그림을 학습한 모델이 자신의 데이터를 기반으로 다시 그림을 그려줍니다. 따라서 학습한 그림 중에는 분명히 퀄리티가 떨어지는 그림도 포함되어 있을텐데요, 이같은 저화질 그림을 피해서 좋은 퀄리티의 그림만 출력하기 위해서 퀄리티 프롬프트를 작성해주는 것이 좋습니다. 개인적으로 자주 사용하는 대표적인 퀄리티 프롬프트는 아래와 같습니다.
- masterpiece : 명작처럼 좋은 퀄리티의 그림을 그리게 합니다.
- best quality : 마찬가지로 좋은 퀄리티의 그림을 그리도록 합니다.
- detailed : 그림을 그릴 때 장신구나, 옷의 주름, 장식품의 디테일 등을 신경써서 그리도록 합니다.
- high_resolution : 고화질 그림처럼 그리도록 합니다.(실제로 출력 화질은 설정에서 세팅한 값으로 출력됩니다.)
- worst quality : 워스트 퀄리티를 부정 프롬프트(negative prompt)에 넣습니다.
- monochrome : 흑백 또는 단색화를 그리려면 긍정프롬에, 일반적인 그림 및 사진이라면 부정프롬에 작성합니다.
- watermark : 사진 및 그림에 워터마크가 생기는 것을 방지하려면 부정프롬에 작성합니다.
분위기 프롬프트
그림의 화풍이나 스타일 등을 반영할 수 있는 프롬프트입니다. 주로 2D 에니메이션 그림에서 잘 드러나는 부분인데요, 실사의 경우 조금 덜 반영되는 것 같습니다. 특히 작화나 화풍은 모델 자체를 바꿔서 그리는 것이 더욱 드라마틱하고 정확한 변화를 줄 수 있는 방법이므로, 분위기 프롬프트는 어느정도 이런 부분을 감안하고 사용해야합니다.
예를 들자면 1920s, 1980s와 같이 연도를 작성함으로써 해당 시대의 그림이나 분위기 등을 표현할 수 도 있고, cyberpunk, dark fantasy와 같은 프롬프트로 특정 분위기를 강하게 나타낼 수도 있습니다. 연도와 비슷하지만 baroque, renaissance 등과 같이 시대를 작성해도 되며, colored_pencil, watercolor(수채화), oil_painting(유화), charcoal, graphite 등과 같이 그림을 그리는 도구를 지정함으로써 작화 느낌을 바꿀 수도 있습니다. 하지만 앞서 말씀드린 것처럼 모델 자체를 변경함으로써 얻는 변화가 더욱 극적입니다.
효과(이펙트) 프롬프트
사진 편집을 해보신 분들은 리터칭 단계에서 렌즈 플레어와 같은 효과를 넣어보신 경험이 있을 것입니다. 꼭 렌즈 플레어가 아니더라도 사진의 표현력을 높이기 위해서 종종 각종 빛내림이나 조명의 방향을 설정하기도 합니다. 이 외에도 흩날리는 꽃잎, 떨어지는 나뭇잎이나 떠다니는 방울 등의 효과를 주기도 하는데요, AI 그림을 그리는 단계에서도 완벽하진 않지만 어느정도 표현이 가능한 부분입니다.
sunset, sunrise, sunlight, lens flare, glowing, spotlight, falling leaves, light_particles 등
상황 프롬프트
상황을 묘사하는 부분에서는 그림의 등장인물 수와 구도, 자세 등을 묘사합니다. 사용하는 프롬프트를 예로 들면 아래와 같습니다.
📌 등장 인물 수
1girl, solo, 2girls, brothers, sisters, twins, triplets,
📌 구도
front_focus, foot_focus, portrait, cowboy_shot, full body, upper_body, wide_shot, looking_up, looking_at_viewer, selfie, from above, from below, front view, from outside, dutch angle,
📌 자세
arms_behind_back, hand_on_own_head, hand_on_own_cheek, leg_up, walking, reclining, hug, crawling, all_fours, standing, standing_on_one_leg, crossed_legs, jumping, lying, squatting, leaning_on_object, against_wall,
이러한 구도와 자세 등 상황을 묘사하는 프롬프트가 정확하게 반영될수록 AI가 그려내는 그림이 더욱 사용자의 주문에 맞춰 정교해지게 됩니다. 하지만 실제로는 프롬프트가 점차 복잡해지면서 AI 그림이 원하는대로 나오지 않는 경우가 많은데요, 이를 보완하기 위해서 컨트롤넷(ControlNet)이라는 강력한 부가기능이 등장하게 됩니다.
컨트롤넷은 AI그림을 그릴 때 원하는 구도를 정확하게 반영할 수 있도록 해주는데요, 사실상 프롬프트만으로는 쉽지 않았던 구도도 컨트롤넷을 활용하면 대부분 쉽게 그려낼 수 있습니다. 컨트롤넷 설치 및 사용법에 대해서 궁금하신 분들은 아래를 참고하시기 바랍니다.
인물 프롬프트
인물에 대한 묘사를 조금 더 구체적으로 작성함으로써 AI가 그리는 무작위 인물이 아닌 사용자가 원하는 인물로 만들 수 있습니다.
체형과 연령
마른 체형의 20대 여성을 그리고 싶다면 skinny, 20-year-old, pretty girl, 등으로 작성할 수 있습니다. 간단한 3단어 뿐이지만 실제로 AI는 해당 프롬프트를 인지하고 그림에 반영하는 것을 볼 수 있습니다.
의상
현실에 존재하는 수많은 의상에 대해 프롬프트만 정확히 작성해주면 AI가 인지하고 그려줄 수 있습니다. 특히 여성의류의 경우 그 종류가 무한한데요, 기본적인 blouse, dress, shirt, t_shirt는 물론, collared_shirt, striped_shirt, sleeveless_shirt, off_shoulder_shirt 등 셔츠에 대해서도 세세한 묘사가 가능합니다. 오죽하면 의상 프롬프트 작성시 아이디어가 떠오르지 않을 경우 영문으로 된 여성의류 카테고리를 참고하면 된다는 얘기가 있을 정도입니다.
프롬프트로 의상을 고르는 것에서 한 단계 더 나아가면 특정 의상을 학습시킨 뒤 해당 의상을 그려내는 것도 가능합니다. 이를 위해서는 기본기능이 아닌 LoRa와 같은 확장 기능을 활용해야하는데요, 확장기능에 대해 궁금하신 분들은 아래를 참고하시기 바랍니다.
머리
머리 스타일에 따라 사람의 분위기가 매우 달라진다는 것인 익히 알려진 사실입니다. 아무리 잘생기고 예쁜 연예인도 헤어스타일을 잘못하면 전체적인 이미지가 망가지기도 할 정도로 머리는 사람의 인상에 굉장한 영향력을 미칩니다. 특히나 여성의 경우 머리의 길이, 색, 웨이브 정도, 풀어진 정도, 묶은 형태 등 다양한 스타일링이 가능한데요, AI 그림에서도 이런 부분을 프롬프트에 잘 입력하면 출력되는 그림에 곧잘 반영되는 편입니다.
📌 머리스타일
short_hair, medium_hair, long_hair, absurdly_long_hair ,disheveled hair, messy hair, straight_hair, flipped_hair, wavy_hair, curled_hair, ponytail, split ponytail, twin braided, dreadlocks, drill hair, twintail, two side up, wind lift hair,
얼굴
얼굴의 경우 얼굴 형태나 표정 등은 학습된 모델에 따라 꽤 큰 차이가 나는 부분입니다. 물론 프롬프트를 통해 AI에게 어느정도 표정을 주문할 수 있지만 모델에 따라 잘 반영되지 않는 경우가 발생할 수 있으며, 특히 실사모델들의 경우 표정이나 얼굴형 등의 변형이 조금 까다로운 편입니다. 기본적으로 아래와 같은 프롬프트를 사용해볼 수 있습니다.
📌 표정
sad, angry, embrrassed, sleepy, happy, surpised, distressed, smiling, touched, joyful, worried, upset, crying, tearful, boring,
프롬프트로 얼굴을 표현하는데 한계가 있지만 이를 극복하는 기술들이 이미 여럿 생겨났습니다. 사람의 각종 다양한 표정들, 한국인, 중국인, 일본인 또는 특정 캐릭터나 유명인사들의 얼굴을 따로 학습한 뒤 기존의 모델과 함께 사용하는 방법인데요 해당 기능에 대해 궁금하신 분들은 아래를 참고하시기 바랍니다.
배경 프롬프트
마지막으로 배경을 묘사하는 부분입니다. 배경은 프롬프트 가장 마지막 부분에 작성하는 것이 일반적이지만, 만약 특정 배경이 강조되어야하는 경우라면 앞쪽에 작성하셔도 무관합니다. 배경을 묘사하는 가장 큰 2가지 틀은 바로 실외(outdoors)와 실내(indoors)일 것입니다. 배경이 실외인가 실내인가에 따라 빛과 그림자의 묘사가 달라지고 이에따라 그림 또는 사진의 전반적인 톤이 달라지기 때문입니다. 꼭 실외 및 실내를 규정하지 않더라도 배경 자체를 묘사함으로써 실내외를 함께 지정하게 되는 경우가 많습니다. 예를 들어 교실(classroom)을 입력하면 자연히 실내 그림을 그려낼 것이며, 서울 도심 거리(street in seoul)을 입력하면 AI는 당연히 실외 배경을 그릴 것입니다.
배경 프롬프트는 연출하고 싶은 상황에 맞게 자유롭게 작성하면 AI가 알아서 맞춰 그려주는 편입니다. 예를 들어 벚꽃놀이 중인 사진이라면, cherry blossom을 입력해볼 수 있을테며, 프랑스 여행중이라면, in france, eiffel tower등을 작성해볼 수 있습니다. AI도 에펠탑이나 엠파이어스테이트 빌딩 등 상징적인 유명 명소 및 건물 등은 많이 학습했기 때문에 꽤나 사실적으로 그려주는 편입니다.
만약 내가 원하는 특정 배경사진에 인물을 그리고 싶다면 i2i를 통해 인물을 해당 배경에 집어넣는 방법도 고려해볼 수 있습니다. 배경과 인물을 합성하는 방법이 궁금하신 분들은 아래 글을 참고하시기 바랍니다.
1 thought on “프롬프트의 기본 | 스테이블디퓨젼 WEBUI AI 그림 입문 30분 완성”
Comments are closed.