Transformer in Transformer
論文リンク
リポジトリリンク
どんなもの?
- ViTは画像をパッチのシーケンスとして扱うが、各パッチ内の本質的な構造情報(局所的な特徴)を使えていない。
- 本論文では、Transformer-iN-Transformer (TNT)を提案。パッチレベルの特徴とピクセルレベルの特徴の両方を獲得することができる。
- TNTは、従来のViTのようなパッチレベルのembedding (Patch embedding)に加えて、ピクセルレベルのembedding (Pixel embedding) を使用する。Pixel embeddingは各パッチをUnfold (im2col) して、FC層で線形変換したembedding。TNTの処理手順は以下。
- Pixel EmbeddingにTransformer (Inner T-Block) をかける
- 1をconcat
- 2をPatch embeddingと同じ次元にFC層で変換して、Patch embeddingに足し合わせる
- 3にTransformer (Outer T-Block) をかける
- 1と4をそれぞれ次のレイヤのPixel embeddingとPatch embeddingとして用いる
- TNTブロックを多層にすることで画像認識用のTNTモデルを構築する。
- ImageNetのtop-1 accuracyで81.3%を達成。DeiTと同程度の計算コストで精度は1.5%高い。
The Devil is in the Details: Delving into Unbiased Data Processing for Human Pose Estimation (UDP)
論文リンク
リポジトリリンク
どんなもの?
Top-down型のポーズ推定手法のデータ処理について初めて体系的な研究を行った。SOTA手法のデータ変換方法やencoding-decoding方法を調査した結果、以下の2つの問題が手法の性能を著しく低下させていることを発見した。
- 推論時のflip TTAで得られる結果は元画像から得られる結果と座標が整合しない。
- 学習時と推論時の標準的なencoding-decoding処理には、統計誤差がある。
これらの問題に対してUnbiased Data Processing (UDP)を提案。UDPのアプローチは以下の二つ。
- データ処理を、ピクセルに基づく離散空間の代わりに、ピクセル間の間隔に基づいた連続空間で行う。→画像やマップの大きさを(width, height)とする代わりに、(width - 1, height - 1)とする。
- オフセットマップを用いてキーポイント座標をサブピクセル推定する。
UDPはモデルに依存しないアプローチであり、COCO test-devにおいて、SimpleBaseline-ResNet50-256x192を1.5 AP (70.2 →71.7)、HRHet-W32-256x192を1.7AP (73.5→75.2) 向上させることに成功した。UDPをもちいたHRNet-W48-384x288は76.5 AP(Top-down型のSOTA)。
技術や手法のキモ
Data Transformation
ここで言うデータ変換とは、画像やネットワーク入出力などの異なる座標系間のキーポイント座標を変換すること。このプロセスにおいて、ほとんどのSOTA手法は画像のサイズを測定するためにピクセルを使用しており、推論でflip TTAを使用する際に不整合な結果につながる。
Simple Baselines for Human Pose Estimation and TrackingとDeep High-Resolution Representation Learning for Human Pose Estimationでは、flip画像に対する推論結果をネットワーク出力座標系で1ピクセルだけシフトさせることで、予測誤差を抑制している。 Cascaded Pyramid Network for Multi-Person Pose EstimationとRethinking on Multi-Stage Networks for Human Pose Estimationでは、ネットワーク入力座標系でflip TTAとの平均結果を2ピクセルシフトさせることで同様の効果を得ている。どちらのアプローチも効果的なものの限定的。
従来手法と提案手法それぞれのデータ変換プロセス。
Analysis of the Standard Data Transformation
従来の画像座標系(${ }^{s} \mathbf{k}$)からネットワークの入力座標系(${ }^{i} \mathbf{k}$)への変換は、以下のアフィン変換で行われる。
この変換は、以下の2つのステップと同等。
- 画像からRoI領域をクロップしてにリサイズ。
- 1の結果を右端と下端の両方で1ピクセルずつクロップして、のサイズの画像を得る。
ヒートマップのGTを作成するためのネットワークの入力座標系(${ }^{i} \mathbf{k}$)から出力座標系(${ }^{o} \mathbf{k}$)への変換は、ストライドを用いて以下のように変換される。
${ }^{o} \mathbf{k}=\frac{1}{s}{ }^{i} \mathbf{k}$
推論時におけるネットワークの出力座標系(${ }^{o} \hat{\mathbf{k}}$)から画像座標系(${ }^{s} \hat{\mathbf{k}}$)への変換は以下の通り。
この変換は、以下の2つのステップと同等。
- ネットワークの出力ヒートマップからの領域をクロップ。
- 1の結果を画像内の対応するbboxにマッピング。
以上の変換方法では、flip TTAにおいて$\left|-\frac{s-1}{2 s}\right|$ (flip TTAとの平均結果を2ピクセルシフトさせる場合) または$\left|\frac{1}{2 s}\right|$ (1ピクセルシフトさせる場合) の誤差が生じる。
The Proposed Data Transformation
提案するデータ変換では画像サイズの測定基準として、ピクセル数(width, height)ではなく、隣接する2つの画素間の距離として定義される単位長(width - 1, height - 1)を用いる。
画像座標系(${ }^{s} \mathbf{k}$)からネットワークの入力座標系(${ }^{i} \mathbf{k}$)への変換は以下のようになる。
ネットワークの入力座標系(${ }^{i} \mathbf{k}$)から出力座標系(${ }^{o} \mathbf{k}$)への変換は、ストライドを用いて以下のように変換される。
${ }^{o} \mathbf{k}=\frac{1}{t}{ }^{i} \mathbf{k}$
推論時におけるネットワークの出力座標系(${ }^{o} \hat{\mathbf{k}}$)から画像座標系(${ }^{s} \hat{\mathbf{k}}$)への変換は以下の通り。
以上の方法を用いることで、flip画像に対する推論結果は元の画像の結果と正確に一致する。
Encoding and Decoding
Analysis of the Standard Encoding-decoding
The standard encoding method
GTのキーポイント座標$\mathbf{k}=(m, n)$について、下式のように量子化(intに丸め)して$\mathbf{k}_q$を得る。($\mathcal{R}$は丸め演算を表す。)
そして、$\mathbf{k}_q$を中心とするヒートマップを以下の式から生成する。
The standard decoding method
ネットワークの出力ヒートマップ$\hat{\mathcal{H}}(x, y, \hat{\mathbf{k}})$について、理想的な条件下においては$\hat{\mathcal{H}} = \mathcal{H}$となる。 Simple Baselines for Human Pose Estimation and TrackingとDeep High-Resolution Representation Learning for Human Pose Estimationでは、まず最大値を持つ座標$\hat{\mathbf{k}}_{q}$を取得する。
の理想的な位置はであるので、$\mathbf{k}$が画像平面上で一様分布していると仮定すると、x,yそれぞれの方向における誤差の期待値は単位長、分散はとなる。
Simple Baselines for Human Pose Estimation and TrackingとDeep High-Resolution Representation Learning for Human Pose Estimationでは、この誤差を減らすためにそれぞれの方向について、以下のように$\hat{\mathcal{H}}$における勾配に応じて$\hat{\mathbf{k}}_{q}$を0.25単位長シフトさせる。
こうした場合、誤差の期待値は$1/8$単位長、分散は$1 / 192 \approx 0.0052$まで低減される。
予測誤差においてはdecodingによる誤差が支配的であり、推論時のflip TTAにおける誤差$\left|\frac{1}{2 s}\right|$はほとんど影響しない。そのため、従来手法の統計誤差をなくすためには新たなencoding-decoding方法が必要。
The Proposed Encoding-decoding
Towards Accurate Multi-person Pose Estimation in the Wildから着想を得たオフセットベースのencoding-deconding方法を提案する。
GTのキーポイント座標$\mathbf{k}=(m, n)$を以下のヒートマップ (intへの丸めは行わない)
と以下の二つのオフセットマップにencodeする。
$\mathcal{X}(x, y, \mathbf{k})=m-x$
$\mathcal{Y}(x, y, \mathbf{k})=n-y$
推論時は、まずガウシアンカーネル$K$をネットワークの出力ヒートマップにかけてから最大値を持つ座標を取得する。
$\hat{\mathbf{k}}_{h}=\operatorname{argmax}(\hat{\mathcal{H}} \otimes K)$
$K$はオフセットマップのスムージングにも使用する。最終的な推定座標は以下のようになる。
以上の方法によって、理想的な条件下($\hat{\mathcal{H}}=\mathcal{H} \text { and } \hat{\mathcal{X}}=\mathcal{X} \text { and } \hat{\mathcal{Y}}=\hat{\mathcal{Y}}$)における統計誤差は0になる。
有効性の検証
detectorにはHTCを使用。学習設定はSimple Baselines for Human Pose Estimation and Tracking、Deep High-Resolution Representation Learning for Human Pose Estimationと同様。
Comparison with State-of-the-arts
以下の二つがポイント。
異なるbackboneのモデルそれぞれの性能がUDPによって向上しており、UDPがモデルに依存しないアプローチであることを示している。
入力サイズが小さいほどUDPによる改善効果が大きい。これはUDPによってデータ処理やencoding-decodingによる誤差が抑えられていることを示している (入力サイズが小さいほど、ネットワークの出力マップ座標系から画像座標系に変換する際の誤差の影響が大きくなるため)。
Ablation Study
A-B間の比較とC-D間の比較はflip TTAなしの場合のproposed data transformation (DT)による改善効果を示しており、著者の説明通りflip TTAを行わない場合はほぼ影響がないことがわかる。
A-C間の比較はflip TTAなしの場合のproposed encoding-decoding (ED) による改善効果を示しており、flip TTA関係なく効果があることがわかる。
flip TTAありの場合はDT単体の改善効果は+2.4AP (E-H間)で、従来手法のflip後に1ピクセルシフトさせる方法の改善効果(+2.3AP)と比較すると若干上。ED単体の改善効果は+1.2AP (E-I間)。両方を用いることで+3.5AP (E-K間)の改善効果。
コメント
性能向上はオフセットマップの導入によるところが大きいが、それ自体の新規性は低いのでデータ変換の改良もアピールしてる感じ。
HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Estimation
論文リンク
リポジトリリンク
解説リンク
どんなもの?
HRNetベースのBottom-up型のポーズ推定手法であるHigherHRNetを提案。Bottom-up型では、Top-down型のように人物のスケールを正規化することができないため、様々なサイズの人物に対する推定が難しい。HigherHRNetでは、以下の方法によってこの問題に対処。特に小さい人物のキーポイントをより正確に推定することを可能にした。
- High-resolution Feature Pyramid: 高解像度な特徴ピラミッド(従来の特徴ピラミッドのスケールが1/32~なのに対して、HigherHRNetの場合は1/4~1/2)を用いる。
- Multi-Resolution Supervision: 学習時は複数解像度のヒートマップに対して学習ロスを計算する。
- Heatmap Aggregation: 推論時は複数解像度のヒートマップを集約したものを最終的なヒートマップとして用いる。
COCOのtest-devでは、Top-down方には及ばないものの、従来のBottom-up型を凌駕する70.5%APを達成。CrowdPoseでは、67.6%APという(超多人数向けの)Top-down型手法よりも高い精度を出しており、混雑シーンに対するロバスト性を示している。
技術や手法のキモ
HigherHRNet
以下の図がHigherHRNetのネットワーク構造。左部分がオリジナルのHRNetで右部分がHigherHRNetで追加されたモジュール。HRNetの出力にDeconvolutionをかけることで1/2と1/4のスケールのヒートマップを出力する。
Multi-Resolution Supervision
従来のBottom-up型のポーズ推定手法が最も解像度の高いヒートマップについてのみ学習を行っていたのに対して、HigherHRNetでは、スケールのバラつきに対応するために、複数の解像度のヒートマップについて学習を行う。(Bottom-up型のポーズ推定手法における新規性)
ヒートマップのGTを作成する際のガウシアンカーネルの標準偏差は、すべての解像度で同じもの(論文では2)を用いる。そうすることで相対的に、高解像度のヒートマップでは小さい標準偏差、低解像度のヒートマップでは大きい標準偏差というように、異なるスケールのキーポイントを推定するのに適した状態になるため。
各ヒートマップに対してMSEを計算し、それらの和を最終的なロスとする。
FPNのように各ヒートマップに異なるスケールの人物を割り当てないのは以下の理由から。
- FPNのGT割り当てに関するヒューリスティックスは、データセット(人物のスケールの分布 vs すべての物体のスケールの分布)とネットワーク構造(HigherHRNetのピラミッドが2段階なのに対してFPNは4段階)の両方に依存しており、HigherHRNetに合わせたものを発見するのが困難であるため。
- ガウシアンカーネルを用いてヒートマップのGTを作成するので、各キーポイントは相互作用する。そのため、単にマスクをかけたりするだけでは、キーポイントを切り離すことは非常に困難であるため。
Heatmap Aggregation for Inference
推論時は、すべての解像度のヒートマップを入力画像と同じサイズにバイリニア補間でリサイズして、それらの平均をとることでヒートマップを集約する。
heatmap aggregationを行う理由はスケールに応じたポーズ推定を可能にするため。例えば、COCOに含まれる人物のスケールの$322$から$1282$以上まであり、分散が大きい。Top-down型では、ほぼ単一のスケールに正規化することでこの問題に対処できるが、Bottom-up型では、スケールを考慮した推定を行う必要がある。HigherHRNetでは、heatmap aggregationによって、低解像度のヒートマップで小さい人物を見逃しても、高解像度のヒートマップでリカバリすることができる。
Grouping
Bottom-up型では、キーポイントを人物ごとにグループ化する必要がある。HigherHRNetでは、ヒートマップに加えて、人物ごとの特徴を示すEmbeddingを出力し、EmbeddingのL2距離が小さいキーポイントをグループ化する。
この方法に新規性はなく、Associative Embedding: End-to-End Learning for Joint Detection and Grouping (NIPS 2016)で提案されたもの。
下図のTagsと書かれているマップがEmbeddingを可視化したもの。
Groupingには低解像度なヒートマップ(1/4)を用いる。理由はグローバルな意味づけを必要とするため。
Training
画像から512x512のサイズの画像をクロップ。
Data augmentationは以下の3つ。
- random rotation ($[-30^\circ, 30^\circ]$)
- random scale ($[0.75, 1.5]$)
- random translation ($[-40, 40]$)
- random horizontal flip
以上の設定はAssociative Embedding: End-to-End Learning for Joint Detection and Grouping (NIPS 2016)と同じもの。
有効性の検証
以下は既存のBottom-up型のポーズ推定手法との比較。最も良い性能を示している。
以下はTop-down型も含めた比較。高精度になったもののTop-down型には及ばない。
追加モジュールの有効性の検証。
CrowdPoseを用いた比較。Top-down型を上回る性能。(おそらく)計算コストの条件を同等にするために、Top-down型の手法の中でも人数増加に比例する計算コストの増加が比較的少ない手法を比較対象としている。(例えば、Mask RCNNはすべての人物で特徴マップを共有している。)
Distribution-Aware Coordinate Representation for Human Pose Estimation (DARK)
論文リンク
リポジトリリンク
解説リンク
どんなもの?
ポーズ推定手法の、学習時にGTのキーポイント座標からヒートマップを作成する処理と、テスト時の出力マップからキーポイント座標を算出する処理を改良したDARK (Distribution-Aware coordinate Representation of Keypoint)を提案。DARKはモデルに依存しないプラグインとして機能するため、様々なポーズ推定モデルの性能を大幅に向上させることができる。サブピクセル推定の精度が向上するため、入力解像度が小さい場合でも精度よくキーポイントを検出することができる。HRNet-W48にDARKを組み合わせたモデルがMPIIとCOCOでSOTA。
手法と技術のキモ
Coordinate Decoding
ヒートマップが二次元の正規分布に従うと仮定し、ヒートマップの最大値の座標(=キーポイント座標)を正規分布の平均$\mu$としてサブピクセル推定する。
ヒートマップを以下のような二次元の正規分布として表現。
対数をとっても最大値を持つ座標は変わらないため、上式を以下のように変形する。
平均$\mu$において、正規分布の勾配は0になるため以下が成り立つ。
をにおけるテイラー展開で近似すると以下のようになる。
は$\mathcal{P}$のにおける二次導関数であり、以下のように表される。
以上より$\mu$について、以下の式が導出される。
$\mu = m - (D''(m))^{-1} D'(m)$
$\mu$はキーポイント座標。はヒートマップの最大値の座標。$D'(m)$はヒートマップのにおける一次微分。$D''(m)$はヒートマップの$m$における二次微分(ヘッセ行列)。実装上は以下のようになる。
# px, pyが最大値の座標 # 一次微分 dx = 0.5 * (hm[py][px+1] - hm[py][px-1]) dy = 0.5 * (hm[py+1][px] - hm[py-1][px]) # 二階偏微分 dxx = 0.25 * (hm[py][px+2] - 2 * hm[py][px] + hm[py][px-2]) dxy = 0.25 * (hm[py+1][px+1] - hm[py-1][px+1] - hm[py+1][px-1] + hm[py-1][px-1]) dyy = 0.25 * (hm[py+2*1][px] - 2 * hm[py][px] + hm[py-2*1][px]) # D'(m) derivative = np.matrix([[dx], [dy]]) # D''(m) hessian = np.matrix([[dxx, dxy], [dxy, dyy]]) if dxx * dyy - dxy ** 2 != 0: hessianinv = hessian.I # -(D''(m))^{-1} D'(m) offset = -hessianinv * derivative offset = np.squeeze(np.array(offset.T), axis=0) # m - (D''(m))^{-1} D'(m) coord += offset
「二次元の正規分布に従う」という仮定を強めるために、上記の処理の前にヒートマップにガウシアンブラーをかける。ガウシアンブラーをかけるだけだとヒートマップのスケールが変化してしまうため、ヒートマップの最小値と最大値を用いて正規化する。
Coordinate Encoding
GTのキーポイント座標からヒートマップを作成する処理を改良。既存手法はキーポイント座標を整数にしてから、ヒートマップを作成していたのに対して、DARKでは連続値のままヒートマップを作成する。
有効性の検証
Coordinate Decodingの有効性の検証。Standard Shiftingは既存手法のdecodingで行われる0.25 * sign(diff)を座標に加える処理のこと。DARKのdecodingが最も良い性能を示している。
Coordinate Encodingの有効性の検証。UnbiasedがDARKによるもの。
入力解像度がモデルの推論効率に関わる重要な要素であると考え、解像度が精度に与える影響を検証。すべての解像度においてDARKを使用した方が良い精度を示している。特に入力解像度が128x96のときが顕著。
既存手法との比較。
TResNet: High Performance GPU-Dedicated Architecture
どんなもの?
近年のDeep Learningのモデルは、ResNet50と比較して低いFLOPsで高い精度を出しているが、GPUによる学習・推論速度はResNet50と同等以下なものが多いことを指摘。本論文では、GPUに最適なネットワーク構造と実装の工夫によって、実際の学習・推論速度が高速、かつ高精度なモデルであるTResNetを提案。
ネットワーク構造
ネットワーク構造の工夫は以下の5つ。
- SpaceToDepth Stem
- Anti-Alias Down Sampling
- In-Place Activated BatchNorm
- New Block-type Selection
SpaceToDepth Stem
多くのネットワークでは、最初の数層に解像度を大きく下げる構造(例えば、ResNet50だとconv7x7(stride=2)->maxpoolの部分)が入っており、Stemと呼ばれる。TResNetではStemとしてSpaceToDepth Stemを用いる。SpaceToDepth Stemは、例えば解像度を1/2にする場合は、stride=2で抽出したピクセルをチャネル方向にconcatする。多分コードを見た方がわかりやすい。
class SpaceToDepth(nn.Module): def __init__(self, block_size=4): super().__init__() assert block_size == 4 self.bs = block_size def forward(self, x): N, C, H, W = x.size() x = x.view(N, C, H // self.bs, self.bs, W // self.bs, self.bs) # (N, C, H//bs, bs, W//bs, bs) x = x.permute(0, 3, 5, 1, 2, 4).contiguous() # (N, bs, bs, C, H//bs, W//bs) x = x.view(N, C * (self.bs ** 2), H // self.bs, W // self.bs) # (N, C*bs^2, H//bs, W//bs) return x
図だと以下のような感じになる。
Anti-Alias Down Sampling
Stem以外の解像度を下げる機構としてstride=2のconv3x3の代わりに、Anti-Alias Down Samplingを用いる。Anti-Alias Down Samplingでは以下の図のように、重み固定のBlurフィルタでダウンサンプリングを行うことで、エイリアシングを抑える。これによってネットワークのシフト不変性が向上する。
In-Place Activated BatchNorm
全てのBatchNorm+ActivationをInplace-ABNで置き換える。Inplace-ABNはBN+Activationを一つのinplaceな演算で実現したもの。これによってGPUのメモリ消費量が下がり、より大きなバッチサイズで学習可能になるため、学習速度を高めることできる。
Block-Type Selection
ResNetはconv3x3->conv3x3のBasicBlockと、conv1x1->conv3x3->conv1x1のBottleneckの二つのブロックから構成されている。Bottleneckの方がBasicBlockよりもGPUの使用率が高いが、精度は高くなる。TResNetでは、効率性を高めるために、解像度の高いStage1,2はBasicBlock、Stage3,4はBottleneckを用いる。チャネル数を変えた3モデル(M,L,XL)を用意。
Optimized SE Layers
演算コストを抑えるためにSqueeze-and-excitationモジュールのreductionパラメータと、Blockに挿入する位置を工夫。Bottleneckではreduction=8とするとともに、チャネル数の少ないconv3x3の後段に挿入する。また、チャネル数の大きいstage4では使用しない。
コード最適化
コード最適化の工夫は以下の3つ。どれもPyTorchを使用する前提のもの。
- JIT Compilation
- Inplace Operations
- Fast Global Average Pooling
JIT Compilation
学習の必要ないモジュール(BlurフィルタとSpaceToDepthモジュール)にPyTorchのJITコンパイル(torch.jit.script)を用いることで、学習・推論速度を高める。
Inplace Operations
PyTorchでは、inplaceな演算はテンソルの値をコピーすることなく直接変更するため、GPUのメモリ使用を抑えることができる。TResNetではできる限りの演算をinplaceにする。
Fast Global Average Pooling
PyTorchにはGlobal Average Poolingを行うクラスとしてAdaptiveAvgPool2dとAvgPool2dがあるが、AvgPool2dの方が高速。しかし、さらにPyTorchのview,meanメソッドでテンソルを直接操作した方が、AvgPool2dの5倍高速であることがわかったため、これをFast Global Average Poolingとして使用する。
有効性の検証
ResNet50との比較
入力画像サイズは224x224。TResNet50-Mは学習速度以外はResNet50に優っている。Batch Sizeは2倍になっているため、メモリ使用がかなり抑えられていることがわかる。→メモリの貧弱なGPUでも動かせる。
Ablation Study
どの工夫も精度or速度に寄与している。
High-Resolution Fine-Tuning
入力画像サイズ224x224で学習したモデルを448x448で10epochだけFine-tuningした結果。TResNet-XLは84.3%と高い精度を出している。
EfficientNetとの比較
精度と学習・推論速度についてEfficientNetと比較。TResNetの方が良いトレードオフを示している。
所感
かなり良い性能を示しておりpretrained modelも公開されているので、kaggleなどでも使われるようになっていくかもしれない。
Fixing the train-test resolution discrepancy
どんなもの?
- 画像分類タスク(特にImageNet)では、学習時のData AugmentationにRandomResizedCrop、テスト時の前処理にResizeとCenterCropが良く使われるが、この方法ではテスト時の入力画像のスケールの分布が学習時よりも小さくなってしまうことを指摘。
- テスト時の入力画像のサイズを学習時よりも大きくすることで対処。
- テスト時の入力画像サイズを学習時から変更すると、Average Poolingをかけた後の特徴マップの分布も変わってしまうため、後段の層のみfine-tuning。
- この方法でResNeXt-101 32x48dを学習させることで、ImageNetにおいてSOTAであるEfficientNet-B7を上回る精度(top-1: 86.4, top-5: 98.0)を達成した。
Consistency-based Semi-supervised Learning for Object Detection
http://papers.nips.cc/paper/9259-consistency-based-semi-supervised-learning-for-object-detection.pdf
どんなもの?
- ラベル付きデータとラベル無しデータを用いた半教師あり学習による物体検出手法。
- 通常の物体検出の分類と位置推定の学習に加えて、オリジナルの画像に対する検出結果と水平方向にフリップした画像に対する検出結果を一致させるように学習する。
- 1-stageと2-stage両方の検出器について有効性を確認した。