PySOT调试

PySOT调试

零、准备工作

文件下载

  1. 作者代码下载:pysot

  2. 数据集:

    VID

    Youtube-BB: 百度云盘 提取码:h964

    DET

    COCO

  3. 预训练模型:Google Drive

  4. 最终模型:百度云盘 提取码:j9yb

注:详细见代码中的ReadMe部分,另外,以上文件除了数据集,我都保存至百度云盘 提取码:c215

数据集处理

以VID数据集为例,将文件名进行对应的修改,并将VID/val移动到train的文件夹下。

# 在VID数据集下
Annotations/VID/train/ILSVRC2015_VID_train_0000  改为Annotations/VID/train/a
Annotations/VID/train/ILSVRC2015_VID_train_0001  改为Annotations/VID/train/b
Annotations/VID/train/ILSVRC2015_VID_train_0002  改为Annotations/VID/train/c
Annotations/VID/train/ILSVRC2015_VID_train_0003  改为Annotations/VID/train/d
Annotations/VID/val   修改并移动Annotations/VID/train/e

Data/VID/train/ILSVRC2015_VID_train_0000  改为Data/VID/train/a
Data/VID/train/ILSVRC2015_VID_train_0001  改为Data/VID/train/b
Data/VID/train/ILSVRC2015_VID_train_0002  改为Data/VID/train/c
Data/VID/train/ILSVRC2015_VID_train_0003  改为Data/VID/train/d
Data/VID/val   修改并移动Data/VID/train/e

准备好数据集后,依次运行training_dataset/vid下的python文件:

parse_vid.py
// 注意修改VID文件路径 VID_base_path,另外若不修改保存位置,则对应的文件都保存在parse_vid.py所在文件夹下。

par_crop.py

// 进行图片的剪切,若使用服务器进行多进程操作,会很快。我在本地剪切完数据大概用了300min,另外,生成的内容大概有72G,在当前文件路径下的crop511文件夹下,所以要注意适当更改路径。

gen_json.py

// 生成相应的JSON文件,同样也是注意读取和保存文件路径。

在数据集处理过程中需要注意的是,在windows下和Linux的路径表示和os.path.join方法是不同的,因此在对文件名称进行路径分割是不同的,在Linux下路径使用./进行划分,因此在parse_vid.py的第44行使用的是/进行划分。在WIndows下使用.\或者是//进行路径的划分,因此在进行路径分割时要修改对应的分割标志。路径分割不对时会导致第三步生成的JSON文件存在问题,以至于在train时加载数据过程中dataset.py的第45行出错has no frames

一、使用PySOT进行训练

  1. 修改pysot/core/config.py文件

如果是对单个数据集进行训练,将DATASET.NAMES修改为单个数据集,同时将暂不使用的数据集的配置注释掉,如单独使用VID数据集时修改为如下:

__C.DATASET.NAMES = ['VID']

__C.DATASET.VID = CN()
# __C.DATASET.VID.ROOT = 'training_dataset/vid/crop511'
# __C.DATASET.VID.ANNO = 'training_dataset/vid/train.json'
# 路径修改为
__C.DATASET.VID.ROOT = '/home/user2/Documents/dataset/ILSVRC2015/croped'
__C.DATASET.VID.ANNO = '/home/user2/Documents/dataset/ILSVRC2015/train.json'
__C.DATASET.VID.FRAME_RANGE = 100
__C.DATASET.VID.NUM_USE = 100000  # repeat until reach NUM_USE

# __C.DATASET.YOUTUBEBB = CN()
# __C.DATASET.YOUTUBEBB.ROOT = 'training_dataset/yt_bb/crop511'
# __C.DATASET.YOUTUBEBB.ANNO = 'training_dataset/yt_bb/train.json'
# __C.DATASET.YOUTUBEBB.FRAME_RANGE = 3
# __C.DATASET.YOUTUBEBB.NUM_USE = -1  # use all not repeat

# __C.DATASET.COCO = CN()
# __C.DATASET.COCO.ROOT = 'training_dataset/coco/crop511'
# __C.DATASET.COCO.ANNO = 'training_dataset/coco/train2017.json'
# __C.DATASET.COCO.FRAME_RANGE = 1
# __C.DATASET.COCO.NUM_USE = -1

# __C.DATASET.DET = CN()
# __C.DATASET.DET.ROOT = 'training_dataset/det/crop511'
# __C.DATASET.DET.ANNO = 'training_dataset/det/train.json'
# __C.DATASET.DET.FRAME_RANGE = 1
# __C.DATASET.DET.NUM_USE = -1
  1. 修改experiments/./config.yaml

在训练过程中,若需要加入预训练模型,则在对应的实验文件夹下的config.yaml文件,将PRETRAINED后面参数修改为存放预训练模型的路径。

注:对于各个实验文件夹alex表示使用AlexNet,r50_lxyz表示使用ResNet50网络的不同阶段的输出,mobilev2表示使用MobileNetV2。dwxcorr表示逐通道的深度互相关。otb代表OTB数据集,lt表示VOT long-term tracking challenge。不带后缀的为VOT short-term tracking challenge

  1. 训练

将config.yaml文件路径添加到train.py代码中38行,修改—cfg的默认参数。在config.yaml文件中:

RPN:
	TYPE:'DepthwiseRPN'    # SiamRPN
	TYPE:'MultiRPN'	      # SiamRPN++
	
MASK:
	MASK:True  # SiamMASK
  1. 对于多卡和单卡训练

这块参考作者的说明文档,我是用的单卡训练。

二、使用PySOT进行测试与评估

准备OTB和VOT数据集

VOT2018

OTB100(OTB2015)

JSON文件:百度云盘

我将对应的处理好的数据集保存在百度云盘中:

VOT2018 提取码:yo34

OTB100(OTB2015) 提取码:j6sy

  1. OTB数据集

需要将CVRP13.json,OTB100.json,OTB50.json文件放在OTB数据集下。此外,需要将Jogging文件复制为Jogging-1和Jogging-2,将Skating2复制为Skating2-1和Skating2-2。文件夹架构如下:

| -- OTB100/
	| -- Basketball
	| 	......
	| -- Woman
	| -- OTB100.json
	| -- OTB50.json
	| -- CVPR13.json
  1. VOT数据集

将VOT2018.json文件放在VOT2018文件夹下,整体文件夹内容如下:

|--VOT2018/
	|--annotions
	|--ants1
		|--color
			|--00000...jpg
			...
		|--groundtruth.txt
		...
	|--ants3
	...
	|--zebrafist1
	|--VOT2018.json
	

测试

tools/test.py

--dataset  # 'OTB100'或'VOT2018'
--config   # 存放yaml文件的路径
--snapshot # 存放训练好的模型的路径

dataset_root # 确认对应数据集的路径

确认好以上文件的路径,然后运行基本上没什么问题。

测试OTB100:

在这里插入图片描述

测试VOT2018:

在这里插入图片描述

测试完成之后,默认在tools文件夹下生成一个result文件夹,下面存放在不同测试集上的测试结果:

在这里插入图片描述

评估:

tools/eval.py

--tracker_path    # 即上面生成result的路径
--dataset         # 'OTB100'或'VOT2018'
--tracker_prefix  # 'model'

root # 为VOT2018或OTB2015数据集所在的文件夹路径

确认以上路径后,运行即可。

SiamRPN++在OTB100下评估结果:

在这里插入图片描述

SiamRPN++在VOT2018下评估结果:

在这里插入图片描述

三、使用多卡训练

最近想尝试多卡训练,参考作者给出的教程,我教研室的服务器是一台机器4张RTX2080Ti的配置,其中课题组同学用了两张,因此只剩下两张卡,所以我进行多卡训练时依次使用以下命令:

# step1:
conda activate pysot    # 激活你的环境
# step2:
export PYTHONPATH=[your code path]:$PYTHONPATH     # 写入你的code路径放入系统路径中
# step3:
cd experiments/siamrpn_r50_l234_dwxcorr_8gpu     # 进入该文件夹下
# step4:
CUDA_VISIBLE_DEVICES=2,3 python -m torch.distributed.launch --nproc_per_node=2 --master_port=2333 ../../tools/train.py --cfg config.yaml
# 设置可用的显卡 我可用的显卡号为2和3,对应后面也改为2,然后就可以进行训练了

目前已经将PySOT的代码调通,并可以进行训练。

附:

PySOT代码调试起来比较简单,我一开始使用的是Window系统,所以很多路径问题得注意。还有就是对数据的预处理部分,默认生成的数据是在当前的training_dataset下具体数据集名称的文件夹下,导致整个工程很大,所以我对数据集的保存位置进行了修改。在服务器有空余的显卡后,我又将程序同步到服务器,在本地使用Pycharm进行远程调试,并将文件的路径做了相应的修改,因此很快就调通了。

按照作者给出的模型,最后评估的结果和文章上给出的结果还是存在一定的差距,目前这是比较困惑我的地方。

03-20
<think>好的,用户想了解或使用Pysot框架,也就是Python视觉跟踪框架。首先,我需要确认Pysot的基本信息,包括它的功能、特点、安装步骤和使用方法。根据用户提供的引用资料,虽然引用[1]、[2]、[3]提到了PyTracking库,但用户问的是Pysot,这可能是一个不同的框架。需要先核实Pysot的相关信息,避免混淆。 首先,我应该检查是否在引用中存在关于Pysot的直接信息。根据用户提供的引用,三个引用都是关于PyTracking的,没有直接提到Pysot。因此,可能需要依靠外部知识或者补充信息来回答。不过,用户可能将PyTracking和Pysot混淆了,或者Pysot是另一个流行的跟踪框架,比如商汤科技开源的SiamRPN系列算法所在的框架,名为Pysot。 接下来,假设Pysot是商汤的Python视觉跟踪框架,我需要回忆它的主要特点,比如基于Siamese网络,支持多种跟踪算法如SiamRPN、SiamMask等,适用于实时目标跟踪任务。同时,安装步骤通常包括克隆仓库、安装依赖库如PyTorch、设置环境变量等。使用示例可能包括加载模型、处理视频流或图像序列进行目标跟踪。 另外,需要确保回答结构清晰,分步骤说明,并引用用户提供的参考资料,尽管它们可能不直接相关,但如果有部分内容相关,比如安装conda环境的部分,可以引用引用[2]中的安装方法。同时,用户可能需要相关的扩展问题,比如性能优化、与其他框架的对比,或者实际应用场景。 需要验证Pysot的官方资源,比如GitHub仓库和文档,确保提供的安装和使用步骤正确。例如,Pysot的GitHub地址可能是https://github.com/STVIR/pysot,由商汤科技维护。安装过程可能涉及安装依赖项如PyTorch、torchvision、Cython、OpenCV等,并编译一些扩展模块。 最后,生成相关问题时要考虑用户可能的后续需求,比如如何训练自定义数据集、调参技巧、处理特定场景的挑战等。</think>### 关于PySOT框架的详细介绍 #### 1. **PySOT概述** PySOT是由商汤科技(SenseTime)开源的基于PyTorch的视觉目标跟踪框架,专注于**单目标跟踪(Single Object Tracking)**任务。其核心算法包括经典模型如SiamRPN++[^1]、SiamMask等,支持实时跟踪并具有较高的精度和鲁棒性。 #### 2. **核心特性** - **算法丰富性**:提供多种跟踪模型(如SiamRPN、SiamMask、SiamCAR等); - **模块化设计**:便于研究者扩展新算法或改进现有模块; - **高性能**:在标准数据集(如OTB、VOT)上表现优异,部分模型达到实时速度(50+FPS)[^1]; - **预训练模型支持**:提供在大型数据集上预训练的模型权重,可直接部署。 #### 3. **安装步骤** ```bash # 1. 克隆仓库 git clone https://github.com/STVIR/pysot.git cd pysot # 2. 创建conda环境(参考引用[2]的安装逻辑) conda create -n pysot python=3.7 conda activate pysot # 3. 安装依赖库 pip install -r requirements.txt # 4. 编译扩展模块(如Deformable Convolution) python setup.py build_ext --inplace # 5. 下载预训练模型(从官方提供的链接) ``` #### 4. **快速使用示例** ```python import cv2 from pysot.core.config import cfg from pysot.tracker.tracker_builder import build_tracker from pysot.utils.bbox import get_axis_aligned_bbox # 加载配置文件与模型 cfg.merge_from_file("configs/siamrpn_r50_l234_dwxcorr.yaml") tracker = build_tracker(cfg) # 初始化跟踪目标(例如从第一帧选择ROI) frame = cv2.imread("first_frame.jpg") init_bbox = [x1, y1, x2, y2] # 初始目标框坐标 tracker.init(frame, init_bbox) # 在后续帧中进行跟踪 next_frame = cv2.imread("next_frame.jpg") outputs = tracker.track(next_frame) pred_bbox = outputs['bbox'] ``` #### 5. **与PyTracking的对比** - **PySOT**:专注于单目标跟踪,适合需要高精度定位的场景(如无人机跟踪); - **PyTracking**[^3]:支持判别式模型(如DiMP、PrDiMP),更适合处理外观变化的复杂场景。
评论 60
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值