目标跟踪不同算法比较感性可视化图

注意:由于我写的有些急,本程序有一些bug。可能会到某个视频时程序就不运行了,这个没关系,直接再次运行就行了。最终的结果可能有一些视频跟踪框会错位,但是大部分是正确的。

百度云链接:

https://pan.baidu.com/s/13j78GzRdYjHwjz1ndC1s8g
提取码:77ax

包含资源:

在这里插入图片描述

1. 效果

在这里插入图片描述

2. README
注意:main.py为画图程序
运行demo
# 更改一些路径,进入目录后,执行下面指令可以运行程序
python main.py
只需更改main.py中的一些信息,即可运行自己的算法感性评测图
# 一些关键修改部分
# 选择某个视频
video_num = 0 
# 数据集所在路径
src_pic_path = 'xxx/OTB100'
# 算法评测结果所在路径
eval_result_path = './Results_OTB100'
# 画图结果保存路径
dst_pic_path = 'xxx/dst'
# 选择想要画的算法结果,注意:需要改all_list[a][index]中的a这一项
track_gt = all_list[15][index]  # Staple
3. 代码
# encoding: utf-8
import os
import numpy as np
import cv2

# 选择第几个视频
# TODO:选择某个视频
video_num = 2

# TODO:数据集所在路径
src_pic_path = '../data/OTB100'

all_pic = os.listdir(src_pic_path)  # 注意os.listdir获取到的路径是乱序的,要用.sort函数排序
all_pic.sort()

each_video_path = [os.path.join(src_pic_path, video_path) for video_path in all_pic]
# print(each_video_path)
# choose one video
one_video = each_video_path[video_num] # 
result = one_video.split('/')
video_name = result[len(result) - 1]
print('choosed video_name: ({})--'.format(video_num), video_name)

# TODO:算法评测结果所在路径
eval_result_path = './Results_OTB100'
all_eval_trackers = os.listdir(eval_result_path)
all_eval_trackers.sort()
each_eval_tracker = [os.path.join(eval_result_path, eval_tracker) for eval_tracker in all_eval_trackers]  # evaluation results of all trackers
each_eval_tracker.sort()
# print(each_eval_tracker)

# choose one tracker
one_tracker = each_eval_tracker[4]  #
each_eval_result = os.listdir(one_tracker)
each_eval_result.sort()  # ['Basketball.txt', 'Biker.txt', 'Bird1.txt', ... ,'Walking2.txt', 'Woman.txt']
# print(each_eval_result)

# each_eval_result_path = [os.path.join(one_tracker, eval_result) for eval_result in each_eval_result]
# print(each_eval_result_path)
#
# ---------------------------------------------
all_trakcers_result = []
for tracker in each_eval_tracker:
    each_eval_result_path = [os.path.join(tracker, eval_result) for eval_result in each_eval_result]
    all_trakcers_result.append(each_eval_result_path)
# print('all_trackers_result', all_trakcers_result)  # [['./Results_OTB100/CCOT/Basketball.txt', ... ,], ...]
# ---------------------------------------------

all_list = []  # a video of one tracker
for num in range(0, len(all_trakcers_result)):
    with open(all_trakcers_result[num][video_num]) as eval_result:  # choose a video of one tracker
        dataset = []
        lines = eval_result.readlines()

        # read datas in txt file, transform to String formation
        for line in lines:
            temp1 = line.strip('\n')
            temp2 = temp1.split('\t')
            dataset.append(temp2)

        new_dataset = [new_line[0].split(',') for new_line in dataset]  # .split(',')按逗号分割字符串
        # print('new_dataset', new_dataset)
        # str转化成int型
        for i in range(0, len(new_dataset)):
            for j in range(len(new_dataset[i])):
                new_dataset[i][j] = int(float(new_dataset[i][j]))
        all_list.append(new_dataset)

# print(all_list)
#
# every frame in a video
frames_list = os.listdir(os.path.join(one_video, 'img'))
frames_list.sort()
frames_path = [os.path.join(os.path.join(one_video, 'img'), frame_path) for frame_path in frames_list]

# print(frames_path)

# TODO:画图结果保存路径
dst_pic_path = './dst/'
dst_pic_path = dst_pic_path + video_name

# 判断是否有文件夹,如果没有则新建   如果有的话,说明已经生成过了。需要删除原文件后再次执行程序
f = os.path.exists(dst_pic_path)
if f is False:
    #
    os.makedirs(dst_pic_path)

    # show the tracking results
    for index, path in enumerate(frames_path):
        img = cv2.imread(path)
        # print(img.shape)
        # --------------------------------------
        # results of trackers
        # all_list[a][b] 解释:a为某个算法,b为某个算法的某帧结果
        # a 对应的算法 : CCOT CFNet DaSiamRPN DeepSRDCF ECO fDSST GradNet MDNet Ours OursOld SiamDWfc SiamDWrpn SiamFC SiamRPN SRDCF Staple
        # TODO:选择想要画的算法结果,注意:需要改all_list[a][index]中的a这一项
        track_gt = all_list[15][index]  # Staple
        # draw bounding boxes
        cv2.rectangle(img, (track_gt[0], track_gt[1]), (track_gt[0] + track_gt[2], track_gt[1] + track_gt[3]), (255, 255, 255), thickness=2)  # 白色

        track_gt_1 = all_list[3][index]  # DeepSRDCF
        cv2.rectangle(img, (track_gt_1[0], track_gt_1[1]), (track_gt_1[0] + track_gt_1[2], track_gt_1[1] + track_gt_1[3]), (255, 0, 0), thickness=2)  # 蓝色

        track_gt_2 = all_list[13][index]  # SiamRPN
        cv2.rectangle(img, (track_gt_2[0], track_gt_2[1]), (track_gt_2[0] + track_gt_2[2], track_gt_2[1] + track_gt_2[3]), (0, 255, 0), thickness=2)  # 绿色

        # track_gt_3 = all_list[5][index]  # fDSST
        # cv2.rectangle(img, (track_gt_3[0], track_gt_3[1]), (track_gt_3[0] + track_gt_3[2], track_gt_3[1] + track_gt_3[3]), (0, 0, 255), thickness=1)

        track_gt_4 = all_list[6][index]  # GradNet
        cv2.rectangle(img, (track_gt_4[0], track_gt_4[1]), (track_gt_4[0] + track_gt_4[2], track_gt_4[1] + track_gt_4[3]), (255, 0, 255), thickness=2)  # 紫色

        track_gt_5 = all_list[8][index]  # Ours
        cv2.rectangle(img, (track_gt_5[0], track_gt_5[1]), (track_gt_5[0] + track_gt_5[2], track_gt_5[1] + track_gt_5[3]), (0, 0, 255), thickness=2)  # 红色

        track_gt_6 = all_list[4][index]  # ECO
        cv2.rectangle(img, (track_gt_6[0], track_gt_6[1]), (track_gt_6[0] + track_gt_6[2], track_gt_6[1] + track_gt_6[3]), (0, 255, 255), thickness=2)  # 黄色

        track_gt_7 = all_list[12][index]  # SiamFC
        cv2.rectangle(img, (track_gt_7[0], track_gt_7[1]), (track_gt_7[0] + track_gt_7[2], track_gt_7[1] + track_gt_7[3]), (0, 0, 0), thickness=2)  # 黑色
        # --------------------------------------

        cv2.putText(img, '#{}'.format(index), (10, 30), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 255, 255), 2)
        cv2.putText(img, video_name, (10, int(img.shape[0] * 0.9)), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 255, 255), 2)

        cv2.imwrite(dst_pic_path + '/' + video_name + '_img_{}.jpg'.format(index), img)
       # cv2.imshow('src_img', img)
       # cv2.waitKey(0)
else:
    print('已经生成过({}),请删除原文件后重新执行程序'.format(video_name))

  • 14
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
### 回答1: 以下是XGBoost算法的流程可视化: ![XGBoost算法流程可视化](https://miro.medium.com/max/1250/1*FLshv-wVDfu-i54OqvZdHg.png) 这张包含了XGBoost算法的许多关键步骤,包括数据预处理、树结构生成、目标函数定义等。其,数据预处理包括特征选择、数据清洗以及数据转换等步骤;树结构生成包括决策树的生成过程、树的剪枝以及节点分裂等步骤;目标函数定义包括损失函数的定义、正则化项的添加以及梯度计算等步骤。这些步骤的顺序和细节可能会根据具体情况而有所不同,但这个流程可以帮助我们更好地理解XGBoost算法的整体框架和基本思路。 ### 回答2: xgboost算法流程可视化是将xgboost算法的流程以形的方式展示出来,方便理解和理解算法的工作机制。 xgboost算法是一种集成学习的算法,通过组合多个弱学习器(比如决策树)来构建一个强大的预测模型。算法的主要流程可以分为数据准备、模型建立和模型优化三个阶段。 在数据准备阶段,我们需要对数据进行加工和处理,包括数据清洗、数据预处理、特征工程等步骤。这些步骤主要是为了提高数据的质量和模型的效果。 在模型建立阶段,我们首先初始化一个弱学习器,通常是一个决策树。然后,我们通过迭代的方式依次添加更多的弱学习器,每次迭代都会根据前一轮的模型表现来调整当前模型的参数,以获得更好的预测效果。这种迭代的方式能够不断提高模型的准确性和稳定性。 在模型优化阶段,我们通过目标函数来评估模型的预测效果,并根据评估结果来选择合适的模型参数。一般来说,目标函数会综合考虑模型的预测准确率和模型的复杂度,以达到平衡的效果。 通过流程可视化,我们可以清晰地了解xgboost算法的工作流程和各个阶段的具体操作。这能够帮助我们更好地理解算法,更方便地进行参数调优和模型优化。同时,流程可视化也能够方便地与其他人分享算法的工作方式,促进合作和交流。 ### 回答3: xgboost是一种优秀的机器学习算法,它的流程可视化可以帮助我们更好地理解其工作原理和算法流程。 首先,xgboost的算法流程主要包括数据预处理、模型训练和模型预测三个主要步骤。 数据预处理阶段首先需要对原始数据进行清洗和处理,包括处理缺失值、处理异常值、特征选择和特征编码等操作,以保证数据的质量。 接下来是模型训练阶段,xgboost采用了基于决策树的集成学习方法。首先初始化模型,设定一些初始参数,然后通过迭代的方式不断优化模型。在每一轮迭代,xgboost会根据当前模型的表现,计算损失函数的梯度和二阶导数,并根据这些信息进行树的生长和剪枝。同时,xgboost还引入了正则化项和学习速率等机制,以避免过拟合和加快模型的收敛。 最后是模型预测阶段,xgboost通过将每棵树的预测结果相加来得到最终的预测结果。同时,还可以通过对模型的每棵树进行可视化展示,即树的深度、节点的分裂特征和分裂点等信息,从而帮助我们理解模型的决策过程。 总之,xgboost算法流程可视化可以帮助我们更加直观地了解其工作原理和算法流程,对于算法的调优和问题的分析有着重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值