HPatchesデータセットの解析と特徴点検出マッチング評価指標

1 はじめに

データセットのダウンロード:
データセット GitHub アドレス
HPatches [4.2GB] : hpatches-release
HPatches フル シーケンス [1.3GB] : hpatches-sequences-release

  1.3GB のデータ セットは特徴点の検出とマッチングに関する関連論文で使用されるため、別のデータ セットは一時的にスキップされます。データセットには 116 個のフォルダーが含まれており、フォルダー名は i_xxx と v_xxx の 2 つのカテゴリに分類されます。i_xxx は照明が変化する画像ペアに対応し、v_xxx は視野角が変化する画像ペアに対応します。フォルダーの内容は次のとおりです。
ここに画像の説明を挿入

  1 は元の画像、残りはターゲット画像、H_1_x はホモグラフィー行列、txt は照明と視野角に対応する光または視点を記録します。いくつかのデータはセクション III に示されています。

  データセットには 57 個の i_xxx と 59 個の v_xxx がありますが、論文では通常、テストに 52 個の i_xxx と 56 個の v_xxx のみが使用されます。すべてのメソッドがこの解像度 (D2-Net) の画像を処理できるわけではないため、解像度が 1200*1600 を超える画像は除外されます。

2. 評価

  論文 (Patch2Pix、DFM) では、画像マッチングとホモグラフィー推定という 2 つの一般的な評価があり、多くの論文は最初の項目 (D2-Net、Sparse-NCNet、Aslfeat、DualRC-Net) のみを評価します。
  画像マッチングはモデルが出力したマッチング点のMMA(平均マッチング精度)を計算し、ホモグラフィー推定はマッチング点に基づいてホモグラフィー行列を計算して精度を計算します。

2.1 画像マッチング

  DualRC-Net のコードに従って MMA がどのように計算されるかを見てください。

'''
match 是根据网络得到的特征点匹配结果 (n,4)
'''
# read in homography
H = np.loadtxt(H_file)
# project the query to reference
npts = matches.shape[0]
query = matches[:, :2] * (hA / hA_)
ref = matches[:, 2:] * (hB / hB_)
query_ = np.concatenate((query, np.ones((npts, 1))), axis=1)
projection = np.matmul(H, query_.T).T

# convert the projection from homogeneous coordinate to inhomogeneous coordinate
projection = projection / projection[:, 2:3]
projection = projection[:, :2]
# evaluate the result
result = np.linalg.norm(ref-projection, axis=1)

for thres in range(1, 11):
    idx = thres-1
    if change_type == 'v':
        MMA_v[idx] += np.sum(result <= thres) / result.shape[0]
    if change_type == 'i':
        MMA_i[idx] += np.sum(result <= thres) / result.shape[0]
    MMA[idx] += np.sum(result <= thres) / result.shape[0]

  ソース画像の点とホモグラフィ行列を用いて、対応するターゲット画像の点座標を取得し、実際の座標との距離誤差を計算し、閾値未満の一致数の割合を計算することができます。一致の総数は、さまざまなしきい値に従って取得できます。
  ここで、この MMA が実際に出力される一致の数に多少関連していることがわかります。一般的にはマッチングスコアに応じてソートし、閾値を用いて上位n個をスクリーニングまたは直接取得することになりますが、特徴点が多すぎると精度が低下します。ただし、局所的なマッチングが容易な場所に少数のポイントが集中する可能性が高いため、精度を高めるために少数のマッチングのみを選択することはできません。マッチング ポイントの分布は、マッチングの精度に影響します。ホモグラフィー行列 通常、特徴点の検出とマッチングは最終的には Do アライメントのために行われるため、一部の論文では 2 番目のホモグラフィー行列の評価を追加しています。

ここに画像の説明を挿入
  上の図は Patch2Pix 論文の図で、Illumination は照明変換の結果に対応し、Viewpoint は視点変更の結果に対応し、Overall はすべてのデータの結果に対応します。特徴点と一致点の数も右側に示されており、多くの論文は左側に MMA の比較のみを示しています。実際、一致数はまだ十分であることがわかりますが、一般的に深度法には NMS リンクがあり、特にポイントが集中しているわけではないため、基本的には MMA を比較するだけで十分です。

  以下はPatch2Pixのコードですが、計算ロジックは全く同じです。

dist = eval_matches(matches[:, :2], matches[:, 2:], homography)
for thr in thres_range:
    if sname[0] == 'i':
        i_err[thr] += np.mean(dist <= thr)
    else:
        v_err[thr] += np.mean(dist <= thr)

def eval_matches(p1s, p2s, homography):
    # Compute the reprojection errors from im1 to im2 
    # with the given the GT homography
    p1s_h = np.concatenate([p1s, np.ones([p1s.shape[0], 1])], axis=1)  # Homogenous
    p2s_proj_h = np.transpose(np.dot(homography, np.transpose(p1s_h)))
    p2s_proj = p2s_proj_h[:, :2] / p2s_proj_h[:, 2:]
    dist = np.sqrt(np.sum((p2s - p2s_proj) ** 2, axis=1))
    return dist

2.2 ホモグラフィー推定

  Patch2Pixのコードを直接見てみる

'''
篇幅有限,只挑了比较核心的语句
可以看出是利用两个单应性矩阵对图像的4个角点做变换,然后计算像素误差
其实就是把计算匹配点的 MMA 变成了计算4个角点的 MMA
'''
H_gt = np.loadtxt(os.path.join(seq_dir, 'H_1_{}'.format(im_idx)))
H_pred, inliers = pydegensac.findHomography(p1s, p2s, rthres)

im = Image.open(im1_path)
w, h = im.size
corners = np.array([[0, 0, 1],
	                [0, w - 1, 1],
	                [h - 1, 0, 1],
	                [h - 1, w - 1, 1]])
real_warped_corners = np.dot(corners, np.transpose(H_gt))
real_warped_corners = real_warped_corners[:, :2] / real_warped_corners[:, 2:]
warped_corners = np.dot(corners, np.transpose(H_pred))
warped_corners = warped_corners[:, :2] / warped_corners[:, 2:]
mean_dist = np.mean(np.linalg.norm(real_warped_corners - warped_corners, axis=1))
correctness = [float(mean_dist <= cthr) for cthr in corr_thres]

  Patch2Pix の実験結果をもう一度確認してください。MMA
ここに画像の説明を挿入
  の結果と似ているように感じられます。追加の速度比較がここに示されており、Patch2Pix の比較実験は非常に十分です。(ただし、彼の github によると、48G GPU でトレーニングされ、ほとんどのテストも完了したとのことです)

3. 個人的な考え

照明変更データ:

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入
視点変更データ:

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

  いくつかのデータをランダムに選んで見ると、HPatches のいくつかの特徴がわかります。
(1) 照明変化の画像には視野角の変化はなく、変化の画像には光の変化はありません。実際のアプリケーションのシナリオでは、通常、2 つの変化が同時に存在します。
(2) ほとんどの画像は平面として近似できるため、変換はグラウンド トゥルースとしてホモグラフィー行列として近似できますが、実際のアプリケーション シナリオでは、画像内に深さの異なる多くの場所があり、一部の部分が不明瞭になります。そして細部がぼやけています。

  比較的シンプルなデータセットだからこそ、論文の指標は基本的に3ピクセル以内のMMAを使う必要があるが、実際の応用においてそこまでの精度が要求されるのか、ホモグラフィ行列が利用できるのかは不明である。グラウンドトゥルース 完璧な調整とも言い難いです。さらに、モデルが隣接するピクセル間の違いを区別して一致をより正確にすることは非常に困難です。

おすすめ

転載: blog.csdn.net/weixin_43605641/article/details/122329338