이번 포스팅에서는 프롬프트 문법을 설명하겠습니다. 동일한 프롬프트라도 문법에 따라 이미지가 크게 변하기 때문에, 프롬프트 문법은 프롬프트 작성에 있어서 매우 중요합니다. 표현(태그)의 배치 순서, 괄호 사용, 가중치 부여 등의 내용을 설명하겠습니다.
프롬프트 문법
프롬프트의 작성에 있어서 가장 큰 특징은 배열된 순서로 우선순위가 결정된다는 점입니다. 즉 프롬프트 작성에 있어서 먼저 작성한 표현(태그)이 이미지 생성에 있어서 우선순위를 가집니다. 이를 포함하여 몇 가지 프롬프트 문법이 있습니다.
먼저 작성한 표현에 우선순위 부여
표현의 우선순위는 이미지의 종류에 따라 달라집니다. 예를 들어 인물화 이미지를 생성하고 싶다면 1 girl, beautiful, ultradetailed face, ultradetailed eyes와 같이 대상의 특징을 묘사하는 표현을 먼저 작성합니다. 대상의 특징이 중요하기 때문에 배경이나 공간에 관한 표현은 후순위로 미뤄집니다. 반면 풍경화는 masterpiece, best quality, ultra-realistic과 같은 표현이 먼저 배치됩니다. 특정 사물이나 대상보다는 이미지의 전반적인 품질이 중요하기 때문입니다.
괄호 사용
괄호를 넣어 표현의 중요도(가중치)를 결정할 수 있습니다. 소괄호()와 대괄호[]가 사용됩니다. 소괄호는 1.1의 가중치가 부여되고 대괄호는 0.9의 가중치가 부여됩니다. 다만 소괄호 안에 0~1의 가중치를 넣어 비중을 조정할 수 있기 때문에, 대괄호는 자주 사용하지 않습니다. 중요 내용을 정리하겠습니다.
- 소괄호를 사용하면 1.1의 가중치가 부여됩니다.
- 소괄호를 중복해서 사용하면, 1.1 x 1.1 = 1.21의 가중치가 부여됩니다.
- 대괄호를 사용하면 0.9의 가중치가 부여됩니다.
- 대괄호를 중복해서 사용하면, 0.9 x 0.9 = 0.81의 가중치가 부여됩니다.
괄호 사용 시 우선순위 변경
특정 표현에 괄호를 사용하면 텍스트 프롬프트에서 우선순위가 높아집니다. 예를 들어 A, B, C, D, E 순서로 표현이 배치되면, 중요도는 순서 그대로입니다. 여기서 D에 소괄호를 사용하면 중요도는 D, A, B, C, E로 변경됩니다.
괄호 내에 가중치 부여
괄호 내에 수치로 가중치를 부여할 수 있습니다. 예를 들어 handsome이라는 표현을 강조하고 싶다면, (handsome:1.5)라는 표현처럼 괄호 안에 수치로 가중치를 부여할 수 있습니다. 다만 체감으로는 1.5를 초과하는 수치를 넣을 경우, 이미지가 뭉개지거나 깨지는 경우가 많았습니다. 개인적으로 최대 1.5의 수치를 추천합니다.
여러 표현을 묶어서 가중치 부여
여러 표현(태그)을 작성하다 보면, 표현의 효과가 다른 부분으로 전염 혹은 오염되는 경우가 종종 있습니다. 예를 들어 머리 색상을 brown으로 작성했는데, 옷의 색깔이 brown이 되는 경우가 있습니다. 이런 현상을 막기 위해서 다음과 같이 프롬프트를 작성할 수 있습니다. (1girl, beautiful, brown hair:1.5), 이렇게 프롬프트를 작성하면 보기에도 깔끔하고, 한 번에 여러 표현(태그)의 가중치를 조정하기에도 편리합니다.
이미지 생성
직접 이미지를 생성하면서, 상기 설명한 문법을 확인하겠습니다. 생성된 이미지는 다음과 같습니다. 호수, 호수 주변의 집은 제대로 반영되었지만 보트가 잘 보이지 않습니다.
텍스트 프롬프트: masterpiece, best quality, ultra-detailed, lake surrounded by mountains, boats, houses
네거티브 프롬프트: worst quality, low quality, bad pictures, signature, watermark, username, monochrome(흑백)
보트의 가중치를 1.5로 조정하겠습니다. 다음과 같은 이미지가 생성되었습니다.
텍스트 프롬프트: masterpiece, best quality, ultra-detailed, lake surrounded by mountains, (boats:1.5), houses
네거티브 프롬프트: worst quality, low quality, bad pictures, signature, watermark, username, monochrome(흑백)
보트가 너무 많은 것 같습니다. 보트의 수치를 1.2로 조정하고, House를 소괄호로 감싸겠습니다. 보트가 좀 많기는 하지만 그럭저럭 주변의 집과 함께 적절히 배치된 것 같습니다.
텍스트 프롬프트: masterpiece, best quality, ultra-detailed, lake surrounded by mountains, (boats:1.2), (houses)
네거티브 프롬프트: worst quality, low quality, bad pictures, signature, watermark, username, monochrome(흑백)
정리
지금까지 스테이블 디퓨전의 프롬프트 문법에 관해 정리하였습니다. 직접 이미지를 생성해 보면 아시겠지만, 여러 사물, 대상이 들어가는 이미지는 입맛에 맞게 이미지를 생성하는 것이 쉽지 않습니다. 수치를 조정하고, 배열을 변경하고, 표현(태그)을 수정하면서 원하는 이미지를 생성하는 시행착오의 과정이 필요합니다. 직접 원하는 이미지를 생성하면서 익숙해지시기를 바랍니다.