PySOT单目标跟踪训练、测试、验证全流程(全网最详细,持续更新,建议收藏!)

2023-10-27

目录

数据集准备

数据集介绍

数据集下载解压

 代码部署 

训练 

修改配置文件

开始训练

数据集准备

数据集介绍

PySOT支持多种数据集混合训练,其中包括以下四种数据集:

VIDhttp://image-net.org/challenges/LSVRC/2017/

  • VID数据集(Visual Object Tracking benchmark for Large-scale MOTion Analysis)是一种用于视频目标跟踪的公共数据集。该数据集由微软研究院和清华大学合作创建,并在2015年发布。该数据集是用于评估视频目标跟踪算法性能的重要基准。
  • VID数据集包含3862个视频序列,其中3000个视频序列来自互联网,另外862个视频序列来自于更专业的摄影器材,这些序列具有更高的图像质量和更复杂的背景。每个视频序列都包含了一个或多个目标,包括动物、车辆、人等等。VID数据集的总长度为50个小时,总共包含510,026帧图像,每个视频序列的长度和帧率不同。
  • 在VID数据集中,每个目标都被标注了一个矩形边界框,用于表示目标的位置和大小。此外,每个目标在整个视频序列中都被标注了一个唯一的标识符,用于跟踪该目标。VID数据集的标注信息还包括目标类别,例如“汽车”、“人”、“狗”等。
  • VID数据集旨在评估视频目标跟踪算法在真实场景下的性能,包括目标的运动模式、背景复杂性、光照变化、尺度变化、遮挡等因素。该数据集已经成为视频目标跟踪领域的重要基准,许多最先进的视频目标跟踪算法都在VID数据集上进行了测试和评估。

​​​​​​YOUTUBEBBhttps://research.google.com/youtube-bb/

  • YouTube-BB数据集(YouTube-Bounding Boxes)是一种用于视频目标检测和跟踪的公共数据集。该数据集由谷歌研究团队于2016年发布,是谷歌在YouTube视频平台上搜集而来的。
  • 该数据集包含了3800个YouTube视频,每个视频的长度在30秒到5分钟不等,总共包含了240万帧图像。这些视频涵盖了各种场景和环境,包括室内和室外、日间和夜间、不同天气和照明条件下的场景等。每个视频中都包含了一个或多个目标,包括人、动物、车辆等等。每个目标都被标注了一个矩形边界框,用于表示目标的位置和大小。
  • YouTube-BB数据集中的目标类别包括人、动物、车辆、家具、电子设备、室内物品等等,共有23个类别。在每个视频中,所有目标都被标注了一个唯一的标识符,用于跟踪该目标。此外,该数据集还提供了每个视频中的场景类别,例如“室内”、“室外”、“城市”、“乡村”等等。
  • YouTube-BB数据集旨在提供一个用于评估视频目标检测和跟踪算法的大规模、真实场景的数据集。该数据集的规模和多样性使得它成为视频目标检测和跟踪领域的重要基准之一。许多最先进的视频目标检测和跟踪算法都在该数据集上进行了测试和评估。

DEThttp://image-net.org/challenges/LSVRC/2017/

  • DET数据集(PASCAL VOC Detection Challenge)是一个用于图像目标检测的公共数据集,由牛津大学、德国马克斯普朗克研究所以及荷兰阿姆斯特丹大学联合创建。该数据集首次发布于2007年,自那以后已经成为图像目标检测领域的标准基准数据集之一。
  • DET数据集包含了20个不同的类别,例如人、车、飞机等等。该数据集包含了多个图像集,每个集合中包含了大约5000张图像。每个图像都被标注了一个或多个目标,包括目标类别和位置信息,即一个或多个矩形边界框。每个图像集还包含了训练集和测试集两部分。
  • DET数据集的目标是评估图像目标检测算法的性能,包括准确率、召回率等指标。该数据集已经被广泛用于评估各种图像目标检测算法的性能,如Fast R-CNN、YOLO等。随着时间的推移,该数据集已经进行了多次更新和扩展,以适应不断发展的图像目标检测技术和应用场景。

COCOhttps://cocodataset.org/

  • COCO数据集(Common Objects in Context)是一个用于目标检测、分割和关键点检测的大规模公共数据集。该数据集由微软公司于2014年发布,旨在提供一个丰富多样的真实场景图像数据集,以促进计算机视觉领域的研究和发展。
  • COCO数据集包含超过330,000张图片,其中大约有2.5万张图像包含了超过8.5万个不同的物体实例。这些物体实例包括80个不同的物体类别,如人、车、动物、食品、电子产品等等。每个物体实例都被标注了一个矩形边界框,表示物体的位置和大小,以及一个语义分割掩码,用于表示物体的像素级别的分割。此外,该数据集还提供了与每个图像相关的场景和情境信息,如天气、场景、时间等等。
  • COCO数据集旨在提供一个真实场景的大规模、多样化的数据集,以评估和推动目标检测、分割和关键点检测算法的发展。在该数据集上,许多最先进的目标检测、分割和关键点检测算法都已经得到了测试和评估。同时,COCO数据集还推动了许多新的算法的发展,如Mask R-CNN、Cascade R-CNN等。 

PySOT中使用的是处理过的图片,经过裁剪后的数据集百度网盘链接:

链接:https://pan.baidu.com/s/1kvEDkNfzgLW7j5PfefC_tA?pwd=wocz 

提取码:wocz 

 打开链接可以看到,一共有6个数据集,分别是youtube,vid,lasot,got10k,det,coco。官方代码里只用到了4个 youtube,vid,det,coco。如果显卡资源不足,可以在配置文件中设置使用的数据集,这一点在训练阶段会详细介绍。

数据集下载解压

这里以vid数据集为例,其他数据集可参考vid数据集。

下载完数据集,我们可以看到,文件中有三个.json文件,分别是:train.json,val.json和vid.json,这三个文件保存了数据集所有图片的文件名、类别和ground truth(真实框,记录目标在图片中的位置)。下面有vid_zip.z01-vid_zip.z06和vid_zip.zip,这七个文件是数据集本体,由于文件过大,进行了分卷压缩。

 有两种方式可以解压,一种是在linux上进行合并,然后解压,这里我们用另一种方法,在windows上用360压缩右键单击vid_zip.zip——解压到当前文件夹,解压完成后,可以得到一个名为vid_crop.tar的文件。 

tar文件是linux常用的压缩包格式,我们需要将vid_crop.tar文件复制到linux系统上,然后使用

tar -xvf vid_crop.tar

将压缩包解压,由于文件数量很大,所以解压时间需要几个小时,耐心等待解压完,可以得到最终的数据集如下:

 代码部署 

 代码GitHub地址:STVIR/pysot: SenseTime Research platform for single object tracking, implementing algorithms like SiamRPN and SiamMask. (github.com)https://github.com/STVIR/pysot

 可以用git获取,也可以直接下载.zip文件,然后解压到本地,在PyCharm中打开。

  打开后项目文件如下:  

使用Anaconda安装好pytorch环境后,右下角解释器切换为自己的环境,然后打开terminal,输入

pip install -r requirements.txt -i https://pypi.douban.com/simple

(使用豆瓣源) 批量安装所需环境。

重要:第一大坑!!!

由于本项目测试代码test.py涉及到C++库,所以初次使用需要在terminal(终端)运行setup.py编译,编译指令为:

python setup.py build_ext --inplace

如果没有安装Visual Studio C++,编译时会报错:error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux (microsoft.com)https://visualstudio.microsoft.com/zh-hans/downloads/

安装完成后,重新输入指令,编译完成。

训练 

 打开项目,我们首先对项目的文件结构有个大概的了解,在这里我只介绍训练、测试和验证需要用到的代码。

 

需要用到的文件夹是experiments,pysot和tools文件夹。

 experiments文件夹是实验部分,包含了支持的11种实验。

 siammask是带蒙版的跟踪,siamrpn_alex是SiamRPN网络,siamrpn_r50是SiamRPN++网络。前者使用AlexNet作为编码器提取特征,后者使用ResNet50作为编码器提取特征,性能更强。论文链接如下:

SiamRPN:High Performance Visual Tracking With Siamese Region Proposal Network (thecvf.com)

SiamRPN++:

1812.11703.pdf (arxiv.org)

接下来以siamrpn_r50_l234_dwxcorr为例,说明siamrpn++的训练过程: 

 首先是下载backbone权重和模型权重,本人已放在百度网盘,方便下载:

链接:https://pan.baidu.com/s/1k3e8x3r0Gnub_lmS9IAbKA?pwd=raa1 
提取码:raa1

 下载后可以看到:

alexnet-bn.pth是AlexNet编码器的权重,resnet50.model是ResNet50编码器的权重。

然后打开PySOT文件夹下的siamrpn_r50_l234_dwxcorr文件夹,可以发现,这些目录跟experiments文件夹一一对应,显而易见,它们是每个实验对应的配置(config.yaml,不要使用这个,要用PySOT项目内原有的congfig.yaml文件)和模型权重(model.pth,训练可以加载预训练模型,加速训练)。

下载resnet50.model,在项目下新建pretrained_models文件夹,将resnet50.model放入文件夹;

下载model.pth,放入experiments/siamrpn_r50_l234_dwxcorr文件夹。

 

 

修改配置文件

有两个配置文件与训练相关,一个是experiments/siamrpn_r50_l234_dwxcorr/config.yaml,这个文件主要设定了网络模型的一些参数,不需要修改;另一个是pysot/core/config.py,这个文件设定了网络训练的参数 ,需要根据需要修改。

打开pysot/core/config.py,写入模型权重路径,可以加载预训练模型进行训练。

__C.TRAIN.PRETRAINED = './model.pth'

 以下几个参数也比较重要,分别是epoch,start epoch(加载模型时使用,可以继续训练,例如之前保存到第十个eopch,后面可以从11开始),batch_size和num_workers(多线程处理数据,根据CPU性能设置,CPU性能好可以设置成8,16等,不好则设置为0)

__C.TRAIN.EPOCH = 20

__C.TRAIN.START_EPOCH = 0

__C.TRAIN.BATCH_SIZE = 32

__C.TRAIN.NUM_WORKERS = 8

以下是训练集的设置部分,包括所使用的数据集名称,数据集路径和数据集训练总数。

默认是四个数据集一起训练,也可以设成单个数据集,例如['VID']就是只用VID一个数据集,只用一个数据集时,其他的数据集设置需要注释掉。

__C.DATASET.VIDEOS_PER_EPOCH = 600000代表训练的总数,设置的越小训练越快。建议设置的数目与所用数据集总数保持一致,这样每个epoch只用训练一次,不需要重复训练。

 以下是backbone预训练权重的路径及其他配置:

__C.BACKBONE.TRAIN_EPOCH = 10 (从0开始)

这个参数也比较重要,它规定了backbone开始训练的epoch数,在此之前,网络会冻结backbone的参数,仅仅调整编码器后面的分类和回归分支的参数。例如,总的训练轮数设为20个epoch,__C.BACKBONE.TRAIN_EPOCH = 10 的作用是第1-10个epoch只调整分类和回归分支的参数,从第11个epoch开始调整backbone的权重。

开始训练

打开terminal,cd到experiments/siamrpn_r50_l234_dwxcorr

 重要!!!

第二个坑:运行前需要将项目路径添加到环境变量,linux和windows不同。

如果是linux,直接在terminal输入:

export PYTHONPATH=自己的项目路径:$PYTHONPATH

如果是windows,在 terminal输入:

set PYTHONPATH=%PYTHONPATH%;自己的项目路径

 也可以在对应的python文件里加上两条语句,以下以tools/train.py作为例子,其他.py文件运行前,都需要有类似的操作,第一种方法每次重新打开项目都需要,第二种方法只需要添加一次:

 环境变量添加完成后,输入运行指令。

 原项目使用了8块GPU,本人所在实验室算力不足,只有2块3090,所以--nproc_per_node参数设置成2(根据自己的显卡数量调整)

单个设备,2块GPU的指令如下,linux系统上需要输入CUDA_VISIBLE_DEVICES=0,1,windows上可以跳过这条语句:

CUDA_VISIBLE_DEVICES=0,1
python -m torch.distributed.launch \
    --nproc_per_node=2 \
    --master_port=2333 \
    ../../tools/train.py --cfg config.yaml

运行完成后,会在Siamrpn_r50_l234_dwxcorr/snapshot文件夹下保存每个epoch的权重文件。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PySOT单目标跟踪训练、测试、验证全流程(全网最详细,持续更新,建议收藏!) 的相关文章

随机推荐

  • matlab 贝叶斯网络

    第一次搭建 参考教程https blog csdn net moodytong article details 8122327 我的matlab是2014a 系统win7旗舰 下面就开始一步一步来 一 matlab中添加FULLBNT FU
  • java 导出Excel设置宽度自适应

    private static void setAutoColumnWidth XSSFSheet sheet int maxColumnNum try 获取当前列的宽度 然后对比本列的长度 取最大值 for int columnNum 0
  • 卷积神经网络的实际应用,卷积神经网络毕业论文

    旷视首席科学家 知名AI学者孙剑博士去世 他在该领域有哪些贡献 旷视首席科学家 知名AI学者孙剑博士去世 他在该领域有哪些贡献 在学术层面 孙老师是计算机视觉领域全世界最知名 最顶级的一批科学家 他的工作ResNet 12w citatio
  • 西安华为OD面试经验(德科)

    背景 本科某双非邮电软件专业 二战冲985失败 随便写的简历挂boss上 hr电话联系帮我约的机考 华为od网络风评很差 这一点还是hr告诉我这个初入社会的学生党的 态度挺诚恳 我也只是本着随便试试的态度去的 机考是5 7号 技术一面是5
  • SSC 扩频时钟技术(1)

    SSC 全称Spread Spectrum Clocking 即扩频时钟 由于信号的辐射主要是由于信号的能量过于集中在其载波频率位置 导致信号的能量在某一频点位置处的产生过大的辐射发射 因此为了进一步有效的降低EMI辐射 芯片厂家在设计芯片
  • 通过 window.opener.document 获取弹窗弹窗或打开页面中的数据并回显

    通过 window opener document 获取弹窗弹窗或打开页面中的数据并回显 1 html 示例 写法 td td
  • tcp客户/服务器回射程序之五-----用shutdown函数解决在批量方式下所引起的问题

    tcp客户 服务器回射程序之五 用shutdown函数解决在批量方式下所引起的问题 当我们把标准输出和标准输入重定向到文件来运行新的客户程序时 却发现输出文件总是小于输入文件 而对于回射服务器而言 它们应该相等 问题的起因在于我们对于EOF
  • python十个实战项目

    python项目练习一 即时标记 python项目练习二 画幅好画 python项目练习三 万能的XML python项目练习四 新闻聚合 python项目练习五 虚拟茶话会 python项目练习六 使用CGI进行远程编辑 python项目
  • 目标检测算法之YOLOv2损失函数详解

    前言 前面的YOLOv2推文详细讲解了YOLOv2的算法原理 但官方论文没有像YOLOv1那样提供YOLOv2的损失函数 难怪Ng说YOLO是目标检测中最难懂的算法 今天我们尝试结合DarkNet的源码来分析YOLOv2的损失函数 关键点回
  • 终于辞职了,全职ue了

    终于辞职了 然后 这几天睡得特别香 拿到了ue的offer 两万五 从年前开始 其实本来不想辞职 毕竟还是疫情 工作不好找 一年半简历也不好看 但是最终还是走了这一步 外因 1 全员降薪到80 士气打击的厉害 我觉得是不是自己飘了 以自己的
  • 搭建harbor私有镜像仓库

    一 环境准备 1 关闭防火墙 systemctl stop firewalld 禁止防火墙开机自起 systemctl disable firewalld 2 关闭selinux 永久关闭 sed i s enforcing disable
  • 简述Java中的基本数据类型

    本文主要向大家介绍一下Java中的8种基本数据类型 以及数据类型之间的转换 希望对大家学习Java语言有所帮助 一 数据类型的分类 一 基本数据类型 8种 注意 在Java中 所有数据类型都有默认值 定义之后没有赋值 就会有默认值 且默认值
  • 计算机心理活动,计算机科学系关于心理活动的总结

    计算机科学系关于心理活动总结 一 活动概况 时间 10月22 23 25 29 30日 11月5 6 12日 地点 新区湖畔绿地或老区西操场 人员 商丘师院10级新生以及各系心理委员组长 二 活动目的 1 通过游戏等活动的形式带给同学们人生
  • matlab中的符号表达式的使用

    定义了一个表达式 如 y sin x 如何让matlab知道x是自变量 y是因变量 并且y x0 这种格式合法 求出x x0时候的值 三种方法 1 用inline函数 格式 FunctionName inline 任何有效的表达式 表达式中
  • ITextRenderer 生成PDF 文件

    pom xml 文件添加相关依赖
  • django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required 简单的解决办法

    在Django的工程同名子目录的 init py文件中有如下语句 import pymysql pymysql install as MySQLdb 使用django2或者django3时遇到这个报错 django core excepti
  • LeetCode每日刷题:存在重复的元素II

    题目 给定一个整数数组和一个整数 k 判断数组中是否存在两个不同的索引 i 和 j 使得 nums i nums j 并且 i 和 j 的差的 绝对值 至多为 k 解题思路 这道题有三种解法 暴力 滑动窗口 Set 暴力解法 循环遍历数组
  • wifi密码本 字典(免费)

    需要自取 链接 https pan baidu com s 1ffGwfcvoqkrIgDIOeC3 IA 提取码 ao1i 破解fiwi密码教程 破解wifi密码 暴力破解 保姆式教学 Z Xshan的博客 CSDN博客 如果提取码失效试
  • push 和 pop 函数的使用

    include
  • PySOT单目标跟踪训练、测试、验证全流程(全网最详细,持续更新,建议收藏!)

    目录 数据集准备 数据集介绍 数据集下载解压 代码部署 训练 修改配置文件 开始训练 数据集准备 数据集介绍 PySOT支持多种数据集混合训练 其中包括以下四种数据集 VIDhttp image net org challenges LSV