GTOT和RGBT234测评工具箱使用

这篇具有很好参考价值的文章主要介绍了GTOT和RGBT234测评工具箱使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

说明

环境

GTOT测评工具箱使用

结构

准备工作

测评过程

生成ERRresults/xxx.mat

生成PR、SR曲线图

合成跟踪可视化视频

RGBT234测评工具箱使用

说明

结构

准备工作

测评过程

生成ERRresults_TIP/xxx.mat

 生成PR、SR曲线图

合成跟踪可视化视频


说明

  •  本篇博客是RGBT目标跟踪专题中的其中一篇:

Attribute-based Progressive Fusion Network for RGBT Tracking论文研读笔记

APFNet训练+测试复现过程记录

GTOT和RGBT234测评工具箱使用

环境

  • 下载测评工具箱,链接:GitHub - mmic-lcl/Datasets-and-benchmark-code
  • 将之前测试模型得到的结果复制过来,如果没有复现模型的训练和测试过程,也可以直接使用上面的链接中给出的Tracking Results进行测评
  • 安装Matlab,用于绘制PR、SR图,以及生成跟踪结果图片
  • Python3:额外的,用于生成测试展示视频

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

GTOT测评工具箱使用

结构

        在GTOT 工具箱中,共有六个文件夹,其中, BBresults 文件夹中存放的是测试生成的目标跟踪框的 txt 文件,ERRresults 文件夹中的是计算生成的错误率文件,sequencesAttr 是工具箱中自带的关于 GTOT 数据集特性的一些文件,trackingResultsDisplay是存放带有跟踪框的结果图像的文件夹,GTOT_APFNet_tracking_result 文件夹存放的是使用RGBT234 数据集作为训练集,GTOT 作为测试集得到的测试跟踪结果(文件中每一行都含有八个数值,前四个和后四个分别代表在 RGB 图像和热红外图上的跟踪框四元数),my_video文件夹是自己建立的,用来存放合成视频的文件夹。

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

准备工作

        在测评工具箱根目录下新建脚本cp_BBres_txts.py,用于将测试APF模型时生成的bbox框文件拷贝并重命名至 BBresults 与 ERRresults/APF 两个文件夹内

import os

input_path = './GTOT_APFNet_tracking_result/'
#output_path = './BBresults/'
output_path = './ERRresults/APF/'

for origin_txt in os.listdir(input_path):
    os.system('cp ' + input_path + origin_txt + ' ' + output_path + 'APF_' + origin_txt)

        修改output_path两次,执行脚本两次

python cp_BBres_txts.py

测评过程

生成ERRresults/xxx.mat

  • 使用main_GenerateMat.m和calcPlotErr.m两个脚本,其中main_GenerateMat.m 脚本调用了 calcPlotErr.m 脚本,即main_GenerateMat.m 脚本是主程序。该步骤的输入输出分别为:
input ERRresults/APF/*.txt
output ERRresults/APF/*.mat
  • 脚本中有一些参数需要修改:

(1)main_GenerateMat.m脚本中:basePath为GTOT数据集的位置,即"xxx/data/GTOT/";trackers为几个追踪算法的名字,这里设置为trackers={'APF'};

(2)calcPlotErr.m脚本中:basePath为GTOT数据集的位置;resultPath为跟踪框txt文件所在位置以及要输出的检测框mat文件所在位置,即resultPath='ERRresults/APF/'; 64行左右处也要改为'APF_',即:

results.res=dlmread([resultPath 'APF_' seq_name  '.txt']); %seq_length*8
  • 运行main_GenerateMat.m 脚本之后,将在ERRresults/APF下得到相应的mat文件

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

生成PR、SR曲线图

  • 使用main_drawResult.m脚本。脚本中有一些参数需要修改:algs为ERRresults文件夹下存有的算法的名字;basePath为GTOT数据集的位置。
%algs={'APF'}; % ours
algs={'APF', 'ADNet', 'MANet', 'DAPNet', 'DAFNet', 'MDNet', 'SGT', 'RT-MDNet+RGBT', 'MDNet+RGBT', 'MACNet'}; % overall
pixelThreshold=5;

basePath='xxx/dataset/GTOT/';
  • 该步骤的输入输出为:
input ERRresults/*.mat
output PR、SR曲线图

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

         如上图所示,在PR图中,横轴表示定位损失阈值,单位是像素,纵轴是精确率 PR,论文中说到过,对于 GTOT 数据集,阈值设置为 5 个像素,所以横轴等于 5 像素时,得到APFNet 在GTOT数据集上的精确率为 90.5%。各个 RGBT 目标跟踪算法相互对比,可知 APFNet算法在众多算法当中,性能较为优越。

        在SR图中,横轴表示 overlap 阈值,即追踪框和 GT 框之间交并比的大小,纵轴表示成功率 SR。当阈值取 0.7 时,即当 overlap 大于 0.7 时表示成功追踪,APFNet 算法的 SR 为 73.7%。各个 RGBT 目标跟踪算法相互对比,可知 APFNet 算法在众多算法当中,性能较为优越。

合成跟踪可视化视频

  • 使用main_drawTrackersResult.m脚本生成追踪结果图片。tracker为追踪算法的名字,basePath为GTOT数据集的位置;sequence为视频序列的名字;sequencePath为GTOT数据集的位置;同时需要注意的是展示出来的图片未全部填充整个窗口,所以需要修改大约80和104行的两处imshow代码使图片完全填充窗口,消除白边。
tracker={'APF'} %使用几种跟踪算法就会同时有几种追踪框
basePath='xxx/dataset/GTOT/';

dirs = dir(basePath);
sequences = {dirs.name};
sequences(strcmp('.', sequences) | strcmp('..', sequences) | strcmp('anno', sequences) | ~[dirs.isdir]) = [];

%sequence='Minibus1';
sequence='Football';

%for ni=8
% sequence=sequences{ni}

trackerResultsPath='BBresults/';
sequencePath='xxx/dataset/GTOT/';
saveBasePath='trackingResultsDisplay/';


%imshow(uint8(im));
imshow(uint8(im),'border','tight');
  • 更换sequence为GTOT数据集中不同的序列名称,可在trackingResultsDisplay/文件夹下得到不同视频序列在两个模态下的APFNet的跟踪框的可视化图片。

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

  •  在项目根目录下新建my_video文件夹和gen_video.py脚本,gen_video.py用于将trackingResultsDisplay/文件夹下已有的所有序列合成视频,gen_video.py内容如下:
import cv2
import os
import linecache

DEBUG = 1

def gen_video(sequence_path, res_video_path, gt_path):
    if not os.path.exists(res_video_path):
        os.system('mkdir ' + res_video_path)
    f = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 保存视频格式为avi
    for sequence_name in os.listdir(sequence_path):
        #save_sequence_path = os.path.join(res_video_path, sequence_name)
        save_sequence_path = res_video_path + '/' + sequence_name
        if DEBUG:
            print(save_sequence_path)
        if not os.path.exists(save_sequence_path):
            os.makedirs(save_sequence_path)
        test_frame_v = cv2.imread(os.path.join(sequence_path, sequence_name + '/v/1.jpg') )
        video_writter_v = cv2.VideoWriter(os.path.join(save_sequence_path, sequence_name + '_v.avi'), f, 25, (test_frame_v.shape[1], test_frame_v.shape[0]))
        test_frame_i = cv2.imread(os.path.join(sequence_path, sequence_name + '/i/1.jpg') )
        video_writter_i = cv2.VideoWriter(os.path.join(save_sequence_path, sequence_name + '_i.avi'), f, 25, (test_frame_i.shape[1], test_frame_i.shape[0]))

        for channel in ['v', 'i']:
            video_path = os.path.join(sequence_path, sequence_name, channel)
            label_path = os.path.join(gt_path, sequence_name)
            #for frame_name in os.listdir(video_path): # 这样读取是乱序,视频跳帧
            #    frame = cv2.imread(os.path.join(video_path, frame_name))
            for index in range(len(os.listdir(video_path))):
                frame = cv2.imread(os.path.join( video_path, str(index+1) + '.jpg') )
                if channel == 'v':
                    now_label = linecache.getline(os.path.join(label_path, 'groundTruth_v.txt'), index+1).strip() # 去掉换行符
                else:
                    now_label = linecache.getline(os.path.join(label_path, 'groundTruth_i.txt'), index+1).strip() # 去掉换行符
                ori_data_seq_vis_path = os.path.join(label_path, 'v')
                ori_data_seq_vis_img_name = os.listdir(ori_data_seq_vis_path)[0]
                ori_data_seq_vis_img = cv2.imread(os.path.join(ori_data_seq_vis_path, ori_data_seq_vis_img_name))
                ratio_w = test_frame_v.shape[1] / ori_data_seq_vis_img.shape[1]
                ratio_h = test_frame_v.shape[0] / ori_data_seq_vis_img.shape[0]
                #print(now_label)
                [x, y, x1, y1] = now_label.split(' ')
                [x, y, x1, y1] = [int(x), int(y), int(x1), int(y1)]
                cv2.rectangle(frame, ( int(x * ratio_w), int(y * ratio_h) ), ( int(x1 * ratio_w), int(y1 * ratio_h)), (255,255,255), 2)
                if DEBUG:
                    cv2.imshow(sequence_name + '_' + channel, frame)
                    cv2.waitKey(20)
                if channel == 'v':
                    video_writter_v.write(frame)
                else:
                    video_writter_i.write(frame)
            cv2.destroyAllWindows()


if __name__ == '__main__':
    sequence_path = './trackingResultsDisplay'
    res_video_path = './my_video'
    gt_path = 'xxx/dataset/GTOT'
    gen_video(sequence_path, res_video_path, gt_path)
  • 脚本中注意的是上一步保存的图片大小与原图大小不一致,所以脚本中有缩放操作,运行gen_video.py脚本之后,将在my_video下得到对应序列名称的所有视频,其中白色框为gt框,红色框为APFNet算法的跟踪框。

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

RGBT234测评工具箱使用

说明

  • 大体流程与GTOT一致,细节有所不同
  • 参数设置不同
  • 脚本编写略微差异

结构

        在RGBT234测评工具箱中,共有七个文件夹,其中, BBresults_TIP 文件夹中存放的是测试生成的目标跟踪框的 txt 文件,ERRresults_TIP 文件夹中的是计算生成的错误率文件,figsResults_TIP文件夹中的是不同属性下的PR、SR曲线评测图,sequencesAttr 是工具箱中自带的关于 RGBT234 数据集特性的一些文件,trackingResultsDisplay是存放带有跟踪框的结果图像的文件夹,RGBT234_APFNet_tracking_result 文件夹存放的是使用GTOT数据集作为训练集, RGBT234作为测试集得到的测试跟踪结果(文件中每一行都含有八个数值,前四个和后四个分别代表在 RGB 图像和热红外图上的跟踪框四元数),my_video文件夹是自己建立的,用来存放合成视频的文件夹。

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

准备工作

        在测评工具箱根目录下新建脚本cp_BBres_txts.py,用于将测试APF模型时生成的bbox框文件拷贝并重命名至 BBresults_TIP 与 ERRresults_TIP/APF 两个文件夹内,需要注意的是RGBT234数据集解压后可能自带有一个rgbt234.txt文件,需要将其删除。

import os

input_path = './RGBT234_APFNet_tracking_result/'
output_path = './BBresults_TIP/'
#output_path = './ERRresults_TIP/APF/'

for origin_txt in os.listdir(input_path):
    os.system('cp ' + input_path + origin_txt + ' ' + output_path + 'APF_' + origin_txt)

        修改output_path两次,执行脚本两次

python cp_BBres_txts.py

测评过程

生成ERRresults_TIP/xxx.mat

  • 使用main_GenerateMat_TPR.m和calcPlotErr_TPR.m两个脚本,其中main_GenerateMat_TPR.m 脚本调用了calcPlotErr_TPR.m脚本,即main_GenerateMat_TPR.m脚本是主程序。该步骤的输入输出分别为:
input ERRresults_TIP/APF/*.txt
output ERRresults_TIP/APF/*.mat
  • 脚本中有一些参数需要修改:

(1)main_GenerateMat_TPR.m脚本中:basePath为GTOT数据集的位置,即"xxx/data/RGBT234/";trackers为几个追踪算法的名字,这里设置为trackers={'APF'};

(2)calcPlotErr_TPR.m脚本中:basePath为RGBT234数据集的位置;resultPath为跟踪框txt文件所在位置以及要输出的检测框mat文件所在位置,即resultPath='ERRresults_TIP/APF/'; 需要提前建好APF文件夹;73行左右处也要改为'APF_',即:

results.res=dlmread([resultPath 'APF_' seq_name '.txt']); %seq_length*8
  • 运行main_GenerateMat_TPR.m脚本之后,将在ERRresults_TIP/APF下得到相应的mat文件

生成PR、SR曲线图

  • 使用main_drawResult_TPR.m脚本。脚本中有一些参数需要修改:algs为ERRresults_TIP文件夹下存有的算法的名字;basePath为RGBT234数据集的位置。
%algs={'APF'}; % ours
algs={'APF', 'CFnet+RGBT', 'MDNet+RGBT', 'DAFNet', 'KCF+RGBT', 'DAPNet', 'DAT', 'ECO', 'SGT', 'SiamDW+RGBT'}; % overall
pixelThreshold=20;

basePath='xxx/dataset/RGBT234/';
  • 该步骤的输入输出为:
input ERRresults_TIP/*.mat
output PR、SR曲线图

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

rgbt234,计算机视觉,RGBT目标跟踪,目标跟踪,人工智能,计算机视觉

        如上图所示,在PR图中,横轴表示定位损失阈值,单位是像素,纵轴是精确率 PR,论文中说到过,对于RGBT234数据集,阈值设置为20个像素,所以横轴等于20像素时,得到APFNet 在RGBT234数据集上的精确率为 82.7%。各个 RGBT 目标跟踪算法相互对比,可知 APFNet算法在众多算法当中,性能较为优越。

        在SR图中,横轴表示 overlap 阈值,即追踪框和 GT 框之间交并比的大小,纵轴表示成功率 SR。当阈值取 0.7 时,即当 overlap 大于 0.7 时表示成功追踪,APFNet 算法的 SR 为 57.9%。各个 RGBT 目标跟踪算法相互对比,可知 APFNet 算法在众多算法当中,性能较为优越。文章来源地址https://www.toymoban.com/news/detail-721638.html

合成跟踪可视化视频

  • 使用main_drawTrackersResult_APF.m脚本生成追踪结果图片。该脚本复制于main_drawTrackersResult_PaGLe.m。其中,tracker为追踪算法的名字,basePath为RGBT234数据集的位置;sequencePath为RGBT234数据集的位置;trackerResultsPath为追踪结果框txt文件所在路径;saveBasePath为连续帧图片保存路径;大约28行的ni为选择某一个序列的序号,也可以直接对sequence赋值决定某一个视频序列。同时需要注意的是展示出来的图片未全部填充整个窗口,所以需要修改大约80和104行的两处imshow代码使图片完全填充窗口,消除白边。
basePath='xxx/dataset/RGB_T234/';
trackerResultsPath='BBresults_TIP/';
sequencePath='xxx/dataset/RGB_T234/';
saveBasePath='trackingResultsDisplay/';
if(isdir(saveBasePath)==0),
    mkdir(saveBasePath);
end

tracker={'APF'};
%tracker={'PaGLe','CSR','DSST','HCF','JSR','KCF','L1-PF','MDNet','SGT','SOWP','Staple'};%,'STRUCK','CN','CT','MIL','SCM'};

%all videos, call self with each video name.
%only keep valid directory names
dirs = dir(basePath);
sequences = {dirs.name};
sequences(strcmp('.', sequences) | strcmp('..', sequences) | strcmp('anno', sequences) | ~[dirs.isdir]) = [];

edgeColor={'r','g','b','y','k','m','c','g','b','y','r'};
lineStyle={'-','-','-','-','--','--','--','--','--','--','--'};

% for ni=100:numel(sequences)
for ni=120:120 % 选择第120个文件夹,即manwithluggage
% sequence='walkingtogether1';
sequence=sequences{ni};


%imshow(uint8(im));
imshow(uint8(im),'border','tight');
  • 更换sequence为RGBT234数据集中不同的序列名称,可在trackingResultsDisplay/文件夹下得到不同视频序列在两个模态下的APFNet的跟踪框的可视化图片。
  •  在项目根目录下新建my_video文件夹和gen_video.py脚本,gen_video.py用于将trackingResultsDisplay/文件夹下已有的所有序列合成视频。
  • 脚本中注意的是上一步保存的图片大小与原图大小不一致,所以脚本中有缩放操作,运行gen_video.py脚本之后,将在my_video下得到对应序列名称的所有视频,其中白色框为gt框,红色框为APFNet算法的跟踪框。

到了这里,关于GTOT和RGBT234测评工具箱使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【打工日常】使用docker部署Dashdot工具箱

    dashdot 是一个简洁清晰的服务器数据仪表板,基于 React 实现 ,主要是显示操作系统、进程、存储、内存、网络这五个的数据。 本次实践部署环境为个人测试环境 本次实践环境规划:docker快速拉取Dashdot镜像,然后后台启动Dashdot镜像 启动镜像后的名字 IP地址 容器镜像版本 操

    2024年02月19日
    浏览(35)
  • CC工具箱使用指南:【获取所有字段信息】

    一、简介 这个工具的目的简单易懂,就是获取选定要素图层的所有字段信息。 本身不对要素图层作任何处理,只是一个查看属性的工具。 问我要用在什么地方,我也不知道-_- 二、工具参数介绍 点击【信息获取】组里的【获取所有字段信息】工具: 即可打开下面的工具框界

    2024年01月16日
    浏览(39)
  • 如何使用图吧工具箱进行CPU和显卡双烤

    图吧工具箱是一款功能强大的硬件检测工具合集,且开源、免费、绿色; 集成了硬件检测、评分工具、测试工具,常见的工具都有; 电脑压力测试能对电脑硬件进行检测,通过释放电脑的性能来达到性能检测的目的; 压力测试也是一种包质保量的操作,是软件检测过程的一

    2023年04月23日
    浏览(53)
  • CC工具箱使用指南:【更改字段别名(属性映射)】

    一、简介 在我工作中遇到的大多数图斑,字段名称一般是英文,字段别名是中文,使用起来是比较方便的。 但有时候数据经过分析处理过后,图斑的字段别名被修改成了和字段名称一样的英文,这样就很难理解字段名称的意思,特别是其它专业、不熟悉的图斑,就很麻烦。

    2024年01月18日
    浏览(36)
  • CC工具箱使用指南:【现状规划用地变化检查(村规)】

    一、简介 在规划工作中,有一个普遍性的需求,就是需要检查规划前后在用地上究竟发生了哪些变化。 这一点很重要,不仅是要展示给别人看,自己也要十分注意。 规划方案完成后,一定要进行用地变化的检查,曾经在村规中就遇到过因为误操作占用了村民宅基地的情况。

    2024年01月23日
    浏览(33)
  • MATLAB的Viewer3D工具箱引入及使用方式

    目录 一、工具箱的导入 二、工具箱的使用方法 由于MATLAB没有直接给出重建后的三维图像进行展示的方式,因此需要借助工具箱Viewer3D来辅助完成展示的工作,以下是工具箱的导入和使用方法,希望对大家有帮助。 1、打开MATLAB,点击主页,找到附加功能 2、 点击附加功能,

    2024年02月05日
    浏览(37)
  • 【基于PSINS工具箱】组合导航,EKF与UKF的对比,使用153模型

    【务必注意】 需要事先安装PSINS工具箱!!! 如果没有工具箱,网上面很多,实在找不到可以找我要链接。没有工具箱是无法直接运行本程序的。 程序根据153的模型(15维状态量、3维GNSS观测量),在自己定义了一个运动路径后,使用EKF和UKF对状态进行估计,并绘制轨迹图、

    2024年04月15日
    浏览(24)
  • ImageJ | 免疫组织化学(IHC)图像分析工具箱 | 下载地址 | 安装教程 | 使用教程

    安装IHC 工具箱,需要安装ImageJ 1.40或更高版本。你可以使用小编提供的最新版本的ImageJ。(截至发文前) :::block-1 ImageJ 软件下载 ImageJ for Windows 链接:https://pan.baidu.com/s/1v9pXegaU8Lps0CaT3ZYx2A?pwd=yp23 提取码:yp23 ImageJ for MacOS(Intel) 链接:https://pan.baidu.com/s/1LyBa-fWtfTVLo7OWTF84HA?pwd

    2024年01月17日
    浏览(45)
  • ChatGP4 的体验 一站式 AI工具箱 -—Poe(使用教程)

    界面介绍: 是一个基于机器学习的聊天机器人,能够识别自然语言并做出智能回答。Sage通过自然语言处理和对话管理技术来实现对话的自然流畅和个性化,同时支持多种语言。Sage较为擅长语言相关的工作,例如创作文章,做摘要等。 是由开放人工智能(OpenAI)公司开发的一

    2024年02月11日
    浏览(86)
  • ChatGPT4 的体验 一站式 AI工具箱 -—Poe(使用教程)

    界面介绍: 是一个基于机器学习的聊天机器人,能够识别自然语言并做出智能回答。Sage通过自然语言处理和对话管理技术来实现对话的自然流畅和个性化,同时支持多种语言。Sage较为擅长语言相关的工作,例如创作文章,做摘要等。 是由开放人工智能(OpenAI)公司开发的一

    2023年04月22日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包