Re Reference AI

アーキテクチャ

U-Netとは

ユーネット

縮小と拡大の経路をスキップ接続でつないだU字型のネットワーク。セグメンテーションと拡散モデルで標準的な構成

画像認識ニューラルネットワーク

ひとことで言うと

画像をいったん縮めて全体をつかみ、元の大きさへ戻しながら細部を復元するU字型のネットワーク。画像の切り出しや画像生成AIの中身として広く使われる。

概要

U-Netとは、縮小(エンコーダ)と拡大(デコーダ)の経路をスキップ接続でつないだ、U字型のニューラルネットワークアーキテクチャを指す。 入力画像を段階的に圧縮して文脈を捉え、拡大側で解像度を戻す際に対応する縮小側の特徴をスキップ接続で合流させ、位置の細部と全体の文脈を両立させる。 医用画像のセグメンテーション向けに提案されたが、その後Stable Diffusionをはじめとする拡散モデルのノイズ除去ネットワークとして採用され、画像生成の分野でも標準的な構成要素になった。

歴史

2015年にRonnebergerらが医用画像セグメンテーション向けの論文で発表した。

ワークフロー

入力画像をエンコーダ側で畳み込みとプーリングを繰り返しながら段階的にダウンサンプリングし、各解像度の特徴マップを保持する → 最も圧縮された層(ボトルネック)を経る。デコーダ側でアップサンプリングしながら対応する解像度のエンコーダ特徴をスキップ接続で連結する → 元の解像度まで戻したら最終層でピクセル単位の出力(セグメンテーションマスクや予測ノイズ等)を生成する。

コード例

PyTorchでの簡易U-Net構成要素

import torch.nn as nn

class DoubleConv(nn.Module):
    def __init__(self, in_ch, out_ch):
        super().__init__()
        self.block = nn.Sequential(
            nn.Conv2d(in_ch, out_ch, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(out_ch, out_ch, 3, padding=1),
            nn.ReLU(inplace=True),
        )

    def forward(self, x):
        return self.block(x)

利点

  • スキップ接続により、ダウンサンプリングで失われがちな位置の細部情報を復元しやすい
  • 比較的少ない学習データでも高精度なセグメンテーションを達成しやすい構造として知られる
  • セグメンテーションだけでなく、拡散モデルのノイズ除去ネットワークなど幅広い用途に転用されている

欠点

  • 画像全体の大域的な文脈を捉える能力は、Transformer系のアーキテクチャに比べて限定的な場合がある
  • 高解像度の入力では、多段のダウンサンプリング・アップサンプリングにより計算量・メモリ使用量が増える
  • スキップ接続で連結する特徴のチャンネル数など、タスクやデータに応じた設計調整が必要になる

比較

  • CNNU-NetはCNNをベースに、エンコーダ・デコーダ構成とスキップ接続を組み合わせた派生アーキテクチャ
  • 拡散モデルStable Diffusion等の拡散モデルは、各ステップでノイズを予測するネットワークとしてU-Netを採用することが多い

関連用語

CNN拡散モデルStable Diffusionオートエンコーダ残差接続

よくある質問

U-Netは今も使われている?

医用画像セグメンテーションでは今も広く使われ、Stable Diffusion等の拡散モデルのノイズ除去ネットワークとしても採用されてきた。近年はTransformerベースのDiT(Diffusion Transformer)に置き換える動きもある。

なぜ「U」の形と呼ばれる?

エンコーダで解像度を下げていく経路とデコーダで解像度を戻す経路が対称的にUの字を描くことに由来する。

参考文献

関連Zenn記事