如何备份FiftyOne数据集中的动态内容?标签是需要备份的最重要的数据。我的几个用户会花大量的时间在UI中手动创建标签,我想确保我们支持他们的工作。我不需要备份静态内容,例如图像本身。
备份检测和分割也是很好的。对于较小的数据集,我可以从脚本中重新生成它们,但对于较大的数据集,或者源数据(例如检测)发生变化的情况,最好不必重新构建这些数据。
而且,一旦我备份了这些数据,我将如何恢复?
发布于 2021-09-03 15:25:15
FiftyOne团队
这个工作流程听起来可以用FiftyOne Teams解决,这是FiftyOne的企业版,设计用于在相同数据集上进行基于团队的协作。它之所以相关,不仅是因为它支持多个用户同时处理一个数据集,还因为数据集版本控制在FiftyOne团队的近期路线图上。
数据集和字段克隆
在FiftyOne中,当前推荐的备份Dataset、DatasetView或Field的方法是"clone“它。
对于Dataset和DatasetView,clone()方法都将获取给定示例中的现有字段,并将它们复制到新的Dataset中。克隆DatasetView时,只会克隆过滤视图中存在的字段。
您还可以使用clone_sample_field()将视图字段的内容复制到底层Dataset的新字段中。这适用于任何示例字段,包括标记和标签。
import fiftyone as fo
import fiftyone.zoo as foz
dataset = foz.load_zoo_dataset("quickstart")
# Create a view with only the "ground_truth" field
# and clone it into a new Dataset
view = dataset.select_fields("ground_truth")
bu_dataset = view.clone()
# Clone the "tags" field within the dataset
bu_dataset.clone_sample_field("tags", "tags_backup")FiftyOne仅将图像的路径存储在数据库中,不复制任何介质。这意味着在克隆Dataset时,只复制介质文件路径,而不复制介质本身。
恢复克隆的数据
克隆字段
将克隆的字段恢复为原始名称就像renaming the field一样简单。
bu_dataset.rename_sample_field("tags_backup", "tags")对于更细微的恢复,您始终可以在一个简单的Python循环中迭代样本,以准确地恢复所需的内容:
for sample in bu_dataset:
backup_tags = sample.tags
if "validation" in backup_tags:
sample.tags = backup_tags
sample.save()克隆的数据集
为了从克隆的数据集中恢复字段,您可以从一个数据集merge the samples到另一个数据集:
merge_view = bu_dataset.select_fields("ground_truth")
dataset.merge_samples(merge_view)数据集持久性
当计划多次使用Dataset时,应设置persistent option。当Dataset设置为persistent时,即使Python内核和后台MongoDB数据库关闭,该Dataset也不会被删除,并且可以为reloaded at a future time。
例如,要持久化数据集:
import fiftyone as fo
import fiftyone.zoo as foz
# Create your dataset
dataset = foz.load_zoo_dataset(
"coco-2017",
split="validation",
max_samples=10,
dataset_name="my_dataset",
)
dataset.persistent = True现在,您可以关闭Python,重新打开它,然后加载Dataset。
import fiftyone as fo
print(fo.list_datasets())
# ["my_dataset"]
dataset = fo.load_dataset("my_dataset")应用程序标记
创建tag is created and applied in the FiftyOne App时,它会自动备份到Dataset中,因此也会备份到备份的MongoDB数据库中。
例如,要在上面加载的Dataset中创建custom_tag,可以启动应用程序,选择samples或labels,输入标签,然后点击"Apply":
session = fo.launch_app(dataset)

回到Python中,Dataset已经更新,可以查询或备份在应用程序中创建的标签,如下所示。
tagged_view = dataset.match_tags("custom_tag")
print(tagged_view)Dataset: my_dataset
Media type: image
Num samples: 3
Tags: ['custom_tag', 'validation']
Sample fields:
id: fiftyone.core.fields.ObjectIdField
filepath: fiftyone.core.fields.StringField
tags: fiftyone.core.fields.ListField(fiftyone.core.fields.StringField)
metadata: fiftyone.core.fields.EmbeddedDocumentField(fiftyone.core.metadata.Metadata)
ground_truth: fiftyone.core.fields.EmbeddedDocumentField(fiftyone.core.labels.Detections)
View stages:
1. MatchTags(tags=['custom_tag'], bool=True)https://stackoverflow.com/questions/69043904
复制相似问题