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系のアーキテクチャに比べて限定的な場合がある
- 高解像度の入力では、多段のダウンサンプリング・アップサンプリングにより計算量・メモリ使用量が増える
- スキップ接続で連結する特徴のチャンネル数など、タスクやデータに応じた設計調整が必要になる
比較
関連用語
よくある質問
U-Netは今も使われている?
医用画像セグメンテーションでは今も広く使われ、Stable Diffusion等の拡散モデルのノイズ除去ネットワークとしても採用されてきた。近年はTransformerベースのDiT(Diffusion Transformer)に置き換える動きもある。