You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何备份及恢复FiftyOne数据集的tags、detections等动态数据?

FiftyOne动态内容备份与恢复方案

备份方案

以下方案均跳过图片、视频等静态媒体资源,仅备份手动标签、标注结果等动态内容:

  • 全量动态内容备份(推荐)
    用FiftyOne原生导出接口导出所有元数据、手动tags、detections、segmentations标注,完整保留字段结构,适配大小数据集:
    import fiftyone as fo
    
    # 加载目标数据集
    dataset = fo.load_dataset("your_dataset_name")
    
    # 执行备份
    dataset.export(
        export_dir="./fiftyone_dynamic_backup",
        dataset_type=fo.types.FiftyOneDataset,
        export_media=False, # 核心配置:不导出静态媒体资源
        include_tags=True, # 保留所有手动创建的样本、帧标签
    )
    
    若仅需要备份指定字段,可添加include_fields=["tags", "detections", "segmentations"]参数缩小备份范围。
  • 轻量化标签备份
    仅提取核心标签和标注字段导出为JSON,适合定期高频备份手动标注内容:
    import json
    import fiftyone as fo
    
    dataset = fo.load_dataset("your_dataset_name")
    backup_content = []
    for sample in dataset:
        item = {
            "sample_id": str(sample.id),
            "tags": list(sample.tags),
            "detections": sample.detections.to_dict() if sample.has_field("detections") else None,
            "segmentations": sample.segmentations.to_dict() if sample.has_field("segmentations") else None
        }
        backup_content.append(item)
    
    with open("./fiftyone_tag_backup.json", "w", encoding="utf-8") as f:
        json.dump(backup_content, f, indent=2, ensure_ascii=False)
    

恢复方案

  • 全量备份恢复
    对应全量动态内容备份的恢复方法,可选择恢复为新数据集或合并到现有数据集:
    import fiftyone as fo
    
    # 方案1:恢复为独立新数据集(不影响原有数据,推荐)
    restored_dataset = fo.Dataset.from_dir(
        dataset_dir="./fiftyone_dynamic_backup",
        dataset_type=fo.types.FiftyOneDataset,
        name="restored_dataset"
    )
    
    # 方案2:合并备份内容到现有数据集
    exist_dataset = fo.load_dataset("your_exist_dataset")
    exist_dataset.merge_dir(
        dataset_dir="./fiftyone_dynamic_backup",
        dataset_type=fo.types.FiftyOneDataset,
        merge_strategy="replace", # 标注冲突时优先用备份内容,可改"keep"保留现有内容
        overwrite=True
    )
    exist_dataset.save()
    
  • 轻量化标签备份恢复
    对应轻量化JSON备份的恢复方法,按样本ID匹配回填标注:
    import json
    import fiftyone as fo
    
    dataset = fo.load_dataset("your_dataset_name")
    with open("./fiftyone_tag_backup.json", "r", encoding="utf-8") as f:
        backup_data = json.load(f)
    
    for item in backup_data:
        sample = dataset[item["sample_id"]]
        sample.tags = item["tags"]
        if item["detections"]:
            sample.detections = fo.Detections.from_dict(item["detections"])
        if item["segmentations"]:
            sample.segmentations = fo.Segmentations.from_dict(item["segmentations"])
        sample.save()
    

注意:恢复操作前建议先对当前数据集做临时快照,避免误操作导致现有标注被覆盖。

内容的提问来源于stack exchange,提问作者mherzog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:36:02