TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

U-NetとHRNet:解像度を維持する構造とヒートマップ出力

ステータス:ドラフト(2026-10-13)、一部実測。 1・4節の例はノートPCのCPUで直接実行した値です(code/03_heatmap.py、3秒)。論文の数値は原文を開き、条件とともに転記しました。ボール探しモデルの実測値は、TT Scoreモデル解剖の第2回から引用しています。 作成ルール:実測データを基本とし、計測できなかったものは「未計測」と表示します。

目次

1. 分類は縮小し、位置は維持しなければならない

第1回で、プーリングは受容野を広げる代わりに位置をぼかすと述べました。どれほどぼかされるのかを実際に見てみましょう。32×32の画像に直径3pxのボールを描き、2×2の平均プーリングを繰り返しました(実測)。

解像度 サイズ ボールとして残ったマス(値 > 0.25) 最も明るいマス
1 32×32 7 1.00
1/2 16×16 2 1.00
1/4 8×8 1 0.31
1/8 4×4 0 0.08
1/16 2×2 0 0.02

1/8になると、ボールは背景とほとんど区別がつかなくなります。これは、分類モデル(ResNetは通常1/32まで縮小します)の深い層には、ボールの正確な位置が残っていないことを意味します。しかし、深い層は「これがボールであるか」を判断する広範な文脈を持っています。 文脈(深く広く見る)と位置(浅く詳細に見る)を併せ持つ構造が必要です。その答えが2つの方向に分かれます。

해상도를 지키는 두 방법 U-Net: 줄였다가 키우고, 같은 층끼리 잇는다 인코더(줄이기) 디코더(키우기) 점선 = 건너뛰기 연결: 줄이기 전의 세밀한 위치를 디코더에 다시 준다 HRNet: 고해상도 갈래를 끝까지 둔다 1/4 1/8 1/16 1/32 세로 화살표 = 여러 해상도를 계속 섞는다 출력 히트맵은 가장 위(1/4) 갈래에서 나온다 둘 다 「작은 물체의 정확한 위치」를 잃지 않으려는 설계다. 공 찾기의 WASB·BlurBall 은 HRNet 쪽이다.
図:U-Netは縮小・拡大しながら同じ階層同士をつなぎ、HRNetは高解像度の分岐を最後まで残したまま複数の解像度を混ぜ合わせる

2. U-Net(2015):縮小して拡大し、同じ階層同士をつなぐ

Ronnebergerらは、顕微鏡の細胞画像のセグメンテーション(画素ごとに「細胞か背景か」を塗り分けること)のためにU-Netを作成しました。名前の通りU字型の形状をしています。

第2回のResNetのショートカットは値を 足し、U-Netのスキップ接続は 結合します。足し算は同じ情報を少し修正するものであり、結合は異なる種類の情報(位置と意味)を並べて置き、次の層に混ぜ合わせさせるものです。

少量のデータで学習するための仕組み

医療画像はアノテーションコストが高くつきます。論文の学習データは、電子顕微鏡のセグメンテーション30枚(512×512)、細胞追跡コンテストのデータ約35枚・20枚程度でした。そのため、設計がデータの節約に合わせて最適化されています。

結果(論文):電子顕微鏡セグメンテーションコンテストで歪み誤差0.000353により1位(従来最高は0.000420)。2015年細胞追跡コンテストの2つのデータにおいてIoU 0.9203(2位0.83)と 0.7756(2位0.46)。512×512の1枚を当時のGPUで1秒以内にセグメンテーションし、学習にはメモリ6GBのデスクトップGPUで10時間かかりました。

U-Netは医療画像を超えて、「入力と同じサイズの地図を出力しなければならない」ほぼすべてのタスクの基本形となりました。卓球のボール探しにおけるTrackNetV2もU-Net構造です(TT Scoreモデル解剖 第2回)。

3. HRNet(2019):高解像度を最後まで残す

U-Netは一度縮小してから再び大きくします。縮小する過程で失われた位置情報をスキップ接続で戻しますが、デコーダが受け取る高解像度の特徴は 浅い層のものであるため意味情報が弱いです。Sunらは人物姿勢推定(17箇所の関節の位置特定)のために別のアプローチを取りました。それは 最初から最後まで高解像度の分岐を維持することです。

結果として、高解像度の分岐が深い層の意味情報を継続的に受け取りながらも、解像度を失わずに維持します。

モデル(COCO姿勢、検証セット) 入力 AP パラメータ数 GFLOPs
SimpleBaseline(ResNet-152) 256×192 72.0 6,860万 15.7
HRNet-W32(事前学習なし) 256×192 73.4 2,850万 7.10
HRNet-W32(ImageNet事前学習あり) 256×192 74.4 2,850万 7.10
SimpleBaseline(ResNet-152) 384×288 74.3 6,860万 35.6
HRNet-W48 384×288 76.3 6,360万 32.9

(論文の表1。APは関節位置の精度を複数の閾値で平均した値。)テストセット(test-dev)では、HRNet-W48 384×288は75.5でした。同じ入力においてSimpleBaselineよりもパラメータ数・計算量が少ないにもかかわらずより正確であるという点が、この表の要点です。「解像度を一度捨ててから取り戻す」よりも「最初から捨てない」方が効率的でした。

4. ヒートマップ:座標の代わりに地図を描く

U-NetとHRNetはどちらも 地図を出力します。セグメンテーションであれば画素ごとに「物体である確率」、姿勢・ボール探しであれば画素ごとに「関節(ボール)がここにある確率」を塗り込んだ ヒートマップです。正解データも地図として作成します。関節の位置に小さなガウス分布の山を描き、予測された地図と画素ごとの平均二乗誤差(MSE)を測定します。Stacked Hourglass(2016)は標準偏差1pxの山を使用しており、HRNetの論文にも1pxと記載されていますが、公式設定ファイルではσ=2が使用されています。出力解像度はHRNetの公式設定に基づき、入力の1/4(256×192 → 64×48)となっています。

やってみる:ヒートマップを座標に逆変換する

ヒートマップは最終的に座標に変換して使用します。方法は2つあります。

  1. argmax:最も明るいマスの位置。シンプルですが、マスの大きさ分の誤差が残ります。
  2. 加重中心:閾値(最大値の半分)を超えるマスの位置を、値に基づいて加重平均します。マスとマスの間の位置(サブピクセル)を復元します。

256×256の画像のランダムな位置2,000箇所にσ=2マスの山を描き、ヒートマップのストライド(元画像に対する縮小率)ごとに逆変換して元座標との誤差を測定しました(実測、ノイズのない理想的な場合)。

ストライド ヒートマップのサイズ argmax平均誤差 加重中心平均誤差
1 256×256 0.37px 0.05px
2 128×128 0.77px 0.10px
4 64×64 1.53px 0.20px
8 32×32 3.05px 0.40px

ここから2つのことが読み取れます。第一に、argmaxの誤差はストライドに正比例します。1/4解像度のヒートマップをargmaxで読み取ると、平均1.5pxの誤差がそのまま失われます。第二に、加重中心を使用すると誤差が7〜8倍に減少します。そのため、姿勢推定のコードではargmaxの後に隣接するマスに向けて1/4マス分移動させるような補正の後処理を追加し、ボール探しのWASBでは塊の 加重中心を使用します。ただし、実際のヒートマップにはノイズや2番目のピーク(蛍光灯のような偽のボール)が存在するため、この表ほどきれいにはいきません。

5. 限界

6. 我々のプロジェクトとのつながり

TT Scoreのボール探しは、本記事の系譜をそのまま踏襲しています(TT Scoreモデル解剖 第2回)。

次回の記事では、これらの地図をどのような基準で評価し、どのように学習させるのか、損失関数と学習手法について解説します。

ティティの一言。 1/8に縮小するとボールが消えちゃうんだ。だからボール探しモデルは大きな地図を最後まで持ち歩くんだよ。重いけれど、ボールを見失うよりはマシだからね。

参考文献

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます