资讯动态

PySOT训练数据全集:COCO/VID/YouTube-BB下载与目录组织指南

发布时间:2026/10/16 10:53:38 来源:尧图企业网站定制
PySOT跑通demo之后真正开始训练前卡住最多人的一道坎不是模型结构也不是显存不够而是数据集。前两篇把环境配置和demo推理讲完了这一篇集中把“数据从哪来、怎么下、怎么放”讲透。我自己第一次整理训练数据时下载、解压、校验、重新组织目录前后折腾了近两天中间还因为少下了一个标注文件导致训练脚本直接报错。所以这篇会把我踩过的坑和验证方法都写出来照着做能少走很多弯路。1. 训练PySOT到底在喂什么数据COCO/VID/YouTube-BB的分工1.1 三种数据集的角色差异PySOT训练的是孪生网络结构的跟踪器核心逻辑是把“模板帧”和“搜索帧”成对输入网络让模型学习“模板里出现的目标在搜索区域里继续找到它”。所以训练数据必须包含大量带目标框标注的图像对模型才有足够样本去学习什么叫“同一个目标在不同帧里的变化”。不同数据集解决不同问题COCO2017静态图像数据集图像来源是生活场景类别丰富、尺度差异大。它的价值在于让模型见过足够多的“目标长什么样”提供通用的目标外观特征。COCO不是视频所以它提供的是模板帧和搜索帧都来自同一张图上的不同裁剪区域这是SiamRPN系列早期训练常见的做法。ImageNet VID视频目标检测数据集里面是连续的视频帧序列。它的价值是让模型学习目标在时间上的连续性变化包括形变、遮挡、运动模糊等。视频序列里的目标才是跟踪任务真正要面对的对象。YouTube-BB大规模视频检测数据集视频数量多、时长长目标轨迹更连续。用它训练可以让模型对“一个目标在一段视频里被长时间跟踪”这件事更鲁棒。简单说COCO搞定“认得出目标”VID搞定“跟得上变化”YouTube-BB搞定“长时间不丢”。1.2 哪些是必选项哪些是可选项PySOT不同版本的训练配置略有差异但主力训练脚本基本都依赖COCO、VID、YouTube-BB这三个数据集。LaSOT和GOT-10k在一些实验配置里也会出现但那属于补充实验集不是主训练集。如果你只是想先跑通整个训练流程可以用COCO单数据集先跑一个小模型确认环境、数据管道、loss曲线都正常之后再上完整数据集。我自己就是这么做的先用一个小子集跑2000步确认每一步都没有报错再开完整训练。直接开完整训练然后半夜收到报错邮件的感觉体验过一次就不想有第二次。2. 下载之前先把目录结构定死很多人下载数据时只管解压不管放哪结果到训练阶段才发现路径对不上又来回搬数据。PySOT的源码在构造Dataset时会按照约定好的目录结构去读取图片和标注文件如果你用的版本带数据预处理脚本那目录名基本是写死的。我最终采用的目录结构如下PySOT/ ├── data/ │ ├── coco/ │ │ ├── train2017/ │ │ ├── val2017/ │ │ └── annotations/ │ ├── vid/ │ │ ├── ILSVRC2015_VID_train/ │ │ └── ILSVRC2015_VID_validation/ │ └── ytb/ │ ├── YTB-BB/ │ └── ...这个结构的好处是每个数据集独立一个根目录后续无论用官方脚本还是自己写转换脚本都只需要替换根路径不用改内部逻辑。2.1 磁盘空间先算清楚这一条很重要我建议在开始下载前先用df -h确认一下磁盘余量。三个数据集全部下载并解压之后占用空间通常在150GB到250GB之间具体取决于你是否保留压缩包。我给一个保守的估算数据集压缩包体积估算解压后体积估算COCO2017约20GB约25GBImageNet VID约20-30GB约50-60GBYouTube-BB视下载方式而定通常超过80GB注意解压后体积会明显膨胀压缩包本身也别急着删等训练脚本跑起来确认数据能正常读取后再清理。这样万一某个文件损坏不用重新下一个几十GB的文件。2.2 为什么我推荐用软链接管理数据如果你的系统盘空间不够但另有一块机械硬盘或移动硬盘空间充足完全不用把数据复制到项目目录里。我习惯的做法是把真实数据放到大容量磁盘上然后在项目目录里建立软链接。比如ln -s /mnt/data/tracking/coco ~/PySOT/data/coco这样训练脚本依然按原路径找数据实际数据却存放在另一块磁盘上。后续想换数据盘位置也只需要改软链接不用动项目目录里的任何配置。3. COCO2017下载实操校验、解压、验证三步走3.1 确定需要下载哪些文件PySOT的训练脚本主要用到COCO的检测框标注所以需要下载的文件就三个train2017.zip训练集图片约19GBval2017.zip验证集图片约1GBannotations_trainval2017.zip标注文件约250MB不要只盯着图片下标注文件漏掉是最容易犯的低级错误。我第一次就是训练脚本报错找不到instances_train2017.json回头查才发现annotations包没下载。下载可以使用wget网络条件不稳定的话务必加上-c参数支持断点续传wget -c http://images.cocodataset.org/zips/train2017.zip wget -c http://images.cocodataset.org/zips/val2017.zip wget -c http://images.cocodataset.org/annotations/annotations_trainval2017.zip3.2 校验文件完整性大文件下载过程中很容易出现“下载完成但其实缺了几块”的情况。COCO官方提供了每个文件的MD5校验值下载完先对比一下再解压md5sum train2017.zip如果校验值和官方给出的不一致说明文件已经损坏老老实实重新下载。这一步不要省否则解压到一半报错或者训练时随机读图失败排查起来更浪费时间。3.3 解压与目录整理解压时直接指定目标目录一步到位unzip train2017.zip -d ~/PySOT/data/coco/ unzip val2017.zip -d ~/PySOT/data/coco/ unzip annotations_trainval2017.zip -d ~/PySOT/data/coco/解压完成后确认一下目录结构data/coco/ ├── train2017/ ├── val2017/ └── annotations/最后做一个简单验证用Python随机读取几张图片确认图片没有在解压过程中损坏。import os from PIL import Image img_dir data/coco/train2017 files os.listdir(img_dir)[:20] for f in files: try: with Image.open(os.path.join(img_dir, f)) as im: im.load() except Exception as e: print(fcorrupted: {f}, error: {e}) print(check done)跑完这个脚本如果20张图都能正常打开基本可以确认COCO这部分没问题。之前我偷懒跳过了这步结果训练到一半报一个奇怪的解压错误定位了半天才发现是某张图在解压时出了问题。4. VID的关键点是注册ImageNet VID下载流程与文件核对4.1 VID数据获取入口ImageNet VID的数据不能像COCO那样直接wget需要先注册账号并登录官网。进入下载页面后选择ILSVRC2015相关的VID数据。需要下载的核心文件包括ILSVRC2015_VID_train.tar.gz训练视频数据ILSVRC2015_VID_validation.tar.gz验证视频数据VID对应的bbox标注文件这里要特别提醒ImageNet下载页面里项目非常多SVRC、CLS-LOC、DET、VID容易搞混。一定要选标注为VID的包我见过有人把DET的包下载下来解压后目录结构完全不同白白浪费几十GB流量。4.2 解压与目录结构调整下载到的压缩包用tar解压tar -xzf ILSVRC2015_VID_train.tar.gz -C ~/PySOT/data/vid/ tar -xzf ILSVRC2015_VID_validation.tar.gz -C ~/PySOT/data/vid/解压后典型的原始目录结构大致是data/vid/ ├── Data/ │ └── VID/ │ ├── train/ │ └── val/ ├── Annotations/ │ └── VID/ │ ├── train/ │ └── val/ └── ...PySOT训练时不一定直接读取这种原始结构具体取决于你用的数据预处理脚本。但不管后续怎么转换原始数据一定要保留完好。我建议在目录里加一个README.txt记录这个数据集是从哪个链接下载的、MD5是多少、解压时间是什么时候。听起来多余但两三个月后你忘了数据是谁占的空间、还能不能删的时候这个文件就是救命稻草。4.3 VID标注文件核对VID的标注文件通常不是单独的JSON而是XML或者cxs格式。如果你下到的压缩包里没有Annotations目录说明标注包漏下了。训练的时候数据加载器会在Annotations/VID/train下逐帧寻找标注文件少一个文件可能整个训练进程直接中断。判断数据集是否完整最好的办法就是随机挑几个视频序列打开对应的标注文件确认里面的bbox数值在合理范围内。5. YouTube-BB的下载量比想象中大分块拉取与整理5.1 下载方式的差异YouTube-BB和COCO、VID都不一样它没有一个“点一下全部下载”的单一压缩包而是按多个部分或者按视频ID分块提供的。这意味着你不能一条wget命令搞定需要先把所有下载地址整理出来再逐个拉取。下载之后先不要立即解压先确认所有分块都下载完整再解压。如果某个分块缺失训练时就会出现“某几个视频读不到”的诡异报错而且这种报错不是每次都触发非常难排查。我当时的做法是写一个清单文件把所有应下载分块的编号和对应大小记录下来ytbb_part_001.zip 12.3GB ytbb_part_002.zip 12.1GB ytbb_part_003.zip 12.5GB ...每个分块下载完就记录实际大小全部下载完再统一对比。5.2 YouTube-BB为什么需要额外处理帧YouTube-BB给的是原始视频而PySOT的数据加载器读取的是图片帧。所以在训练之前需要把视频抽帧成图片。这部分严格来说属于“数据处理”但下载完之后随手验证一下视频文件是否完好能避免后面抽帧阶段才发现素材损坏。最简单的抽帧验证方式是用ffprobe读取视频信息不需要全部抽帧随机抽几个视频确认能正常解码即可ffprobe -v error -show_entries formatduration -of defaultnoprint_wrappers1:nokey1 /path/to/video.mp4如果这条命令能正常输出时长说明视频文件基本完好。同样要考虑空间原始视频抽帧图片同时存在磁盘占用会再翻一倍。如果空间紧张可以先下载一批抽帧一批确认图片没问题后删除对应视频再下载下一批。5.3 抽帧的经验参数抽帧这一步我建议不要用太高的帧率。跟踪任务里相邻两帧画面差异本来就很小全量抽帧只会让训练集冗余度变高耗费大量磁盘空间收敛效果却没有明显提升。按3到5帧每秒抽通常已经足够。具体做法在下一篇“数据整理”里再展开这里先把原始视频下载好、验证好就够了。6. 硬盘不足与断点续传我踩过的下载坑和解决办法6.1 下载中断是这个阶段最大的敌人Ubuntu 16.04下面用wget下载大文件网络稍微波动一下就可能中断。wget的-c参数支持断点续传但要注意如果服务端不支持断点续传-c可能反而导致文件错位。我踩过的一个实际坑是wget下载一个大文件到99%时中断然后我用wget -c继续下载下载完成后md5校验不通过。原因是服务器返回的文件长度变了wget以为之前下载的内容有效实际上已经错位。从那之后我养成了一个习惯任何大文件下载完第一件事就是做完整性校验校验不过直接删掉重下不要抱有侥幸心理。与其反复试错不如花时间重新拉取。还有一个容易被忽略的问题下载时用的网络环境和训练时不同很可能是代理服务器或者校园网。如果下载过程中IP变了某些数据源会拒绝连接。遇到这种情况可以换个时间段再下载或者保持网络环境一致不要频繁切换网络。6.2 磁盘空间被压缩包和解压文件双重占满下载和解压同时进行时空间占用是“压缩包解压文件”两份。我建议把下载和解压错开先把所有压缩包放在一个临时目录全部下载并校验通过后再统一解压。解压完一个确认无误再删除对应的压缩包。这样峰值空间占用可以控制在一个数据集压缩包一个数据集解压体积而不是所有数据都双份。整理空间的常用命令# 查看磁盘剩余空间 df -h # 查看某个目录的实际占用 du -sh ~/PySOT/data/*6.3 用软链接解决系统盘空间不足如果你和我一样系统盘是一块小容量SSD那数据千万不要直接放在系统盘。训练时频繁读取数据对IO有一定要求但我实测下来机械硬盘也能正常支持训练只是加载速度慢一些。关键是保证空间足够。软链接本身不占用空间在项目里建立软链接后训练脚本完全无感知ln -s /mnt/tracking_data/coco ~/PySOT/data/coco ln -s /mnt/tracking_data/vid ~/PySOT/data/vid ln -s /mnt/tracking_data/ytb ~/PySOT/data/ytb需要注意如果data目录本身不存在要先创建data目录再建立软链接否则链接会放到错误的位置。6.4 下载期间记得做个记录文件这个习惯是从一次惨痛教训里养成的。有一阵子我下载了三个数据集每个都下载到一半分不清哪个是哪个最后全部删掉重新来。后来我每下一个数据集就在旁边建一个notes.txt记录下载日期、下载链接、文件大小、md5、解压状态。成本只有一分钟收益是再也不会对着N个压缩包发呆。下载完成后建议把这个笔记文件也复制一份到项目目录里作为整个训练项目的数据清单。等到模型训练完、想清理磁盘时看这个文件就知道哪些缓存可以删哪些标注文件必须保留。7. 最后分享两个小技巧我在整理数据的过程中有两个小习惯虽然不起眼但后期省了不少事。第一个习惯是下载完每个数据集后不要急着马上解压全部文件。先随机抽取一个压缩包里的单个文件解压出来验证比如用unzip -l查看压缩包内文件列表确认里面确实是你期待的图片格式和目录结构。这一步只需要几秒钟却能提前发现“下错包”“文件名被截断”这类问题。第二个习惯是所有数据集的原始压缩包不要放在数据目录内部单独建一个/packages目录存放。这样数据目录保持干净训练脚本扫描文件时也不会被压缩包干扰。后期确认一切正常后一次性删除所有压缩包释放大量空间。数据集下载到这个程度训练前的数据准备算是完成了一大半。下一步是把这些原始数据转换为PySOT训练脚本能够直接读取的格式包括生成索引文件、抽帧、标注格式转换等这些内容留到第四篇详细展开。先把本篇提到的下载、校验、目录规划做完训练数据就已经稳了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑