Diffusers의 ControlNet
Hugging Face는 diffusers 라이브러리에 StableDiffusionControlNetPipeline을 통해 ControlNet을 통합했습니다. 이를 통해 사용자는 깊이 맵, 세그멘테이션 맵, 스크리블, 키포인트와 같은 특정 공간 컨텍스트로 이미지 생성을 조건화할 수 있습니다. 이 통합은 생성 과정을 맞춤화할 수 있는 최소한의 인터페이스를 제공하여 스케치를 예술적인 그림으로 변환하거나 서로 다른 캐릭터 간에 정확한 포즈를 유지하는 작업을 가능하게 합니다.
ControlNet 아키텍처 및 학습
ControlNet은 Lvmin Zhang과 Maneesh Agrawala가 소개한 프레임워크로, 텍스트‑투‑이미지 확산 모델에 조건부 제어를 추가합니다. 이 아키텍처는 확산 모델(예: Stable Diffusion의 잠재 UNet)의 사전 학습된 파라미터를 "학습 가능한 복사본"으로 만들고, 원본 파라미터는 "잠금된 복사본"으로 유지하면서 동작합니다.
학습 과정의 주요 기술적 세부 사항은 다음과 같습니다:
- 파라미터 보존: 잠금된 복사본은 대규모 데이터셋에서 학습된 일반 지식을 보존하고, 학습 가능한 복사본은 작업‑특정 공간 조건을 학습합니다.
- 제로 컨볼루션: 학습 가능한 복사본과 잠금된 복사본은 "제로 컨볼루션" 레이어를 통해 연결됩니다. 이 레이어들은 새로운 조건이 통합될 때 동결된 모델이 이미 학습한 의미론을 유지하도록 최적화됩니다.
- 조건부 특이성: 새로운 종류의 공간 조건마다 별도의 ControlNet 가중치 세트가 필요합니다. 예를 들어, Canny 엣지 맵과 의미론적 세그멘테이션 맵은 각각 별도의 가중치를 사용합니다.
추론 및 메모리 관리
ControlNet을 실행하려면 사전 학습된 확산 모델 가중치와 특정 ControlNet 가중치가 모두 필요합니다. 예를 들어, Stable Diffusion v1‑5에 ControlNet 체크포인트를 추가하면 약 7억 개의 추가 파라미터가 포함되어 표준 Stable Diffusion에 비해 메모리 요구량이 증가합니다.
성능을 최적화하기 위해 Hugging Face는 diffusers 구현 내에서 다음과 같은 기술을 권장합니다:
- 스마트 CPU 오프로드:
enable_model_cpu_offload()를 사용하면 모델 구성 요소(CLIP 텍스트 인코더, UNet, ControlNet, VAE 디코더)가 필요할 때만 GPU 메모리로 로드되어 VRAM 사용량을 크게 줄일 수 있습니다. - 빠른 스케줄러: 기본 PNDMScheduler를
UniPCMultistepScheduler로 교체하면 품질 저하 없이 추론 단계 수를 50에서 20으로 감소시킬 수 있습니다. - 어텐션 가속:
xformers메모리 효율 어텐션을 활성화하면 속도와 메모리가 추가로 최적화됩니다.
이러한 최적화를 적용하면 V100 GPU에서 약 4 GB VRAM을 사용해 이미지 생성에 약 3초가 소요됩니다.
구현 및 활용 사례
StableDiffusionControlNetPipeline은 텍스트 프롬프트와 공간 조건을 결합해 유연한 이미지 생성을 가능하게 합니다.
단일 조건 예시
- Canny Edge Detection: 사용자는 OpenCV를 이용해 이미지의 Canny 엣지 맵을 생성하고, ControlNet은 이를 사용해 원본 이미지의 구성을 정확히 유지하면서 주제를 변경할 수 있습니다(예: 고전 회화의 포즈에 다른 유명 인사를 렌더링).
- OpenPose:
controlnet_aux의OpenposeDetector를 사용해 이미지에서 인간 포즈를 추출하고, 해당 포즈를 새로운 생성 캐릭터에 적용할 수 있습니다(예: 슈퍼히어로가 요가를 하는 장면). - DreamBooth 통합: ControlNet은 파인튜닝된 모델과 결합될 수 있습니다. DreamBooth로 파인튜닝된 모델(예: Mr. Potato Head 모델)을
StableDiffusionControlNetPipeline에 사용해 특정 피사체를 제어된 공간 구도에 배치할 수 있습니다.
다중 조건 결합
여러 ControlNet 조건을 하나의 이미지에 동시에 사용할 수 있습니다. ControlNetModel 인스턴스 리스트와 해당 조건 리스트를 파이프라인에 전달하면 서로 다른 공간 제어를 결합할 수 있습니다.
다중 조건 결과를 최적화하기 위한 전략은 다음과 같습니다:
- 마스킹: 한 조건 맵의 영역을 마스킹해 다른 조건과 겹치지 않게 합니다(예: Canny 맵의 중앙을 마스킹해 OpenPose 맵이 들어갈 공간을 확보).
- 조건 스케일:
controlnet_conditioning_scale을 조정해 하나의 공간 조건을 다른 조건보다 우선시합니다.
지원되는 조건 모델
Diffusers에서 지원되는 조건 모델은 다음과 같습니다:
- Depth (
sd-controlnet-depth) - HED (
sd-controlnet-hed) - Normal (
sd-controlnet-normal) - Scribble (
sd-controlnet-scribble) - Segmentation (
sd-controlnet-seg) - OpenPose (
sd-controlnet-openpose) - MLSD (
sd-controlnet-mlsd) - Canny (
sd-controlnet-canny)
Sources
- OriginalControlNet in 🧨 Diffusers