数据集的行为应该像git存储库
回到博客主页

数据集的行为应该像git存储库

生活的数据集 2021年1月18日

数据中出现的问题在研究和行业中都很常见。这些问题是作为我们项目的一部分来处理的,但我们通常不会在它们的起源处解决它们。我们在本地修改一次数据,然后继续我们的项目。在某些情况下,这当然是一种有效的方法,但是随着我们在项目之间共享的数据越来越多,我们发现自己随着时间的推移和跨团队重复相同的过程。对于许多人共享的公共数据集来训练许多机器学习模型来说,这个问题尤其真实。我将向您展示如何使用git和DVC作为版本控制系统,使用DAGsHub作为数据集的主机,创建、维护和贡献一个可以跨项目自动更新的长寿命数据集。

对数据集的迭代

更改数据集是一个常见的过程

我记得在我的本科学习期间,我必须为黄瓜植物部分生成一个实例分割模型,使用一个自定义的分割叶、黄瓜和花的数据集。在非常早期的阶段,我发现我不能得到合理的结果与最初给出的数据。我决定自己给十几张图片做注释。不出所料,这解决了我遇到的80%的问题。这是说手工数据工作被低估的好机会。花几个小时修复数据是我能为项目做的最好的事情。然后,当然,我继续我的生活,把固定的数据集留在实验室的计算机上,但我知道,我的修复最终会消失。

自然,这个过程是循序渐进的。我从原始数据集开始,然后修正了部分注释。在某个时刻,我添加了完全新的图片,决定重做其中的一些。随着时间的推移,我对数据进行了多次操作。我将其中许多作为“调试试错”处理,自然不会严格跟踪我的工作目录。在这些迭代过程中,我运行训练课程,同时尽我所能详细记录我的“经验”。如果你还在阅读,你可能完全明白我在说什么。从那时起,世界已经发生了变化,许多数据版本控制工具已经发展起来以提供帮助。这是一个很好的机会来推荐这个数据版本控制工具的比较我们是在2020年底出版的。

什么是数据版本控制?

虽然我的项目在数据方面是一团糟,但它的代码被git很好地跟踪。原因是我可以只运行以下每个人都知道的神奇命令:

git添加。Git提交-m“固定训练输入目录”

那时,我无法对我的数据做任何神奇的命令。现在,随着"和DAGsHub在世界上,这不再是这样的情况。没有理由不至少设置一个简单的代码和数据版本系统。如果您不熟悉DVC,我建议您浏览一下本基本数据版本控制教程,但它是这是理解本文其余部分的先决条件。你真正需要知道的是,现在我们有了一个新的、神奇的命令:

"的承诺

这将创建跟踪数据的快照,而不会膨胀git存储库。

介绍生活数据集

虽然数据版本控制解决了机器学习项目上下文中管理数据的问题,但它也带来了一种新的管理方法数据集.这种方法也称为数据注册中心在这里,包括创造一个完全用于管理数据集的git存储库.这意味着,你可以将项目链接到数据集(或任何文件),并将其视为依赖项,而不是在固定的数据集上训练模型——这是研究人员、学生、kaggler和开源机器学习贡献者经常做的事情。雷竞技技官网下载毕竟,数据可以也应该被视为代码,并遵循审查流程。你可以在另一篇文章中读到更多关于数据错误和如何修复它们

警告:如果你感到受到知识的威胁,请不要继续阅读!

通过GIPHY

当然,我是在开玩笑,这根本不是什么火箭科学。事实上,我将在一个类似于我的大学项目的项目中演示如何使用这样的活动数据集。

创建数据注册表以将其用作活动数据集

为了演示这个动态数据集的新概念,我自己建立了一个动态数据集,以及一个使用它作为依赖的机器学习模型。

库一-又名活数据集,将是一个简单的项目,神奇的元数据文件指向真正的大文件存储在一个专门的存储。我可以组织数据集文件到目录,添加代码文件与跑龙套函数来使用它,或者我认为适合存储和展示我的数据集给任何可能需要使用它的人的任何东西。

库B-又名机器学习项目,是我想使用存储在我的活数据集中的文件。这个存储库将使用DVC从存储库a导入一个目录,这将使该目录具有可管理性和可更新性。

要创建一个数据注册表,只需创建一个git + DVC目录。

Mkdir my-dataset && CD my-dataset git init DVC init

恭喜!您的活数据集是活的。现在我们需要向它添加一些文件。

https://media.giphy.com/media/YEL7FJP6ed008/giphy.gif

以我为例,我从一个深受喜爱的电视节目中截取了一些截图,并在其中注释了我最喜欢的角色,使用的是非常棒的开源软件雷竞技技官网下载可可注释器项目

在注释了大约40张图片后,我知道对于一个预先训练过的带有ResNet50骨干的Mask-RCNN来说,这已经足够给出像样的结果了(15张可能也足够了,但是太有趣了,无法停止)。我出口. json注释文件,把它和我的截图一起放在我的存储库中。此时我的工作目录是这样的:

.├──annotation│├──grogu。Json├──images├──000.png├──001.png…├──206.png├──208.png

然后我运行神奇的命令开始跟踪数据文件。

DVC添加注释DVC添加图像git添加。git commit -m“开始管理我的数据集”

因为我喜欢可视化,我写了一个脚本这个python笔记本将我的数据集的预览渲染成预览版目录, DVC也会追踪。然后我把我的代码和数据推到我的远程存储库中,这样我就可以从任何地方访问它,并与我的合作者共享它。

Git push origin master DVC push -r origin

注意:我跳过了在GitHub / DAGsHub上打开一个存储库并设置远程存储的部分,本教程应该覆盖。

在机器学习项目中使用活数据集

现在是时候将我的数据集用作机器学习项目中的依赖项了。我将无法重新创建我在学校的黄瓜项目,因为我没有访问数据,所以我将用上面心爱的虚构人物代替黄瓜。

我想让我的项目目录看起来像下面这样:

.├──数据│├──预处理│├──原始├──SRC

我想从数据集中导入一个目录,并将其视为文件。我可以通过在存储库内部运行来实现:

mkdir -p data/raw dvc import -o data/raw/images \ //www.kkolawyers.com/Simon/baby-yoda-segmentation-dataset \ data/images dvc import -o data/raw/annotation \ //www.kkolawyers.com/Simon/baby-yoda-segmentation-dataset \ data/annotation

这将专门下载目录图片而且注释从我的数据集存储库中,并保持关于如何继续跟踪在其中所做的更改的信息。关于跟踪更改的更多内容将在后面解释,但这已经差不多了。

在上面的图表中,你可以看到它是如何工作的。箭头指向依赖关系的方向。每次我知道数据集发生了变化,我就运行这个命令

"更新

上面的命令将检查在存储库的跟踪引用中的更改,并将它们拉到我的本地目录。然后我从头开始重新运行我的管道——训练我的模型,保存最好的一个,并提交我的结果。注意,我们可以用这种方法"进口+"更新在另一个项目中获取输出模型作为依赖项。

呼吁合作

首先,我想感谢你的阅读,我希望你喜欢。这个项目还在进行中(但是什么项目不是呢?)因此,如果您在数据集或模型中发现了错误或需要改进的地方,那么就贡献自己的力量吧!分叉存储库、提取数据、推送数据和合并数据是相当容易的。尤其是在数据科学的请求.该过程可以很容易地适应任何分割数据集,所以请随意这样做。

特别感谢亚设而且,我的同学从原始分割项目给了我这个小项目的灵感。

这里有一些结果只是为了好玩!

标签

西蒙Lousky

开发人员@ DAGsHub

太棒了!您已经成功订阅。
太棒了!接下来,完成签出以获得完全访问权限。
欢迎回来!您已经成功登录。
成功!您的帐户已完全激活,您现在可以访问所有内容。