[論文メモ] ViT2Hash: Unsupervised Information-Preserving Hashing

arxiv.org

教師なしで画像を情報を保存したバイナリコードにハッシュ化する

f:id:Ninhydrin:20220119090916p:plain

問題

既存の学習済みモデルを使う教師なしのハッシュ化手法は圧縮率は高いが、意味ある情報を保持するかはしっかり調査していない。

手法

f:id:Ninhydrin:20220119094623p:plain
学習済みモデルとしてViTを使ったInformation-Preserving Hashing (IPHash)を提案。
既存の学習済みモデルを使ってハッシュ化する手法では「画像から特徴量への変換」と「特徴量からバイナリハッシュへの変換」の2ステージがあり、このそれぞれのステージでの情報ロスを減らすことを考える。

ラベルの無い学習用データセット \boldsymbol{X} = \{x_i \}^N_{i=1}とする。
IPHashは2つのジュールからなる。

Feature-Preserving Module

「画像から特徴量への変換」の部分で図2のStage 1。
masked autoencoder(MAE)は画像のかなりの部分をマスクし、残された情報から画像を復元するタスクを学習する教師なし学習の手法。
MAEではかなりの部分をマスクしても復元できる、つまり残された僅かな部分でも空間情報が十分に含まれることがわかった。
これは今回のハッシュ化のように情報を保存しつつ圧縮するのに適しているので、MAEに倣ってマスクした特徴を学習する。

f:id:Ninhydrin:20220119093800p:plain
 RMはランダムマスク関数、 mはマスクレート。

特徴量抽出関数 f(\cdot:\theta)を使って d次元の特徴 vを取り出す。
f:id:Ninhydrin:20220119093948p:plain
バックボーンとしてViTを採用しており、 v_iはクラストークンを採用(なので v_i \in \mathbb{R}^{768}の固定長)。 \thetaは学習済みViTのパラメータでこれをより良いハッシュ化ができるようにfine-tuneする。
fine-tuneする前のパラメータによる特徴量から大きく離れない(画像の情報を保持する)ようにロスを設ける。
f:id:Ninhydrin:20220119094353p:plain
 v^{\verb|ViT|}_iはfine-tuneする前の学習済みパラメータによる特徴量。
マスクされた \tilde{x}_iが入力なので少ない情報から元の特徴を復元するタスクになり、より意味のある情報を取り出せるようになる。

Hashing-Preserving Module

「特徴量からバイナリハッシュへの変換」の部分で図2のStage 2。
得られた画像特徴 v_iを低次元に射影する。
f:id:Ninhydrin:20220119095023p:plain
 \phi \in \mathbb{R}^{768 \times \#bits}で、 \#bitsは圧縮したいビット数。
この \phiの学習には、Feature-Preserving Moduleと同様に元のViTの出力を利用する。
マスクしていない画像をViTに入力して得られた出力のクラス分類の分布をターゲットとする。
f:id:Ninhydrin:20220119095510p:plain
 W_0 \in \mathbb{R}^{1000 \times 768}は元のViTのクラス分類部分のパラメータ。

IPHashはクラス分類への出力部分を持っていないので、この W_0を利用してクラス分類の分布を出力する。
f:id:Ninhydrin:20220119095735p:plain

 z^{\verb|ViT|}_i z_iはKLダイバージェンスで最適化する。
f:id:Ninhydrin:20220119095819p:plain

学習済みのViTのクラス分類のモジュールの出力にはサンプル間の類似度情報も含まれており、それを利用するためにこのKLのロスを追加した。

この h_iを変換してハッシュ化する。
バイナリ化時の誤差をへらすために、 z_iをバイナリ後した b_i = sign(h_i)に対してコサイン類似度の正則化を加える。
f:id:Ninhydrin:20220120090706p:plain
 Mはペアの数。

また量子化誤差自体も最小化する必要がある。

f:id:Ninhydrin:20220120090839p:plain

最終的なロスは以下の式(10)
f:id:Ninhydrin:20220120090905p:plain

 \gammaは重みで、実験では \gamma = 0.1

なおテスト時の流れ(実際に画像をハッシュ化するとき)は図3を参照。
f:id:Ninhydrin:20220120091049p:plain

実験・結果

例のごとく省略。詳しくは論文参照。
f:id:Ninhydrin:20220120091215p:plain
f:id:Ninhydrin:20220120091244p:plain

圧縮率の高い16bitでも情報をしっかり埋め込んでいる。
f:id:Ninhydrin:20220120091305p:plain

所感

学習済みモデルの画像のハッシュ化。
意味の保存とのことだが、元の学習済みモデルが何を学習してるかによって意味も変わりそう。特にクラストークンだとクラス情報だけになっていそうな気がする。
ViTのクラストークンを使うのと全トークンの平均を使うのではどちらが良いのか。
セグメンテーションを学習済みモデルで全トークンの平均とかを使えば空間情報とかも含まれるかも?ほんまか?16bitとかでは厳しそう。