如何备份及恢复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
相关产品推荐
相关产品推荐

