Closed5

【論文読解めも】Fine-tuning CNN Image Retrieval with No Human Annotation

takoroytakoroy

概要

画像検索のために、大量のアノテーションされていない画像を用いて、完全に自動化した方法でCNNを微調整することを提案している。
画像検索の精度を向上させる、トレーニング可能な一般化平均(GeM)Pooling層を提案している。この層は、MaxPoolingやAveragePoolingの一般化と捉えられる。

Radenović, Filip, Giorgos Tolias, and Ondřej Chum. "Fine-tuning CNN image retrieval with no human annotation." IEEE transactions on pattern analysis and machine intelligence 41.7 (2018): 1655-1668.

https://arxiv.org/abs/1711.02512

takoroytakoroy

アノテーションされていない大量の画像を使用している、ということになっているが、SfMを用いた3次元的な画像のクラスタリングを前処理としておこない、それをもとに正例(同一のクラスタに属し、一定の特徴点を共有する画像のペア)と負例(異なるクラスタに属する画像のペア)を作っている。

この辺りには深入りしないが、手順については4.2,5.1あたりに記載されている。

takoroytakoroy

Generalized-mean pooling

GeM PoolはMax PoolやAverage Poolの一般化として捉えられる。

CNNの出力である特徴マップ\mathcal{X} \in \mathbb{R}^{W \times H \times K}について、チャネルk毎にMaxをとるのがMax Poolである。画像検索の文脈では、このようにして得られる特徴量をMACベクトルと呼ぶ。

\mathbf{f}^{(m)}=\left[\mathrm{f}_{1}^{(m)} \ldots \mathrm{f}_{k}^{(m)} \ldots \mathrm{f}_{K}^{(m)}\right]^{\top}, \quad \mathrm{f}_{k}^{(m)}=\max _{x \in \mathcal{X}_{k}} x

チャネル毎に平均をとるのがAverage Poolである。画像検索の文脈ではSPoCベクトルと呼ぶ。

\mathbf{f}^{(a)}=\left[\mathrm{f}_{1}^{(a)} \ldots \mathrm{f}_{k}^{(a)} \ldots \mathrm{f}_{K}^{(a)}\right]^{\top}, \quad \mathrm{f}_{k}^{(a)}=\frac{1}{\left|\mathcal{X}_{k}\right|} \sum_{x \in \mathcal{X}_{k}} x

これらの操作は、以下のように一般化できる。Max Poolはp \rightarrow \inftyの時であり、Average Poolはp = 1の時である。このpは定数でも良いし、学習可能なパラメータすることもできる。チャネル毎に異なるパラメータp_kを設定しても良いが、共通化することもできる。

\mathbf{f}^{(g)}=\left[\mathrm{f}_{1}^{(g)} \ldots \mathrm{f}_{k}^{(g)} \ldots \mathrm{f}_{K}^{(g)}\right]^{\top}, \quad \mathrm{f}_{k}^{(g)}=\left(\frac{1}{\left|\mathcal{X}_{k}\right|} \sum_{x \in \mathcal{X}_{k}} x^{p_{k}}\right)^{\frac{1}{p_{k}}}

このようにして、得られた\ell_2正規化を適用することで特徴量が得られる。

takoroytakoroy

対照学習と損失関数

ペア画像から得られた\ell_2正規化を施した特徴量\overline{\mathbf{f}}(i), \overline{\mathbf{f}}(j)を用いて、以下のような損失関数が定義され、これを元にネットワークは訓練される。

\mathcal{L}(i, j)=\left\{\begin{array}{ll} \frac{1}{2}|| \overline{\mathbf{f}}(i)-\overline{\mathbf{f}}(j) \|^{2}, & \text { if } Y(i, j)=1 \\ \frac{1}{2}(\max \{0, \tau-\|\overline{\mathbf{f}}(i)-\overline{\mathbf{f}}(j)\|\})^{2}, & \text { if } Y(i, j)=0 \end{array}\right.
takoroytakoroy

白色化と回転

一度訓練したネットワークを用いて、そこから得られる特徴量を白色化して各次元の相関をなくしたうえで、PCAによって回転して固有値の大きい固有ベクトルD次元に圧縮する。最後に、\ell_2正規化を施して、最終的な特徴量が得られる。

これらの処理は、特徴抽出に使用するネットワーク部分のパラメータは固定し、データセット中のサンプルから得られる全ての特徴量をもちいて行われる。白色化は、正例ペアのみを用いて、以下のような共分散行列C_Sを計算する。

C_{S}=\sum_{Y(i, j)=1}(\overline{\mathbf{f}}(i)-\overline{\mathbf{f}}(j))(\overline{\mathbf{f}}(i)-\overline{\mathbf{f}}(j))^{\top}

また、PCAに関しては負例ペアのみを用いて、以下のような共分散行列をC_Dを計算する。

C_{D}=\sum_{Y(i, j)=0}(\overline{\mathbf{f}}(i)-\overline{\mathbf{f}}(j))(\overline{\mathbf{f}}(i)-\overline{\mathbf{f}}(j))^{\top}

C_S, C_Dを用いて、以下のような投影Pが得られる。\operatorname{eig}は、大きい固有値D個に対応する部分行列を取り出す操作である。

P=C_{S}^{-\frac{1}{2}} \operatorname{eig}\left(C_{S}^{-\frac{1}{2}} C_{D} C_{S}^{-\frac{1}{2}}\right)

Pを用いて、最終的な特徴量は、P^{\top}(\overline{\mathbf{f}}(i)-\mu)となる。\muは、全特徴量の平均である。

学習可能な白色化

論文では、P\muをLinear層として直接学習するという方法も試しており、こちらの方が精度が高くなっている。

このスクラップは2021/03/06にクローズされました