U-Net

Last-modified: 2025-12-31 (水) 23:07:09

U-Netとは何か。

U-Net「拡散モデル」は、SD1.5やSDXLで使われていた画像生成モデルです。

 


U-Net拡散モデルとして実用レベルで普及したオープンなものがStable Diffusion(バージョン3.0より前)しかない為、
事実上 U-Net拡散モデル≒LDM(潜在拡散モデル)=SDと考えて差し支えない。
SDより前の拡散モデルではプロンプトを受け取る機能がない(当然テキストエンコーダともつながっていない)など、SDのU-Netとは大幅に構造が異なる。

簡単に言うと?

  • U-Netは、画像を入力として画像を返すアーキテクチャです。
  • オリジナルのU-Netは、画像内の物体やパターンの特徴を自動的に識別し、それらの特徴の境界(物体と背景などさまざま)を詳細に抽出し特徴マップとして返すものです。
  • Stable Diffusionでは、画像から特徴量を抽出、それに加えてエンコードされたプロンプトを入力とし、画像から除去すべきノイズを返す装置としてU-Net拡散モデルを使っています。
    • ノイズは生成処理の実行時に「Denoising strength」に応じた量(txt2imgなら100%)付加されます。

つまりSDでは、

板の木目を見て「人の顔みたいに見えるなあ」とか、部屋の真ん中に落ちているティッシュを見て「ゴミ箱に捨てたほうがいいなあ」とか、そんな感じの推論を行っています。

なぜ、U-Netと呼ばれるの?

  • U字構造になっているネットワークだからです。

なんでノイズを予測させるの?

ノイズを予想させたほうが誤差が蓄積しにくいからです。

  • 拡散モデルで使うノイズは「数学的に都合がいい」ガウシアンノイズです。ピンクノイズのような自然なノイズではありません。
  • 通常の画像では、低周波数帯(ライティングなどの大域的構造)~中周波数帯(顔や腕など、中間的な大きさの構造)が支配的です。くっきりとした線といった高周波帯はあまりありません。
  • これに対し、ガウシアンノイズは全周波数帯フラットなため、比較すると画像よりチリチリとした高周波数帯の成分が多く含まれています。
  • ノイズはランダムに撒かれるため、微細な構造である高周波数帯が真っ先に破壊されます。
  • 大域構造はその大きさから、かなりの量のノイズが撒かれても痕跡を拾いやすいです。
  • このため、AIにノイズ除去タスクを学ばせると低周波数帯から高周波数帯に向かって復元される傾向があります
  • ノイズεを予測させた場合、モデルは学習時と同じだけのノイズが含まれているという前提で(実際には滑らかだったとしても)高周波ノイズを削りに行きます。
    • ε予測では、予測ミスでボコボコに穴を開けたとしても後のステップの予測で誤差が修正されやすいです。
  • しかし教師画像x0を予測させた場合は、ノイズの中から低周波帯の大域的構造の痕跡を探すようになります。
    • x0予測では、早期に生じた低周波数帯の予測ミスはそのまま固定化されてしまい、誤差が増幅されやすくなります。
    • また高周波成分は近接領域との差異が激しいため誤って線のないところに線を引こうとしたりすると減点が大きく、結果としてx0予測モデルにはディテールを甘くするバイアスがかかります。
      (ε予測の場合は高周波ノイズを当てられないと点数が上がらないので、x0予測よりはディテールを復元しやすくなります)

情報元

原文に近い情報はこれ。

diffusers

  • 当機能はdiffusersに実装されている。
    よって、詳細なレイヤー名を知りたいときは、diffusersを検索することになる?

https://huggingface.co/docs/diffusers/index
https://github.com/huggingface/diffusers

U-Netの構造

U-Netの構造は複雑であり、1枚の絵だけでは可視化しきれない。
当wikiに関係する、いろいろな視点で集めてみる。

Stable Diffusion web UIで使われている場所

※下記画像で「事前学習モデル」となっているのは「入力画像」(txt2imgでは空)の誤り。

230719_02_SDにおけるモデルの役割.png

引用:としあき自作

arXiv出典より

虫の目と鳥の目を段階的に使い分けるアルゴリズムです。
たとえばゴスロリであれば虫の目では「フリルやリボンでひらひらしている」、鳥の目では「全体的に黒っぽい」というイメージで、木も森も見て特徴を認識します*1

※以下はオリジナルのU-Netの構造です。Stable Diffusionで画像生成に使っているU-Net拡散モデルとは異なる点もあります。
階層マージのページも併せて読むと理解が進む、かもしれない。

U-Net構造 struc_from_arXiv1505.04597.png
引用:https://arxiv.org/abs/1505.04597

 
  • 図左上から中央下にかけての部分は基本的なCNN
    572✕572pxの画像を、最小解像度32✕32pxまでダウンサンプリング。
    結果として、ノイズだらけのぼやけた画像になる。
    この左側の役割を担うのがEncoder(エンコーダ)*2
  • 図中央下から右にかけて、
    32✕32pxの画像を、388✕388pxまでアップサンプリング。
    この結果が出力したい画像になる。
    この右側の役割を担うのがDecoder(デコーダ)
  • Encoderの過程では、
    • 特徴量を抽出する(フィルタリング)。
    • サイズダウンして、計算コストを削減する
  • ただしそのままだとボケるので、Encoderの各段階の特徴マップを対応するDecoderの対応段階へ結合する「スキップ接続」があるのが従来のCNNとの違い

LyCORISより

221555165-7b0a1b96-0cc4-4ec4-bdd7-559a43002c65.png
引用:https://github.com/KohakuBlueleaf/LyCORIS/tree/locon-archive#difference-from-training-lora-on-stable-diffusion

図は、LyCORISで学習できる単位の一例。

U-Net拡散モデルの長所

  • 各層の役割が分かりやすいので階層マージみたいな調整ができる。
  • (発表当時としては)プロンプト忠実性が高い。
    • 生成ステップ数がかさむのでステップ毎にプロンプトを介入させられるという、怪我の功名的な部分もある。
    • プロンプトによる条件付けはオリジナルのU-Netには(どころか初期の拡散モデルにも)ない。TransformerをGPTに応用して成果を出しつつあったOpenAIが、DALL·E 2開発の際にTransformerアーキテクチャから借用したCross-Attention機構を後付けでU-Netに追加し、プロンプトによる条件付けを実用化した。SDのテキストエンコーダとして使われているCLIPもOpenAIの製品である。DALL·E 2はクローズドソースなので詳細は不明だが、Stable Diffusionはそれらの先行例を後追いしたもの。
  • 多様な画像を生成できる。初期拡散モデルの研究では当時の画像生成AIの主流だったGANの「生成結果が偏りやすい」という弱点が強く意識されていた。
  • (発表当時としては)画質が良い。
  • 塗りや質感、テクスチャといった細部の表現がリアル。
  • オブジェクトの位置変更に比較的強い。
    • CNNの特徴。エンコーダ部の各層における各マスに当たる部分は、元の画像からそのマスの担当範囲の情報が切り取られており、その単位で画像を認識している。オブジェクトの位置が変わっても別のマスが元のマスと同じように認識する。
  • 段階的にノイズ除去を行うため、処理中に誤差が出ても比較的蓄積しにくい。
  • 学習が安定しやすい。教師画像の多様性をフルに活かせる。

U-Net拡散モデルの短所

  • 生成初期の高ノイズ域にモデルが予測に使える情報がほとんどなく、新世代のFlow Matchingモデルよりプロンプトが効きづらい
    • 初期拡散モデルの段階ではノイズ予測について「画像処理」というより「統計処理」ととらえる研究が多く、プロンプトも実用化されていなかったため疑問を持たれなかった。
      • 統計学では説明変数を見ても目的変数がどうなるか直感的に分からないことは普通にある。
    • 条件付けのための技術が未発達だったためガチャに頼るしかない部分が多く、制御不能感というよりも多様性として肯定的に捉えられていた。
    • この問題は複雑な描画指示が可能なStable Diffusionが幅広く普及したことで顕在化した。
  • モデル設計に職人技が必要とされる。解像度依存が強く、また後付けのプロンプト条件付け(Cross-Attention機構)をどこにどんな重みで挿すかの調整が困難。
    • このため、商用製品では先行例があるもののクローズドソースに留まり、Stable Diffusion以外に実用レベルで普及しているオープンな実装が存在しない。
  • 細部の線や模様が削られやすい
    • グラデーションのような滑らかな表現はうまいが、はっきりとした細部の表現は苦手。
      このような高周波成分はAIにとってノイズと見分けがつかない為、描画過程をノイズ除去タスクとして訓練されている拡散モデルは特に復元する動機が弱い。
  • オブジェクトの拡大縮小や回転に弱い
    • CNNの弱点。キャンバスサイズの変更に弱いのもこれが大きな原因。
    • SDXL以降はキャンバスサイズや縦横比の異なる画像をまとめて学習させることで多様な解像度に対応している*3
  • やや近視眼的で画面全体の整合性が取れていないときがある。顔が増えたり、DiT等の新世代のAIモデルより複数キャラの描き分けが下手だったりする。
    • CNNの弱点。畳み込み演算は離れたマスの情報を参照しないため。U-Net拡散モデルは長距離依存関係に強いTransformerのSelf-Attentionを借用しているがそれでも近視眼的。
    • VAEもCNNの近視眼的な面の緩和に貢献している。VAEによる潜在空間への変換がない場合、U-Net拡散モデルは「主線は画面の途中で切れないことが多い」といった意味的な特徴を学習しにくくなり、高周波成分に引っ張られて「隣と色が全然違うマスはノイズ」等と判断しやすくなる*4
  • 近視眼的だが形状に関する観察力は弱い。指が減ったり増えたりする。
    • 人間は細部を見るときもそこが全体のどこかを意識しながら見るが、CNNの浅層は本当に狭い範囲だけしか参照しない為。盲人象を評す。
  • 生成速度が遅い。特にε予測だと低ステップ化に限界がある。
  • 学習コストも高い。

関連ページ


*1 これに対し、例えばアップスケーラーのESRGANは虫の目に特化していて画風を崩さずに拡大するのは得意だが全体のバランスを見てディティールを描き足すのはそこまで得意ではない。
*2 U-Net内のエンコーダ/デコーダはあくまでU-Net内部のものであり、VAEとは異なる。
*3 SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis
*4 Robin Rombach他「High-Resolution Image Synthesis with Latent Diffusion ModelsarXiv