1

MATLAB で CBIR システムを作成し、類似度測定をユークリッド距離として使用しました。これをクエリ画像ごとに使用して、上位 20 の画像を取得します。

システムのテストにWANG データセットを使用しました。
10 個のクラス (アフリカ人、バス、バラなど) が含まれており、それぞれに 100 個の画像が含まれています (合計 1000 個の画像)。

私の方法:
1. ベクトル (それぞれ 64 + 196 + 28 = 288 次元) を構築するために、コレログラム、共起行列 (CCM)、およびピクセル スキャン パターン (DBPSP) の違いを使用しています。

  1. 1000 db の各画像には、事前にベクトルが作成されています。
  2. クエリ画像が来て、それもベクトルを構築します(再び228次元)。
  3. 類似性にはユークリッド距離を使用し、db 画像ベクトルをユークリッド距離の降順に並べ替えます。
  4. 上位 20 件の結果が表示されます。

  5. それらの 20 で、TP または FP を持つことができます。

単一のクエリ画像の場合、このリンクを使用して、Precision と Recall を簡単に計算し、PR 曲線をプロットできます。

クラス全体で同じことを行うにはどうすればよいですか?

私のアプローチ: クラス A に属する各画像について、上位 20 枚の画像を見つけます。それはそれぞれ TP (真陽性) と FP (偽陽性) です。

        TP   FP

Image1  17   3  
Image2  15   5  
...  
...  
Image100  10  10  
Total   1500 500  

クラス A の精度 = 1500/(2000) = .75 (そうですか??)
クラス A のリコール ---> スタック ??
PR カーブ ----> スタック ?? いくつかのリンクには、そのために分類子が必要であると書かれていますが、そうでないリンクもあります...私は本当に混乱しています。

4

1 に答える 1

2

ご指摘のとおり、次のように精度を計算できます。

P = TP ./ ( TP + FP );

ただし、再現率を計算するには、FN または総偽数のいずれかが必要です。チャットで説明したように、FN と FP データを特定する方法を見つける必要があります。次に、次の式を使用して再現率を計算できます。

R = TP ./ ( TP + FN )

混同行列またはデータがある場合は、カスタムのfusionmat2f1.m を使用して、精度、再現率、および f1 スコアを計算できます。これは、混同行列がMatlab の定義どおりにフォーマットされていることを前提としています。各行の説明はインラインです。さらに明確にしたい場合はお知らせください。

function [F,P,R] = confusionmat2f1( C )
    %% confusionmat2f1( C )
    %
    % Inputs
    % C - Confusion Matrix
    %
    % Outputs
    % F - F1 score column vector
    % P - Precision column vector
    % R - Recall column vector
    
    %% 
    
    % Confusion Matrix to Probability
    M = sum( C, 3 );
    
    % Calculate Precision
    P = diag(M) ./ sum(M,1)';
    
    % Calculate Recall
    R = diag(M) ./ sum(M,2);

    % Calculate F1 Score
    F = f1( P, R );
于 2015-04-22T23:59:05.853 に答える