일상생활/AI

Stable Diffusion(스테이블 디퓨전) WebUI 07. Script(X/Y/Z plot)

LeePorter 2024. 9. 4. 19:50

이번 포스팅에서는 스테이블 디퓨전에서 제공하는 Script라는 기능의 하나인 X/Y/Z plot에 대해서 설명하도록 하겠습니다.

 

🟧 이전글 보기

Stable Diffusion(스테이블 디퓨전) WebUI 01. 준비하기

Stable Diffusion(스테이블 디퓨전) WebUI 02. 기본설정

Stable Diffusion(스테이블 디퓨전) WebUI 03. 이미지 생성하기(Embeddings, Hires 적용)

Stable Diffusion(스테이블 디퓨전) WebUI 04. 프롬프트 사용법

Stable Diffusion(스테이블 디퓨전) WebUI 05. 프롬프트 Style 저장 및 사용

Stable Diffusion(스테이블 디퓨전) WebUI 06. Lora 사용


🔷 여러 가지 설정값을 적용하여 표 형태로 이미지 생성하기(Script X/Y/Z plot)

  - 이미지를 생성하다보면 여러 설정값을 조작하기 번거롭고 매번 설정값을 하나하나 바꾸기 매우 귀찮은 순간이 오는데 이 부분을 효율적으로 테스트할 수 있는 스테이블 디퓨전의 고유 기능이 있습니다.

 

  - 이를 Script라고 하는데, 이 Script 기능 중에 'X/Y/Z plot' 이라는 기능을 이용하여 여러 설정값을 한 번에 생성해서 이미지들을 비교해볼 수 있는 기능입니다.

 

  - 스테이블 디퓨전을 실행하여 맨 아래로 내려보면 Script가 있습니다. 그 아래 'None'이라고 된 부분을 선택하면 아래와 같이 드롭박스가 나타납니다. 여기서 'X/Y/Z plot'을 선택합니다.

 

 

  - X/Y/Z plot을 선택하면 아래 여러 가지 설정할 수 있는 것들이 복잡해 보일 수 있는데 어려울 것은 없습니다 ^^

 

  - 크게 위 이미지에 빨간 박스로 된 부분만 자주 사용하므로, 다른 것들은 부수적인 옵션들입니다.

 

  - 크기 X, Y, Z type과 Draw legend, Include Sub Images 체크박스가 있습니다.

 

  - X, Y, Z type은 이름에서와 같이 Grid(=표) 형태로 이미지를 생성하며, 이때 X(가로축)과 Y(세로축), Z(면)으로 이미지를 생성합니다.

 

  - Draw legend는 각 타입별로 작성한 값을 Grid 생성 시 제목으로 출력해주는 옵션입니다. 체크하여 생성하면 Steps 몇, CFG 몇 이런식으로 이름이 붙습니다. 체크해제하면 이미지만 표형태로 생성합니다.

 

  - Include Sub Image를 체크하면 각각의 이미지를 서브이미지로 생성해서 Preview에서 바로 확인할 수 있습니다. 기본으로 체크 해제되어 있는데 이상태로 생성하면 Grid 표 이미지 하나만 달랑 생성합니다.(파일은 각각 생성되어 Output 폴더에서 확인할 수 있습니다.)

 

1️⃣ 각 타입별 사용법

  - 먼저 간단하게 X type 아래 드롭박스를 선택합니다. 그러면 뭔가 엄청 많은 리스트가 나타나는 것을 볼 수 있습니다. 내가 테스트 해볼 여러가지 옵션 목록이므로 하나하나 별도로 값을 넣어서 여러 장을 한 번에 생성해볼 수 있습니다.

 

  - 리스트 맨 위에 Nothing은 사용하지 않겠다는 의미입니다. 휠로 올리고 내릴때 천천히 해주세요! 리스트와 스테이블 디퓨전 웹페이지의 스크롤과 겹쳐서 빨리올리면 웹페이지도 움직여서 자꾸 화면이 오르락 내리락합니다~

 

  - 먼저 가볍게 테스트해보기 위해 X type은 Stpes를 선택해줍니다. 그리고 아래 Y type에는 CFG Scale을 선택해줍니다. 두 설정값 모두 리스트 상단에 있으니 찾기 쉬울겁니다.

 

  - 이제 type 옆에 X values와 Y values에 테스트해볼 값을 작성합니다. 아래 이미지와 같이 작성해주세요.

 

  - 사용한 체크포인트 모델은 DreamShaper v8 입니다. 사용한 프롬프트와 설정값은 아래와 같습니다. Seed를 -1로 랜덤하게 생성하므로 결과이미지가 다를 수 있습니다. 

 

 생성하는데 시간이 좀 걸릴 수 있습니다. 이미지를 한 번에 총 9장(3x3)을 생성하면서 2배 업스케일링까지 수행하므로 하드웨어에 따라서 몇 분 걸릴겁니다.

(masterpiece, best quality, highres, highest detailed), (photorealistic), (realistic), HDR+, (extremely intricate, intricate details, extreme detailed), fashion photography, (extremely detailed CG unity 8k wallpaper, professional photograph), (colorful, dim colors, official art), lower body, outdoors, the most beautiful in the world, far away castle, looking at viewer, BREAK 1girl, medium breast, sharp jawline, shiny skin, long hair, blonde hair, ponytail, sidelocks, blue eyes, swept bangs, collarbone, earrings, jewelry, shirt, white shirt, long sleeves, jacket, open jacket, black jacket, skirt, pleated skirt

 

🟧 부정 프롬프트

(worst quality, low quality:1.4)

 

  - 결과 이미지는 위와 같이 표 형태로 이미지가 생성됩니다. 해당 결과 이미지는 스테이블 디퓨전 폴더의 [outputs] - [txt2img-grids] - [오늘 날짜] 폴더에서 확인할 수 있습니다. 마찬가지로 [txt2img-images] 폴더에는 개별 이미지가 있습니다.

 

  - 대략적인 결과를 확인하면서 해당 체크포인트 모델은 어느정도의 CFG와 Steps 값을 쓰면 좋은 이미지가 생성되는지를 비교하여 볼 수 있습니다. 

 

  - 대충 보면 CFG는 4보다는 높게, 10 이하로 쓰면 좋을 것 같고 Steps는 30 ~ 40 정도의 값을 쓰면 괜찮은 이미지가 생성되는 것을 볼 수 있습니다.

 

  - 이런 식으로 체크포인트 모델의 좋은 이미지를 생성하기 위한 최적의 설정값을 찾고 싶을 때 X/Y/Z plot 기능을 이용하면 보다 쉽게 비교해볼 수 있습니다. (비교하는 용도라면 굳이 Hires 기능을 쓰지 않고 보셔도 좋습니다. 시간 절약!)

 

  - 아래는 테스트용으로 Z type까지 넣어서 가볍게 생성해본 결과 이미지입니다. 샘플러에 따라서 비교분석할 수도 있고, 체크포인트 모델을 여러 개 넣어서 테스트해볼 수 있습니다. 당연히 많이 넣으면 넣을 수록 생성하는 이미지가 늘어나므로 시간이 꽤 걸립니다 ㅎㅎ 

 

2️⃣ 프롬프트 단위로 생성하기

  - 많은 프롬프트를 작성하다보면 프롬프트를 넣고, 제거하고 이거를 반복해서 이미지를 생성하면 매우 번거롭습니다. 그래서 해당 프롬프트를 종류별로 넣었을 때랑 제거했을 때, 혹은 다른 프롬프트와 같이 썼을 때 등등 한 번에 확인해볼 수 있습니다.

 

  - type을 선택하여 이번에는 Prompt S/R을 선택합니다. (이것도 CFG나 Steps처럼 리스트 상단에서 볼 수 있습니다)

 

  - Prompt S/R을 선택하면 values에 프롬프트를 작성할 수 있습니다. 이때 약간의 규칙이 있는데, 정리하면 아래와 같습니다.

 

  • 스테이블 디퓨전 웹페이지에서 프롬프트 입력창(기본과 부정 모두)에 프롬프트가 작성되어 있어야합니다.
  • Prompt S/R의 Value에는 작성되어 있는 프롬프트 중 일부를 가져와 생성하게 됩니다.
  • 이때 대소문자, 띄어쓰기, 콤마 구분 등 모두 같은 프롬프트를 적어야만 제대로 동작합니다.
  • 프롬프트 단위로 여러 개의 이미지를 생성할 때 구분하기 위해 콤마를 사용합니다.
  • 두 개 이상의 프롬프트(프롬프트1, 프롬프트2)는 반드시 ""(쌍따옴표)로 묶어야합니다.
  • 두 개 이상의 쌍따옴표로 구분한 프롬프트 묶음끼리는 콤마로 구분합니다. 콤마 사이의 공백은 상관없습니다.(원래 빈 공백이 있으면 안 됐는데 패치된 것 같습니다.)
    • ex) "프롬프트1, 프롬프트2", "프롬프트3, 프롬프트4"

  - 아래는 먼저 이미지 생성을 위한 프롬프트 내용들과 Script에서의 Prompt S/R 사용법에 대한 내용입니다.

(masterpiece, best quality, highres, highest detailed), (photorealistic), (realistic), HDR+, (extremely intricate, intricate details, extreme detailed), fashion photography, (extremely detailed CG unity 8k wallpaper, professional photograph), (colorful, dim colors, official art), lower body, outdoors, the most beautiful in the world, far away castle, looking at viewer, BREAK 1girl, sharp jawline, shiny skin, smile, long hair, blonde hair, ponytail, sidelocks, blue eyes, swept bangs, collarbone, earrings, jewelry, shirt, white shirt, long sleeves, jacket, open jacket, black jacket, skirt, pleated skirt <lora:add_detail:0.5>

 

🟧 부정 프롬프트

(worst quality, low quality:1.4), BadDream, (UnrealistickDream:1.3), EasyNegativeV2, FastNegativeV2

 

🟧 Prompt S/R Values

"long hair, blonde hair, ponytail, sidelocks, blue eyes, swept bangs, collarbone, earrings, jewelry, shirt, white shirt, long sleeves, jacket, open jacket, black jacket, skirt, pleated skirt","long hair, pink hair, wavy hair, flipped hair, red eyes, necklace, shirt, collared shirt, white shirt, pencil skirt, office skirt, grey skirt"

 

  - 명확한 구분을 위해 색으로 표시하였습니다. 파란색의 내용은 기본 프롬프트의 내용을 그대로 Prompt S/R의 Values에 가져와 사용하여 해당 프롬프트가 적용된 이미지를 우선 생성합니다.

 

  - 이때 반드시! Prompt S/R Values의 가장 첫 번째 프롬프트의 내용이 기본 프롬프트 또는 부정 프롬프트에 같은 프롬프트가 있어야합니다.(그냥 복붙하시면 됩니다. 한 글자라도 틀리면 생성이 안 됩니다.)

 

  - 주황색의 프롬프트 내용은 첫 번째 프롬프트를 대체하여 생성합니다. 즉, long hair ~ pleated skirt 부분까지를 자동으로 제거하고 주황색의 long hair ~ grey skirt 까지 프롬프트를 넣어서 또다른 이미지를 생성합니다. 결과는 아래와 같습니다.

 

  - 결과 이미지를 보면 쌍따옴표("")로 묶인 두 세트에 대한 이미지를 볼 수 있습니다. 다양한 프롬프트를 한 번에 수정없이 생성하여 비교할 수 있다는 장점이 있습니다.

 

  - 이번에는 다른 방식으로 생성해보겠습니다. 아래는 총 3가지로 구분하여 생성하였습니다. 

"smile, long hair, blonde hair, ponytail, sidelocks, blue eyes, swept bangs, collarbone, earrings, jewelry, shirt, white shirt, long sleeves, jacket, open jacket, black jacket, skirt, pleated skirt <lora:add_detail:0.5>","long hair, blonde hair, ponytail, sidelocks, blue eyes, swept bangs, collarbone, earrings, jewelry, shirt, white shirt, long sleeves, jacket, open jacket, black jacket, skirt, pleated skirt",

 

  - 이번에도 파란색은 마찬가지로 기본 프롬프트의 내용이며, 이 내용에서 smile 부분과 add_detail Lora만 제거한 주황색부분, 그리고 가장 마지막에 콤마를 찍습니다. 콤마 뒤에 아무것도 없다면 아무것도 적용하지 않은, 즉 파란색부분도 없는 상태에서의 기본프롬프트로만 이미지를 생성합니다.

 

 

  - 결과를 보시면 가장 마지막 세 번째 이미지는 프롬프트의 내용이 비어있는 상태로 맨 처음 적용한 프롬프트 내용도 제거한 나머지 프롬프트 내용으로만 생성한 이미지입니다.

 

  - 이러한 방식은 저번 포스팅에서 Lora를 비교하는 이미지처럼 특정 프롬프트를 사용했을 때와 안 했을 때를 비교하고 싶을 때 사용하시면 됩니다.

 

  - 이렇게 X/Y/Z plot으로 여러 장의 이미지를 다양한 설정값으로 한 번에 테스트해볼 수 있어서 무언가 비교하거나 괜찮은 설정값을 찾을 때 유용하게 사용할 수 있습니다.


이상 Script의 X/Y/Z plot 기능에 대한 내용이었습니다.

감사합니다.