I am Charmie

メモとログ

HPatches

HPatchesの概要

  • CVPR2017で発表された論文
  • 画像の局所特徴記述子を評価するためのベンチマークを提案
  • 複数のタスクで既存手法を評価

背景

  • 既存のデータセット・評価方法
    • 評価の全ての側面を明らかにしていない
    • 論文に掲載される結果に曖昧性や非一貫性が生じる
    • 近年提案された学習型記述子の性能を十分評価できない
  • 本研究
    • 学習・評価のための新しい大規模データセットを提案
    • マッチング,検索,分類における厳密な評価法を定義
    • Oxford matching dataset (48枚のみ)に触発
    • 以下を考慮して設計
      • データの多様性 (Data diversity)
        • 撮影条件を変更しながら撮影した大量のシーケンス
        • 視点,照明,temporal condition
        • 画像に対してtransformationの真値を付与
      • 再現性と公平性 (Reproducibility and fairness)
        • 検出器の影響を排除するため,画像全体ではなく画像パッチ
      • タスクの多様性 (Task diversity)
        • patch verification (classification of patch pairs)
        • image matching
        • patch retrieval
  • Metrics
    • Receiver Operating Characteristic (ROC) Curve
      • 分類問題のための評価値
      • パッチマッチング問題のようなunbalancedな問題には不適
      • ROCの値が高くてもタスクにおける性能が高い保証がなくなってしまう
    • Precision-Recall,mean Average Precision (mAP)

提案

Homographyがアノテートされた大規模データベースを提案.

画像

既存データベースも含め,様々な提供元から収集

  • 見えの変化
    • 57シーン: 照明変化がメイン
    • 59シーン: 視点変化による幾何変化がメイン
  • 1シーケンスに含まれるデータ
    • 参照画像 (1枚)
    • ターゲット画像 (5枚)
    • 参照画像からターゲット画像への変形を表すHomography (Mikolajczyk and Schmid 2005の手法で推定)

データ作成

シーケンス

  • 自身で撮影した画像
  • 他のデータセットに含まれている画像

パッチ

65x65画素のパッチ

  1. 参照画像上のパッチ抽出
  2. 複数の特徴点検出器を使い,参照画像からパッチを抽出
    • Loweの方法を使いパッチの傾きを求める
    • affine adaptationはしない = 全パッチは参照画像上では正方形
  3. 検出されたスケールに対して5倍に拡大した領域を抽出
    • 拡大した領域が画像からはみ出るパッチは除外
  4. ターゲット画像上のパッチ抽出
  5. 参照画像の各パッチに対してaffine jitterを適用
    • 特徴点検出器のエラーを再現するため
    • jitterの種類
      • 2次元の回転 $\theta$
      • 非等方性スケーリング ($s/\sqrt{a}$, $s\sqrt{a}$)
      • 2次元の並進 ($[m t_x, m t_y]$) $m$は検出スケール
    • jitterの強度は3種類
      1. Easy
      2. Hard
      3. Tough
    • jitterの強度が大きくなると,jitter適用前後のパッチに共通して映る領域が小さくなる
  6. jitterを加えた参照画像上のパッチをターゲット画像上に投影
    • Homography(真値)を使う

データ構造

  • ルートディレクトリ(hpatches-release)にi_SEQUENCE, v_SEQUENCEという名前のディレクトリが含まれている
    • i_SEQUENCE: 照明の変化による見えの変化が大きい
    • v_SEQUENCE: 視点の変化による見えの変化が大きい
  • ディレクトリ内のファイル
    • 画像ファイル: 複数のパッチをつなげて一つにしたファイル 65x69680画素 = 65x65のパッチを縦に1720個つなげた
      • 参照画像 (ref.png)
      • ターゲット画像 (参照画像に対応するパッチにgeometric noiseとしてaffine jitterを付与したパッチが5枚 x 3種類)
        • eX.png: geometric noiseが小 = easy
        • hX.png: geometric noiseが中 = hard
        • tX.png: geometric noiseが大 = tough
        • X = {1, 2, 3, 4, 5}
    • Homographyの真値 (H_ref_X)
      • 拡張子なし
      • 3行のcsvファイル
    • jitterのパラメータ
      • 非等方性スケーリング (.anisjitter, .scjitter) それぞれ$a,s$に対応?
      • 回転 (.rotjitter): パッチ毎の$\theta$の値
      • 並進 (.trjitter): パッチ毎の何かの値.スカラーなので,$t_x = t_y$?

Full sequences

パッチに分割していない画像も公開されている.
基本的なデータ構造はパッチデータセットのデータ構造と同じ

データ構造

  • ルートディレクトリ(hpatches-release)にi_SEQUENCE, v_SEQUENCEという名前のディレクトリが含まれている
    • i_SEQUENCE: 照明の変化による見えの変化が大きい
    • v_SEQUENCE: 視点の変化による見えの変化が大きい
  • ディレクトリ内のファイル
    • 画像ファイル (X.ppm)
      • 参照画像 (X = 1)
      • ターゲット画像 (X = 2, ..., 6)
    • Homography (H_1_X)
      • 拡張子なし
      • 3行のssvファイル (Space Saparated Values)

ベンチマークのタスク

評価値,タスク,評価方法を提案

評価値

  • label: $y_i = {-1, 0, +1}$
    • label of a ranked list of patches returned for a patch query
    • -1: negative match
    • 0: to ignore
    • +1: positive match
  • Precision at rank $i$: $P_i$
  • Recall at rank $i$: $R_i$
P_i(y) = \frac{\sum^i_{k=1}\[y_k\]_+}{\sum^i_{k=1} |y_k|} \\
R_i(y) = \frac{\sum^i_{k=1}\[y_k\]_+}{\sum^N_{k=1} \{y_k\]_+}
AP(y) = \sum_{k:y_k=+1} \frac{P_k(y)}{\sum^N_{k=1} \{y_k\]_+}

タスク

  1. Patch verification: 2枚の画像パッチが対応しているか否かを分類する問題
  2. Image matching: 参照画像のパッチをターゲット画像へのパッチにマッチングする問題
  3. patch retrieval: 大量のパッチ画像の中からクエリパッチに似ているパッチを検索する問題