스테이블 디퓨전에는 checkpoint 항목에 들어가는 주모델 이외에도 lora, vae 등 보조모델이 존재한다. 여기에 2023년에 ControlNet이라는 확장 모델을 추가했다. 여기에서는 ControlNet 확장 모델을 Stable Diffusion web UI에서 extension을 활용해서 간편하게 사용하는 방법을 살펴본다.
Stable Diffusion과 ControlNet
우선 스테이블 디퓨전과 컨트롤넷은 별개의 기술이다. 즉, 개발자가 다른 엄연한 독립된 기술이라는 점이다. 우선 스테이블 디퓨전은 2022년 8월에 독일의 뮌헨 대학교의 연구실에서 개발한 텍스트를 이미지로 변환하는 기술이다. 이때 딥러닝 인공지능 모델을 사용하므로 인공지능 이미지 생성 기술로 불린다. 이전에 인공지능으로 이미지를 생성하는 사례는 OpenAI에서 GPT 기반의 DALL-E가 존재했다. 하지만 DALL-E와 달리 Stable Diffusion은 누구나 활용할 수 있는 오픈 소스로 공개했다. 이에 따라 오픈소스로 배포한 스테이블 디퓨전 소스를 토대로 다양한 후속 개발들이 뒤따르고 있다. 바로 이러한 후속 개발들 중 하나가 ControlNet 기술이다.
ControlNet은 미국의 스탠퍼드 대학교에서 개발한 기술로 기존 Stable Diffusion 소스를 토대로 했기에 스테이블 디퓨전에 추가할 수 있는 또 다른 모델이다. 기존 주모델과의 구별을 위해 확장모델이라고도 불리는 컨트롤넷은 명칭 그대로 주모델로 생성한 이미지를 조금 더 정교하게 확장하는 역할을 담당한다. 주모델이 여러 가지가 존재해 이 중에서 선택해서 사용하는 것처럼, 확장모델인 ControlNet에도 다양한 모델(기능)이 담겨 있으므로 이 중에서 선택해서 사용하는 방식이다. 최근에는 주모델은 단 1개만 사용해야 하는데 반해, 컨트롤넷에 담긴 모델(기능)을 2개 이상 함께 활용할 수 있도록 업그레이드됐다.
위의 이미지는 ContolNet 기술을 개발한 스탠포드대학교 소속의 저자들이 공개한 Adding Conditional Control to Text-to-Image Diffusion Models라는 논문 중 일부이다. 아래에 첨부한 해당 논문은 영문으로 작성되어 있는 컨트롤넷 기술 설명으로 상당량의 이미지가 포함되어 있으므로, 컨트롤넷을 활용하여 기존 스테이블 디퓨전으로 생성한 이미지가 어떻게 변경하는지를 확인할 수 있다.
이외에도 컨트롤넷 개발자가 직접 운영하는 깃허브 페이지에 이를 요약한 내용과 해당 기술을 오픈소스로 배포하고 있으므로, 관련한 개발자라면 오픈 소스로 공개한 스테이블 디퓨전과 마찬가지로 임의대로 활용할 수 있다.
이러한 컨트롤넷에 담긴 모델(기능)은 여럿이므로 각 모델(기능)을 살펴보고, 기존에 컨트롤넷을 따로 설치했던 방식이 아니라 Stable Diffusion web UI의 Extension 기능을 활용해서 컨트롤넷을 설치하고 사용하는 방법을 마지막에 소개한다. 따라서 그 이전에 Stable Diffusion web UI 설치와 주모델 적용 방법 그리고 기본적인 Stable Diffusion web UI 가이드를 알아야만, 이어지는 ControlNet 기술을 사용할 수 있다.
위에 링크한 콘텐츠는 컨트롤넷의 등장에 따라 Stable Diffusion web UI 설치 시에 용량이 과도하게 증가한 부분을 고려하여, 필요한 요소만 설치하는 최신 버전이다. 아래에 링크한 콘텐츠는 Stable Diffusion web UI에서 가장 중요한 주모델을 설치 또는 교체하는 방법으로, Stable Diffusion web UI에 많은 주모델을 설치하더라도 사용할 때에는 단 1개의 주모델만 사용할 수 있다.
더불어 Stable Diffusion web UI 구조를 중심으로 용어 설명과 함께 사용하는 방법을 간단히 요약한 Stable Diffusion web UI 가이드까지 본 후에, 확장모델에 해당하는 ControlNet 기술을 살펴보기를 추천한다.
ControlNet 기술은 위에서 언급했듯이 Stable Diffusion과 엄연히 다른 독립적인 기술이므로, Stable Diffusion web UI를 이용하여 AI 이미지를 생성할 때 반드시 필요한 모델은 아니다. 특히 Stable Diffusion web UI에 스테이블 디퓨전 개발자가 제공한 주모델이 아닌 개인 개발자들이 개발해서 제공하는 모델들이 주로 사용되는 것처럼, ControlNet에 담기는 확장모델들도 향후에 추가되거나 큰 폭으로 변화할 수밖에 없다. 따라서 각각의 주모델과 확장모델로 AI 이미지를 더욱 정교하게 생성하는 방법을 반복적으로 연습하는 것도 중요하지만, 그보다는 이러한 주모델과 확장모델을 Stable Diffusion web UI에 추가하고 적용하는 방법을 확실히 아는 게 더욱 중요하다.
Extension으로 ControlNet 사용하기
앞에서 언급했듯이 ControlNet은 원래 Stable Diffusion 개발자가 제공한 기술이 아니라 다른 개발자가 추가한 기술이다. 이러한 확장모델인 ControlNet은 주모델인 checkpoint처럼 따로 설치해 사용했다. 하지만 Stable Diffusion web UI에서 일반 개발자들이 추가로 개발한 기술을 extension 항목을 사용해 간단히 추가하고 적용할 수 있는 기능을 업그레이드했다. 따라서 이제는 굳이 ControlNet를 비롯한 일반 개발자들이 스테이블 디퓨전을 위해 개발한 기술을 따로 설치하는 번거로운 과정을 거칠 필요가 없다.
위와 같이 Stable Diffusion web UI를 구동하면 Extensions이란 항목이 존재한다. 여기를 눌러서 필요한 ControlNet를 비롯한 일반 개발자들이 스테이블 디퓨전을 위해 개발한 기술을 설치하고 적용하면 된다. 우선 Extensions 항목을 누른 후에 Available 탭을 선택한 후에 Load from 버튼을 누른다. 그러면 확장할 수 있는 리스트가 나온다. 참고로, Available 탭이 아니라 Install from URL 탭을 누른 후에 설치할 extensions 경로를 입력해서 설치해도 된다. 하지만 현재까지는 오픈소스인 스테이블 디퓨전에 추가할 기술을 개발해 제공하는 개발자가 적다 보니, 문제가 될만한 확장 기술은 없지만 향후에는 분명 바이러스 또는 해킹 소스 등 위험한 기술들을 의도적으로 포함할 수 있다. 따라서 Stable Diffusion web UI에서 최소한의 검증을 한 extensions만 로드해서 사용하는 Available 탭을 활용하기를 추천한다.
Load From 버튼을 누르면 활용 가능한 Extensions 목록이 나오는데, 여기에서 원하는 확장 기능을 설치해 사용하는 방식이다. 여기에서는 해당 목록에서 아래로 스크롤을 한 후에 OpenPose Editor를 설치하면서 사용하는 방법을 소개한다. OpenPose Editor는 ControlNet에 있는 모델(기능) 중 하나이다. 해당 Extension를 설치하려면 Install 버튼을 누른다.
해당 Extension를 설치했다면 Extensions 항목에서 Installed 탭을 누른다. 그러면 방금 설치한 Extension이 나오는데, 여기에서 상단의 Apply and restart UI 버튼을 눌러서 Stable Diffusion web UI에 적용해야 한다. 만약 오래된 extension을 설치했다면 Check for updates 버튼을 먼저 누른 다음에 업데이트를 완료하면, 이후 Apply and restart UI 버튼을 눌러서 적용해야 한다. 또한 Stable Diffusion web UI가 재시작을 하지 않으면 Stable Diffusion web UI를 실행하는 구글 코랩에 가면 새로운 URL이 생성되어 있으므로, 마지막에 위치한 url로 접속하면 된다.
그러면 위와 같이 방금 설치한 extension인 OpenPose Editor가 생성되었다면, 성공적으로 ControlNet의 모델(기능) 중 하나인 OpenPose를 추가한 것이다.
참고로, 방금 설치한 extension인 ControlNet의 모델 중 하나인 OpenPose Editor는 Stable Diffusion web UI를 설치한 구글 드라이브에 저장하므로, 향후 구글 드라이브 용량을 고려해서 extension을 추가 또는 삭제할 필요가 있다. extension을 저장하는 구글 드라이브 경로는 sd / stable-diffusion-ewbui / extensions 이다.
ControlNet 사용 방법
위에서처럼 ControlNet 중 OpenPose 모델(기능)을 추가하면 해당 항목을 생성하므로, 조금 더 간편하게 사용할 수 있다. 이때 기본적인 Stable Diffusion web UI 사용법은 동일하다. ControlNet은 확장모델이므로 기존에 주모델로 생성한 이미지를 정교하게 변화를 주는 역할을 한다. 여기에서는 ControlNet의 모델(기능) 중 가장 많이 사용하는 OpenPose를 실제로 활용하는 방법을 살펴본다.
우선 OpenPose 항목을 누른 후에 Add 버튼을 누르면 모형이 나타난다. 이때 주의할 점은 해당 넓이와 높이를 기존 주모델로 생성한 이미지와 동일한 사이즈를 지정해야 한다.
그러면 위와 같은 모형이 나타나는데, 모형을 잡아서 위치를 변경하거나 크기를 늘리고 줄일 수도 있다. 하지만 이 OpenPose의 주용도는 명칭 그대로 포즈를 정교하게 설정하는 역할을 한다. 여기에서는 테스트를 위해 해당 모형 위치를 중앙으로 이동하고 사이즈를 조금 크게 한 후에, 손만 얼굴을 향하는 포즈로 설정했다.
이후 모형 아래에 위치한 항목 중에서 원하는 것을 선택하면 된다. 여기에서는 가장 기본적인 Send to txt2img를 선택해 ControlNet으로 해당 모형을 보낸다.
그러면 위와 같이 ContolNet 항목에 모형이 담긴다. 다음으로 해당 모형 아래에 위치한 항목들을 설정해야 한다.
우선 해당 모형을 사용하겠다는 의미인 1번 Enable에 체크한다. 다음으로 2번은 기존에 ControlNet을 외부에서 따로 설치할 때는 여기에서 OpenPose 항목을 선택하면 위에 모형이 나타는 방식이었지만, 현재는 이미 OpenPose로 모형을 설정한 후에 가져온 상태이므로, 여기에서는 none 상태로 둔다. 즉, Preprocessor는 전처리라는 뜻으로 실제로 수행할 작업 이전에 수행하는 과정인데, 이미 OpenPose로 해당 모형을 설정했으므로 이미 전처리 과정을 수행했으므로 여기에서는 할 필요가 없다는 의미이다. 다음으로 3번에서 openpose로 시작하는 확장모델을 선택한다. 위에서 extensions 항목을 사용해서 설치한 OpenPose Editor는 구글 드라이브 내에 extensions 폴더에 확장모델로 저장되어 있으므로, 여기에서 불러와 사용하는 방식이다. 그리고 4번은 위에서 설정한 사이즈와 동일하게 지정해야 한다. 이 사이즈 부분은 간단하지만 자주 실수하는 부분이므로 주의해야 한다. 그런 후에 Stable Diffusion web UI 기본 사용법에 따라 프롬프트를 입력한 후에 Generate 버튼을 누르면 된다. 하지만 추가로 설치해야 사용할 수 있는 확장모델에 해당하는 ControlNet에 포함하는 모델(기능)은 사용이 쉽지 않으므로, 실제 원하는 이미지를 생성하려면 상당한 연습이 필요하다.