윈디하나의 누리사랑방. 이런 저런 얘기

글쓴시간
분류 기술,IT/스테이블 디퓨전

Stable Diffusion - ControlNet

컨트롤넷. 특정한 구도로 Stable Diffusion 이미지 생성시 그려주는 SD 의 확장이다. 구도는 유사한 이미지를 사용해 입력해주거나, 새롭게 그려줄 수 있다. 그냥 윈도에 있는 그림판으로도 그려줄 수 있다. 그정도만 그려줘도 충분하다.

사용자 삽입 이미지

ControlNet 의 원리. 뭔소리인지는 나도 모르지만 뭔가 마지막 직전에 + 해주는 것 같다



- Stable Diffusion web UI 에서는 익스텐션 탭에 가면 쉽게 설치할 수 있다.

사용자 삽입 이미지
확장을 설치했으면, https://huggingface.co/lllyasviel/ControlNet/tree/main/models 에서 원하는 모델을 받은 후, (필자는 control_sd15_openpose.pth 을 받았다) \stable-diffusion-webui\extensions\sd-webui-controlnet\models 에 넣어준다.

설치후 UI 를 재로드 하면 (Apply and restart UI 를 클릭하면) txt2img 탭의 아래에 Control Net 패널이 보인다.


- 이미지를 생성하는 설정은 설치 전과 동일하게 한 후, 이미지넷에 구도에 참고할만한 이미지를 넣어준후 설정해준다. Model 에서 openpose 를 선택하고 바로 아래 Enable, Low VRAM 을 클릭한 후, 이후 Generate 를 누르면 이미지넷에 넣어준 이미지와 유사한 구도의 이미지가 생성된다.

사용자 삽입 이미지


- 이미지 생성시 메모리를 더 사용한다. 7.9 GB -> 8.9 GB 로 말이다. ControlNet 에서 사용하는 모델(.pth 파일)이 5.7 GB 정도 되는데 뭔가 최적화 되서 들어가는 듯. 아래화면은 512x512 이미지를 이미지넷을 사용해서 생성 중인 상태다.

사용자 삽입 이미지

생성할때 아래와 같이 콘솔에 표시된다.

Loading model: control_sd15_openpose [fef5e48e]
Loaded state_dict from [경로\stable-diffusion-webui\extensions\sd-webui-controlnet\models\control_sd15_openpose.pth]
ControlNet model control_sd15_openpose [fef5e48e] loaded.

- 요즘 나오는 AI 이미지는 이를 사용해서 만든다고 생각한다. ControlNet 을 사용해 시드번호를 일치시키지 않고도 손가락이 제대로 나오는 포즈를 고정시킬 수 있기 때문이다. SD 로 그리기 너무 어려웠는데 그나마 이걸 사용하면 손가락을 숨기기 쉬워진다.

- 신체 부위에서 손가락이 그리기 어려운 편에 속하는데 워낙 관절이 작은데다 꺾이는 곳이 많고, 그만큼 다양한 각도에서 보면 처음보는 구도가 나오기 때문이다. 일러스트레이터들은 자기 손가락으로 형태를 취해보고 그대로 그리면 되는데 AI 는 그걸 못하기 때문. 그래서 AI가 그린 포즈가 일정해졌다. 그리고 ControlNet 을 사용해 어느정도 고정시킬 수 있게 되었다. 또한 로라 같은걸 사용해 새로운 포즈와 그에 따른 손가락을 새롭게 학습시키는게 어렵진 않으니 그나마 다행.

- OpenPose 를 사용하는 경우 OpenPose 에디터 확장도 같이 설치하자.

사용자 삽입 이미지