정지용
기술스택 목록
도구

ControlNet

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

이미지 생성 모델에 pose·depth·canny 등 조건 이미지를 더해 구도와 형태를 제어하는 확장 모듈

ControlNet은 Stable Diffusion 같은 text-to-image diffusion 모델에 추가적인 조건(conditioning) 입력을 결합해, 프롬프트 텍스트만으로는 지정하기 어려운 인물 자세, 깊이감, 윤곽선 등 구조적 정보를 그대로 반영하도록 만든 신경망 구조입니다. 기존 모델은 텍스트만으로 이미지를 생성하다 보니 원하는 구도나 포즈를 정확히 재현하기 어려웠는데, ControlNet은 원본 모델의 가중치를 건드리지 않고 별도의 조건 인코딩 경로를 덧붙여 이 문제를 해결합니다. 그 결과 사용자가 준비한 스케치, 뼈대 포즈, 깊이맵 등을 참조 삼아 원하는 화면 배치를 유지한 채 다양한 스타일의 이미지를 생성할 수 있습니다.

이럴 때 사용합니다

  • 특정 인물 자세나 구도를 그대로 유지한 채 이미지를 재생성하고 싶을 때
  • 스케치나 윤곽선만으로 완성도 있는 이미지를 만들고 싶을 때
  • 깊이감·원근 등 3차원적 구조를 보존하며 스타일만 바꾸고 싶을 때
  • 텍스트 프롬프트만으로는 제어가 어려운 세밀한 레이아웃을 지정하고 싶을 때

핵심 개념

conditioning image
생성 결과가 따라야 할 구조 정보를 담은 입력 이미지로, 엣지·깊이·포즈맵 등의 형태로 제공됩니다.
preprocessor (annotator)
원본 사진을 canny edge, depth map, openpose 스켈레톤 등 conditioning image로 변환하는 전처리 단계입니다.
locked copy / trainable copy
원본 diffusion 모델 가중치는 고정(locked)해 두고, 조건을 학습하는 복제본만 별도로 학습시켜 기존 생성 능력을 보존합니다.
zero convolution
학습 초기에 조건 신호가 원본 모델 출력을 방해하지 않도록 가중치를 0으로 시작하는 특수한 컨볼루션 레이어입니다.
control weight / guidance strength
conditioning image가 최종 결과에 반영되는 정도를 조절하는 값으로, 높일수록 조건에 더 강하게 구속됩니다.
multi-ControlNet
여러 종류의 conditioning(예: pose와 depth)을 동시에 적용해 복합적인 구조 제약을 걸 수 있는 사용 방식입니다.

canny edge 조건으로 이미지 생성하기

입력 이미지에서 canny edge를 추출한 뒤, 이를 조건으로 삼아 프롬프트에 맞는 새 이미지를 생성하는 최소 예시입니다.

Python
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
import cv2, numpy as np
from PIL import Image

# canny edge 전용 ControlNet 가중치 로드
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny")
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", controlnet=controlnet
)

# 원본 이미지를 전처리해 conditioning image 생성
image = Image.open("input.png")
canny = cv2.Canny(np.array(image), 100, 200)
canny_image = Image.fromarray(canny)

# 텍스트 프롬프트 + conditioning image로 생성
result = pipe("a photo of a cat", image=canny_image).images[0]

처음 쓸 때 흔한 함정

  • conditioning image와 ControlNet 모델 종류(canny/depth/pose 등)가 맞지 않으면 결과가 어색해집니다.
  • control weight를 너무 높이면 조건에만 치우쳐 텍스트 프롬프트가 거의 반영되지 않습니다.
  • 전처리기 결과 품질이 낮으면 원본 사진의 노이즈나 오류까지 그대로 구조에 반영됩니다.

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.