「Fast Traking via Spatio-Temporal Contect Learning」のポイント整理とコード実現の一つ

17073 ワード

【原文】http://www.cnblogs.com/marcworld/p/3682579.htmlを選択します
最近「Fast Tracking via Spatio-Temporal Contect Learning」という論文を読みましたが、主に時空の文脈に基づく物体追跡アルゴリズムを紹介しました.これに先立ち、CSDNブロガー「zouxy09」はこの論文の解読を書いています.http://blog.csdn.net/zouxy09/article/details/16889905.このブログの中で、私は元の論文の考えに従っていません.原文の内容に慣れた上で、自分の考えに基づいて、主にいくつかの自分の見落としやすいポイントや、原文の中で強調されていない論理関係を整理しています.
 
いくつかの概念:
ベインズフレーム(Bayesian frame ewark):目標とその周辺の領域の低層特性(ピクセル強度値)に関する統計的相関を確立する.
空間関係(「空間コンテキストモデル」に量子化する)は目標とその近隣の間に固有であり、時間関係は重み付けして各歴史フレーム(現在のフレーム以前のすべてのフレーム)の空間関係を蓄積することによって得られる.
主な考え:
「ベジェフレームワーク」に基づいてターゲットオブジェクトとその局所コンテキストとの間の時空関係を確立し、この「時空モデル」を通じて「信頼マップ」を計算し、「信頼図」における尤度最大の位置から新たなターゲット位置を予測する.
1.「時空コンテキストモデル」を求めます.

は、得られた「時空コンテキストモデル」であり、本フレームの「信頼図」を計算するために使用され、本フレームの目標位置を得ることができる.は、現在のフレーム(t番目のフレーム)で新たに計算された「空間コンテキストモデル」である.は、上記の2つのモデルによって加算された新しい「時空コンテキストモデル」であり、次のフレームにおいてその「信頼図」を計算して、次のフレームの新しい目標位置を得る.は、利率であり、定数である.
(1)「時空コンテキストモデル」の初期化
第1のフレームに対して、上式は明らかに成立していません.私たちは第0のフレームの「空間コンテキストモデル」と「時空コンテキストモデル」がないので、初期化時に直接第1のフレームを許可する「時空コンテキストモデル」は直接にその「空間コンテキストモデル」に等しいです.
2.「信頼図」を求めます.

信頼図は上から求められるので、注意すべき点があります.
現在のフレームは第t+1フレームであり、この式で「信頼図」を求める目的はフレームの目標位置を求めることである.この時点で手持ちの情報は、前フレームで更新された「時空コンテキストモデル」、現在フレーム(t+1フレーム)のピクセル強度値、前フレームの目標位置、および目標スケールである.FFTで畳み込み演算を加速するこの信頼図の値は各フレームにおいて更新され、変化しつつあるものであり、時空情報と関連して全体的な観点から見たものであるため、私はこれを「絶対信頼図」と呼びます.ここではただ覚えておく必要があります.「絶対信頼図」は反復ごとに再計算され、常に更新されています.「相対信頼図」は不変で、一つの定数です.  第一フレームは信頼図を求めなくてもいいです.「絶対信頼図」はいつも前のフレームの目標位置とスケールで求められます.第一フレームでは、ゼロフレーム目の目標位置とスケールはありません.初期化されたのは直接第一フレームの目標位置とスケールです.そして、初期化によって第一フレームの目標位置とスケールが得られました.絶対信頼図は、フレームの目標位置とスケールを求めている.3.「空間コンテキストモデル」を求めます.
本フレームのターゲット位置が既知の場合、ターゲット位置を中心とした近傍領域(局所コンテキスト)内で、「信頼図」は、以下のようにモデル化されてもよい.

ここで、、bはいずれも定数であり、目標近傍の各点の相対的な目標位置からの距離にのみ値が関係しているので、この近傍の大きさが決定されると、この「信頼図」はフレーム毎の目標位置の変化によって変化しない定数行列であるため、この信頼図を「相対信頼図」と呼ぶ.は、目標の周囲点から目標までの相対距離だけの大きさを意味します.


以上の2つのタイプは、「空間コンテキストモデル」を求めていますが、足のサイズがない、すなわち時間コンテキストの概念がないことに注意してください.つまり、すべての計算は、このフレーム自身の情報(本フレームの目標位置、本フレーム自身の目標スケール、本フレームのピクセル強度値など)を利用しています.したがって、「空間コンテキストモデル」を計算します.まず、このフレームの目標位置と目標スケールを得るために、第1フレームを除いて、context pror modelは2回、前回フレームの目標位置とスケールを使って求め、一度に本フレームの目標位置とスケールで求めます.
 
アルゴリズムの流れ:
 
《Fast Traking via Spatio-Temporal Context Learning》要点整理与代码实现之一_第1张图片
 
コード実装(Matlab):
著者のmatlabコードを参考にして、自分の描いたフローチャートに基づいてもう一度書き直しました.パラメータ初期化は完全に作者のものをそのままにしました.
% My implementation for STC model based tracking
%%
clear, clc, close all;
%%
fftw('planner','patient');
%%
addpath('./data');
img_dir = dir('./data/*.jpg');
%% Initializaiton
% constant parameter
target_sz = [95, 75];   % (rows, cols)
context_sz = target_sz * 2;    % (rows, cols)
rho = 0.075;
alpha = 2.25;
beta = 1;
lambda = 0.25;
num = 5;
hamming_window = hamming(context_sz(1)) * hann(context_sz(2))';
% variable initialization
target_center = [65, 161] + target_sz ./ 2;  % (row, col)
sigma = mean(target_sz);
scale = 1;
[rs, cs] = ndgrid((1:context_sz(1)) - context_sz(1)/2, (1:context_sz(2)) - context_sz(2)/2);
dist = rs.^2 + cs.^2; % a 190x150 matrix
conf = exp( -1 .* (sqrt(dist) ./ alpha).^beta );
conf = conf/sum(sum(conf)); % normalization
conff = fft2(conf);
scale_arr = zeros(num+1, 1);
%% 
for frame = 1:numel(img_dir)
    % read one frame
    img = imread(img_dir(frame).name);
    im = rgb2gray(img);
    % compute the context prior model with the target center and sigma of the previous frame
    window = hamming_window .* exp(-0.5 * dist / (sigma^2));  % It should be a 190x150 matrix
    window = window/sum(sum(window));%normalization
    context_prior = compute_prior(im, target_center, context_sz, window);   % using the target_center and sigma of the previous frame
    if frame > 1
        % compute the confidence map
        conf_map = real(ifft2( Hstcf .* fft2(context_prior) ));
        % find the new target center of the current frame
        [row, col] = find(conf_map == max(conf_map(:)), 1);
        target_center = target_center - context_sz / 2 + [row, col];    % here is weird, why we should substract 'context_sz/2' from the 'target_center'?
        % update sigma to current frame
        sigma = sigma * scale;
        % compute the new context prior model with the target center and sigma
        % of the current frame
        window = hamming_window .* exp(-0.5 * dist / (sigma^2));  % It should be a 190x150 matrix
        window = window/sum(sum(window));%normalization
        context_prior = compute_prior(im, target_center, context_sz, window);   % using the new target_center and sigma of current frame
        % update the confidence map of the current frame
        conf_map = real(ifft2( Hstcf .* fft2(context_prior) ));
        % update scale (you can also keep 'scale=1')
%         scale_arr(1:num) = scale_arr(2:end);
%         scale_arr(num) = max(conf_map(:));
%         scale_avr = 0;
%         if frame > (num + 1)
%             for i = 1:num
%                 scale_avr = scale_avr + sqrt(scale_arr(num + 2 - i) / scale_arr(num + 1 - i));
%             end
%             scale = (1 - lambda) * scale + lambda * scale_avr / num;
%         end
    end
    % learn the spatial context model
    hscf = conff ./ fft2(context_prior);
    % update spatio_temporal context model
    if frame == 1
        Hstcf = hscf;
    else
        Hstcf = (1-rho) * Hstcf + rho * hscf;
    end
    %visualization
    target_sz([2,1]) = target_sz([2,1])*scale;% update object size
    rect_position = [target_center([2,1]) - (target_sz([2,1])/2), (target_sz([2,1]))];  
    imagesc(uint8(img))
    colormap(gray)
    rectangle('Position',rect_position,'LineWidth',4,'EdgeColor','r');
    hold on;
    text(5, 18, strcat('#',num2str(frame)), 'Color','y', 'FontWeight','bold', 'FontSize',20);
    set(gca,'position',[0 0 1 1]); 
    pause(0.001); 
    hold off;
    drawnow;
end
%% The end

コードにはまだいくつかの問題があります.
自分の書いた尺度更新の部分は仕事ができないので、彼を注釈しました.今はシングルスケールでしか働けません.
conf map=real(ift 2(Hstcf.*fft 2) この文の中で、ift 2はまだ複数の結果があるので、作者は実際の部分を取って後続の計算に用います.なぜift 2の結果は複数ですか?なぜ作者は実際の部分だけを取って、その型を取るのではないですか?「hamming window」は結果にどれぐらいの影響がありますか?原図のピクセル強度値に対して著者もnormalizationをしました.これらを全部取り除いたら、結果にどれぐらいの影響がありますか?これはまだテストが必要です.
ターゲット位置初期化:target ucenter=[65,161]+target usz./2;ターゲット位置更新:target ucenter=targettucenter-contexttsuz/2+[row,col]に加えて、target utsz/2と差し引きcontexttuusz/2は明らかに作者の意図的な意味ですか?