스테이블 디퓨전은 다른 생성 AI툴과 비교해 기능이 복잡해서 어렵게 느껴질 수 있습니다. 그러나 단순히 프롬프트만 입력하는 것이 아니라, 여러 확장 기능을 추가로 사용하기 때문에 세부적인 개입을 통해 완성도를 높일 수 있다는 장점이 있어 퀄리티 높은 결과물을 제작하고 싶은 사람들에게 제격입니다.
원하는 이미지에 가깝게 구현하기 위해서는 우선 기능에 대한 이해가 필수적입니다. 그래서 이번 아티클에서는 스테이블 디퓨전에서 원하는 이미지를 더 섬세하게 만들기 위해서 꼭 알아야 하는 고급 기술인 컨트롤넷에 대해 소개해드리려고 합니다. 스테이블 디퓨전에서 더 섬세한 작업을 손쉽게 할 수 있도록 도와주는 확장프로그램, 익스텐션 중 하나라고 이해하면 됩니다.
종종 자연물이나 풍경화 속에서 익숙한 형태가 보이는 AI 이미지를 보신 적이 있을 겁니다. 이런 이미지들은 스테이블 디퓨전에서 컨트롤넷(controlnet)을 사용해 제작할 수 있습니다. 특히 그러한 이미지들은 형태를 유지한 채 디테일을 변경하는 기능을 활용했습니다. 컨트롤넷을 활용하면 이렇게 자연물뿐만 아니라 동일한 모델의 옷만 변경하거나, 일관성 있는 포즈를 유지하고, 얼굴의 표정을 다르게 제작하는 등 고퀄리티 스테이블 디퓨전 실사 이미지를 뽑아내는 데도 아주 유용합니다. 생성 AI 다루는 실력을 키워 완성도 높은 이미지를 생성하고 싶으신 분들을 위해 아래 내용에서는 스테이블 디퓨전 컨트롤넷 설치 시 기본적으로 다운받아 세팅해 두어야 하는 요소들과 컨트롤넷의 프로세스와 모델의 종류에 대해서 자세히 다뤘습니다.
* 본 게시글은 [프로에게 배우는 Stable Diffusion 2D/2.5D/실사 이미지 제작]의 실제 강의 내용을 참고하여 작성하였습니다.
1) 설치가 안 되어 있으면 Extensions – Install from URL로 들어갑니다. (webui.bat으로 실행 필수)
2) https://github.com/Mikubill/sd-webui-controlnet
MiKubill의 깃헙에 가서 레포지토리를 복사합니다. 위의 경로에서 Code-체크박스를 클릭해서 경로를 복사하면 됩니다.
3) 복사한 경로를 URL for extension’s git repository에 붙여넣기 합니다. 아래 install을 눌러서 git 파일을 설치합니다. 설치가 된 것은 Available에서 검색해서 찾아볼 수 있습니다. Search에 controlnet을 입력하고 확인하면 됩니다.
4) 설치가 완료 되면 위와 같은 메시지가 보입니다.
5) Installed에서 Apply and restart UI를 클릭해서 설치한 Extension을 로드합니다. 가급적이면 cmd, webui를 모두 끄고 다시 실행하는 것을 추천드립니다.
6) 설치가 완료 되면 T2I, I2I에서 컨트롤넷이 추가된 것을 인터페이스에서 확인할 수 있습니다.
SD1.5모델과 SDXL 모델, DW OPENPOSE 파일을 다운받아야 합니다. 먼저 controlnet v1.1 모델부터 다운로드 받겠습니다.
Controlnet v1.1 모델 다운로드 방법(SD1.5모델)
1) https://huggingface.co/lllyasviel/ContolNet-v1-1/tree/main 해당 링크에 접속합니다.
2) 모델 다운로드 시 .pth 및 .yaml을 모두 받아야 합니다. Model File의 경로는 .extensions / sd-webui-controlnet/models 입니다. 클론 레포지토리에서 깃 클론 명령어를 카피해주세요. cmd 창을 열어서 명령어를 복붙해주면 일괄로 다운받을 수 있습니다.
SD1.5 모델은 다 다운받았고, SDXL 모델을 추가로 다운 받아야 합니다. 1.1.400 버전 이후부터 SDXL을 지원하기 때문에 컨트롤넷 업데이트도 함께 진행해주세요.
SDXL 모델 다운로드
1) https://huggingface.co/lllyasviel/sd_control_collective/tree/main 해당 링크에 접속합니다.
2) 같은 경로로 이동해 똑같이 깃 클론 명령어를 붙여넣기 해줍니다. 약 20GB정도의 파일을 다운받게 됩니다.
컨트롤넷 업데이트
1) 이미 1.1.400 버전인 분들은 업데이트를 할 필요가 없습니다. controlnet 익스텐션이 있는 곳으로 이동해서 git pull 명령어를 실행해주세요. 설치가 잘 됐다면 코드가 수정되는 것을 확인할 수 있습니다.
2) 1.1.2 버전을 사용하는 경우에는 에러가 나서 재설치가 안 될 수도 있습니다. Models 폴더를 다른 곳으로 이동하고 비어있는 Models 폴더를 생성한 후에 git pull을 해주세요. 업데이트 이후 원래 models 폴더로 이동합니다.
다음은 DW OPENPOSE를 다운받아야 합니다. 기존의 학습된 오픈포즈는 가려지는 공간이나 겹쳐지는 형태들이 올바르게 되지 않는 경우가 있는데, 해당 모델은 올바르게 표현이 되기 때문에 추가적으로 다운로드 해주세요.
마찬가지로 git의 링크를 복사해 URL for extensions git repository에 붙여넣기 한 후 install을 누르면 업데이트 됩니다.
컨트롤넷은 2개 이상을 한 번에 사용하는 경우가 많습니다. 그래서 vram이 넉넉해야 문제가 없는데요, 8GB정도 되면 2~3개 이상 사용은 힘들다는 점을 알아두시면 좋을 것 같습니다.
1) 2개 이상의 controlnet을 사용하려면 우선 settings로 이동해주세요.
2) controlnet으로 들어간 후 multicontrolnet에서 원하는 숫자만큼 적으면 됩니다.
3) Multi ControlNet을 3개 이상으로 적고 Allow other script to control this extension을 체크합니다. Low GPU의 경우는 2~3개로 적는 것이 좋습니다.
이미지 등 관련 임베딩이 들어가면 예측 노이즈를 만드는데, 이 때 컨트롤넷은 우리가 주는 인풋 데이터를 가공할 때 손실이 없도록 직접 개입해 고쳐주는 역할을 합니다. 인풋 소스가 들어가면 이를 사용할 수 있도록 가공합니다.
그 과정에서 여러가지 기준들을 정하게 됩니다. 얼마만큼의 가중치(weight), 시작과 끝(start, end)을 얼마나 둘건지 값을 정하고 이를 프롬프트 위주로 할지, 컨트롤넷 위주로 갈건지, 아니면 중간 형태(balanced)로 갈 건지 결정합니다.
해당 조건들의 강약을 어떻게 조절하는지에 따라 결과물이 다르게 나옵니다. weight와 controlmode를 함께 사용했을 때 프롬프트와 컨트롤넷의 개입 정도 차이 예시를 보여드릴게요.
가중치가 0.25일 때는 step을 계속 밀었을 때 꼭지에 변형이 생긴 것 외에는 원본 이미지와 크게 다르지 않습니다. 0.5는 중간이지만 어느정도 canny 데이터의 영향을 받아 이와 모양이 비슷합니다. 0.75는 0.5와 거의 다르지 않지만 사과가 반쪽짜리가 됐네요. 단계와 가중치마다 차이가 있는데, 이를 얼마나 잘 가공하느냐가 디테일을 조정하는 것을 의미합니다.
입력한 프롬프트가 더 중요하다고 선택했을 때의 사진입니다. 가중치가 0.25일 때는 큰 차이가 없지만, 0.5일 때는 사과 2개가 같이 있는 것을 확인할 수 있습니다. 어느정도 canny 데이터에 근거하되 모델에서 프롬프트의 자유도와 개입이 좀 더 높아져 영향을 받습니다. canny 데이터의 개입이 0.5로 줄어들은 것입니다.
무조건 컨트롤넷에 맞춰달라는 것을 의미하는데요, 하단 오른쪽의 canny 데이터에게 많은 영향을 받습니다. 가중치가 올라갈수록 점점 canny 데이터와 유사하게 변화하는 것을 확인할 수 있습니다.
컨트롤넷 모델의 종류와 그 기능에 대해 간략하게 소개해드리겠습니다. 유사한 기능을 지니고 있지만 저마다 조금씩 차이가 있어 그 특성을 잘 파악해 필요한 곳에 적절히 사용하면 좋습니다.
라인 위주의 모델을 먼저 소개해 드리겠습니다.
Canny: 가장자리(edge) 를 감지합니다. Source 이미지의 edge를 참고해서 생성 이미지의 edge를 컨트롤합니다.
Lineart: edge를 감지하는데, 원화같은 그림을 표현할 때 많이 사용됩니다.
Softedge: source 이미지에서 edge를 감지합니다. 노이즈가 적고 감지 결과가 좋아 주로 사용됩니다.
Scribble: 이미지의 edge를 감지하여 러프 스케치처럼 표현합니다.
MLSD: 직선 형태의 가장자리를 감지합니다. 인테리어, 건물, 거리풍경, 액자, 종이 모서리 등의 감지에 사용합니다.
스테이블 디퓨전 실사 이미지를 제작할 때 알아두면 유용한 모델도 정리했습니다.
Depth: 피사체 A와 B의 거리감을 나타냅니다. Source 이미지 요소들의 카메라에서의 거리를 감지하는데, Depth가 흰색일수록 가까운 거리에 있다고 보면 됩니다. 인물과 배경 근경에 있는 거리감을 잘 이해하지 못하고 만들어지는 경우가 있는데, Depth를 통해 이를 해결할 수 있습니다.
Normal: 이미지에 있는 물체의 각 면의 방향, 즉 덩어리감을 감지합니다.
Openpose: 눈, 코, 목, 어깨, 팔꿈치, 손목, 발목의 위치를 감지합니다. 포즈를 유지한 채 다른 이미지를 생성할 때 주로 사용합니다.
Mediapipe: 얼굴 방향 및 눈, 코, 입의 위치 등을 감지 합니다.
그 외 많이 사용되는 다른 모델들입니다.
IP2P: 명령 Prompt ‘make it~’을 사용하여 문장의 방향성을 반영합니다.
Tile: 이미지의 새로운 세부 정보를 생성합니다. Source Tile의 의미 체계와 프롬프트가 불일치 할 경우, 프롬프트를 무시하고 로컬 컨텍스트로 세부 정보를 생성합니다. tile resample을 키고 작업하면 업스케일 된 결과물을 얻을 수 있습니다.
Reference: source 이미지를 참조하여 새로운 이미지를 생성할 때 사용합니다.
T2IA: source 이미지를 color grid 또는 clip vision embedding으로 변환하여 이미지를 생성합니다.
Shuffle: 무작위 흐름을 사용해 이미지를 섞고 스테이블 디퓨전을 제어하여 이미지를 재구성합니다.
Inpaint: I2I의 Inpaint 탭에서 사용하며, 마스킹 부분 이미지 재생성 시 사용합니다.
SEG: Source 이미지에서 오브젝트 종류를 학습되어 있는 컬러 코드로 분류합니다.
스테이블 디퓨전 사용법을 익히면서 결과물을 통해 발전된 실력을 확인해 보세요. 여러분의 즐겁고 빠른 성장을 위해서 스테이블 디퓨전 전문가이신 최돈현 강사님의 강의 [프로에게 배우는 Stable Diffusion 2D/2.5D/실사 이미지 제작]을 준비했습니다.
강사님의 노하우를 담아 기초 뿐만 아니라 실전 심화부터 SDXL, AnimateDiff까지 가장 최신의 정보들을 담아 단계별 맞춤 커리큘럼을 준비했기 때문에, 심화 단계를 원하시는 분들 혹은 현직자 분들에게도 유용한 내용들이 가득합니다. 앞서 설명한 컨트롤넷 모델 이외에도 다양한 기능들을 응용해 인물의 앵글, 표정 등 디테일한 요소와 배경을 제작하고 실제 광고 이미지로 연출까지 해볼 수 있습니다. T2I, I2I 등의 프롬프트들을 활용하거나 Turntable 기능을 활용해 하나의 컨셉에 다양한 스타일, 포즈, 소재를 추가한 나만의 템플릿을 제작해 대량으로 시스템을 구축하는 방법도 알려드립니다. TemporalKit, AnimateDiff 등의 기능을 활용해 영상을 제작하는 등 학습한 기능으로 완성형 콘텐츠도 제작할 수 있습니다.
아래 링크에서 더욱 자세한 커리큘럼을 알아보실 수 있습니다. 내가 찾고 있던 스테이블 디퓨전 기능들이 있는지 확인해보세요.
📌 2D 애니메이션, 반실사 2.5D 일러스트, 컨셉 이미지, 실사 가상모델 그리고 영상 제작법으로 상상만 하던 이미지 완벽하게 구현하기
📌 T2I, I2I, ControlNet의 Parameter, Turntavle 기능 활용으로 원하는 컨셉& 디테일 담긴 나만의 템플릿 제작 대량 시스템 구축하기
📌 초보자와 숙련자를 위한 500가지 실습의 완성형 커리큘럼부터, Open pose, Inpaint, Upscale 결과물 퀄리티 높이는 고급 기술까지