본문 바로가기

AI

컨트롤넷 (ControlNet) 사용법 포즈부터 간단한 이미지 생성 / Stable Diffusion

컨트롤넷 (ControlNet) 사용법 포즈부터 간단한 이미지 생성 / Stable Diffusion

컨트롤넷 사용법

Stable Diffusion + 컨트롤넷(ControlNet)은 AI 이미지 및 비디오 생성을 위한 신경망 아키텍처입니다. Stable Diffusion은 텍스트 프롬프트 또는 입력 이미지를 기반으로 고품질 이미지 생성을 허용하지만 생성된 출력에 대한 전반적인 제어가 부족합니다. 반면에 컨트롤넷(ControlNet)은 출력을 더 잘 조작하기 위해 확산 모델에 추가 조건을 추가하여 Stable Diffusion 이미지 구성에 대한 추가 제어 수준을 도입합니다. Stable Diffusion의 각 블록의 가중치를 훈련 가능한 변환과 잠긴 변환으로 복제하여 SD 인코더를 다양한 제어 학습을 위한 강력한 백본으로 재사용합니다. 컨트롤넷(ControlNet)은 AI 이미지 생성을 위한 게임 체인저로 여겨지고 있습니다. Stable Diffusion 기능을 더욱 강화한것입니다.

위 내용을 요약해 보자면, 컨트롤넷은 이미지 제어를 좀 더 손쉽게 하기 위해 만들어졌다는 이야기 입니다.

포즈의 바탕이 되는 이미지를 준비해서 Stable Diffusion으로 그림을 그리는 컨트롤넷 (ControlNet) 사용법을 소개합니다. 의외로 간단합니다.

또한, 포즈 사진 관련한 무료 사이트들도 링크를 걸어뒀으니 참고해서 사용해 보시기 바랍니다.

Stable Diffusion Web UI(AUTOMATIC1111판) 설치

먼저 Stable Diffusion Web UI를 준비합니다. 설치가 안되신 분들은 아래 글에서 참고하여 설치를 진행할 수 있습니다.

2023.03.12 - [AI] - Stable Diffusion Web UI(SD) 초 간단 윈도우 설치방법 속도 높이는법 소개.

 

Stable Diffusion Web UI(SD) 초 간단 윈도우 설치방법 속도 높이는법 소개.

Stable Diffusion Web UI(SD) 초 간단 윈도우 설치방법 속도 높이는법 소개. 윈도우상에서 로컬로 설치하는 Stable Diffusion Web UI(이하 SD) 이미지 AI의 초 간단 인스톨 방법을 소개합니다. 이 글을 읽으시는

loodyrunning.tistory.com

이미 설치하신 분들은 다음을 진행합니다.

sd-webui-controlnet 추가

Stable Diffusion Web UI 를 실행하고 ① Extensions 탭 > ② Install from URL 을 선택합니다.

③URL for extension's repository 항목에 아래 URL을 입력합니다.

https://github.com/Mikubill/sd-webui-controlnet

Install 버튼을 누릅니다.

설치가 완료되면 Install 버튼 아래에 "Installed into ~~sd-webui-controlnet. Use Installed tab to restart."라고 표시됩니다.

Installed 탭으로 이동하여 Extension 란에 "sd-webui-control net"이 표시되고 체크가 되어 있는지 확인합니다.

여기서 일단 Stable Diffusion Web UI는 종료시킵니다.

opencv-python, prettytable 설치

그런 다음 opencv-python과 prettytable이라고 하는 Python 라이브러리를 설치합니다.인스톨에는 Windows Power Shell(터미널)을 이용합니다.

Windows PowerShell을 실행합니다.

윈도우 버튼을 누르고 '찾기'에서 'powershell'을 입력하면 앱이 찾아지므로 실행을 하면 됩니다.

그리고 stable diffuison이 설치된 폴더로 이동합니다.

폴더로 이동하는 방법은

ex) c:\stable-diffusion-webui 가 폴더면 

cd stable-diffusion-webui을 창에 입력하면 

c:\stable-diffusion-webui> 이렇게 폴더로 이동이 될것입니다.

그리고 이하를 하나씩, 카피해 Windows PowerShell에 붙여넣고는 Enter로 실행해 갑니다. 붙여넣기는 Ctrl+V 또는 우클릭으로 할 수 있습니다.

가상 환경 세트

먼저 stable-diffusion-webui 가상 환경에 대해 설치하도록 경로를 지정하는 배치 파일을 실행합니다. 이 배치 파일은 Stable Diffusion Web UI에 처음부터 포함되어 있는 것입니다.

venv\Scripts\Activate.bat


상기 내용을 복사하여 Windows PowerShell에 붙여 Enter를 누릅니다.

올바르게 실행된 후에는 이렇게 됩니다.

opencv-python 설치

pip install opencv-python


상기 내용을 복사하여 Windows PowerShell에 붙여 Enter를 누릅니다.

Successfully installed로 opencv-python이 추가되어 있으면 OK입니다.

prettytable 설치

pip install prettytable
상기 내용을 복사하여 Windows PowerShell에 붙여 Enter를 누릅니다.

Successfully installed 로 prettytable이 추가되어 있으면 설치가 된것입니다.

이미 설치되어 있는 경우

opencv-python이나 prettable 설치 시 이미 설치되어 있는 경우 다시 설치하려고 하면 Requirement already satisfied~라고 뜹니다. 이 경우는 인스톨 완료라고 판단해도 좋습니다.

여기까지 끝나면 Windows PowerShell은 닫습니다.

훈련된 Controlnet 모델 설치

Controlnet에서는 몇 가지 자세를 취하는 방법이 있는 것 같습니다.이번에는 Hugging Face에서 control_sd15_openpose.pth 파일(약 5.3GB)을 다운받아 사용해 보겠습니다.

저장 장소는 "stable-diffusion-webui\extensions\sd-webui-control net\models" 입니다.

Hugging Face 다운로드 바로가기

여기까지 준비는 완료되었습니다.

Stable Diffusion Web UI에서 포즈를 취하는 방법

Table Diffusion Web UI 를 webui.bat 혹은 webui-user.bat 등에서 실행합니다.

txt2img탭 하단에 "ControlNet"이라는 스포일러가 있어서 클릭해서 엽니다.

ControlNet의 각 항목을 아래 이미지를 참고로 설정합니다.

  • Enable:체크
  • Preprosessor:openpose
  • Model:control_sd15_openpose
  • Image : 원래 포즈의 이미지를 스스로 준비하여 읽게 하다

원래 포즈 화상의 준비와 설정

원래가 되는 포즈 화상을 준비합니다.포즈를 올바르게 인식시키려면 인물만 예쁘게 나온 이미지가 바람직합니다.

예를 들면 화상 소재 사이트라면 「photoAC」등에서 포즈 화상을 DL 해 사용해 볼 수 있습니다.

무료 포즈 이미지 사이트들

원본 포즈를 작성할 경우 직접 사진을 찍거나 무료로 이용할 수 있는 Design Doll 등을 사용해 보는 것이 좋습니다.

DesignDoll에서 내가 원하는 대로 포징을 시키면 메뉴 부분 등을 선택하여 컨트롤 화살표 등이 나타나지 않도록 합니다.

그리고 Win+Shift+S에서 '사각형 영역 잘라내기' 모드를 사용하여 마네킹 부분만 둘러싸 클립보드에 복사합니다.

Stable Diffusion Web UI로 돌아가서 Ctrl+V를 눌러 ControlNet에 붙입니다.

나중에는 뭔가 적당히 프롬프트를 짜서 출력(Generate)합니다.

출력 결과

자세 재현도는 완벽하지 않지만 대략적인 포즈나 구도는 맞습니다. 지금까지는 힘들게 포즈 지정을 '주문'으로 하고 있었습니다만, 그것을 줄일 수 있다는 것은 대단하네요.

또한 생성했을 때 포즈를 어떻게 인식했는지도 막대인간에 의해 출력됩니다. 이걸로 생각했던 것처럼 인식되지 않는 경우에는 원래 이미지를 바꾸는 것이 좋습니다.

다이렉트로 막대인간을 낼 수 있는 확장 'Open Pose Editor'도 등장

OpenPose Editor를 Web UI에 추가하는 것으로, 다이렉트로 포즈 편집을 할 수 있게 됩니다.

OpenPose Editor 다운로드

인스톨

OpenPose Editor에서 자세를 수정해 보기

확장 기능이 올바르게 설치되면 Stable Diffusion Web UI에 "OpenPose Editor" 탭이 추가됩니다.

이번에는 'Detect from Image' 버튼에서 이미 출력한 이미지를 읽어들여 그것을 수정하는 형태로 사용해 보겠습니다.

이번 원본 이미지는 이렇습니다.

OpenPose Editor에서 width와 height를 원래의 화상의 사이즈에 맞춘 후, 「Detect from Image」버튼으로 화상을 불러옵니다.

이번 이미지에서는 다리가 중간에 다 봐서 다리 부분이 뒤죽박죽이지만 팔이나 머리 등의 정보는 잘 분석해서 반영되어 있습니다.다리가 다 보이면 일단 밑으로 쭉 뻗으면 될 것 같습니다.

그리고 이번에는 '오른쪽 팔꿈치'를 구부려 왼손 방향으로 구부려볼게요. 노란 선 부분입니다.

"Send to ControlNet" 버튼을 누르면 txt2img 탭의 ControlNet에 편집된 포즈의 막대 인간 이미지가 붙여집니다.

txt2img 탭 준비

프롬프트, 네거티브 프롬프트, 샘플링 관계 등은 원래 출력 이미지와 같은 것을 세팅했습니다.

Seed 값도 출력 이미지와 같은 것을 세팅해 보았습니다.

"컨트롤넷 ControlNet" 스포일러에서는 이미지에서 가져올 때와 같이 "Enabled"에 체크를 하는데, "Preprocessor"는 none으로 해야 합니다.

Model에는 control_sd15_openpose를 지정하였습니다.

Canvas Width, Canvas Height는 원래 이미지와 동일하게 합니다.

이걸로 생성해보면,

지시대로 오른쪽 팔꿈치를 구부린 이미지가 출력되었습니다.

선의 색깔과 얼굴이나 몸의 방향

  • 코끝 : 몸통에서 뻗는 푸른 점
  • 오른쪽 눈 : 코끝에서 더 뻗는 청자점
  • 왼쪽 눈 : 핑크
  • 더욱이 그 앞은 각각의 귀

라는 느낌인 것 같습니다. 이를 통해 2차원적인 정보로도 3차원적인 방향을 지시할 수 있는 구조입니다. 좌우를 교체하면 뒤가 되는 것입니다.

하지만 얼굴이 그려져 있지 않은 그림이라는 것은 상당히 희귀하기 때문에 쉽게 '저쪽을 향해!'라고 할 수 없을지도 모릅니다.

동체

이것은 정면입니다. 그래서 왼쪽과 오른쪽을 바꾸면 뒤쪽이 됩니다.

자, 그럼 이걸로 이미지를 만들면 뒷면 이미지가 될것입니다.

{{face away}}, {{Back View}} 등을 지정하여 '완전 후면을 향한 이미지'를 출력할 수밖에 없을 것 같습니다.

그래서 그 상태를 바탕으로 얼굴을 약간 좌우로 향하게 할 정도면 할 수 있을 것입니다.

후면의 이미지를 분석하여 파란색 점(코)을 왼쪽 꼭짓점으로 하여 이러한 형태로 만듭니다.

그러면 이렇게 왼쪽으로 가는 거죠. 이상 Stable Diffusion의 컨트롤네 (ControlNet) 사용법이었습니다.

 

교차형 무한