Skip to main content

ControlNet

ControlNet は、pretrained Diffusion Model に additional condition を与え、生成結果を空間的に制御するための architecture です。

何を制御できるのか

ControlNet は、次のような condition を使って生成を制御できます。

  • Edge map
  • Human pose
  • Depth map
  • Segmentation map
  • Sketch

これにより、text prompt だけでは制御しにくい構図や姿勢を指定できます。

Architecture

ControlNet は、pretrained diffusion model の重みを活かしながら、condition を処理する branch を追加します。

ControlNet

画像出典: Lilian Weng, “What are Diffusion Models?”。Condition branch を追加することで、pretrained model の能力を保ちながら制御性を高めます。

数式で見る zero convolution と条件分岐

ControlNet は、pretrained diffusion model の block を固定し、その横に condition 用の trainable branch を追加する設計として理解できます。元の block の出力を Fl(hl)F_l(h_l)、condition branch の出力を Cl(hl,c)C_l(h_l,c) とすると、概念的には次のように書けます。

hl+1=Fl(hl)+Zl(Cl(hl,c))h_{l+1}=F_l(h_l)+Z_l(C_l(h_l,c))

ここで、hlh_l は layer ll の hidden feature、cc は edge、pose、depth などの condition、ZlZ_l は zero convolution です。Zero convolution は初期状態で重みと bias が 0 になるように置かれるため、training 開始時には次のようになります。

Zl(Cl(hl,c))0Z_l(C_l(h_l,c))\approx 0

この式の気持ちは、「最初は pretrained diffusion model の挙動を壊さず、学習が進むにつれて condition branch が必要な差分だけを足していく」ということです。したがって、ControlNet は大規模 model の生成能力を保ちながら、空間的な制御信号を追加する方法だと見なせます。

関連ページ