takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

今さらNetVLADの日本語解説

というわけで、自分が解説記事を書こうかと思い立ちました。

NetVLADが発表されたのは2016年のCVPRなので[1]、進化の早いAI分野では古めの技術となってしまいますが、画像検索(Image Retrieval)や、撮影場所の推定(Visual Place Recognition)などの論文に未だに現役で出てくる手法なので、この日本語記事が色んな人の役に立ったら良いなと期待してます。

NetVLADは1枚の画像全体を1つの特徴ベクトル(Global Feature)に変換するためのもので、例えば画像検索タスクであれば、クエリー画像から抽出した特徴ベクトルとデータベース内に格納された特徴ベクトルとの距離を計算し、最も短いものを検索結果として取得することができます。

NetVLAD自体は、深層学習の1レイヤーでしかなく、ResNetやVision Transformer等のバックボーンネットワークの最終層に追加するだけで、特徴マップを1つの特徴ベクトルへ変換してくれます。 そのため非常に汎用性が高く、例えば点群などの異なるドメインの問題にも適用されてきました[2]。

VLAD

まずはNetVLADの前にVLADという特徴量について簡単に説明します[3]。 深層学習が登場する前、画像検索のタスクや一般物体認識などのタスクでは、局所特徴量(Local Feature)というものが主に利用されてきました。これは、画像からコーナーなどの顕著性のある点、またはグリッド状に点をサンプリングし、その周辺領域のテクスチャを特徴ベクトルへと変換したもので、代表的なものとしてSIFTがあります。なお、SIFTなどの人間がデザインした画像特徴量表現のことを「ハンドクラフト特徴」と呼び、特徴量自体を学習するニューラルネットワークベースの手法と区別します。

VLADはこの画像から抽出した局所特徴量を、画像全体をあらわす1つの特徴ベクトル(Global Feature)へ集約させるための手法の1つです。

VLADははじめに、学習画像から取得した局所特徴量をk-means等でクラスタリングし、Visual Wordsと呼ばれる辞書を作成します。

VLADはクエリー画像に対しても同様に局所特徴量を抽出し、各局所特徴がどのVisual Wordに属するのかを探索し、以下のような式で画像全体の特徴ベクトル(Global Feature)を記述します。

今、1枚のクエリー画像からN個のD次元局所特徴量を取得し、またVisual Wordsの数をK個とすると、VLAD特徴は以下の式(1)で計算できるK x D次元ベクトルになります。

式(1)

ここで、 \mathbf{x}_iはi番目の局所特徴量をあらわし、 x_i(j)はそのj番目の要素を表すものとします。また c_k(j)はk番目のVisual Wordベクトルのj番目の要素です。

 a_k( \mathbf{x_i})は、局所特徴量 \mathbf{x}_iがk番目のVisual Wordに割り当てられたときは1、そうでないときは0の値を取ります。

この式の意味するところは、以下の図のように各Visual Wordごとに、そこに割り当てられた局所特徴量との差分を取って合計し、それを並べたものをGlobal Featureとする、ということになります。

VLAD特徴

NetVLAD

NetVLADは深層学習ブームの初期に登場した手法で、それまでGlobal Featureの生成に使用していたハンドクラフト特徴を、より強力な深層学習の特徴マップに置き換えよう、という目的で提案されました。

NetVLADはVLADを表す式(1)を学習可能とするために、いくつかの工夫をしています。

1つは \mathbf{x}_iクラスタkに属するかどうかで1か0の二値を取っていた a_k (Hard Assignment)を、以下のように0から1までの連続値を取るように変更します(Soft Assignment)。

式(2)

ここで \mathbf{c}_kはk番目のクラスタ中心(セントロイド)で、 \alphaはセントロイドからの距離に応じて減衰を調整するパラメータです。なお \alpha \rightarrow \inftyの時、通常のVLADと同じになります。

さて、 -\alpha ||\mathbf{x}_i - \mathbf{c}_k||^2を展開すると、 e^{-\alpha \mathbf{x}_i^2} が分母と分子でキャンセルされるので、 \mathbf{w}_k = 2 \alpha \mathbf{c}_k b_k = -\alpha \mathbf{c}^2とすると以下式(3)のように書けます。

式(3)

まとめると、NetVLAD特徴は以下の式(4)で算出されます。

式(4)

NetVLADでは、この \mathbf{w}_k b_k \mathbf{c}_kをそれぞれ独立したパラメータとして、学習により求めます。 (式展開の時に \mathbf{w}_k b_k \mathbf{c}_kが含まれていましたが、無視して独立したパラメータとして扱います)

これらのパラメータを教師あり学習で計算すると、VLADと比べて下の図のような利点があります。

学習の利点

この緑と赤の点が異なる画像から取得した局所特徴量の場合、k-means等のUnsupervisedな方法で求めたVisual Word (×)よりも、より識別に有利なVisual Word (★)を学習することが可能になります。

さて、NetVLADはD次元の特徴ベクトル \mathbf{x}_iを可変サイズ個入力すると、1つのK x D次元ベクトル \mathbf{V}を出力してくれます。

このD次元ベクトル \mathbf{x}_iは、VLADでは1枚の画像から抽出した疎な局所特徴量群でしたが、NetVLADではこれが特徴マップ全体になります。

従って、NetVLADは特徴マップを生成するバックボーンネットワークの最終層に追加する形で使用されます。

全体アーキテクチャ

Paper with CodeのVisual Place Recognitionタスクにおいて、本稿執筆時点でMapillary val、Oxford RobotCar Dataset、Baidu Mall等のデータセットで1位を取っているAnyLocは[4]、基盤モデルであるDINOv2上にNetVLADレイヤーをつけています。

ただし、なぜかSoft Assignment使うよりもHard Assignmentを使う方が性能が良かったそうです。(あれ?)

まとめ

というわけで、NetVLADについて簡単に解説しました。僕は深層学習前からコンピュータビジョンをやっているオジサンなので、VLADというハンドクラフト特徴を、自然な形で深層学習用に移行させたのが美しいなあと思っています。

他にも、特徴マップをGlobal Featureへ変換する方法としてGeM Pooling[5]なども有名で、Image RetrievalではGlobal Features are All you needという論文[6]がこのGeM Poolingを組み合わせてROxford等でSoTAをとっています。他にも深層学習用のGlobal Featureは色々あるみたいですが、必要が出たら調べてみます。

参考文献

[1] Arandjelovic, R., Gronat, P., Torii, A., Pajdla, T., & Sivic, J. (2016). NetVLAD: CNN Architecture for Weakly Supervised Place Recognition. IEEE Conference on Computer Vision and Pattern Recognition.

[2] Uy, M. A., & Lee, G. H. (2018). PointNetVLAD: Deep Point Cloud Based Retrieval for Large-Scale Place Recognition. Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR)

[3] Jegou, H., Douze, M., Schmid, C., & Perez, P. (2010). Aggregating local descriptors into a compact image representation. IEEE Conference on Computer Vision and Pattern Recognition,

[4] Keetha, N., Mishra, A., Karhade, J., Jatavallabhula, K. M., Scherer, S., Krishna, M., & Garg, S. (2024). AnyLoc: Towards Universal Visual Place Recognition. IEEE Robotics and Automation Letters

[5] Radenovic, F., Tolias, G., & Chum, O. (2019). Fine-Tuning CNN Image Retrieval with No Human Annotation. IEEE Transactions on Pattern Analysis and Machine Intelligence

[6] Shao, S., Chen, K., Karpur, A., Cui, Q., Araujo, A., & Cao, B. (2023). Global Features are All You Need for Image Retrieval and Reranking. IEEE International Conference on Computer Vision. https://doi.org/10.1109/iccv51070.2023.01013