ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

CVAT 中 MOT 多目标跟踪格式的导出与导入:zip 结构、字段语义与源码级实现详解 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/cvatMOTMultiple 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(nameMOT, extZIP, version1.1)与importer(nameMOT, extZIP, version1.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属性映射visibilitynumber 型、ignoredcheckbox 型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_id从1开始对应此文件中的行号示例中class_id1即catgt/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的框未忽略类别 1cat可见性约 0.86。2.3 导出实现的源码走读导出入口是 mot.py 中的_exportexporter(nameMOT, extZIP, version1.1) def _export(dst_file, temp_dir, instance_data, save_imagesFalse): with GetCVATDataExtractor(instance_data, include_imagessave_images) as extractor: dataset dm.StreamDataset.from_extractors(extractor, envdm_env) dataset.export(temp_dir, mot_seq_gt, save_mediasave_images) make_zip_archive(temp_dir, dst_file)从源码结构看整个导出分为三步桥接数据源GetCVATDataExtractor定义于 bindings.py把 CVAT 内部的标注数据形状、track、属性、图像包装成 Datumaro 可识别的 extractorinclude_images参数决定img1/目录是否生成交给 Datumaro 序列化真正写gt.txt/labels.txt的是 Datumaro 的mot_seq_gt格式插件dataset.export(temp_dir, mot_seq_gt, ...)visibility/ignored列即由该插件按 MOT 规范生成打包make_zip_archive将临时目录压成最终.zip。因此gt.txt的具体列布局由 Datumaro 的mot_seq规范保证CVAT 本身只负责数据桥接与打包。3. MOT 导入3.1 上传文件的结构按照 format-mot.md 的定义导入接受两种形态上文导出产物那种完整归档img1/gt/仅含标注的最小归档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.pyimporter(nameMOT, extZIP, version1.1) def _import(src_file, temp_dir, instance_data, load_data_callbackNone, **kwargs): shutil.unpack_archive(src_file.name, temp_dir, zip) detect_dataset(temp_dir, format_namemot_seq, importerdm_env.importers.get(mot_seq)) dataset dm.Dataset.import_from(temp_dir, mot_seq, envdm_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.py1帧号对齐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 与普通框每条标注先取出occluded与track_id两个属性。若track_id为None扩展用法则该框作为普通矩形 shape 导入group0无身份否则按track_id归入tracks字典等待组成轨迹。3按帧排序并补齐跳帧MOT 允许同一 track 只在可见帧出现帧序列不必连续。导入时 CVAT 会在两个可见帧之间存在间隔的位置插入一条outsideTrue的 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( outsideTrue, frameprev_shape.frame instance_data.frame_step ) track.shapes.insert(prev_shape_idx, prev_shape)4结束 track若该 track 最后一帧之后任务还有后续帧则再追加一个outsideTrue的 shape 作为轨迹终点避免 CVAT 将 track 误认为延续到任务末尾。5属性保留除被消费掉的occluded映射到 CVAT 的occluded字段、track_id映射到 track 身份外其余属性如visibility会原样保留为 shape 的属性。4. 在 CVAT 中实际使用 MOT 格式导出打开任务 →ActionsExport task dataset在格式列表中选择MOT 1.1可选择是否勾选 Save images 以决定是否包含img1/图像目录。完整的界面导出流程见 导出指南。导入/上传标注在任务上ActionsUpload annotations或对单个 job 使用Import annotations格式选择MOT 1.1并上传上述结构的.zip。需要特别注意上传标注会替换任务上已有的标注。流程细节见 导入指南。5. 测试验证与已知限制仓库中的 REST API 测试覆盖了 MOT 的导出 → 清空 → 再导入闭环可用作格式行为的活文档test_api_v2_check_mot_with_shapes_only构造含 3 帧图像、仅含矩形框标注shapes only即 track 身份场景的任务以formatMOT 1.1导出随后删除标注并把同一 zip 重新导入用compare_datasets断言两侧数据一致该用例分别在include_imagesFalse/True两种媒体开关下执行。test_formats.py 中的注释# (MOT 1.1, mot_seq), # does not support表明 MOT 1.1 不在空标注也能导出的支持列表内——即导出空标注集的行为未被该测试纳入使用空任务导出 MOT 时应当留意产物是否含有效gt.txt内容。6. 小结要点结论显示名 / 扩展名MOT 1.1 / ZIPmot.py支持对象仅 Bounding Box tracks属性visibilitynumber、ignoredcheckboxgt.txt帧号从 1 开始导入时-1 job.start对齐 CVAT 帧号跳帧 track导入时自动插入outsideTrue帧并以outsideTrue收尾非 track 框无track_id的框按普通矩形 shape 导入扩展用法序列化主体委托 Datumaromot_seq/mot_seq_gt插件CVAT 负责桥接与打包掌握以上内容后你可以按规范手工构造/校验gt.txt与labels.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),仅供参考
返回列表