본문 바로가기

Stable defusion Automatic webui 가이드

손가락을 보다 잘 표현하고 싶을 때 Controlnet을 사용해보자.

728x90

오늘의 예시가 되어줄 배럭 데모닉이다.
이 사진을 바로 i2i로 작업하면 

denoising strength 0.2

이런식으로 나오거나(denoising strength를 낮춰 원본과 유사한 손가락 형태를 얻었지만 이미지의 터치감이 살아있지 않음.

denoising strength 0.3
denoising strength 0.4

이런식으로 터치감을 살리기 위해 strength를 높이게 되면 자세가 달라지거나 손이 높은 확률로 이상해진다.
이럴때를 대비해 프롬프트를 사용해 손의 타율을 높일 수 있으나 관련 프롬을 추가해도 큰 차이가 발생하지 않는다.
하지만 extension 중 controlnet을 사용한다면 손의 완성도를 보다 높일 수 있다.

위의 사진처럼 extensions-Available-Load from을 순서대로 클릭해 설치 가능한 모든 확장기능을 확인하면 controlnet을 확인할 수 있을것이다. sd-webui-controlnet이라 적혀있는 확장기능을 설치하고 webui를 재시작하자
 

컨트롤넷을 설치했다면 설정에 들어가 컨트롤넷을 선택한 후 사용 가능한 모델의 수를 늘려주자.보통 3~5개 정도만 늘려주면 충분하다. 그 후 Apply setting을 눌러주고 다시 시작하면

이런 메뉴가 추가될 것이다.
만약에 기존에 컨트롤넷을 설치해 사용하던 사람이라면 업데이트를 하거나 삭제 후 재설치하는편이 편하다.
이젠 컨트롤넷에서 사용할 모델을 다운로드 해야한다.
우선 https://civitai.com/models/9251/controlnet-pre-trained-models 에 접속해 openpose, canny, depth, 등 필요한 모델을 받아준다. openpose는 사진을 분석해 뼈대를 만들어내는 것, canny는 선을 인식하는것, depth는 그림의 깊이감을 명도의 차이를 통해 구분해 인식하는 것이라 생각하면 편하다.

ControlNet Pre-Trained Models | Stable Diffusion Controlnet | Civitai

STOP! THESE MODELS ARE NOT FOR PROMPTING/IMAGE GENERATION These are the models required for the ControlNet extension , converted to Safetensor and ...

civitai.com

만약 civitai가 안들어가진다면 https://huggingface.co/lllyasviel/ControlNet/tree/main/models이 사이트에서 다운로드 받을 수도 있다. 점3개 버튼을 누른 후 clone repository를 눌러 코드를 복사하고 명령프롬프트 창에서 cd명령어를 통해 extensions/controlnet/model 폴더로 경로를 설정해 clone repository에서 복사한 코드를 붙여넣으면 알아서 설치가 될 것이다.

lllyasviel/ControlNet at main

Detected Pickle imports (4) "torch.LongStorage", "collections.OrderedDict", "torch._utils._rebuild_tensor_v2", "torch.FloatStorage" What is a pickle import?

huggingface.co

그 후 https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/tree/mainhttps://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main해당 사이트에 들어가 모든 모델들을 받아준다. (전부 받을 필요가 없기도하고 용량이 더 작은 버전 도 있지만 그냥 용량 여유되고 귀찮다면 다 받자)
설치 방법은 동일하게 명령프롬프트 창에서 같은 경로로 받으면 된다.

comfyanonymous/ControlNet-v1-1_fp16_safetensors at main

huggingface.co

설치한 모델들은 별도의 하위 폴더 안에 들어가 있으니 꺼내주는걸 잊지 말자.

그럼 이제 사용해보자.

컨트롤넷을 클릭하면 위 사진처럼 나올텐데. 현재 뽑으려는 원본이미지가 있는것처럼 가운데에 사진을 드래그 앤 드롭으로 불러오고 enable을 눌러준다. 이후 사용할 모델에 따라 preprocessor와 model을 선택해주면 된다.
만약 이미 해당 모델에 맞는 그림을 가져왔다면(ex: openpose 사진) preprocessor를 선택하면 안되지만 해당 글에서 도움을 얻을 사람은 그럴일은 없다고 판단하니 반드시 설정해야한다고 생각하면 된다.
preprocessor가 openpose면 모델도 openpose, canny면 canny모델 이런식으로 둘을 맞춰줘야한다.
아래의 수치들은 잘 모르겠다면 굳이 안건드리는 것을 추천한다.
 
아래의 사진들은 preprocessor에 따른 결과물이니 참고해보고 필요한 방식을 찾아서 사용하는것을 추천한다.
1. openpose hand

이 경우 원본 사진의 자세가 손과 피부가 겹쳐 구분이 잘 되지 않아 openpose에서 제대로 인식을 하지 못한게 아닌가 싶다.
2.canny

canny 역시 들고있는 손을 제대로 인식하지 못했다. 다만 아래에 바닥에 대고있는 손을 보면 꽤나 정확하게 표현된 것을 확인할 수 있다.
3. depth

드디어 처음으로 오른손이 나왔다. depth의 경우 원근감을 명도차로 표현할 수 있어 가능했던게 아닌가 싶다.
다만, 오른손의 엄지손가락이 원본과는 많이 다르게 나왔다.
4.lineart

lineart의 경우 손의 위치에 제대로 손이 가있지만 엄지부분의 색상차가 피부와 거의 차이가 없어 제대로 인식하지 못하는 느낌이다.
 
그렇다면 canny나 lineart에서 손의 인식율을 높이려면 어떻게해야할까?
답은 손의 외곽선을 구분시켜주는 것이다. 마우스가 있어도 가능하며 타블렛이 있다면 더욱 좋다.
 

해당 사진처럼 그림판을 사용하거나 포토샵 등을 사용해서 외곽선 표현이 애매한곳을 구분이 가능한 색으로 선을 그어준다.
그 후 canny나 lineart로 controlnet을 따주고 이미지를 생성하면

이렇게 이미지가 나와준다. 물론 무슨차이인가 싶을수도 있고 위처럼 엄지가 제대로 표현되지 않는가 하는 문제가 생길수도 있지만 그냥 strength를 낮춰 돌리는 것보다 훨씬 다양한 결과를 얻을 수 있을 것이다.
 
다만, 주의해야할 것은 sd upscale 사용 시에는 controlnet에서 enable을 반드시 체크 해제 하고 사용해야한다. 안그러면 controlnet 이미지와 그림이 번갈아서 그려지는 기이한 사진이 나올 것이다.

728x90
300x250