资讯动态

FiftyOne 视频轨迹标注入门数据集 quickstart-trajectories 详解:Instance 跨帧关联与轨迹标注实践

发布时间:2026/9/15 20:09:24 来源:尧图企业网站定制
FiftyOne 视频轨迹标注入门数据集 quickstart-trajectories 详解Instance 跨帧关联与轨迹标注实践【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyoneQuickstart Trajectories 是 FiftyOne 数据集仓库fiftyone/zoo/datasets/base.py中内置的一个小型视频数据集专为对象轨迹trajectory标注场景设计。它复用 quickstart-video 的 10 段视频片段但将各帧中的目标检测通过Instance标签跨帧串联为完整对象轨迹是学习视频标注、轨迹关联与帧级采样工作流的理想起点。读完本文你将掌握该数据集的加载方式、底层数据模型与源码实现并能独立完成从视频元数据计算到帧采样、再到 App 内轨迹标注的完整实战流程。数据集概述与设计定位Quickstart Trajectories 的核心定位是「用于轨迹标注的小型视频数据集」。与同为 quickstart 系列的 quickstart-video 数据集 相比它包含相同的 10 段视频片段但标注结构发生了关键变化每一帧中的对象检测object detections通过其instance属性中的Instance标签跨帧链接为对象轨迹早期版本中用于关联的遗留index属性已被移除关联信息统一收敛到instance字段中。从源码可以看出这一设计意图。在 fiftyone/core/labels.py 中_HasInstancemixin 明确说明与每个标签唯一的id字段不同instance字段对每个标签实例无论是时间维度还是跨不同模态都是唯一的因此可以用来跨样本识别同一个逻辑标签class _HasInstance(Label): Mixin for :class:Label classes that contain an instance configuration via an instance attribute. Contrary to the id field, which is unique to each label, the instance field is unique to each label instance either temporally or across different modalities, allowing you to identify the same logical label across different samples. property def instance_id(self): The labels instance ID, or None if it does not have one. try: return self.instance.id except AttributeError: return None而Instance类本身fiftyone/core/labels.py是一个极简的EmbeddedDocument仅包含一个id字段用于作为跨帧/跨样本的实例标识class Instance(EmbeddedDocument): A label instance. Args: id (None): the label instance ID id fof.ObjectIdField(defaultlambda: str(ObjectId()), db_field_id) property def _id(self): return ObjectId(self.id)Detection标签fiftyone/core/labels.py通过继承_HasInstance获得instance字段从而支持轨迹关联class Detection(_HasAttributesDict, _HasID, _HasMedia, _HasInstance, Label): An object detection. ... Args: ... index (None): an index for the object instance (None): an instance of :class:Instance to link this detection label to other similar labels ... _MEDIA_FIELD mask_path label fof.StringField() bounding_box fof.ListField(fof.FloatField()) mask fof.ArrayField() mask_path fof.StringField()可以看到Detection的instance参数正是「将此检测标签链接到其他相似标签」的通道——这正是轨迹关联的实现基础。数据集关键属性该数据集在 Zoo 注册表中的元数据如下对应 fiftyone/zoo/datasets/base.py 的源码属性实现属性值源码佐证数据集名称quickstart-trajectories_ARCHIVE_NAME quickstart-trajectories.zipname属性返回quickstart-trajectories数据集大小35.20 MB类 docstring 标注Dataset size: 35.20 MB许可证CC-BY-4.0license属性返回CC-BY-4.0标签video, quickstarttags属性返回(video, quickstart)支持的 splitsN/A无supported_splits返回NoneZooDataset 类QuickstartTrajectoriesDataset注册于 fiftyone/zoo/datasets/base.py 的_DATASET_MAP键为quickstart-trajectories从源码结构看该数据集类继承自FiftyOneDataset其下载与准备流程在_download_and_prepare中实现fiftyone/zoo/datasets/base.pydef _download_and_prepare(self, dataset_dir, scratch_dir, _): _download_and_extract_archive( self._GDRIVE_ID, self._ARCHIVE_NAME, self._DIR_IN_ARCHIVE, dataset_dir, scratch_dir, ) logger.info(Parsing dataset metadata) dataset_type fot.FiftyOneDataset() importer foud.FiftyOneDatasetImporter num_samples importer._get_num_samples(dataset_dir) logger.info(Found %d samples, num_samples) return dataset_type, num_samples, None值得注意的是与 quickstart-video 使用FiftyOneVideoLabelsDataset导入器不同本数据集以FiftyOneDataset格式导出——因为轨迹关联需要保留instance这类跨帧的标签结构无法用单纯的视频标签格式完整表达。下载源由_GDRIVE_ID 1474CYDOP3x3TVNWE0ftRE8M05pzd1w0Y指定。环境准备ffmpeg 前提条件由于该数据集是视频数据集使用前需要确保系统中已安装 ffmpeg。官方文档明确指出处理视频数据集必须安装 ffmpeg参见 视频相关故障排查文档 中的 ffmpeg 安装说明。ffmpeg 的作用贯穿整个视频处理链路无论是后续的dataset.compute_metadata()读取视频时长、分辨率、帧率还是dataset.to_frames(sample_framesTrue)将视频采样为逐帧图像底层都依赖 ffmpeg 完成视频解码与帧抽取。快速上手加载数据集Python 方式import fiftyone as fo import fiftyone.zoo as foz dataset foz.load_zoo_dataset(quickstart-trajectories) session fo.launch_app(dataset)CLI 方式fiftyone zoo datasets load quickstart-trajectories fiftyone app launch quickstart-trajectories两条命令分别完成「从 Zoo 下载并加载数据集」与「在 FiftyOne App 中启动该数据集的可视化会话」。加载完成后在 App 中可以看到与 quickstart-trajectories 官方截图docs/source/images/dataset_zoo/quickstart-trajectories.png一致的界面视频帧上叠加着紫色对象检测框person、vehicle、road sign 等类别底部的时间轴以不同色块呈现各目标随时间的轨迹区间右侧面板可在 Explore 与 Annotate 两种模式间切换用于查看和编辑轨迹标注。轨迹标注前的必要预处理这是本数据集使用中最关键的实操步骤。官方文档明确指出在标注轨迹之前必须先计算视频元数据并将视频采样为帧dataset.compute_metadata() dataset.to_frames(sample_framesTrue)下面分别说明这两个调用的作用与底层实现。compute_metadata()填充视频元数据compute_metadata方法fiftyone/core/collections.py会为集合中所有样本填充metadata字段包括视频时长、分辨率、帧率等def compute_metadata( self, overwriteFalse, num_workersNone, skip_failuresTrue, warn_failuresTrue, progressNone, ): Populates the metadata field of all samples in the collection. Any samples with existing metadata are skipped, unless overwrite True. ... 关键参数说明参数默认值说明overwriteFalse是否覆盖已存在的元数据已有元数据的样本默认跳过num_workersNone建议使用的线程数用于并行计算skip_failuresTrue某样本元数据计算失败时是否优雅跳过而非抛错warn_failuresTrue失败时是否输出警告日志progressNone是否渲染进度条True/False传None时使用fiftyone.config.show_progress_bars的默认值轨迹标注需要知道每个视频的总帧数、帧率等信息因此该步骤是后续帧采样的前提。to_frames(sample_framesTrue)视频采样为帧to_frames方法fiftyone/core/collections.py创建「视频中每一帧对应一个样本」的视图The returned view will contain all frame-level fields and thetagsof each video as sample-level fields, as well as asample_idfield that records the IDs of the parent sample for each frame.当sample_framesTrue时每个视频会被采样到一目录逐帧图像并将文件路径写入源数据集的filepath帧字段。默认情况下每帧图像文件夹与输入视频同名例如/path/to/video1.mp4 → /path/to/video1/ 000001.jpg 000002.jpg ...还可以通过可选的output_dir与rel_dir参数定制采样帧文件夹的位置与结构。例如output_dir /tmp、rel_dir /path/to时源视频/path/to/folderA/video1.mp4会被采样为/tmp/folderA/video1/000001.jpg、/tmp/folderA/video1/000002.jpg……在轨迹标注场景中逐帧采样后每一帧上带有instance关联信息的检测框才能在 App 的时间轴中被连续呈现、编辑为跨帧轨迹。轨迹数据模型instance 与 index 的演进理解本数据集的核心在于理解instance字段在轨迹关联中的作用id字段每个标签唯一用于标识单条标签记录本身instance字段指向一个Instance文档仅含id用于标识同一逻辑对象在不同帧/不同样本中的出现——同一辆车的所有检测框共享同一个instance.id从而构成一条轨迹遗留的index字段在旧版本中用于对象索引关联在本数据集中已被移除轨迹信息统一由instance承载。因此当你用fo.launch_app(dataset)打开该数据集时App 正是依据各帧检测框的instance.id分组在时间轴上绘制出每个目标对象的运动轨迹色块。进一步探索与延伸查看完整的数据集 Zoo 文档数据集 Zoo 总览、数据集 Zoo API 参考对比同一系列的 quickstart-video 文档理解「仅含逐帧检测」与「含跨帧轨迹」两种标注结构的差异深入阅读 fiftyone/zoo/datasets/base.py 中QuickstartTrajectoriesDataset的完整实现以及 fiftyone/core/labels.py 中Instance与_HasInstance的源码若在视频处理过程中遇到 ffmpeg 相关问题可查阅 安装与故障排查文档。小结Quickstart Trajectories 是 FiftyOne 中进入视频轨迹标注领域的低门槛入口35.20 MB 的体积、CC-BY-4.0 许可证、10 段带跨帧轨迹关联的视频片段配合compute_metadata()to_frames(sample_framesTrue)两步预处理即可在 FiftyOne App 的时间轴视图中直观地查看和标注对象轨迹。其底层instance字段的数据模型也为你理解 FiftyOne 中跨帧/跨模态对象关联机制提供了最简洁的参考实现。【免费下载链接】fiftyoneRefine high-quality datasets and visual AI models项目地址: https://gitcode.com/GitHub_Trending/fi/fiftyone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价