잡글) civitAI 랭킹 근황

이미지
 요즘 LoRA 학습에 푹 빠져있는데 LoRA가 잘 만들어졌는지 테스트 하려면 테스트할 프롬프트가 필요하다.  필자는 매번 프롬프트에 아무거나 넣어보다가 잘되면 기록해놓는데 정말 잘 나온 애들은 civitAI에 올려놓는다.  https://civitai.com/images/7622855 요런거 개인적으로 잘나왔다고 본다. 암튼, 그래서 civitAI에 올린 프롬프트와 파라미터를 찾으러 갔는데 우측에 브론즈 딱지가 붙어있는 것을 봤다. civitAI SDXL 크리에이터 93위... 베이스모델 49위... 음.... 100위 안에 랭크인 됬는데 브론즈다. 생각보다 모델 올리는 사람이 없나 보다.  49위한 베이스모델은 정말 초창기에 SD 1.5모델을 올렸던게 인기가 좀 있었던거 같다. 사실 그당시엔 아무거나 올려도 열광할때라 선점효과가 강력했다. 지금은 업로드하는 사람이나 다운받는 사람이나 굇수들만 남아서 어중간한 모델은 인기가 없는 거 같다 ㅠㅠ (AnimagineXL 3.0이 너무 강력해서 그만..) 그리고 SD모델이 점점 커져서 SDXL같은 건 정말 좋은 GPU를 갖고 있는 유저들만 돌릴 수 있고 NAI나 기타 AI 생성 서비스가 좋아져서 굳이 civitAI까지 안 가도 되긴하다. 할부로 긁은 RTX4090이 언제까지 버틸련지... 어제 엔비디아 블랙웰 기사를 보는데 GPU가격은 천정부지에 소비전력과 크기도 만만치 않다... 물론 성능도 중요하지만 쿼드로~지포스급에선 성능보단 메모리 싸움인데, 이번 5000대도 24기가 달고 나오면 굳이 넘어가야하나? 싶다. 물론 엔비디아가 장사를 잘한다면 32GB나 48GB를 달고 나오겠지 어디까지나 희망사항이다. 근데 랭크인하면 이제 뭐함...? 네이버 생성형 AI쪽 취직 좀 시켜줬으면 GPU 개고순디

스테이블 디퓨전으로 고품질 그림을 생성하는 팁 몇 가지(2. 네거티브 프롬프트)

 지난 글(1. 퀼리티 태그)에선 퀄리티 태그가 어떤 것인지 보았다. 이제 실전으로 이를 활용한 네거티브 프롬프트를 짜는 법을 보자.


네거티브 프롬프트란, 생성할 그림에서 반대 속성을 갖 프롬프트를 의미한다. 

네거티브 프롬프트에는 내가 원하지 않는 값을 넣어야 한다. 가장 대표적인 네거티브 프롬프트로는 nsfw, worst quality, low quality, lowres, text.. 등등 여러 가지 들어간다. 

그런데 왜 네거티브 프롬프트를 사용해야 할까? positive 프롬프트에 masterpiece만 넣어도 괜찮지 않을까?

백문이 불여일견. 일단 해보자.

일단 파라미터는 다음과 같이 설정하였다.

Steps: 30, Sampler: Euler a, CFG scale: 9, Seed: 123456789, Size: 832x1312, Model hash: 325d0e75d7, Model: remaster+, VAE hash: 63aeecb90f, VAE: sdxl_vae.safetensors, ENSD: 31337, Pad conds: True, Version: v1.7.0

positive 프롬프트는 다음과 같다.

1girl, solo, ponytail, long hair, light blue hair, pink eyes, frilled dress, layered dress, intricate, embroidery, sidelocks, frills, general

이제 여기서 best quality, masterpiece의 유무를 비교해 보면 다음과 같다.


아무리 보아도 best quality, masterpiece를 넣은 게 좋아 보인다. 그런데 여기서 negative에 worst quality를 추가해 보면 다음과 같은 결과를 얻는다.

X,Y축은 각각 positive와 negative 프롬프트

네거티브에 worst quality와 low quality를 넣는 것만 해도 꽤 괜찮은 품질의 이미지를 얻을 수 있다. 우측 상단 이미지를 보면 best quality, masterpiece가 없는데 불구하고 예쁘다.

그럼 이제 본격적으로 네거티브 프롬프트를 작성해 보자. 먼저, animagineXL에서 권장하는 네거티브 프롬프트를 넣어보자.

nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name


뭔가 차이가 난다.? 필자는 사실 잘 모르겠다. 사람마다 느끼는 것은 다르겠지만 필자는 퀄리티 태그 두 개 넣은 것과 그렇게 큰 차이가 나지 않는다고 생각된다.

그럼 이제 필자가 사용하는 자주 애용하는 네거티브 프롬프트를 써보자.
(프롬프트가 너무 길어서 링크로 대체한다.)


그 손가락이 나와서 모자이크 처리했다..

네거티브 프롬프트의 위대함이 보이는가...? best quality, masterpiece를 쓰지 않아도 이미지의 퀄리티가 굉장히 좋아 보인다. 이제 네거티브 프롬프트를 제대로 작성해 볼 생각이 드는가?

네거티브 프롬프트의 장점은 단순히 퀄리티로 끝나지 않는다. 일반적으로 우리가 가장 많이 쓰고 지우는 창은 네거티브가 아니라 positive 프롬프트 창이다. 즉, 네거티브는 한번 작성해 놓으면 건드릴 일이 매우 적다. Web UI상에서 네거티브 프롬프트를 디폴트로 해놓거나, 스타일로 저장해놓으면 작성할 필요도 없다. 매번 고품질 이미지를 생성하는 것이 가능하다. 필자는 네거티브를 스타일로 만들어 저장한다. (방법은 나중에 WebUI에 대한 글로 쓸려고 한다.)

스타일을 쓰면 저장해놓은 프롬프트가 추가되어 이미지가 생성된다.
  

그런데 초심자가 네거티브 프롬프트를 이 정도 짜는 것은 쉽지 않다. 필자도 수 많은 시행착오 끝에 이렇게 네거티브를 짰다. (참고로, 필자는 22년도 10월부터 이 짓거리를 했다)
그럼 쉽게 좋은 네거티브를 작성하는 방법은 없을까? 방법은 두 가지 정도 있다.

  1. 베끼기
  2. Easy Negative 임베딩 사용하기
필자는 두 가지 방법 모두 추천한다. 위 방법에 정답은 없으니 사용했을때 잘 나오는 걸 사용하면 된다. 
그럼 먼저 첫번째 베끼기 부터 사용해보자.
사실 이미 했다.
남들이 써놓은 네거티브 프롬프트를 내가 사용하면 된다. 열심히 인터넷 뒤져가며 좋은 네거티브 프롬프트를 찾아보자. 

그럼 두 번째, Easy Negative 임베딩을 알아보자.
이걸 사용하기 전에 사전지식으로 임베딩을 알면 좋다. 우리가 보통 사용하는 프롬프트는 AI가 해석하기 위해 vector(벡터)라는 숫자열 형태로 변환된다. 흔히 프롬프트를 작성하다 보면 프롬프트창 우측 상단에 40/75 같은 숫자가 보이는데, 40이 현재 작성한 프롬프트의 벡터 길이를 의미하며, 75는 한 벡터의 최대 길이를 의미한다. 스테이블 디퓨전은 이 벡터의 길이가 75의 배수로 이루어져 있어서 만일 프롬프트의 길이가 75를 넘어가면 다음 벡터에 작성되어 전체 길이는 150으로 넘어간다.

그럼 Easy Negative 임베딩은 무엇인가?
임베딩의 원래 의미는 문자->벡터로 변환하는 것이다. 그런데 여기서 textual inversion이라는 기술이 있다. 우리가 스테이블 디퓨전으로 그림을 생성하면 AI 모델 내부에서 대충 뭉뚱그려서 문자->벡터->latent->이미지 순으로 데이터가 변환된다. 여기서 textual inversion은 이미지->latent->벡터로 학습하여 어떤 이미지에 매칭되는 임베딩 벡터를 학습한다.
즉, 이미지 A에 대한 임베딩 벡터 A를 학습하여 벡터 A를 얻는 것이 목적이다.
그럼 한번 생각해 보자 품질이 나쁜 이미지 뭉치를 벡터 A로 학습하였다면, 우린 이제 벡터 A만으로 품질이 나쁜 이미지를 쉽게 생성할 수 있다. 이걸 네거티브 프롬프트에 넣는다면 품질이 나쁜 이미지와 반대되는 품질이 좋은 이미지가 생성될 것이다. 이게 Easy Negative의 원리다.
사실 이 이야기를 이해하기 위해서는 AI와 임베딩 기반지식이 필요하다(아마도). 각설하고 굳이 네거티브 프롬프트가 있는데 왜 우리는 Easy negative를 이용할까? 그 이유는 그 많은 네거티브 프롬프트가 한 단어로 줄어들기 문이다.
역시 백문이 불여일견 이지네거티브를 써보도록 하자. unaestheticXL | Negative TI - _hk1 | Stable Diffusion Embedding | Civitai를 사용하였다.




보이는가? 그림의 분위기가 크게 달라졌다. 필자가 쓴 건 단순히 unaestheticXL_hk1 이 한 단어이다. worst quality, low quality 보다 짧은데 그림의 품질이 더 뛰어나 보인다. 그래서 Easy negative이다. 

그럼 이제 진짜 Easy negative 사용법을 알아보자.

먼저 civitAI 혹은 hugging face에서 easy negative 임베딩 벡터 파일을 받는다.
unaestheticXL | Negative TI - _hk1 | Stable Diffusion Embedding | Civitai를 이용해도 되고 다른 것을 받아도 무방하다. 다만 자신이 사용하는 모델이 SD1.5인지 SDXL확인하고 버전에 맞추어 받아야된다. 필자는 SDXL을 이용한다.

다운로드 버튼을 눌러서 다운받자. 32.52KB라는 매우 착한 사이즈가 임베딩의 장점

safetensors 파일을 다운받았으면 stable-diffusion이 있는 폴더에서 embeddings라는 폴더를 찾아 안에 넣어주면된다. (잘모르겠다면 webui-user.bat가 있는 폴더부터 찾자)



그러면 이제 준비 완료.
WebUI에서 textual inversion에 들어가면 다운받은 easy negative 임베딩 벡터가 보일 것이다. 
혹시나 보이질 않는다면 우측에 있는 refresh 한번 눌러주자
참고로 필자는 civitAI 익스텐션을 설치해서 자동으로 이미지커버까지 설정된다.

여기서 원하는 임베딩 벡터를 선택하면 프롬프트 창에 입력된다. 보통 positive 프롬프트 창에 입력되므로 네거티브로 옮겨주어야한다. 실수라도 postivie 프롬프트에 넣어버리면 대형 참사다...
네거티브가 단 한 단어로 완성

여기서 generate를 누르면?



짠 하고 수퍼 울트라 킹갓제네럴 하이퍼 고퀄리티 이미지가 완성된다.
사실 다운로드나 사용법은 LoRA를 사용해 보았다면 쉽게 따라 할 수 있다. 😃

이제 쉽게 네거티브 프롬프트로 입맛에 맞는 AI그림을 생성해보자.

궁금한 점이나 질문을 댓글로 달아주면 글 쓸거리가 생기니 많은 댓글 부탁드립니다.



3줄 요약
positive에 퀄리티 태그 넣는거보다 negative에 누가 잘 써놓은거 베껴다 쓰면 그림이 잘나온다. Easy negative 임베딩 받아서 쓰면 더 좋다. 

PS. positive 프롬프트는 글 쓰기 전에 이것저것 하다가 정했다 
▽ 이것저것







댓글

이 블로그의 인기 게시물

Merged model ReMaster+ recipes(리마스터+ 레시피)

잡글) civitAI 랭킹 근황

야 너도 ComfyUI 쓸 수 있어. 스테이블 디퓨전 고수들만 쓰는 ComfyUI 기본 세팅하기 1