首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FiftyOne动态数据的备份/恢复(例如标记、检测和分段)

FiftyOne动态数据的备份/恢复(例如标记、检测和分段)
EN

Stack Overflow用户
提问于 2021-09-03 11:04:28
回答 1查看 84关注 0票数 2

如何备份FiftyOne数据集中的动态内容?标签是需要备份的最重要的数据。我的几个用户会花大量的时间在UI中手动创建标签,我想确保我们支持他们的工作。我不需要备份静态内容,例如图像本身。

备份检测和分割也是很好的。对于较小的数据集,我可以从脚本中重新生成它们,但对于较大的数据集,或者源数据(例如检测)发生变化的情况,最好不必重新构建这些数据。

而且,一旦我备份了这些数据,我将如何恢复?

EN

回答 1

Stack Overflow用户

发布于 2021-09-03 15:25:15

FiftyOne团队

这个工作流程听起来可以用FiftyOne Teams解决,这是FiftyOne的企业版,设计用于在相同数据集上进行基于团队的协作。它之所以相关,不仅是因为它支持多个用户同时处理一个数据集,还因为数据集版本控制在FiftyOne团队的近期路线图上。

数据集和字段克隆

FiftyOne中,当前推荐的备份DatasetDatasetViewField的方法是"clone“它。

对于DatasetDatasetViewclone()方法都将获取给定示例中的现有字段,并将它们复制到新的Dataset中。克隆DatasetView时,只会克隆过滤视图中存在的字段。

您还可以使用clone_sample_field()将视图字段的内容复制到底层Dataset的新字段中。这适用于任何示例字段,包括标记和标签。

代码语言:javascript
复制
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一样简单。

代码语言:javascript
复制
bu_dataset.rename_sample_field("tags_backup", "tags")

对于更细微的恢复,您始终可以在一个简单的Python循环中迭代样本,以准确地恢复所需的内容:

代码语言:javascript
复制
for sample in bu_dataset:
    backup_tags = sample.tags
    if "validation" in backup_tags:
        sample.tags = backup_tags
        sample.save()

克隆的数据集

为了从克隆的数据集中恢复字段,您可以从一个数据集merge the samples到另一个数据集:

代码语言:javascript
复制
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

例如,要持久化数据集:

代码语言:javascript
复制
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

代码语言:javascript
复制
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":

代码语言:javascript
复制
session = fo.launch_app(dataset)

回到Python中,Dataset已经更新,可以查询或备份在应用程序中创建的标签,如下所示。

代码语言:javascript
复制
tagged_view = dataset.match_tags("custom_tag")
print(tagged_view)
代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69043904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档