尧图精选

CVAT 中 ImageNet 格式的导出与导入:仅支持 Tags 的分类数据集及其源码级实现机制

🕒 发布时间:2026/9/14 8:34:18 📁 来源:尧图网络
CVAT 中 ImageNet 格式的导出与导入仅支持 Tags 的分类数据集及其源码级实现机制【免费下载链接】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本文围绕 CVAT 官方文档中的 ImageNet 格式说明format-imagenet.md讲解如何将 CVAT 中的标签标注导出/导入为 ImageNet 风格的.zip数据集明确该格式只支持 Tags 标注、不支持属性与 Tracks 的能力边界还原导出产物的目录结构含图片版与纯标注版并结合 formats/imagenet.py 的源码剖析 CVAT 在导出、导入时如何依据文件内容自动选择imagenet/imagenet_txt两条 Datumaro 管线以及导入时对条目名进行Rename归一化的原因帮助开发者在准备图像分类训练集时准确使用并排障该格式。ImageNet 格式的适用场景与能力边界ImageNet 是计算机视觉领域公认的基准数据集格式通常用于图像分类、目标检测、语义分割等任务的模型训练与评测其核心特征是按类别组织图像样本或提供“子集名 类别列表”的纯文本标注。在 CVAT 中ImageNet 格式被实现为版本1.0、扩展名ZIP的导出器与导入器注册时的显示名称为ImageNet 1.0见 formats/imagenet.py 中的exporter(nameImageNet, extZIP, version1.0)与importer(...)装饰器。根据官方文档该格式的能力边界非常明确能力导出导入支持的标注类型Tags标签Tags标签Attributes属性不支持不支持Tracks轨迹不支持不支持这意味着ImageNet 格式只适合“每张图一个/若干类别标签”的分类场景。如果你的标注中包含矩形框、多边形、轨迹或自定义属性选择该格式导出时这些信息无法被完整表达应改用 COCO、PASCAL VOC、CVAT 等格式。ImageNet 导出产物结构与两种模式选择 ImageNet 格式导出后CVAT 会下载一个.zip压缩包其内部结构取决于导出时是否勾选“保存图像”。文档中给出了两种典型结构# if we save images: taskname.zip/ ├── label1/ | ├── label1_image1.jpg | └── label1_image2.jpg └── label2/ ├── label2_image1.jpg ├── label2_image3.jpg └── label2_image4.jpg # if we keep only annotation: taskname.zip/ ├── any_subset_name.txt └── synsets.txt含图像模式图像按所属类别目录label1/、label2/…组织这是典型的分类训练集目录布局。纯标注模式仅输出子集清单any_subset_name.txt与类别清单synsets.txt体积小、便于只分发标注结果。导出在源码中是如何分支的从 formats/imagenet.py 的导出实现L19–L28可以看到两种模式对应 Datumaro 的两个不同导出器exporter(nameImageNet, extZIP, version1.0) def _export(dst_file, temp_dir, instance_data, save_imagesFalse): with GetCVATDataExtractor(instance_data, include_imagessave_images) as extractor: dataset Dataset.from_extractors(extractor, envdm_env) if save_images: dataset.export(temp_dir, imagenet, save_mediasave_images) else: dataset.export(temp_dir, imagenet_txt, save_mediasave_images) make_zip_archive(temp_dir, dst_file)要点数据抽取GetCVATDataExtractor从 CVAT 数据库/缓存中把 Task/Job/Project 的媒体与标注抽成 Datumaro 数据集include_images参数决定是否真正读取图像数据。格式分支save_imagesTrue走imagenet导出器按类别目录落图save_imagesFalse走imagenet_txt导出器只生成.txt清单。打包make_zip_archive定义于 dataset_manager/util.py遍历临时目录把相对路径写入 zip保证压缩包内目录层级与上节结构一致。save_images参数来自导出请求本身在 dataset_manager/views.py 中Task 的“导出数据集”与“导出标注”分别对应export_task_as_datasetsave_imagesTrue与export_task_annotationssave_imagesFalseProject、Job 同理。因此你在 UI 中“导出数据集”与“导出标注”两个入口最终触发的就是上面同一个_export函数的两个分支通过 SDK/REST API 调用时同样由“是否包含图像”的参数决定。格式在注册表中的登记方式所有格式通过 formats/registry.py 以装饰器注册进EXPORT_FORMATS/IMPORT_FORMATS两张表键为显示名ImageNet 1.0并附带DIMENSION、ENABLED等元信息registry.py末尾统一 import 各格式模块包括cvat.apps.dataset_manager.formats.imagenet完成注册。这解释了为什么界面下拉框中显示的是 “ImageNet 1.0” 而非 “ImageNet”。ImageNet 导入自动识别结构与名称归一化导入时上传的同样是一个.zip压缩包结构即上文两种导出结构之一。formats/imagenet.py 的导入实现L31–L46揭示了 CVAT 如何判断应走哪条解析路径importer(nameImageNet, extZIP, version1.0) def _import(src_file, temp_dir, instance_data, load_data_callbackNone, **kwargs): zipfile.ZipFile(src_file).extractall(temp_dir) # We do not run detect_dataset before import because the Imagenet format # has problem with the dataset detection in case of empty annotation file(s) # Details in: https://github.com/cvat-ai/datumaro/issues/43 if glob(osp.join(temp_dir, *.txt)): dataset Dataset.import_from(temp_dir, imagenet_txt, envdm_env) else: dataset Dataset.import_from(temp_dir, imagenet, envdm_env) # Rename dataset items from label:name to label/name for frame matching to work dataset dataset.transform(Rename, regex|([^:]):(.*)|\\1/\\2|) if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data)这段代码有三个值得注意的设计先解包再判断zipfile.ZipFile(src_file).extractall(temp_dir)解压后以“目录里是否存在*.txt”作为判别依据——有 txt 即纯标注包走imagenet_txt导入器否则视为含图分类数据集走imagenet导入器。这与导出的两种产物结构一一对应实现了免手工指定子格式的自动识别。跳过自动数据集探测注释明确指出 Datumaro 对 ImageNet 格式的自动探测detect_dataset在标注文件为空时存在问题因此这里不调用探测而直接按扩展名结构手动选择导入器。从源码结构看这是针对特定边界条件空标注文件的显式规避。条目名归一化含图导入路径上执行了Rename转换正则|([^:]):(.*)|\1/\2|将 Datumaro 中label:name形式的条目名改写为label/name。注释说明其目的是让 CVAT 后续按帧/按文件匹配frame matching能够命中——即只有把条目名规范为“类别目录/文件名”的路径形态导入的标签才能与 Task 中同名帧正确对齐。最后import_dm_annotations将解析出的 Datumaro 标注写回 CVAT 的 Task/Job 模型完成导入闭环。测试证据导出/导入链路的回归保障仓库中的格式测试对 ImageNet 格式有直接覆盖dataset_manager/tests/test_formats.pytest_exportsL345 起遍历dm.views.get_export_formats()返回的全部启用格式对每种格式分别在save_images为True/False两种取值下构造 3 帧任务并断言导出的 zip 非空ImageNet 1.0是其中的常规被测项之一test_empty_images_are_exportedL365 起的格式清单中显式列出(ImageNet 1.0, imagenet_txt)L380验证“空图像任务”也能导出成功并能用imagenet_txt导入器回读出与任务大小一致的数据集。这两组测试共同约束了含图/纯标注两条导出路径均可运行且纯标注产物能被imagenet_txt管线正确解析。使用限制与排障要点结合文档与源码使用 ImageNet 格式时需要注意以下前提与限制仅 Tags标注中若含 shapes/tracks 或 attributes导出到 ImageNet 格式不会承载这些内容导入方向也只解析标签。容器必须是 zip导出器与导入器注册的扩展名均为ZIP导入入口直接按 zip 解包非 zip 文件会直接报错。纯标注包必须含 txt导入靠“目录中是否有*.txt”判定imagenet_txt路径。若你手工构造了一个既没有 txt、图片布局也不符合label/xxx结构的压缩包会被误判为含图路径而解析失败。含图包注意命名匹配CVAT 通过label/name形态的条目名与 Task 帧匹配见Rename转换。如果你的类别目录名/文件名与 Task 中帧名对不上导入后标签可能无法落到对应帧上。空标注文件场景由于刻意绕开了自动格式探测源码注释中指向 Datumaro 的已知问题空标注文件不会导致探测阶段的误判但也不应依赖探测逻辑去手工验证该格式。小结CVAT 的 ImageNet 格式是一个面向图像分类场景、仅承载 Tags 标注的轻量数据集格式导出时按“是否保存图像”分别产出“按类别目录组织的图片包”或“subset.txtsynsets.txt的纯标注包”导入时由 formats/imagenet.py 依据包内是否存在*.txt自动分流到imagenet/imagenet_txt两条 Datumaro 导入管线并通过对条目名的Rename归一化保证标签能按帧匹配回任务。对于准备 ImageNet 风格分类训练集、且标注以标签为主的场景该格式可在 UI、REST API 与 SDK 的统一导出接口下直接使用并通过test_formats.py中的回归测试验证行为一致性。【免费下载链接】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),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →