본문 바로가기

IT/AI

SD Webui 확장 - DDSD (유용함)

저번 포스트에 소개한다고 했던 확장프로그램을 이번 시간에 간단히 찍먹 해보는 시간을 가지도록 하겠습니다.

이 확장도 출발은 DDetailer[각주:1]였을껍니다.

 

Automatic1111 님의 Stable diffusion Webui 가 1.1.1로 업데이트되었다고 하니 오늘은 이 버전을 가지고

진행해 보도록 할게요.

webui 새버전 기동 화면

에러가 좀 나오는 것 같습니다.

 

webui-user.sh을 열어서 

파이썬 가상환경 디렉터리를 임의로 수정하고 변수선언합니다. (윈도우라면 webui-user.bat 파일이겠죠)

# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
venv_dir="venv_nightly"

 

다시 실행해 봅니다.

 

DDSD 확장에서 에러를 내뿜고 있네요. 

대략 읽어보면 grounding 모듈이 없다.

pillow_lut가 없다. 이런 에러네요..

 

cmd+c (control+c)를 실행된 명령을 중지하시고 위의 두 에러를 잡아보시죠.

 

./venv_nightly/bin/python3.10 -m pip install --upgrade pip

./venv_nightly/bin/python3.10 -m pip install git+https://github.com/IDEA-Research/GroundingDINO

./venv_nightly/bin/python3.10 -m pip install pillow_lut

앞에./venv_ngihtly는 webui-user.sh에 파이썬 가상환경을 이 이름의 폴더로 하겠다고 선언해서 그런 거 구

기본적으로는./venv에서 만들어집니다.

 

다시 실행했는데 ddsd 오류 문제는 사라졌는데.

 

supermerger 에서 에러를 뿌리네요.

 

git 파일들이 꼬여서 생기는 현상 같은데 일단 폴더를 지우고 다시 설치해 보죠

다시 설치해 줬습니다. 이제 에러 없이 뜨네요.

 

오늘은 설치할 부분을 위의 오류 잡는 걸로 해결했기 때문에 딱히 설명할 필요가 없지만,

기본적인 설명만 할게요.

설치

설치는 딱 두 개 확장 프로그램의 github 주소를 알고

주소 붙여 넣고 "install"버튼 누르고, 그 옆에 installed 탭에서 Apply and restart UI

이래도 안되면 Webui 다시 시작 한번 해주기

인터페이스

딱 봐도 많은 기능이 보인다. (우리는 간단히 알아본다)

1. 3번부터 8번까지의 설정값을 저장한다.

2. 저장된 파일명을 불러온다.

3. 실행가능하게 할 확장을 명시한다.

4. 아웃페인팅 옵션

text2image를 뽑아낸 해상도 외곽으로 더 확장해서 페인팅하겠다는 말임

5. 업스케일러

기본으로 뽑아낸 이미지의 해상도를 더 높은 해상도로 화질 손상 최소화 해서 변환한다

6. DINO Dectect

위의 설치에서 오류를 보여줬던 GroundDINO 디텍션 기술을 이용해서 그림에서 해당 오브젝터(얼굴, 사람, 손, etc)를 감지해서

감지된 오브젝트를 다시 그려주는 부분, 이 확장의 핵심 부분이다.

근데 DINO 모델이 얼굴을 잘 감지 못하는 문제가 발생해서, 

이 부분을 adetailer의 yolov8 모델로 감지하는 부분도 추가되어 있다. 

필자 역시 얼굴 부분이 감지가 잘 안 되어서 이걸 사용한다.

7. Postprocessing (후처리)

이 부분도 꽤 유용하다

 

8. Watermark (워터마크)

만들어진 이미지에 워터마크를 삽입하는 옵션

Settings -> DDSD에서 저장 관련이나 각 기능의 동시 적용개수등을 설정할 수 있다.

그럼 기본 프롬프트를 주고 한번 기능들에 대해서 알아보는 시간을 가지도록 하겠습니다.

 

RAW, (best quality:1.4), (masterpiece:1.3), (photorealistic:1.4), 1girl,

 

paintings, sketches, drawing, (worst quality, normal quality, low quality:1.5), (head out of frame), strabismus, lowres, monochrome, grayscale, bad proportions, watermark, signature, text, bad-artist,  EasyNegative, nsfw, (multiple views:1.6), split screen

 

DDSD의 다른 기능은 다 disable에 체크해 두고,

DINO Detect만 일단 테스트해봅니다. 이게 가장 주된 기능이라

개발을 할 것도 아니고 해서 세세한 부분은 알 필요가 없기 때문에, 한 줄로 요약 설명하자면

Detection Detailer(이하 DD)의 샘플링의 위에 명시한 Sampling method (예. DDIM)를 이용하고 SAM모델은 저걸로 DINO모델은

이걸로 하겠다.

이 세 개 박스 친부분이 가장핵심 부분인데,

위의 예를 한 줄로 풀어보면, 검출된 오브젝트를 여기서는 face(얼굴)을 감지하면 이걸 다시 그릴 때 체크포인트를 바꿔줄수 있는데

Original로 두면 지금 설정된 체크포인트 그대로 해서 다시 그릴때 긍정 프롬프트에 (perfect anatomy)를 부여하겠다 이 말입니다

 

그럼 한번 뽑아보겠습니다.

중간이 흐린부분이 face를 감지한 영역을 마스크한 부분이다.

기본적으로 요새 모델들은 얼굴 부분이 일정픽셀이상 나온다면 잘 그려주게 학습이 잘 되어 있다. 그래서 차이가 없어 보일지 모르나

Full body샷이 된다면 기본이미지는 얼굴이 상당히 그리다 만 모양을 보이게 되는데 이를 보정해 줄 수 있다.

차차 알아보도록 하자.

 

생성된 파일 정보를 붙여와 놓고

 

RAW, (best quality:1.4), (masterpiece:1.3), (photorealistic:1.4), 1girl,
Negative prompt: paintings, sketches, drawing, (worst quality, normal quality, low quality:1.5), (head out of frame), strabismus, lowres, monochrome, grayscale, bad proportions, watermark, signature, text, bad-artist, EasyNegative, nsfw, (multiple views:1.6), split screen
Steps: 32, Sampler: DDIM, CFG scale: 11, Seed: 1879285487, Size: 512x768, Model hash: 57d1bf2af0, Model: yommi_NHB3X4M4_v1_, Clip skip: 2, ENSD: 31337, Token merging ratio hr: 0.5, Negative guidance minimum sigma: 3, DINO 1: face, DINO 1 Positive: perfect anatomy, DINO 1 Negative: Original, DINO 1 Denoising: 0.4, DINO 1 CFG Scale: 11, DINO 1 Steps: 32, DINO 1 Spliter: False, DINO 1 SplitRemove Area: 16, DINO 1 Ckpt Model: yommi_NHB3X4M4_v1_.safetensors [57d1bf2af0], DINO 1 Vae Model: vae-ft-mse-840000-ema-pruned.safetensors, DINO 1 Clip Skip: Original

 

여기서 Seed: 1879285487 고정해 두고 다른 옵션을 주고 뽑아보자.

 

face:level(0-2):threshold(0-1):dilation(0-128) 이 옵션을 이용해서

face:2:0.35:64를 줘봤다 차이점을 보도록 하자

얼굴이 검출이 안된다 ㅎㅎㅎㅎ

최신 ddsd 확장을 정상적으로 설치했다면,

webui설치폴더 ->models -> yolo

요기에 yolov8 모델들이 있는데 여기서 뭐든 중간이 낫다는 옛 어르신의 말씀을 들어서  face_yolov8s를 사용하겠습니다.

 

그럼 또 뽑아보겠습니다.

 

이제 ddsd의 진가를 알아보기 위해 풀바디샷을 한번 그려보자

RAW, (best quality:1.4), (masterpiece:1.3), (photorealistic:1.4), 1girl, (full body:1.6)

원본 얼굴이 엉망인걸 볼수 있다. 

저사양에서 원본 이미지의 해상도를 올리지 못하면 저런 망가진 얼굴을 자주 볼 수 있을 것이다.

이를 보정해 주는 확장프로그램의 진가를 보여주는 부분이다. 하지만, 얼굴만 너무 튀는 게 문제이고 예시가 워낙 간단하니 저런 걸 자연스럽게 만들어주는 게 개개인의 능력이 아닐까 싶다.

 

그럼 다음 기능으로 Upscaler를 알아보자

기본값에 세 가지만 바꿔서 적용해 봅니다. 

Resize에 2로 되어 있으니 2배 뻥튀기하겠다는 말입니다.

Upscaler는 개인의 취향이 더 강하니 여러 가지 해보고 자신에 입맛에 맞는 걸 고르시면 될 겁니다.

 

 

Upsacler before running detailer 옵션은 영어 그대로 업스케일러부터 하고 detailer를 적용하겠다는 말입니다.

 

이번에는 Postprocessing에 대해서 알아보자

 

RAW, (best quality:1.4), (masterpiece:1.3), (photorealistic:1.4), 1girl, (full body:1.6), clip studio paint \(medium\), 

 

Seed: 858127870

 

차이를 보이기 위해 과한 값을 줌
hue_image() missing 1 required positional argument: 'strength' 나네요. 나중에 체크

지금부터 소개할 두 개의 후처리가 주로 쓰일 것 같아요.

중간 (warm), 오른쪽(cool)

마지막입니다.

lut 파일은 "Look-Up Table"의 약어로, 그래픽 소프트웨어에서 색상 변환을 수행하는 데 사용되는 파일 형식입니다. LUT 파일은 RGB, CMYK 또는 기타 색상 모델에 대한 색상 매핑을 저장합니다.

 

models -> lut 폴더에 lut 파일을 넣어주시면 적용시킬 수 있습니다.

여기서는 하나만 해볼게요.

마지막 워터마크 부분은 생략할게요. 다음에 수정할 일 있으면 하겠습니다.

이미지에 원하는 곳에 텍스트나 이미지를 워터마크 처리 할 수 있는 기능입니다. 

 

2023년 05월 09일 추가.......................................................................................................

adetailer가 그사이에 업데이트를 한것 같아서 기록차원으로 수정된 기능을 한번 알아볼께요.

새로 추가된 기능을 설정하고 결과물을 보는 중결과물이 23%로 만들어지고 있다.
새로 추가된 기능을 설정하고 결과물을 보는 중

크게 감지할수 있는 부분을 여러개 둘수 있고, hand model이 추가된것 같다. (ai 그림의 최대 맹점은 자연스러운 손을 만드는것일테니깐)

일단 컨트롤넷 모델을 위의 설정으로 하고 한번 뽑아봤다.

새로운 기능 controlnet을 동작하고 있는 콘솔 화면

필자의 M1 16기가에선 controlnet(컨트롤넷) 돌리기가 상당히 힘에 부친다. 헐 가만보니 pycharm 이 떠 있었네요.

바로 닫고, 다시 지켜봅니다. 그나마 시간이 줄어들어서 거의 끝나갑니다. 

테스트 환경이 최적화 안되어서 정확한 시간을 측정하는건 무의미하고, 시드 고정해서 컨트롤넷 적용한거랑 안한거랑 차이점만 

살짝 볼께요.

 

Controlnet Inpaint Model 적용:

시간이 오래 걸릴껏 같아 hires.fix를 안 줬더니만 뭔가좀 허전합니다. 그럼

이제 적용 안하고,

RAW, (intricate details:1.4), extremely delicate and beautiful, (best quality:1.4), (masterpiece:1.3), detailed skin texture, vibrant shiny skin, (photorealistic:1.4), 1girl, (full body:1.4), , White_sleeveless_blouse, light_wash_denim_shorts, white_ankle_socks, white_canvas_sneakers, white_bucket_hat, red_crossbody_bag,,
Negative prompt: paintings, sketches, drawing, (worst quality, normal quality, low quality:1.5), (head out of frame), strabismus, lowres, monochrome, grayscale, bad proportions, watermark, signature, text, bad-artist, EasyNegative, nsfw, (multiple views:1.6),

 

SEED: 1928022185

 

 

똑같은걸 이번에 hires.fix를 적용해서 둘다 해보겠습니다. 그전에 webui를 다시 시작해야겠어요. (업데이트 체크)

그사이에 업데이트가 있네요^&^

이제 webui가 제속도로 동작하네요. 이전 테스트에서는 상태가 안좋았어요.

실수로 Sampling method를 DPM++ 2M Karras로 했네요, 위에는 v2로 했는데, 오래 걸려서 일단 그대로 진행합니다.

 

다시 컨트롤넷 인페인트 모델을 이용해서 생성중입니다.
확실히 hires.fix를 낮은배수라도 먹여야 퀄이 삽니다.

확실히 hires.fix를 낮은배수라도 먹여야 퀄이 삽니다.

 

오늘도 긴 글 읽어 주셔서 감사합니다. 

다음에 또 만나요^^

  1. An object detection and auto-mask extension for Stable Diffusion web UI. https://github.com/dustysys/ddetailer  [본문으로]