目標跟蹤實驗結果轉換txt轉mat

做目標跟蹤性能評價對比實驗時,使用官方的評價工具箱需要的結果文件是.mat數據,而比較算法提供的結果文件爲.txt數據。

將.txt文件轉化爲.mat文件的過程如下:

情況一:單個數據集文件存在一個文件夾

以跟蹤算法SiamBAN爲例,UAV123數據集

1、結果文件如下

2、轉換代碼:

clear;clc;
close all;
% txt路徑
txt_path  = 'E:\Codes\MATLAB\Experiments\experimental_results\siamban_results\siamban_results\SiamBAN_UAV123\';
% mat路徑
mat_path = 'E:\Codes\MATLAB\Experiments\experimental_results\siamban_results\siamban_results\SiamBAN_UAV123Mat\';
mkdir(mat_path);
% 跟蹤器名字
tracker='SiamBAN';

txt_files = dir([txt_path '*.txt']);

txt_files={txt_files.name};

for i=1:numel(txt_files)
    
    region=csvread([txt_path txt_files{i}]);
    results{1}.type = 'rect';
    results{1}.res = region;
    results{1}.len = length(region);
    
    videoname=txt_files{i};
    videoname=videoname(1:length(videoname)-4);
    save([mat_path videoname '_' tracker '.mat'], 'results');
    
end

3、轉換結果

4、評價工具箱畫圖

情況二:所有數據集結果存在於一個文件夾,且有規律

以跟蹤算法ATOM爲例,UAV123數據集

1、結果文件如下:

2、轉換代碼:

先找到單個數據集結果的特點,將uav_開頭的挑出來即可,然後再生成.mat文件。

clear;clc;
close all;
% txt路徑
txt_path  = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\default_000\';
% mat路徑
mat_path = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\atom_UAV123Mat\';
mkdir(mat_path);
% 跟蹤器名字
tracker='ATOM';

txt_files = dir([txt_path 'uav_*.txt']);

txt_files={txt_files.name};

for i=1:numel(txt_files)
    
    [data1,data2,data3,data4]=textread([txt_path txt_files{i}],'%n%n%n%n');
    region=[data1 data2 data3 data4];
    results{1}.type = 'rect';
    results{1}.res = region;
    results{1}.len = length(region);
    
    videoname=txt_files{i};
    videoname=videoname(5:length(videoname)-4);
    save([mat_path videoname '_' tracker '.mat'], 'results');
    
end

 3、轉換結果

4、評價工具箱畫圖

 

情況三:所有數據集結果存在於一個文件夾,且無規律

以跟蹤算法ATOM爲例,OTB-2015數據集

1、結果文件如下:各個數據集結果交叉在一起

2、轉換代碼

將需要轉換的序列一個個列出來,如果序列不重複可以直接讀取數據集中的目錄,因爲OTB-2015存在重複的情況,所以給出代碼是將每個視頻序列羅列出來的。

clear;clc;
close all;
% txt路徑
txt_path  = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\default_000\';
% mat路徑
mat_path = 'E:\Codes\MATLAB\Experiments\experimental_results\atom-20200626T063724Z-001\atom\atom_OTB-2015Mat\';
mkdir(mat_path);
% 跟蹤器名字
tracker='ATOM';

% 視頻序列
% videos = {'Basketball'};
videos = {'Soccer', 'Matrix', 'Ironman', 'Deer', 'Skating1', 'Shaking', ...
    'Singer1', 'Singer2', 'CarDark', 'Car4', 'David2', 'Sylvester', 'Trellis', ...
    'Fish', 'Mhyang', 'David', 'Coke', 'Bolt', 'Boy', 'Dudek', ...
    'Crossing', 'Couple', 'Football1', 'Jogging-1', 'Jogging-2', 'Doll', ...
    'Girl', 'Walking2', 'Walking', 'Fleetface', 'Freeman1', 'Freeman3', ...
    'Freeman4', 'David3', 'Jumping', 'CarScale', 'Skiing', 'Dog1',...
    'Suv', 'MotorRolling', 'MountainBike', 'Lemming', 'Liquor', 'Woman', 'Faceocc1', ...
    'Faceocc2', 'Basketball', 'Football', 'Subway', 'Tiger1', 'Tiger2',...%OTB-2013
    'Biker','Bird1','Bird2','BlurBody','BlurCar1','BlurCar2','BlurCar3',...
    'BlurCar4','BlurFace','BlurOwl','Board','Bolt2','Box','Car1','Car2',...
    'Car24','ClifBar','Coupon','Crowds','Dancer','Dancer2','Diving',...
    'Dog','DragonBaby','Girl2','Gym','Human2','Human3','Human4_2','Human5',...
    'Human6','Human7','Human8','Human9','Jump','KiteSurf','Man','Panda',...
    'RedTeam','Rubik','Skater','Skater2','Skating2-1','Skating2-2','Surfer',...
    'Toy','Trans','Twinnings','Vase'};

for vid = 1:numel(videos)
    close all;
    disp(videos{vid});
    
    % 兩個視頻序列具有兩個目標,跟蹤兩次
    if (strcmp(videos{vid}, 'Jogging-1'))
        [seq, tracking_results] = load_video_info(txt_path,'Jogging_1');
    elseif (strcmp(videos{vid}, 'Jogging-2'))
        [seq, tracking_results] = load_video_info(txt_path,'Jogging_1');
    elseif (strcmp(videos{vid}, 'Skating2-1'))
        [seq, tracking_results] = load_video_info(txt_path,'Skating2_1');
    elseif (strcmp(videos{vid}, 'Skating2-2'))
        [seq, tracking_results] = load_video_info(txt_path,'Skating2_2');
    else
        [seq, tracking_results] = load_video_info(txt_path,videos{vid});
    end
    
    % 四個視頻並非從第一幀開始,最後一幀結束
    seq.VidName = videos{vid};
    st_frame = 1;
    en_frame = seq.len;
    if (strcmp(videos{vid}, 'David'))
        st_frame = 300;
        en_frame = 770;
    elseif (strcmp(videos{vid}, 'Football1'))
        st_frame = 1;
        en_frame = 74;
    elseif (strcmp(videos{vid}, 'Freeman3'))
        st_frame = 1;
        en_frame = 460;
    elseif (strcmp(videos{vid}, 'Freeman4'))
        st_frame = 1;
        en_frame = 283;
    end
    seq.st_frame = st_frame;
    seq.en_frame = en_frame;
    
    % 幀數
    num_frames=en_frame-st_frame+1;
    % 預聲明目標框
    rect_position = zeros(num_frames, 4);
    
    for frame=st_frame:en_frame
        % 傳遞結果
        rect_position(frame-st_frame+1,:)=tracking_results(frame-st_frame+1,:);
    end
    
    % 原始數據集中,Tiger1的前5幀都是有遮擋的,所以需要直接去掉
    if (strcmp(videos{vid}, 'Tiger1'))
        st_frame1=st_frame+5;
    else
        st_frame1=st_frame;
    end
    %   save resutls.
    results{1}.type = 'rect';
    results{1}.res = rect_position;
    results{1}.fps = 1.0;
    results{1}.len = num_frames;
    results{1}.annoBegin = st_frame;
    results{1}.startFrame = st_frame1;
    save([mat_path videos{vid} '_' tracker '.mat'], 'results');
end

load_video_info.m

function [seq, tracking_results] = load_video_info(video_path,video)


tracking_results = dlmread([video_path video '.txt']);

seq.len = size(tracking_results, 1);
seq.init_rect = tracking_results(1,:);
end

3、轉換結果

4、 評價工具箱畫圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章