STARK代码详细学习笔记
STARK代码学习笔记
- 前言
- 一、环境安装
- 二、设置项目路径
- 三、训练STARK
- 四、测试STARK
- 1. 下载预训练模型
- 2. 准备测试数据集
- 五、STARK代码细节
- 六、测试过程可视化
前言
本文记录了STARK代码学习阶段的步骤,核心内容从原作者的github中搬运,对于部分内容(如不同数据集的测试语句)仅以一个为例进行展示,详细请查看原github页面。
code链接:https://github.com/researchmm/Stark
paper链接:https://arxiv.org/abs/2103.17154
STARK的Highlights:
- End-to-End: 直接预测一个精准的边界框作为跟踪结果。
- Post-processing Free: 不需要任何超参数敏感性的处理,性能稳定。
- Real-Time Speed: STARK-ST50, STARK-ST101在Tesla V100上的运行时间分别为40和30FPS;STARK-Lightning在RTX TITAN上的运行时间为200-300FPS
开始前的准备工作,从https://github.com/researchmm/Stark中下载代码部分
一、环境安装
该项目基于pytorch17的框架,如果已经有pytorch17的环境可以直接在自己电脑中的环境中运行,不用再重建虚拟环境。
进入自己的pytorch17的虚拟环境中,安装STRAK中的所需的其他库(记得进入install_pytorch17.sh把前4行中安装pytorch的语句删除)。
conda activate pytorch17 # 我的虚拟环境的名称就叫做pytorch17
bash install_pytorch17.sh # 安装其他库
二、设置项目路径
cd到STARK文件夹,执行以下语句,会在 lib/train/admin/local.py 和 lib/test/evaluation/local.py 中分别生成训练数据和测试数据的路径,之后如果要修改数据路径也是在对应local.py文件中修改。
python tracking/create_default_local_file.py --workspace_dir . --data_dir ./data --save_dir .
三、训练STARK
用单个GPU训练
python tracking/train.py --script stark_s --config baseline --save_dir . --mode single
四、测试STARK
1. 下载预训练模型
直接进行测试的话,需要下载一个预训练好的模型
- 官方链接:https://github.com/researchmm/Stark/blob/main/MODEL_ZOO.md
- 我自己只下了STARK-ST50的baseline,存放在阿里云盘里了,下载挺快的:https://www.aliyundrive.com/s/erHasVGm46h
下载完成后在项目根目录下创建checkpoints/train/strak_st2/baseline文件夹,并将文件放在里面。
2. 准备测试数据集
以LaSOT数据集为例,在项目的根目录下创建data文件夹,然后放入自己下好的LaSOT数据集。
- LaSOT链接:http://vision.cs.stonybrook.edu/~lasot/download.html
- 全部的LaSOT序列太大了,我这里只下载了truck的序列视频(约5G),阿里云盘链接:
以LaSOT数据集为例,终端环境下测试语句如下:
# 在终端下测试
python tracking/test.py stark_st baseline --dataset lasot --threads 32
python tracking/analysis_results.py # need to modify tracker configs and names
直接运行会出BUG,还需要修改以下几个地方。
将lasotdataset.py中的def _get_sequence_list()方法里的sequence_list改为[‘truck-1’,…,] (这是因为我们只下载了truck序列的数据集)
在终端重新运行
python tracking/test.py stark_st baseline --dataset lasot --threads 32
会提示Downloading: restnet50之类的语句,这是在下载backbone,虽然只有97.8M还是很慢,我自己下载好后放到了该语句中提示的下载处。
restnet50的阿里云盘链接:https://www.aliyundrive.com/s/yb9SVcm4wY2
这时再重新运行,进行测试
python tracking/test.py stark_st baseline --dataset lasot --threads 32
五、STARK代码细节
持续补充ing…
测试结果会保存在STARK/test/tracking_results文件夹中
若要观察代码运行过程中每一帧的预测结果,STARK/lib/test/evaluation/tracker.py中约line 87
output = self._track_sequence(tracker, seq, init_info)
print(‘output[‘target_bbox’]’) # 视频中所有帧的预测结构
六、测试过程可视化
为了实时看到测试的结果,可以对原始代码略加修改,增加可视化部分。
这里需要注意一下:LaSOT的annotations和该项目中的output的预测框格式都是**[x,y,w,h]**,其中x:左上角的横坐标,y:左上角的纵坐标,w:目标的宽,h:目标的高。
所以可视化预测框的代码如下,将其添加在STARK/lib/test/evaluation/tracker.py的约line145行后(也就是_store_outputs(…)后),
img = cv.imread(frame_path)
pred_bbox = out['target_bbox']
cv.rectangle(img,(int(pred_bbox[0]),int(pred_bbox[1])),(int(pred_bbox[0]+pred_bbox[2]),int(pred_bbox[1]+pred_bbox[3])),(0,0,255),3)
cv.imshow(seq.name, img)
cv.waitKey(1)
再重新测试就可以看到实时检测的画面了,红色框就是算法的预测框。
STARK代码详细学习笔记相关推荐
- monodepth-pytorch代码实现学习笔记(一)
monodepth-pytorch代码实现学习笔记(一) 前言 一.前期准备 1. 数据集 2. 训练与测试 二.数据预处理 1. data_loader.py 1.1 __init__(self,r ...
- 步步为营 .NET 代码重构学习笔记 九
步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...
- 步步为营 .NET 代码重构学习笔记 十一
步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...
- 步步为营 .NET 代码重构学习笔记 十
步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...
- 重要性采样(Importance Sampling)详细学习笔记
重要性采样(Importance Sampling)详细学习笔记 文章目录 重要性采样(Importance Sampling)详细学习笔记 前言: 参考主体: on-policy 和 off-pol ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)
Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...
- Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
所有示例使用的数据表均为Oracle提供的SQL基础数据表(t_employees.sql dept.sql emp.sql salgrade.sql) 熟练掌握多多练习即可达到完成后端开发所需具备的 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (八)————最优性条件
陈宝林<最优化理论与算法>超详细学习笔记 (八)----最优性条件 无约束问题的极值条件 必要条件 二阶充分条件 充要条件 约束极值问题的最优性条件 不等式约束的一阶最优性条件 无约束问题 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (七)————第五章 运输问题
陈宝林<最优化理论与算法>超详细学习笔记 (七)----第五章 运输问题 第1节 运输问题的数学模型 第2节 表上作业法 2.1 确定初始基可行解 2.2 最优解的判别 2.3 改进的方法 ...
最新文章
- JAVA-初步认识-第三章-if语句练习-星期和季节
- 用ASP实现简单的繁简转换
- Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数
- 四、极大似然参数估计
- Piggy-Bank POJ - 1384(完全背包+背包放满)
- 简单解决XP共享连接数10限制(转)
- 时间复杂度O(1) O(n) O(logn) O(nlogn)是什么意思?
- 如何使用 Spring 对数据库进行 CURD?
- 解决Zarp报错,成功运行
- 解决办法:look up error: undefined symbol
- mysql-8.0.26-winx64 的下载与安装教程
- VS201x提示无法查找或打开 PDB 文件
- 【Python K均值聚类算法】
- 导航动态避让算法RVO的优化ORCA(Optimal Reciprocal Collision Avoidance)
- 几点个人信息安全感受
- html 显示doc文件
- vc显示html文档,VC++ 显示内存中地HTML内容
- Android 10.0 关机对话框UI定制化开发(一)
- 关于国企、外企、私企(转)
- 青岛农商银行计算机防病毒应用培训,农信银资金清算中心——青岛农商银行举办2020年新入职员工培训班...
热门文章
- 云效首发应用交付和项目协作新品,助力企业DevOps到BizDevOps
- 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路
- R语言学习笔记4_参数估计
- Java自定义模板设计
- java通过POI快速读取excel大量数据的方式
- 社会工程攻击——setoolkit使用(含错误解决)
- 大学python难不难_“大学四年怎么过?”其实是有答案的
- SQL注入漏洞测试(参数加密)
- a该内存不能为“read”或“written解决方案
- 最小生成树(克鲁斯卡尔算法 普里姆算法)