diff --git a/tracking/getScalePatch.m b/tracking/getScalePatch.m
index 98dcbef..03149bd 100644
--- a/tracking/getScalePatch.m
+++ b/tracking/getScalePatch.m
@@ -16,7 +16,7 @@
% along with this program. If not, see .
-function out = getScalePatch(img, pos, target_size, search_size, rotation, scale_model_sz, hog_scale_cell_size)
+function out = getScalePatch(img, pos, target_size, search_size, scale_window, scale_model_sz, hog_scale_cell_size)
% code from DSST
padding=0;
@@ -25,7 +25,7 @@
end
tmp_sz = floor((target_size * (1 + padding))*search_size);
-param0 = [pos(2), pos(1), tmp_sz(2)/target_size(2), rotation/180*pi,...
+param0 = [pos(2), pos(1), tmp_sz(2)/target_size(2), 0,...
tmp_sz(1)/target_size(2)/(target_size(1)/target_size(2)),0];
param0 = affparam2mat(param0);
patch = warpimg(double(img), param0, target_size);
@@ -34,3 +34,5 @@
out = patch(:);
+
+
diff --git a/tracking/getScaleSubwindow_v1.m b/tracking/getScaleSubwindow_v1.m
index 290a799..c116e27 100644
--- a/tracking/getScaleSubwindow_v1.m
+++ b/tracking/getScaleSubwindow_v1.m
@@ -1,22 +1,4 @@
-% KCC: Kernel Cross-Correlator
-% Visual Tracking Using KCC
-%
-% Copyright (C) 2017
-% Author: Wang Chen wang.chen@zoho.com Nanyang Technological University
-% Zhang Le zhang.le@adsc.com Advanced Digital Sciences Center
-% This program is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version.
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-% You should have received a copy of the GNU General Public License
-% along with this program. If not, see .
-
-
-function out = getScaleSubwindow_v1(img, pos, target_size, search_size, rotation, scale_model_sz, hog_scale_cell_size)
+function out = getScaleSubwindow_v1(img, pos, target_size, search_size, scale_window, scale_model_sz, hog_scale_cell_size)
% code from DSST
padding=0;
@@ -26,7 +8,7 @@
end
for s = 1:num_scales
tmp_sz = floor((target_size * (1 + padding))*search_size(s));
- param0 = [pos(2), pos(1), tmp_sz(2)/target_size(2), rotation/180*pi,...
+ param0 = [pos(2), pos(1), tmp_sz(2)/target_size(2), 0,...
tmp_sz(1)/target_size(2)/(target_size(1)/target_size(2)),0];
param0 = affparam2mat(param0);
patch = warpimg(double(img), param0, target_size);
diff --git a/tracking/params.txt b/tracking/params.txt
index 888c792..3ee1b26 100644
--- a/tracking/params.txt
+++ b/tracking/params.txt
@@ -6,27 +6,21 @@ params.learning_rate_pwp = 0.04; % bg and fg color models learning rat
params.inner_padding = 0.2; % defines inner area used to sample colors from the foreground
params.output_sigma_factor = 1/16 ; % standard deviation for the desired translation filter output
params.lambda = 1e-3;
-params.lambda_scale = 1e-3; % regularization weight
+params.lambda_scale = 0.1; % regularization weight
params.learning_rate_cf = 0.01; % HOG model learning rate
params.merge_factor = 0.3; % fixed interpolation factor - how to linearly combine the two responses
-params.learning_rate_scale = 0.01 %0.025;
+params.learning_rate_scale = 0.008 %0.025;
params.scale_sigma_factor = 1/16;
params.scale_sigma = 0.1;
-params.num_scales = 33;
-params.scale_step = 1.02;
-
-params.num_rotation = 1;
-params.rotation_step = 1;
-params.rotation_sigma = 0.1;
-
+params.num_scales = 11;
+params.scale_step = 1.03;
% fixed setup
params.hog_scale_cell_size = 4; % Default DSST=4
params.scale_model_factor = 1.0;
-params.scale_model_max_area = 32*16;
+params.scale_model_max_area = 32*16; %32*16
params.feature_type = 'fhog';
params.scale_adaptation = true;
-params.rotation_adaptation = 0;
params.grayscale_sequence = false; % suppose that sequence is colour
params.merge_method = 'const_factor';
params.den_per_channel = false;
diff --git a/tracking/trackerMain_otb_wangchen.m b/tracking/trackerMain_otb_wangchen.m
index 2933fea..a1671af 100644
--- a/tracking/trackerMain_otb_wangchen.m
+++ b/tracking/trackerMain_otb_wangchen.m
@@ -1,25 +1,7 @@
-% KCC: Kernel Cross-Correlator
-% Visual Tracking Using KCC
-%
-% Copyright (C) 2017
-% Author: Wang Chen wang.chen@zoho.com Nanyang Technological University
-% Zhang Le zhang.le@adsc.com Advanced Digital Sciences Center
-% This program is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version.
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-% You should have received a copy of the GNU General Public License
-% along with this program. If not, see .
-
-
function [results] = trackerMain_otb_wangchen(p, im, bg_area, fg_area, area_resize_factor)
%TRACKERMAIN contains the main loop of the tracker, P contains all the parameters set in runTracker
%% INITIALIZATION
- num_frames = numel(p.img_files);
+ num_frames = numel(p.img_files);
% used for OTB-13 benchmark
OTB_rect_positions = zeros(num_frames, 4);
pos = p.init_pos;
@@ -49,18 +31,11 @@
base_target_sz = target_sz;
scale_sigma = sqrt(p.num_scales) * p.scale_sigma_factor;
ss = (1:p.num_scales) - ceil(p.num_scales/2);
+ ys = exp(-0.5 * (ss.^2) / scale_sigma^2);
- rotation_factor = 0;
- ys=zeros(size(ss));
+ ys=zeros(size(ys));
ys(1)=1;
- ysf = (fft(ys));
-
- yr = zeros(p.num_rotation,1);
- yr(1) = 1;
- yrf = fft(yr);
- rotation_factors = p.rotation_step*(-floor(p.num_rotation/2):floor(p.num_rotation/2));
-
-
+ ysf = ((fft(ys)));
if mod(p.num_scales,2) == 0
scale_window = single(hann(p.num_scales+1));
scale_window = scale_window(2:end);
@@ -137,14 +112,15 @@
%% SCALE SPACE SEARCH
if p.scale_adaptation
- current_patch = getScalePatch(im, pos, base_target_sz, scale_factor, -rotation_factor, scale_model_sz, p.hog_scale_cell_size);
+ current_patch = getScalePatch(im, pos, base_target_sz, scale_factor, scale_window, scale_model_sz, p.hog_scale_cell_size);
ksf = gaussian_correlation_scale_single(im_patch_scale, current_patch, p.scale_sigma);
- scale_response = abs(ifft((model_hsf.*ksf)));
+ scale_response = abs(ifft((model_hf.*ksf)));
[max_value, recovered_scale] = max(scale_response(:));
%set the scale
scale_factor = scale_factor / scale_factors(recovered_scale);
-
+% fprintf('frame %d: recovered scale is %.2f:, current sclae factor is %.2f:\n', frame,recovered_scale,scale_factor)
+
if scale_factor < min_scale_factor
scale_factor = min_scale_factor;
elseif scale_factor > max_scale_factor
@@ -164,25 +140,6 @@
% same aspect ratio as the target bboxgetScaleSubwindow_v1
area_resize_factor = sqrt(p.fixed_area/prod(bg_area));
end
-
- %% ROTATION SPACE SEARCH
- if p.rotation_adaptation
- current_rotation_patch = getRotationPatch(im, pos, base_target_sz, scale_factor, -rotation_factor, p.hog_scale_cell_size);
- krf = gaussian_correlation_scale_single(im_patch_rotation, current_rotation_patch, p.rotation_sigma);
- rotation_response = abs(ifft((model_hrf.*krf)));
- [max_value, recovered_rotation] = max(rotation_response(:));
-
- %set the scale
- rotation_factor = rotation_factor + rotation_factors(recovered_rotation);
- fprintf('frame %d: current sclae factor is %.4f; current rotation %.4f:\n', frame, scale_factor, rotation_factor)
-
-
- if rotation_factor <= -180
- rotation_factor = rotation_factor + 360;
- elseif rotation_factor > 180
- rotation_factor = rotation_factor - 360;
- end
- end
if p.visualization_dbg==1
mySubplot(2,1,5,1,im_patch_cf,'FG+BG','gray');
@@ -218,14 +175,14 @@
hf_den = (1 - p.learning_rate_cf) * hf_den + p.learning_rate_cf * new_hf_den;
hf_num = (1 - p.learning_rate_cf) * hf_num + p.learning_rate_cf * new_hf_num;
- % BG/FG MODEL UPDATE
+ %% BG/FG MODEL UPDATE
% patch of the target + padding
[bg_hist, fg_hist] = updateHistModel(new_pwp_model, im_patch_bg, bg_area, fg_area, target_sz, p.norm_bg_area, p.n_bins, p.grayscale_sequence, bg_hist, fg_hist, p.learning_rate_pwp);
end
%% SCALE UPDATE
if p.scale_adaptation
- im_patch_scale_frame = getScaleSubwindow_v1(im, pos, base_target_sz, scale_factors*scale_factor, -rotation_factor, scale_model_sz, p.hog_scale_cell_size);
+ im_patch_scale_frame = getScaleSubwindow_v1(im, pos, base_target_sz, scale_factors*scale_factor, scale_window, scale_model_sz, p.hog_scale_cell_size);
if frame == 1
im_patch_scale=im_patch_scale_frame;
@@ -234,24 +191,10 @@
end
ksf = gaussian_correlation_scale_single(im_patch_scale, im_patch_scale(:,uint8(size(im_patch_scale,2)/2)), p.scale_sigma);
- model_hsf = ysf'./(ksf+0.1);
- end
-
- %% ROTATION UPDATE
- if p.rotation_adaptation
- im_patch_rotation_frame = getRotationSubwindow(im, pos, base_target_sz, scale_factor, rotation_factor + rotation_factors, p.hog_scale_cell_size);
-
- if frame == 1
- im_patch_rotation=im_patch_rotation_frame;
- else
- im_patch_rotation=(1 - p.learning_rate_scale)*im_patch_rotation + p.learning_rate_scale*im_patch_rotation_frame;
- end
-
- krf = gaussian_correlation_scale_single(im_patch_rotation, im_patch_rotation(:,uint8(size(im_patch_rotation,2)/2)), p.rotation_sigma);
- model_hrf = yrf./(krf+0.1);
+ model_hf = ysf'./(ksf+0.1);
end
- %% update bbox position
+ % update bbox position
if frame==1, rect_position = [pos([2,1]) - target_sz([2,1])/2, target_sz([2,1])]; end
rect_position_padded = [pos([2,1]) - bg_area([2,1])/2, bg_area([2,1])];