詳細説明:動作検知におけるv-mAPの計算

I.はじめに

v-mAP の計算方法は「Action Tubelet Detector for Spatio-Temporal Action Localization」の方法を参考にしていますが、この記事は caffe フレームワークに基づいており、pytorch には詳しいので、ようやく同様のアクション検出に関する記事を目にしました。この記事の方法もそこで使われています。コードのダウンロードアドレスは以下のとおりです。

https://github.com/burhanmudassar/pytorch-action-detection#visualizations-generated-from-act-mobilenet-v2-after-post-processing-of-tubelets-using-incremental-linking-algorithm-1

まずデータの方向について話しましょう。モデルへのデータ入力は [b_s, tb, c, h, w] です。例: (8,2,3,300,300) は 8 フレームの画像が抽出されたことを意味し、2 は (現在のフレームの画像データと次のフレーム)、3 3 つのチャネル (rgb) を表し、残りの 2 つの次元は幅と高さです。つまり、入力モデルには、現在のフレーム データ次のフレーム データが含まれます。 

1.モデル出力

モデルは ACT-VGG16 で、その出力は 3 つの部分に分かれています。

1. 予測された bbox 座標情報: 例: [8,8116,2,4]-----8: 抽出された 8 フレームの画像を示します。8116: 1 つの画像フレームが 8116 個の bbox を予測することを示します。2:現在のフレームと次のフレーム、4: 予測ボックスの座標を表します。つまり、画像の各フレームについて、現在のフレームの bbox が予測されるだけでなく次のフレームの bbox も予測されます

2. 各 bbox カテゴリの予測スコア: [8,8116,22]-----22: 22 カテゴリがあることを意味します (21 カテゴリ + 1 背景カテゴリ)

3. 予測された bbox のエラー修正: [8116,4]

2. チューブを生成するにはどうすればよいですか?

まず、一般的にアクションシーケンスとして理解されているチューブとは何かについて説明します。以下の図 1 に示すように:

仮定: これは、jhmdb データセット内のアクションが持続するフレーム数であり、注釈ファイルは各フレームとアクションの範囲 (bbox) にラベルを付けます。画像の緑色の枠内にあるとおりです。次に、40 フレームでの同じアクションの bbox が互いに接続されてチューブを形成します。

図1

以上、真空管とは何かについてご紹介しました。図 1 は GT のチューブ (ラベル付き) を示しており、予測する必要があるチューブは 2 つのチューブを可能な限り近づけるものです。では、予測された bbox を介してチューブを取得するにはどうすればよいでしょうか? 簡単に言うと、まず nms を通じて bbox の一部をフィルタリングし、次にチューブの次のフレームとして最初のフレームまでの次のフレームで最大の IOU を見つけ、最終的にチューブを生成する方法を知ります。詳しい生成プロセスは次の記事「TubeR: Tubelet Transformer for Video Action Detection」で説明します。最終的に、チューブ全体のデータは次のようになります。

 x1、y1、x2、y2 の後には各ボックスのスコアを表すスコアが続き、チューブ全体の後にはチューブ、特に構成するボックスのスコアを示すスコアが続くことに注意してください。スコアは平均して得られます。

このとき、友人の中には疑問を持つ人もいるかもしれませんが、モデルが出力する 1 つのフレームは、現在のフレームと次のフレームのボックスを予測します。つまり、最初のフレームと最後のフレームを除いて、残りは 2 つの予測結果を持ちます。どれを選ぶべきですか?ここでは、2つの結果フレームのボックスを平均しており、フレーム番号の最後のボックスの座標であるため、スコアも同じになります。

最終的に、図 2 の赤いボックスに示すように、予測されたチューブが得られました。

 図2

video-mAP のインジケーターは実際にはチューブ用です。video-mAP を要求する前に、iou3d を要求する方法も知っておく必要があります。私たちは皆 2D の IOU を求めるかもしれませんが、3D の IOU も実際には似ています。

2.Iou3dtの計算方法:

以下は iou3dt のコードで、各行にコメントが付けられていますが、要は 2 つのチューブの重なった部分の iou3d を求めます。入力は 2 つのチューブであり、出力は値 (2 つのチューブの類似性を示す) です。

def iou3dt(b1, b2, spatialonly=False):
    """Compute the spatio-temporal IoU between two tubes"""
    #====计算预测的tubes和GT-tubes重合的帧数=========
    tmin = max(b1[0, 0], b2[0, 0])
    tmax = min(b1[-1, 0], b2[-1, 0])

    if tmax < tmin: return 0.0
    #====计算两个tubes帧数的交集================
    temporal_inter = tmax - tmin + 1
    #====计算两个tubes帧数的并集================
    temporal_union = max(b1[-1, 0], b2[-1, 0]) - min(b1[0, 0], b2[0, 0]) + 1
    #====分别取出两个tubes交集的帧==============
    tube1 = b1[int(np.where(b1[:, 0] == tmin)[0]) : int(np.where(b1[:, 0] == tmax)[0]) + 1, :]
    tube2 = b2[int(np.where(b2[:, 0] == tmin)[0]) : int(np.where(b2[:, 0] == tmax)[0]) + 1, :]
    #=====求重合部分的iou3d,再乘上一个交并系数===========
    return iou3d(tube1, tube2) * (1. if spatialonly else temporal_inter / temporal_union)

 以下は iou3d 部分のコードです. 本質は: すべてのボックスに対応する iou が平均化される. iou3d の入力は 2 つのチューブであり、出力は 1 つの値です。

def iou3d(b1, b2):
    """Compute the IoU between two tubes with same temporal extent"""

    assert b1.shape[0] == b2.shape[0]
    assert np.all(b1[:, 0] == b2[:, 0])
    #求对应box的交集
    ov = overlap2d(b1[:,1:5],b2[:,1:5])
    #对所有box的iou取平均值
    return np.mean(ov / (area2d(b1[:, 1:5]) + area2d(b2[:, 1:5]) - ov) )

3.ビデオマップの計算方法:

f-mAP と同様に、mAP を要求するには、まず AP が必要で、AP は特定のカテゴリ用です。

したがって、特定のカテゴリについては次のようになります。

まず、このカテゴリに属する​​予測チューブを取り出し、次にこのカテゴリに属する​​チューブを取り出し、各ビデオをビデオにマッピングします。合計配列 pr が精度と再現率のために宣言されており、最初の列には精度が格納され、2 番目の列には再現率が格納されます。ここで余分な行が追加されていることに注意してください。つまり、最初の行は精度 = 1、再現率 = 0 です。これは、後で曲線と座標軸で囲まれた面積を計算するための準備です。上記の記事では、fn と tn の区別がないことにも言及しました。ここでの fn は実際には GT の番号であり、以下で思い出してください。 

予測されたチューブを小さいものから大きいものに並べ替えます。そして、GT-tubes で Iou3dt を計算し、それが設定した閾値より大きい場合、TP として記録されます。

 すべての tp と fp の合計は実際には予測されたチューブの数でありtp と fn の合計は sum(gt) になります。これはgt の数です。ここでは 1 つのカテゴリの適合率と再現率のみを取得します。授業のすべてのビデオを取得し、上記の手順に従うことで、すべてのカテゴリの適合率と再現率を取得できます。

AP を求める方法は、精度曲線と再現曲線と座標軸で囲まれた面積を求めることです。ここでの面積の計算は、全点補間法とは若干異なります。全点補間法の高さは、小さな間隔での最大精度。ここでは、間隔の両端の精度の平均値によって決まります。重要なのは、曲線で囲まれた領域を見つけることです。

 全クラスのAPの平均を計算するのがvideo-mAPです。以上でvideo-mAPの説明を終わります。APの計算方法は2dと全く同じであることは難しくありませんが、iouの計算方法が若干異なります。

video-mAP の本質は、2 つのビデオ クリップの動きの範囲の類似性を測定することです。

 

おすすめ

転載: blog.csdn.net/qq_58484580/article/details/131784103