DreamBoothを徹底解説 — 数枚の写真で被写体を覚えさせる拡散モデルの微調整【CVPR 2023】

「うちの飼い犬を、雪山の写真や油絵風に描いてほしい」——テキストから画像を作る拡散モデルは強力ですが、こうした特定の被写体を生成するのは苦手です。なぜなら、その犬はモデルの学習データに含まれておらず、言葉だけで「その子」の見た目を正確に指定するのは不可能だからです。

DreamBooth は、この問題を「わずか3〜5枚の写真で、拡散モデルにその被写体を覚えさせる」という微調整(fine-tuning)で解決しました。CVPR 2023で発表されたこの論文(Ruiz et al., Google)の手法を使うと、特定の被写体の同一性(細部の見た目)を保ったまま、背景・ポーズ・画風を自由に変えて生成できるようになります。

ただし、たった数枚で微調整すると、モデルは簡単に壊れます。「犬」という言葉まで自分の被写体に乗っ取られたり(言語ドリフト)、学習画像のポーズに過適合したりします。DreamBoothの核心は、希少トークン識別子クラス事前保持損失(class-specific prior preservation loss)という2つの工夫で、これを防いだ点にあります。この記事では、論文の図(CC BY 4.0)を引用しながら、その仕組みを読めば全部わかる形で解説します。

なぜDreamBoothを学ぶのか

DreamBoothを理解する価値は、次の場面で効いてきます。

  • 生成モデルのパーソナライズの原型がわかる:「少数サンプルで生成モデルを特定対象に適応させる」技術の代表例で、アバター生成や商品画像生成などの実応用の基礎です。
  • 少数データ微調整の罠と対策を学べる:言語ドリフトや過学習という、少数データ微調整で普遍的に起きる問題と、その実践的な回避策を学べます。
  • 自己生成データの活用法がわかる:モデル自身が作ったデータで自分の知識を守る「事前保持」の発想は、自己蒸留など他の手法にも通じます。

この記事を読む前に、以下を押さえておくとスムーズです。

何をするのか — 被写体駆動生成

まず、DreamBoothが実現することを確認します。

DreamBoothの概念図:被写体の写真3〜5枚で拡散モデルを微調整し、浜辺・雪の中・絵画風など新しい文脈で同じ被写体を生成する

入力は、ある特定の被写体(飼い犬、お気に入りのバッグ、特定の人形など)の写真3〜5枚だけです。これで拡散モデルを微調整すると、その被写体を新しい文脈——別の背景、別のポーズ、別の画風——で生成できるようになります。重要なのは、被写体の同一性(細部の見た目)を保つことです。論文の代表図を見ましょう。

論文Fig.1:わずか数枚(通常3〜5枚)の被写体画像から、DreamBoothがその被写体をさまざまな文脈で生成する

出典: Ruiz et al., “DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation” (CVPR 2023), Fig.1 (CC BY 4.0)

これを実現するには、まず「その被写体」をモデルに指す言葉が必要です。

希少トークン識別子で被写体に名前を付ける

DreamBoothは、被写体を希少なトークン識別子とクラス名の組み合わせで表現します。

希少トークン識別子の自作図:希少な識別子[V]とクラス名dogを組み合わせて "a [V] dog" という被写体専用の語を作る

仕組みはこうです。まず、モデルの語彙の中でほとんど使われていない希少なトークン(論文では「[V]」のように表記)を1つ選び、これを被写体に割り当てます。そして、被写体が属するクラス名(犬なら “dog”)と組み合わせ、"a [V] dog" というプロンプトで被写体を指すようにします。

なぜ希少トークンを使うのでしょうか。もし “my special dog” のような既存の意味を持つ単語を使うと、モデルがその単語の元々の意味に引きずられ、被写体をうまく学習できません。意味の薄い希少トークンなら、「この特定の犬」という新しい意味を素直に焼き付けられるわけです。

なぜクラス名 “dog” を併記するのかにも理由があります。モデルが既に持っている「犬とは何か」という事前知識を足場にできるので、数枚からでも効率よく学習できます。この足場を活かしつつ壊さないのが、次の損失設計の肝です。

微調整の2つの損失

DreamBoothの微調整は、2つの損失を組み合わせます。論文Fig.3がこの全体像を示します。

論文Fig.3:DreamBoothの微調整。被写体画像の再構成損失と、クラス事前保持損失を組み合わせて学習する

出典: Ruiz et al. (CVPR 2023), Fig.3 (CC BY 4.0)

自作図で2つの損失を整理します。

微調整の2損失の自作図:被写体再構成損失("a [V] dog"で手持ちの被写体画像を復元)とクラス事前保持損失("a dog"でモデル自身が作った犬画像を維持)を合計して微調整

  • 被写体再構成損失:プロンプト "a [V] dog" から、手持ちの被写体画像を復元できるように学習します。これが「被写体を覚えさせる」主要な損失です。通常の拡散モデルの学習(ノイズ予測)と同じ形です。
  • クラス事前保持損失(class-specific prior preservation loss):プロンプト "a dog"(識別子なし)から、モデルが元々作れていた一般的な犬の画像を維持するように学習します。これが「クラス全体の知識を忘れさせない」損失です。

この2つを合計した損失は、次の形で書けます。

$$ \mathcal{L} = \underbrace{\mathbb{E}\big[\,\lVert \hat{x}_\theta(z_t, c) – x \rVert^2 \big]}_{\text{被写体再構成}} + \lambda \, \underbrace{\mathbb{E}\big[\,\lVert \hat{x}_\theta(z’_{t’}, c_{\text{pr}}) – x_{\text{pr}} \rVert^2 \big]}_{\text{クラス事前保持}} $$

第1項は被写体画像 $x$(条件 $c = $ "a [V] dog")の復元、第2項はクラス事前画像 $x_{\text{pr}}$(条件 $c_{\text{pr}} = $ "a dog")の復元です。$z_t, z’_{t’}$ はそれぞれにノイズを加えた入力、$\hat{x}_\theta$ はモデルの復元出力、$\lambda$ は2つの項のバランスを取る重みです。被写体への適合と、クラスの一般知識の保持を同時に達成するのがポイントです。なぜ2つ目の損失が必要なのか——それは、素朴な微調整が引き起こす深刻な副作用を防ぐためです。

素朴な微調整の落とし穴

被写体再構成損失だけで微調整すると、2つの問題が起きます。

素朴な微調整の落とし穴の自作図:言語ドリフト(dogという語まで被写体に侵食される)と、過学習・多様性喪失(数枚に過適合しポーズ・背景が固定される)

  • 言語ドリフト(language drift):少数の被写体画像に微調整するうちに、"dog" というクラス語全体が被写体に侵食されてしまいます。すると「どんな犬でもいいから描いて」と頼んでも、すべてがあの特定の犬になってしまい、クラス本来の多様性が失われます。
  • 過学習・多様性の喪失:わずか数枚に過適合し、生成される被写体のポーズや背景が学習画像のものに固定されてしまいます。これでは「新しい文脈で生成する」という目的が達成できません。

クラス事前保持損失は、まさにこれらを解決するために設計されています。その仕組みを詳しく見ます。

クラス事前保持の仕組み

クラス事前保持損失の核心は、モデル自身が生成したクラス画像を教師に使う点です。

クラス事前保持の仕組みの自作図:微調整前のモデルが"a dog"で自前生成した多数の犬画像を、被写体画像と一緒に学習することで、クラス知識を保ったまま被写体を習得

手順はこうです。まず微調整を始める前に、元のモデルにプロンプト "a dog" を与えて、一般的な犬の画像を多数(論文では約200枚)生成させます。そして微調整の際、この自己生成した犬画像も "a dog" で復元できるように学習に加えます。

こうすると、モデルは「自分が元々描けていた犬」を教師にして学ぶことになります。被写体("a [V] dog")を新たに覚えつつ、"a dog" が指す一般的な犬の知識は自分自身のお手本によって保たれるわけです。これは、自分の知識を自己生成データで守るという点で、自己蒸留に近い発想です。論文Fig.6が、この効果を視覚的に示しています。

論文Fig.6:クラス事前保持損失による多様性の促進。事前保持なしでは多様性が失われるが、ありでは多様なポーズ・背景が保たれる

出典: Ruiz et al. (CVPR 2023), Fig.6 (CC BY 4.0)

事前保持を入れることで、被写体を覚えつつ多様な生成能力が維持されていることが分かります。この工夫が、DreamBoothを実用的な手法にしました。

Textual Inversion との違い

被写体のパーソナライズには、DreamBooth以外にもアプローチがあります。代表的なのが Textual Inversion です。

Textual InversionとDreamBoothの違いの自作図:Textual Inversionは新しい単語の埋め込みのみ学習しモデルは凍結、DreamBoothはモデル全体を微調整し希少トークン+事前保持損失で被写体の細部まで忠実

  • Textual Inversion:新しい被写体を表す単語の埋め込みベクトルだけを学習し、モデル本体は凍結します。軽量ですが、モデルの表現力の範囲内でしか被写体を表せず、細部の再現に限界があります。
  • DreamBoothモデル全体を微調整します。希少トークン識別子とクラス事前保持損失を使い、被写体の細部までモデルの重みに焼き付けます。重い代わりに、被写体の同一性をより忠実に再現できます。

たとえるなら、Textual Inversion は「語彙を1つ足す」、DreamBooth は「モデルに被写体を焼き付ける」アプローチです。論文Fig.4でも、DreamBoothが被写体の同一性でTextual Inversionを上回ることが示されています。

できること

DreamBoothは、被写体の同一性を保ちながら多様な操作ができます。

DreamBoothの応用の自作図:再文脈化(背景変更)、表情・ポーズ変更、視点変更、画材・画風変更を、被写体の同一性を保ちつつテキストで指定

  • 再文脈化(recontextualization):被写体を別の背景・シーンに置く(「浜辺にいる[V] dog」)。
  • 表情・ポーズの変更:被写体に新しいポーズや表情を取らせる。
  • 視点の変更:学習画像になかった角度から被写体を描く。
  • 画材・画風の変更:油絵風・スケッチ風など、被写体を別の画風で描く。

いずれも、被写体の同一性を保ったまま、テキストプロンプトで自由に文脈を指定できるのが強みです。アバター生成、商品の広告画像生成、キャラクターの一貫した描画など、実応用の幅は広く、現在の画像生成のパーソナライズ機能の多くがDreamBoothの発想を受け継いでいます。

まとめ

DreamBoothを、論文の図を引用しながら解説しました。要点を振り返ります。

  • 被写体駆動生成:わずか3〜5枚の写真で拡散モデルを微調整し、特定の被写体を新しい文脈で同一性を保って生成する。
  • 希少トークン識別子:意味の薄い希少トークン [V] とクラス名を組み合わせ(”a [V] dog”)、被写体に新しい意味を素直に焼き付ける。
  • 2つの損失:被写体再構成損失で被写体を覚えさせ、クラス事前保持損失でクラスの一般知識を保つ。
  • クラス事前保持:元モデルが自己生成したクラス画像を教師に使い、言語ドリフトと過学習・多様性喪失を防ぐ(自己蒸留に近い発想)。
  • Textual Inversionとの違い:埋め込みだけ学習する軽量手法に対し、DreamBoothはモデル全体を微調整し被写体の細部まで忠実に再現する。

「少数サンプルで生成モデルを特定対象に適応させる」というDreamBoothのアプローチは、画像生成のパーソナライズの基礎を築きました。希少トークンと事前保持損失という2つの工夫は、少数データ微調整で普遍的に起きる問題への実践的な処方箋であり、Stable Diffusionをはじめとする拡散モデルの応用を大きく広げた一本です。