본문 바로가기
야매 개발실/StableDiffusion

StableDiffusion Prompt 기본 사용 팁

by 야매플머 2023. 10. 27.
반응형

안녕하세요. 이상한 프로그래머, 야매 프로그래머 입니다.

지난 영상에서 stable-diffusion-webui 설치를 진행 했습니다. 모두 설치 해 보셨죠? 설치를 했으니 사용을 해야 갰지요. 워낙 사용하기 쉽기 때문에 그냥 사용 하면 되긴 합니다. 하지만 처음 이미지를 생성 해 보면 생각 보다 내가 원하는 그림 또는 여기저기 인공지능이 만든 이미지라고 올라 오는 이미지들 처 럼 멋진 이미지가 잘 나오지 않습니다. 이번 영상에서는 조금이라도 생성되는 이미지의 적중도를 높이는데 도움이 될 수도 있는 몇 가지 Prompt 의 특징과 팁을 실제 이미지를 생성해 보면서 진행해 보도록 하겠습니다.

지난번 기억을 되 살리면서, stable-diffusion-webui를 하도록 합니다. 인스톨 할 때 실행 시켰던 webui-user.bat를 똑같이 실행 시키면 실행이 됩니다.

현재는 이런 이미지 생성 AI를 유/무료 서비스가 많이 있습니다. 학습 모들의 퀄리티도 매우 좋습니다. 대표적 인건 Midjourney, DALL-E, playgroundai, 등이 있습니다. 간편하고 빠르게 사용할 수 있죠. 상대적으로 좀 불편하고, 모델들이 사용 학습 모델들에 비해 부족한 부분이 있지만 stable-diffusion-webui은 몇 가지 장점이 있습니다. 일단 확장성이 좋아서 단순 이미지 생성 뿐 아니라 여러 확장 프로그램을 설치해서 다양한 결과물을 만들고 시도 할 수 있고, 자신만의 학습 모델을 만들기 위한 추가 학습이 가능합니다. 제 채널에서는 이런 확장 프로그램들 그리고 추가 학습을 하는 내용들 같은 것 들도 앞으로 다룰 생각이니까요. 구독 하시고 자주 찾아와 주세요.

오늘 함께 이미지 생성 해볼 학습 모델은, Stability AI 에서 공개한 학습모델 SD_XL_Base_1.0 모델을 이용 하겠습니다. 기억 나시나요? stabilityai/stable-diffusion-xl-base-1.0 · Hugging Face 에서 받은 모델을 설치 된 경로의 models/Stable-diffusion 경로에 학습 모델을 넣어 두었죠. 여러분이 앞으로 다른 사람이 공유 한 체크 아웃 모델을 다운로드 받거나, 학습 시킨 결과를 사용 할 때는 이 경로에 학습 모델을 넣으면 됩니다. 화면의 좌측 상단을 보면 현재 로드 되어 있는 모델을 확인 할 수 있습니다.

이미지 생성을 위해 txt2img 탭으로 이동합니다. 2개의 Prompt 창과 생성 버튼, 그리고 이미지 생성시 사용 되는 각종 샘플러를 선택 할 수 있는 셀렉트 메뉴와 여러 파라매터를 볼 수 있습니다. 그럼 이미지를 생성해 보죠. 저는 고양이를 생성해 보겠습니다.

현재 우리가 사용할 학습 모델은 영문으로 학습을 했기 때문에 한글은 제대로 이해 하지 못합니다. 그래서 영문으로 요청을 해야 하는데, 걱정 하실 필요 없습니다. 요즘은 번역기나 ChatGPT 나 BingChat 같은 인공지능에게 번역을 요청 하면 아주 품질이 훌륭한 번역을 제공 받을 수 있습니다. 저도 영어를 잘 못하므로 번역기와 Chat 인공지능의 도움을 받아서 진행 하겠습니다.

a Cat

자 한번에 원하는 고양이가 등장 했나요? 이 고양이에 충분히 만족 할 수도 있지만 제가 생각하는 고양이는 아닌 것 같습니다. 사실 이렇게 단순하게 이야기 하면 사람도 마찬가지로 각기 머리속에 다 다른 고양이를 상상합니다. 인공지능에게 이미지 생성을 요구 할 때도 이런 점을 생각 해야 합니다. 그냥 고양이라고 요청하면, 학습 된 데이터에서 수 많은 고양이가 있을 테니 아무래도 요청자가 생각하는 고양이와 일치 할 가능성은 무척 낮겠죠. 바로 이 부분이 Prompt 작성에 가장 중요한 부분입니다. 이건 stable diffusion 뿐 아니라, 모든 생성형 AI 에게 해당 되는 부분입니다.

내가 원하는 결과에 가까운 결과를 얻으려면 최대한 요구 사항을 구체적으로 전달 해 줄 필요가 있습니다.’

요구사항을 구체적으로 전달 할 때는 문장으로 해도 좋고 키워드의 배열처럼 단어로 배열해도 좋습니다. 제 경험상 어떤 방식이든 큰 차이는 없다고 생각 합니다만, 개인마다 체감 하는 바는 다를 수 있기 때문에 여러분들이 더 좋다고 생각 하는 방식으로 하시면 됩니다.

저는 문장과 키워드 두 가지 모두 섞어서 사용 하는 편입니다.

그럼 좀더 구체적으로 전달해 보죠.

create a photo of an American shorthair cat

뭐 아직도 충분 하지는 않은 것 같지만 그래도 이제는 좀 아메리칸 숏 헤어 고양이 같긴 합니다. 여기서 Negative Prompt를 좀 이용해 보죠. 전 고양이 사진을 분명 원했는데, 이 요구 사항으로 했더니 사진이 나올 때가 있는가 하면, 이상하게 그림이 나오는 경우도 있습니다. 이런 경우 Negative Prompt에 그림은 그리지 말어! 라고 요구 하는 거죠.

Prompt : create a photo of an American shorthair cat
Negative Prompt : painting, digital painting, illustration, cartoon, pattern,

자 Negative Prompt 에 그림을 의미하는 페인팅, 디지털 페인팅, 그리고 일러스트, 카툰, 패턴, 을 포함 시켰습니다. 이제 주로 사진이 나오기 시작 하죠? stable diffusion 에서 이미지를 생성하는 과정인 기본적으로 이 상황처럼 원하는 결과를 얻기 위해 범위를 줄여 가면서 적중도를 높이는 과정이라고 보시면 됩니다. 이제 좀더 마음에 쏙 드는 귀여운 고양이를 만들기 위해 Prompt 내용을 더 보강해 보도록 하죠.

Prompt : create a photo of an American shorthair cat,brown fur,sparkling eyes,looking up,sitting on the living room carpet,
Negative Prompt : painting, digital painting, illustration, cartoon, pattern,

위쪽을 보고 있는 느낌을 원했는데 생각보다 잘 안나오는 것 같습니다. 그럼 여기서 또 다른 트릭을 추가해 봅시다. stable-diffusion 의 Prompt는 가장 먼저 나온 문장 또는 키워드에 더 높은 가중치가 있습니다. 하지만 ()로 특정 키워드를 묶어서 적용 가중치를 높일 수 있습니다. 위를 쳐다보는 부분을 () 묶어 보도록 하죠.

Prompt : create a photo of an American shorthair cat,brown fur,sparkling eyes,(looking up),sitting on the living room carpet,
Negative Prompt : painting, digital painting, illustration, cartoon, pattern,

이제 위를 쳐다보는 느낌의 이미지를 생성하는 비율이 확실이 좀 늘어 난 것 같죠? 어느 정도 상황 묘사는 이제 원하는 만큼 나오는 것 같으니까 이제 양념을 좀 뿌려보죠. 모든 학습 모델에는 이미지에 극적인 변화들을 줄 수 있는 키워드가 숨어 있습니다. 대표적으로는 이미지의 스타일이나, 처음 봤던 사진이냐, 페인팅이냐 하는 그런 것들, 그리고 유명 작가의 이름 같은 것, 그리고 조명의 느낌 같은 것 말이죠. 자 그럼 양념 한 번 쳐볼까요?

Prompt : create a photo of an American shorthair cat,brown fur,sparkling eyes,(looking up),sitting on the living room carpet,sunlight comes in from the window,there are mysterious light clusters around the cat,ultra detail,ultra quality,4K,
Negative Prompt : painting,digital painting,illustration,cartoon,pattern,watermark,text,

저는 양념으로 빛과 정교함, 품질, 고 해상도, 그리고 Negative 에 문자가 이미지 등장 하지 않도록 추가 했습니다. 이제 요구 사항은 다 넣은 것 같습니다. 이제 적당히 원하는 이미지가 나오도록 몇 차례 돌려 보도록 하죠. 이렇게 랜덤하게 돌릴 때도 좀 여러 장을 한번에 보고 싶은 경우가 있죠. Batch Size를 조절해서 4장씩 한번 뽑아 보도록 하죠.

흠 꾀 괜찮은 이미지가 나오는 것 같군요. 그런데 좀더 다양한 경우를 보고 싶어 졌습니다. Sampler를 다른 것으로 한번 변경해 보죠. stable diffusion 에서는 이미지 생성에 여러 종류의 sampler를 지원 하는데요. 이 sampler에 따라 꾀 다른 느낌을 보여주는 경우가 있으니 시도해 볼만 합니다. 한번 볼까요?

꾀 다르죠? 저는 처음 sampler가 제일 괜찮아 보이네요. 흠 거의 맘에 드는 것 같은데 몇 가지만 더 만져 보죠. CFG Scale 을 한번 만져 보겠습니다. 이 항목은 Prompt에 대한 강제성을 높인다고 생각 하시면 되는데요. 이 항목은 무조건 높다고 좋은 것도 아니고, 낮다고 좋은 것도 아닙니다. 너무 낮으면 prompt와 전혀 관계가 없는 것이 나와 버리고 또 너무 높으면 억지로 모든 내용을 적용 하려고 해서 이상한 괴물이 나오기도 하거든요. 그래서 적절히 조절 해보면서, 내 요구 사항이 적절하게 포함이 되는지 확인을 해야 합니다. 저는 보통 7~16 사이의 값에서 조정해 가보면서 생성 합니다. 흠 이번 경우에는 전 7.5 정도가 적당해 보이네요.

이제 좀 디테일을 올려 볼까요. sampling step 을 조절 해보죠. 이 sampling step은 쉽게 몇 번 그리기 시도 하냐 정도로 보시면 될 것 같은데요. 이 스텝도 마찬가지로 너무 높거나 낮은 것은 도움이 안 됩니다. 너무 낮으면 너무 대충 그려버리고, 너무 높으면 그리다가 탈 룰라 해버리죠. 마치 종이 하나에 마구마구 그리다가 종이 짓쪄 버리는 것처럼 요. 저는 보통 20~40 정도 사이 값을 시도 합니다. 확실히 좀 이미지의 디테일이 좀 달라지는 것이 느껴 지시나요? 저는 이 상황에서는 30 정도가 적당해 보이네요.

자 이렇게 최종 이미지가 나왔습니다. 꾀 훌륭해 보이지요? 자 그럼 오늘 함께 생성해본 과정에 주요한 부분을 총 정리 해보죠.

  1. 요구 사항을 최대한 구체적으로 prompt를 작성한다.
  2. 원하지 않은 사항이 포함 될 경우 negative prompt를 이용 한다.
  3. prompt는 나열 된 순서대로 가중치를 가지고 있다. 그러니 고려 해서 작성 한다.
  4. ()와 []를 이용해서 키워드를 감싸면, 해당 키워드의 가중치를 높이거나 낮출 수 있다. () 의 경우 (키워드:1.0) 형식으로 수치로 직접 가중치를 적용 할 수도 있다.
  5. batch size를 이용해서 한번에 여러 장을 생성해 볼 수 있다.
  6. sampler를 변경해서 sampler별 특징에 따라 다른 느낌의 이미지를 생성 할 수 있다.
  7. CFG Scale를 이용하여 prompt의 적용 강도를 조절 할 수 있다.
  8. sampling step 을 조정 하여 이미지의 디테일에 변화를 줄 수 있다.

이 정도 내용만 잘 알고 계시면, 좋은 이미지를 만드는 데는 큰 무리가 없어 보입니다. 정말 퀄리티가 높은 이미지들을 뽑으려면 많은 숙달이 필요 합니다. 특히 학습 모델별로 특징들도 있기 때문에 흔히 말하는 자신만의 노하우가 좀 필요한 부분이 있습니다.

자 오늘은 여기까지 구요. 여러분들도 한번 다양한 영감을 얻을 수 있는 이미지를 한번 생성해 보세요. 다음 영상에서도 흥미로운 stable diffusion webui 사용 팁 준비 해보도록 노력 하겠습니다. 그러면 여러분 오늘 하루도 좋은 하루 보내시구요! 채널에 관심이 생기신다면 구독하시고 자주 찾아와 주세요!

반응형