본문 바로가기

IT/AI

SD Webui 확장 - ADetailer (유용)

Stable diffusion Webui (이하 SD) 를 이용해서 이미지를 만들다 보면 배경 대비 얼굴이 아주 엉망으로 나오는 경우가 많다.

얼굴에 특화해서 만든 모델이라고 해도 저사양의 환경에서 돌리다 보면 쉽게 말해 박살 난 얼굴이 많이 나온다.

 

낮은 해상도에서 전신샷(Fullbody shot)같은 이미지를 뽑다 보면 허다하게 만나볼 수 있는 장면이다.

 

인기 있는 탐지 확장 프로그램 중 하나는 ddetailer이지만 한동안 업데이트되지 않았기 때문에 사용자가 직접 수정하여 배포했습니다. 일부 수정된 버전(noaheg4 배포버전)은 업그레이드로 인해 mmdet 및 mmcv 라이브러리에 문제가 발생할 수 있습니다.

 

그래서 또 한분이 mmdet, mmcv 버전업에 대한 수정된 버전도 내놓으셨는데

 

Bing-su님의 mmcv 2.x 지원버전이라서 좀 사용하다가,

그다음로 sd-webui-ddsd인데 거의 디텍션 백과사전이라 할정도로 많은 기능이 포함된 확장프로그램을 사용하고 있었습니다.

이 확장도 매우 좋고 자주 쓰이기 때문에 별로도 글을 한번 작성하겠습니다.

 

이 확장이 거의 모든점이 다 좋은데, face detection (얼굴 감지)가 잘 안 됩니다.

모델의 문제인지, 필자는 거의 m1에서 가지고 놀다 보니,

cuda버전보다 더 얼굴감지가 안 되는 점이 있어서,

안타까워하는 도중에 Bing-su 님이 얼굴 감지(face detection)를 yolov8 모델을 이용해서 ADetailer라는 확장 프로그램을 만들어 주셨네요.

 

 

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite - GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

github.com

 

오늘은 이 확장프로그램의 소개 겸 한번 테스트 해보는 글을 작성합니다.

 

사족) 사실 필자는 yolov5를 잠시 접한 적이 있다. 운전면허증 감지 하는 걸 만들 때 잠시 접해봤었다.

어느새 버전이 8이 되었네요^^

잡설은 여기까지 하고

 

우리 사이트의 특징 초보자의 눈높이에 맞춰서 "따라 하기" 시작해 보겠습니다.

설치

이장면은 이제 눈감고 하셔야죠.

저는 일단 설치되어 있어서 AssertionError가 나오지만, installed............... 이런 메지시가 나오면

Webui 를 reload 해주십니다. 이전글에서 자주 다뤄서 패스.

adetailer setting

모델만 face_yolo8n.pt로 바꾸고 기본값으로 한번 뽑아보죠.

생성중 adetailer 설정을 이미지 하단에 있다.

설정에서.

설정 -> adetailer -> 마스크 미리 보기를 저장"Save mask previews" 을 눌러주면 

저장폴더에 detection 위치가 사각형 박스에 점수와 같이 저장된다.

 

느립니다. 느려 ㅎㅎ

6분 52초나 걸렸네요. DPM++ 2S a Karras가 DPM++ 2M a Karras, DPM++ SDE Karras보다 느립니다. 

 

확실히 원본 얼굴보다 나아진 걸 확인하실 수 있습니다. 

마지막으로 잘 모르지만 간단히 옵션 값에 대해서 말씀드리고 마무리할게요^&^

1. ADetailer을 모델을 선택하는 부분.

2. 감지된 얼굴 부분에 부여할 긍정 프롬프트

3. 감지된 얼굴 부분에 부여할 부정 프롬프트

이후부터는 정확하지 않을 정보일 수 있습니다. 그런가 보다. 정도로만 이해하고 넘어가주세요^^

4. 일단 저 모델(yolo8n)로 부터 감지된 오브젝트는 Confidence score(간단히 이야기하면 이 오브젝트가 얼굴일 확률 90%(0.9)

     이런 거죠. 30%로 놓았으니 0.3 이상만 뽑겠다. 이 말이겠죠.

5. 이것도 간단히 디텍팅 된 오브젝트에서 dilation확장(+)을 하겠느냐 erosion침범(-)을 하겠느냐

    주어진 세팅을 플러스 32픽셀만큼 확장하겠다는 거겠죠.

6,7. 사각형으로 주어질 감지영역의 x축과 y축 변위값 설정 

8. 마스크 영역의 바깥 부분을 수정하지 않을 픽셀값

9. 디노이징 강도(보통 0.3 기준으로 낮으면 원본과의 변화가 덜하고 높으면 높을수록 많은 변화가 있다고 보시면 됩니다)

 

이렇게 수박 겉핥기식으로 확장 프로그램 소개해드렸습니다.

우리 같은 초보자는 그런가 보다 하고 해 보는 게 중요하잖아요^^

오늘도 긴 글 읽어주셔서 감사드리고 다음에 또 만나요

 

오늘의 룩북