
「とりあえずU-Netで動かしてみたけど、精度がいまいちで……パラメータどこをどう変えたらいいんだろう?」
医療画像のセグメンテーション(画像上の臓器や腫瘍などの領域を自動検出・分類すること)をやったことがある方なら、こういう悩みに直面したことがあるのではないでしょうか。画像のサイズ・解像度・モダリティ(CTなのかMRIなのか)によって最適なネットワーク構造や前処理の方法が変わるため、これまでは専門家が手動でチューニングを繰り返すのが当たり前でした。
ところが、この「職人技」に近い作業を丸ごと自動化してしまうOSSフレームワークがあります。それが nnUNet(no-new-Net) です。2026年8月、Kaggler・機械学習エンジニアのコミュニティ(#kanto_kaggler)でも話題になっていたこのツール、エンジニア目線で仕組みから実績まで掘り下げてみます。
nnUNetとは何か——「設定を自動で決める」U-Netフレームワーク
nnUNetは、ドイツがん研究センター(DKFZ)の医用画像計算グループ(MIC)が開発・公開しているOSSのフレームワークです。GitHubでMIT/Apache 2.0ライセンスで公開されており、誰でも利用できます。名前の「no-new-Net」は、「新しいネットワークアーキテクチャを提案するわけではない」という意味で、あえてシンプルなU-Netを基盤に据えている点に、このフレームワークの哲学が表れています。
U-Net自体は、2015年に発表されて以来、医療画像セグメンテーションの事実上の標準アーキテクチャとして広く使われてきたモデルです。エンコーダー・デコーダー構造でスキップ接続(skip connection)を持ち、少ないデータでも高精度なセグメンテーションが可能という特性を持っています。しかしU-Netを「使える状態」にするには、データに合わせた前処理の選択、パッチサイズの決定、学習率の設定、2Dで学習するか3Dで学習するかの判断など、多くの意思決定が必要です。
nnUNetは、このすべての意思決定を自動化します。つまり、「データセットを渡すだけで、そのデータに最適な学習パイプラインを自動構築して結果を出す」というのがnnUNetの核心です。
どうやって自動化しているのか——「Dataset Fingerprint」の仕組み

nnUNetの自動化の鍵は、「Dataset Fingerprint(データセットの指紋)」という概念です。ユーザーがデータセットを与えると、まずnnUNetはそのデータの統計的な特性を解析し、dataset_fingerprint.jsonというファイルとして保存します。指紋には以下のような情報が含まれます。
- 画像の中央値サイズ・空間解像度(ボクセル間隔):3次元データの各軸の解像度のばらつきを捉える。解像度が軸によって大きく異なる「異方性(anisotropy)」の有無が前処理方針を左右する
- 強度統計(平均・標準偏差・パーセンタイル):正規化の方法(z-scoreか最小最大か)を決める根拠になる
- クラスの頻度:クラス不均衡の程度を把握し、サンプリング戦略を決める
- モダリティ情報:CT・MRIなど、モダリティに応じた前処理ルールを適用する
この指紋情報をもとに、nnUNetは3種類のパラメータに分類して設定を決定します。
まず「固定パラメータ(Fixed parameters)」です。学習率・損失関数・データオーギュメンテーションの種類など、ほぼすべてのデータセットで有効であることが経験的に確認された設定がここに入ります。ユーザーは原則として触れる必要がありません。
次に「ルールベースパラメータ(Rule-based parameters)」です。指紋データを入力として、あらかじめ設計されたヒューリスティックなルールによって算出される設定がここに入ります。具体的には、パッチサイズ(どのくらいの大きさのチャンクで画像を切り出して学習するか)、ネットワークの深さ(エンコーダーの段数)、前処理の正規化強度などがこれに該当します。たとえば「ボクセル間隔の異方性が大きければ、解像度の低い軸方向のプーリングを少なくする」といったルールが自動的に適用されます。
そして「経験的パラメータ(Empirical parameters)」です。2D U-Net、3Dフル解像度U-Net、3D低解像度U-Netの3種類(場合によってはカスケード構成も)を実際に学習させ、検証データ上のスコアを比較して最良の構成を自動選択します。これはまさにAutoMLの発想で、人間が「2Dがいいのかフルレゾリューションのがいいのか」と悩む代わりに、nnUNetが自分で試して決めてくれます。
Kaggleでも実証済み——コンペで通用するほんとうの実力
nnUNetが単なる研究用ツールではないことは、実績が証明しています。国際的な医療画像コンペティション「Medical Segmentation Decathlon(MSD)」で、nnUNetは総合優勝を果たしています。MSDは、脳・肺・肝臓・膵臓など10種類の異なる臓器や腫瘍を対象としたセグメンテーションタスクを一つのフレームワークでどれだけ解けるかを競う大会です。nnUNetは、データセットごとに手動で最適化することなく、すべてのタスクにわたって最高水準のDiceスコアを達成しました。この成果はNature Methods誌(2021年)に掲載されており、研究の信頼性は高いです。
さらに、機械学習コンペプラットフォームのKaggleにおいても、nnUNetはセグメンテーション系コンペの上位入賞者が必ずといっていいほど使うフレームワークになっています。RSNA関連の医療画像コンペでの1位獲得事例や、3D nnUNetをBlob回帰(物体の位置検出)に転用して2位入賞した事例など、純粋なセグメンテーション以外への応用も報告されています。
KaggleでnnUNetを活用する際の典型的なアプローチは、まずデフォルト設定でベースラインを構築し、そこからタスク固有の工夫(推論時のタイリングサイズ調整・複数モデルのアンサンブル・後処理の最適化)を積み重ねていくというものです。デフォルトだけでも他のカスタマイズ済みモデルを超えることがある、という点がnnUNetの凄みです。
エンジニアとして抑えておきたい注意点と今後の展開
ここまで聞くと「じゃあ何も考えずに使えるの?」と思うかもしれませんが、当然ながらいくつかの注意点があります。
まず、計算コストが高い点です。nnUNetはデフォルトで5-fold交差検証(5つの異なるデータ分割で学習を繰り返す手法)を行うため、1つのデータセットを本格的に学習させるには相当のGPU時間が必要です。研究用途やKaggleでは問題になりにくいですが、実運用環境でのデプロイを考える際は計算リソースの確保が前提となります。
また、自由度の高いカスタマイズは少し手間がかかるという面もあります。nnUNetはデフォルト設定が強力な反面、アーキテクチャをゼロから変えたいときや、独自の損失関数を試したいときは、フレームワークの内部を理解してコードを読む必要が出てきます。ただし、nnUNet v2(現在のバージョン)ではモジュール構成が整理されており、v1と比べてカスタマイズしやすくなっています。
将来の方向性として注目しているのは、Auto-nnUNetと呼ばれる拡張の動きです。標準のnnUNetがヒューリスティックなルールに基づく自動設定であるのに対して、Auto-nnUNetではハイパーパラメータ最適化(HPO)やニューラルアーキテクチャサーチ(NAS)を組み合わせることで、さらに自動化の精度を高めようとしています。MSDベンチマークでは10タスク中6タスクで標準nnUNetを上回る結果も出ており、今後この方向性が普及してくると、医療画像AIの開発コストがさらに下がる可能性があります。
個人的には、「新しいアーキテクチャ提案ではなくパイプライン設計の自動化で最高性能を出す」というnnUNetのアプローチは、LLM時代のプロンプト設計やファインチューニングの議論に通じるものを感じます。技術の本質的な差は、どのモデルを使うかよりも、いかにデータと学習プロセスを丁寧に扱うかにある——そんなことを改めて気づかせてくれるフレームワークです。
まとめ
nnUNetについて整理すると、以下の通りです。
- ドイツがん研究センターが開発した医療画像セグメンテーション向けの自己適応型フレームワークで、OSSとして公開されている
- データセットの統計情報(指紋)を自動解析し、前処理・ネットワーク構造・学習設定を固定・ルールベース・経験的の3層で自動決定する
- Medical Segmentation Decathlonで総合優勝、Nature Methods掲載、Kaggle上位入賞常連という信頼できる実績を持つ
- 計算コストは高め、深いカスタマイズには内部理解が必要という現実的な制約もある
- Auto-nnUNetなどさらなる自動化に向けた研究が進行中
医療画像に限らず、3Dボリュームデータや顕微鏡画像など様々なモダリティに対応しているため、興味がある方はまずGitHubのREADMEを読むところから始めてみてください。思った以上にすんなり動かせると思います。
あわせて読みたい

