CVAT 中 MOT 多目标跟踪格式的导出与导入:zip 结构、字段语义与源码级实现详解
2026/9/14 8:55:23 网站建设 项目流程

CVAT 中 MOT 多目标跟踪格式的导出与导入:zip 结构、字段语义与源码级实现详解

【免费下载链接】cvatComputer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as labeling services, for image, video, and 3D annotation with AI-assisted labeling, quality assurance, team collaboration, analytics, and developer APIs.项目地址: https://gitcode.com/GitHub_Trending/cvat/cvat

MOT(Multiple Object Tracking)序列格式是多目标跟踪算法评测中广泛使用的数据组织方式,核心内容是视频各帧上带有 track_id 的目标位置标注。本篇基于 CVAT 仓库中的 MOT 格式文档 展开,完整说明 MOT 格式在 CVAT 中的导出/导入流程、.zip归档结构与gt.txt字段语义,并结合 格式实现源码 与 自动化测试 深入讲解 track 映射、帧号偏移和"跳帧补 outside"等底层机制。

1. MOT 序列格式是什么

MOT 序列格式本质上由两部分组成:

  • 媒体数据:视频的每一帧图像(导出为逐帧图片);
  • 标注数据:描述每个对象在每一帧上的位置(边界框)以及贯穿时间的身份(track_id)。

该格式在行人跟踪、车辆跟踪等领域尤为常见。CVAT 中对应的导入/导出格式在界面中显示为MOT 1.1,扩展名为ZIP——这一点可以在格式注册处得到印证:mot.py 中@exporter(name="MOT", ext="ZIP", version="1.1")@importer(name="MOT", ext="ZIP", version="1.1")装饰器会把它注册为 "MOT 1.1"(展示名由 registry.py 中DISPLAY_NAME = "{NAME} {VERSION}"规则拼接生成),并且该模块在 registry.py 的import cvat.apps.dataset_manager.formats.mot处被统一加载。

2. MOT 导出

2.1 支持范围

按照 format-mot.md 的定义:

项目说明
支持的对象Bounding Box tracks(矩形框 track)
属性映射visibility(number 型)、ignored(checkbox 型)
Tracks支持(保留身份 ID,导出为track_id列)

也就是说,MOT 导出的目标对象必须是带身份的矩形框轨迹;CVAT 侧ignored复选框与visibility数值属性会被写入gt.txt的对应列。

2.2 导出产物结构

导出的文件是一个.zip归档,内部结构如下(与原文档一致):

taskname.zip/ ├── img1/ │ ├── image1.jpg │ └── image2.jpg └── gt/ ├── labels.txt └── gt.txt # labels.txt cat dog person ... # gt.txt # frame_id, track_id, x, y, w, h, "not ignored", class_id, visibility, <skipped> 1,1,1363,569,103,241,1,1,0.86014 ...

其中:

  • img1/:逐帧图像目录(仅在导出时开启 "Save images" 时包含媒体文件);
  • gt/labels.txt:类别名列表,逐行一个;gt.txt中的class_id1开始,对应此文件中的行号(示例中class_id=1cat);
  • gt/gt.txt:每行一个目标实例,列为:
含义备注
frame_id帧号从 1 开始
track_id目标身份 ID贯穿该 track 所有帧
x, y左上角坐标像素
w, h框宽高像素
not ignored是否"未忽略"1表示未忽略,对应 CVAT 的ignored属性的取反;被忽略的样本不参与评测
class_id类别 ID从 1 开始,指向labels.txt行号
visibility可见性数值列,示例中为0.86014;来自 CVAT 的visibility数值属性
<skipped>保留位标准 MOT 格式允许存在额外尾列

示例行1,1,1363,569,103,241,1,1,0.86014的读法是:第 1 帧、track 1,在(1363, 569)处有一个103×241的框,未忽略,类别 1(cat),可见性约 0.86。

2.3 导出实现的源码走读

导出入口是 mot.py 中的_export

@exporter(name="MOT", ext="ZIP", version="1.1") def _export(dst_file, temp_dir, instance_data, save_images=False): with GetCVATDataExtractor(instance_data, include_images=save_images) as extractor: dataset = dm.StreamDataset.from_extractors(extractor, env=dm_env) dataset.export(temp_dir, "mot_seq_gt", save_media=save_images) make_zip_archive(temp_dir, dst_file)

从源码结构看,整个导出分为三步:

  1. 桥接数据源GetCVATDataExtractor(定义于 bindings.py)把 CVAT 内部的标注数据(形状、track、属性、图像)包装成 Datumaro 可识别的 extractor,include_images参数决定img1/目录是否生成;
  2. 交给 Datumaro 序列化:真正写gt.txt/labels.txt的是 Datumaro 的mot_seq_gt格式插件(dataset.export(temp_dir, "mot_seq_gt", ...)),visibility/ignored列即由该插件按 MOT 规范生成;
  3. 打包make_zip_archive将临时目录压成最终.zip

因此gt.txt的具体列布局由 Datumaro 的mot_seq规范保证,CVAT 本身只负责数据桥接与打包。

3. MOT 导入

3.1 上传文件的结构

按照 format-mot.md 的定义,导入接受两种形态:

  1. 上文导出产物那种完整归档(img1/+gt/);
  2. 仅含标注的最小归档:
archive.zip/ └── gt/ └── gt.txt └── labels.txt # optional, mandatory for non-official labels

labels.txt是可选的,但当你使用的类别不是 MOT 官方标准标签集时,labels.txt为必填项——否则无法把class_id映射回类别名。注意:导入"标注"到已有任务时,媒体文件由任务自身的图像/视频提供,归档中只需gt/部分。

3.2 导入流程与 track 重建机制

导入入口同样是 mot.py:

@importer(name="MOT", ext="ZIP", version="1.1") def _import(src_file, temp_dir, instance_data, load_data_callback=None, **kwargs): shutil.unpack_archive(src_file.name, temp_dir, "zip") detect_dataset(temp_dir, format_name="mot_seq", importer=dm_env.importers.get("mot_seq")) dataset = dm.Dataset.import_from(temp_dir, "mot_seq", env=dm_env) ... if hasattr(instance_data, "_db_project"): for sub_dataset, task_data in instance_data.split_dataset(dataset): _import_to_task(sub_dataset, task_data) else: _import_to_task(dataset, instance_data)

解包后先经detect_dataset校验归档确实符合mot_seq结构,再由 Datumaro 解析成统一的内存数据集;随后按导入目标(项目 vs 任务)拆分数据集,逐个子集调用核心函数_import_to_task。这个函数承载了 MOT → CVAT 标注模型的全部关键转换(mot.py):

(1)帧号对齐:MOT 的frame_id从 1 开始,而 CVAT 内部帧号从 0 开始,且 job 存在起始偏移:

# NOTE: MOT frames start from 1 # job has an offset, for task offset is 0 frame_number = int(item.id) - 1 + instance_data.start

这就是把 Datumaro 的 item id(即 MOT 帧号)换算成目标 job 的绝对帧号,保证导入后标注落在正确帧上。

(2)区分 track 与"普通框":每条标注先取出occludedtrack_id两个属性。若track_idNone(扩展用法),则该框作为普通矩形 shape 导入(group=0,无身份);否则按track_id归入tracks字典,等待组成轨迹。

(3)按帧排序并补齐"跳帧":MOT 允许同一 track 只在可见帧出现,帧序列不必连续。导入时 CVAT 会在两个可见帧之间存在间隔的位置插入一条outside=True的 shape,使 CVAT 的 track 语义("该帧上对象存在但被标记为 off-canvas/outside")与 MOT 的稀疏表达保持一致:

has_skip = instance_data.frame_step < shape.frame - prev_shape.frame if has_skip and not prev_shape.outside: prev_shape = prev_shape._replace( outside=True, frame=prev_shape.frame + instance_data.frame_step ) track.shapes.insert(prev_shape_idx, prev_shape)

(4)结束 track:若该 track 最后一帧之后任务还有后续帧,则再追加一个outside=True的 shape 作为轨迹终点,避免 CVAT 将 track 误认为延续到任务末尾。

(5)属性保留:除被消费掉的occluded(映射到 CVAT 的occluded字段)、track_id(映射到 track 身份)外,其余属性(如visibility)会原样保留为 shape 的属性。

4. 在 CVAT 中实际使用 MOT 格式

  • 导出:打开任务 →Actions>Export task dataset,在格式列表中选择MOT 1.1,可选择是否勾选 "Save images" 以决定是否包含img1/图像目录。完整的界面导出流程见 导出指南。
  • 导入/上传标注:在任务上Actions>Upload annotations(或对单个 job 使用Import annotations),格式选择MOT 1.1并上传上述结构的.zip。需要特别注意:上传标注会替换任务上已有的标注。流程细节见 导入指南。

5. 测试验证与已知限制

仓库中的 REST API 测试覆盖了 MOT 的"导出 → 清空 → 再导入"闭环,可用作格式行为的活文档:

  • test_api_v2_check_mot_with_shapes_only:构造含 3 帧图像、仅含矩形框标注("shapes only",即 track 身份场景)的任务,以format=MOT 1.1导出,随后删除标注并把同一 zip 重新导入,用compare_datasets断言两侧数据一致;该用例分别在include_images=False/True两种媒体开关下执行。
  • test_formats.py 中的注释# ('MOT 1.1', 'mot_seq'), # does not support表明 MOT 1.1 不在"空标注也能导出"的支持列表内——即导出空标注集的行为未被该测试纳入,使用空任务导出 MOT 时应当留意产物是否含有效gt.txt内容。

6. 小结

要点结论
显示名 / 扩展名MOT 1.1 / ZIP(mot.py)
支持对象仅 Bounding Box tracks
属性visibility(number)、ignored(checkbox)
gt.txt帧号从 1 开始;导入时-1 + job.start对齐 CVAT 帧号
跳帧 track导入时自动插入outside=True帧并以outside=True收尾
非 track 框track_id的框按普通矩形 shape 导入(扩展用法)
序列化主体委托 Datumaromot_seq/mot_seq_gt插件,CVAT 负责桥接与打包

掌握以上内容后,你可以:按规范手工构造/校验gt.txtlabels.txt;理解 CVAT 导出 zip 的每一列来源;以及在编写或审查自动化流水线(如基于 SDK/API 的批量导入导出)时,准确预期 MOT 格式在 track 身份、帧偏移与属性保留上的行为。

【免费下载链接】cvatComputer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as labeling services, for image, video, and 3D annotation with AI-assisted labeling, quality assurance, team collaboration, analytics, and developer APIs.项目地址: https://gitcode.com/GitHub_Trending/cvat/cvat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询