Skip to content

Latest commit

 

History

History
343 lines (235 loc) · 16.1 KB

README.zh-cn.md

File metadata and controls

343 lines (235 loc) · 16.1 KB


人工智能的数据集格式

PyPI version PyPI version PyPI version GitHub issues codecov

用其他语言阅读这篇文章: English

关于 Hub

Hub 是一种数据集格式,提供简单的 API 以用于创建、存储和协作处理任何规模的 AI 数据集。Hub 的数据布局可在大规模训练模型的同时实现数据的快速转换和流式传输。谷歌、Waymo、红十字会、牛津大学都在使用 Hub。 Hub 包括以下功能:

与存储无关的 API 使用相同的 API 向/从 AWS S3/S3 兼容存储、GCP、Activeloop 云、本地存储以及内存中上传、下载和流式传输数据集。
压缩存储 以原生压缩方式存储图像、音频和视频,仅在需要时解压缩,例如在训练模型时。
惰性 NumPy 类索引 将 S3 或 GCP 数据集视为系统内存中 NumPy 数组的集合。对它们进行切片、索引或迭代。只会下载您要求的字节!
数据集版本控制 提交、创建分支、切换分支 - 您在代码存储库中已经熟悉的概念现在也可以应用于您的数据集!
与深度学习框架的集成 Hub 带有 Pytorch 和 Tensorflow 的内置集成。用几行代码训练你的模型——我们甚至负责数据集洗牌。:)
分布式转换 使用多线程、多处理或我们的内置Ray集成快速在您的数据集进行转换操作。
在几秒钟内可用100 多个最流行的图像、视频和音频数据集 Hub 社区已经上传100 多个图像、视频和音频数据集等 例如 MNIST, COCO, ImageNet, CIFAR, GTZAN 等等.
Activeloop平台提供即时可视化支持 Hub 数据集在Activeloop 平台 中通过边界框、掩码、注释等立即实现可视化(见下文).

Hub 入门

🚀 如何安装 Hub

Hub 是用 100% Python 编写的,可以使用 pip 快速安装。

pip3 install hub

默认情况下,Hub 不安装音频、视频和谷歌云(GCS)支持的依赖项。它们可以使用以下方式安装:

pip3 install hub[video]  -> 通过 pyav 支持视频
pip3 install hub[gcp]    -> 通过 google-* 依赖支持GCS
pip3 install hub[all]    -> 安装所有东西 - 音频、视频和GCS支持

🧠 在 Hub 数据集上训练 PyTorch 模型

加载 CIFAR 10,这是 Hub 中现成的数据集之一:

import hub
import torch
from torchvision import transforms, models

ds = hub.load('hub://activeloop/cifar10-train')

检查数据集中的张量:

ds.tensors.keys()    # dict_keys(['images', 'labels'])
ds.labels[0].numpy() # array([6], dtype=uint32)

在 CIFAR 10 数据集上训练 PyTorch 模型,无需下载

首先,为图像定义一个转换并使用 Hub 的内置 PyTorch 单行数据加载器将数据连接到计算:

tform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]),
])

hub_loader = ds.pytorch(num_workers=0, batch_size=4, transform={
                        'images': tform, 'labels': None}, shuffle=True)

接下来,定义模型、损失和优化器:

net = models.resnet18(pretrained=False)
net.fc = torch.nn.Linear(net.fc.in_features, len(ds.labels.info.class_names))
    
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

最后,2 个 epoch 的训练循环:

for epoch in range(2):
    running_loss = 0.0
    for i, data in enumerate(hub_loader):
        images, labels = data['images'], data['labels']
        
        # zero the parameter gradients
        optimizer.zero_grad()

        # forward + backward + optimize
        outputs = net(images)
        loss = criterion(outputs, labels.reshape(-1))
        loss.backward()
        optimizer.step()
        
        # print statistics
        running_loss += loss.item()
        if i % 100 == 99:    # print every 100 mini-batches
            print('[%d, %5d] loss: %.3f' %
                (epoch + 1, i + 1, running_loss / 100))
            running_loss = 0.0

🏗️ 如何创建一个 Hub 数据集

可以在不同地址(存储提供商)创建 hub 数据集。这就是他们每个路径:

存储提供商 示例路径
Activeloop 云 hub://user_name/dataset_name
AWS S3 / S3 兼容 s3://bucket_name/dataset_name
GCP gcp://bucket_name/dataset_name
本地存储 path to local directory
内存 mem://dataset_name

让我们在 Activeloop 云中创建一个数据集。Activeloop 云为每位用户提供高达 300 GB 的免费存储空间(更多信息请点击此处)。如果您还没有账号,请从终端使用activeloop register 创建一个新帐户。系统将要求您输入用户名、电子邮件 ID 和密码。您在此处输入的用户名将用于数据集路径。

$ activeloop register
Enter your details. Your password must be at least 6 characters long.
Username:
Email:
Password:

在 Activeloop Cloud 中初始化一个空数据集:

import hub

ds = hub.empty("hub://<USERNAME>/test-dataset")

接下来,创建一个张量来保存我们刚刚初始化的数据集中的图像:

images = ds.create_tensor("images", htype="image", sample_compression="jpg")

假设您有一个图像文件路径列表,让我们将它们上传到数据集:

image_paths = ...
with ds:
    for image_path in image_paths:
        image = hub.read(image_path)
        ds.images.append(image)

或者,您也可以上传 numpy 数组。由于 images 张量是使用 sample_compression="jpg" 创建的,数组将使用 jpeg 压缩进行压缩。

import numpy as np

with ds:
    for _ in range(1000):  # 1000 random images
        random_image = np.random.randint(0, 256, (100, 100, 3))  # 100x100 image with 3 channels
        ds.images.append(random_image)

🚀 如何加载 Hub 数据集

您可以使用一行代码加载刚刚创建的数据集:

import hub

ds = hub.load("hub://<USERNAME>/test-dataset")

您还可以访问 Hub 格式的 100 多个图像、视频和音频数据集,而不仅仅是您创建的那些。以下是加载 Objectron Bikes 数据集的方法:

import hub

ds = hub.load('hub://activeloop/objectron_bike_train')

要以 numpy 格式获取 Objectron Bikes 数据集中的第一张图像:

image_arr = ds.image[0].numpy()

📚 文档

可以在我们的文档页面上找到入门指南、示例、教程、API 参考和其他有用信息。

🎓 对于学生和教育工作者

Hub 用户可以通过与 Activeloop 平台的免费集成来访问和可视化各种流行的数据集。用户还可以创建和存储自己的数据集,并将其提供给公众。高达 300 GB 的免费存储空间可供学生和教育工作者使用:

Activeloop 托管的公共数据集的存储 200GB 免费
Activeloop 托管的私有数据集的存储 100GB 免费

👩‍💻 与熟悉工具的比较

Activeloop Hub vs DVC

Hub 和 DVC 为数据提供类似于 git 的数据集版本控制,但它们存储数据的方法有很大不同。Hub 将数据转换并存储为分块压缩数组,从而可以快速流式传输到 ML 模型,而 DVC 在存储在效率较低的传统文件结构中的数据之上运行。当数据集由许多文件(即许多图像)组成时,与 DVC 的传统文件结构相比,Hub 格式使数据集版本控制更加容易。另一个区别是 DVC 主要使用命令行界面,而 Hub 是 Python 包。最后,Hub 提供了一个 API,可以轻松地将数据集连接到 ML 框架和其他常见的 ML 工具,并通过Activeloop 的可视化工具实现即时数据集可视化.

Activeloop Hub vs TensorFlow 数据集 (TFDS)

Hub 和 TFDS 将流行的数据集无缝连接到 ML 框架。Hub 数据集与 PyTorch 和 TensorFlow 兼容,而 TFDS 仅与 TensorFlow 兼容。Hub 和 TFDS 之间的一个关键区别在于,Hub 数据集是为从云端流式传输而设计的,而 TFDS 必须在使用前在本地下载。因此使用 Hub 可以直接从 TensorFlow 数据集导入数据集,并将它们流式传输到 PyTorch 或 TensorFlow。除了提供对流行的公开数据集的访问之外,Hub 还提供强大的工具来创建自定义数据集,将它们存储在各种云存储提供商上,并通过简单的 API 与他人协作。TFDS 主要专注于让公众轻松访问常用数据集,而自定义数据集的管理不是主要关注点。一个详细的对比介绍可以在这里看到.

Activeloop Hub vs HuggingFace Hub 和 HuggingFace 都提供对流行数据集的访问,但 Hub 主要专注于计算机视觉,而 HuggingFace 专注于自然语言处理。HuggingFace 变换和其他 NLP 计算工具与 Hub 提供的功能不同。
Activeloop Hub vs WebDatasets Hub 和 WebDatasets 都提供跨网络的快速数据流。它们具有几乎相同的传输速度,因为底层网络请求和数据结构非常相似。但是,Hub 提供了卓越的随机访问和改组,其简单的 API 是在 python 中而不是命令行中,并且 Hub 可以对数据集进行简单的索引和修改,而无需重新创建它。

社区

加入我们的 Slack 社区,了解有关使用 Hub 进行非结构化数据集管理的更多信息,并从 Activeloop 团队和其他用户那里获得帮助。

通过完成我们的 3 分钟调查,我们希望得到您的反馈。

一如既往,感谢我们出色的贡献者!

使用contributors-img制作.

请阅读 CONTRIBUTING.md 开始为 Hub 做出贡献

自述文件徽章

使用Hub?添加一个自述文件徽章让大家知道:

hub

[![hub](https://img.shields.io/badge/powered%20by-hub%20-ff5a1f.svg)](https://github.com/activeloopai/Hub)

免责声明

数据集许可证

Hub 用户可以访问各种公开可用的数据集。我们不托管或分发这些数据集,不保证它们的质量或公平性,或声称您拥有使用这些数据集的许可。您有责任确定您是否有权使用其许可下的数据集。

如果您是数据集所有者并且不希望您的数据集包含在此库中,请通过GitHub issue与我们联系。感谢您对 ML 社区的贡献!

使用情况跟踪

默认情况下,我们使用 Bugout 收集使用数据(这是执行此操作的code). 它不收集匿名 IP 地址数据以外的用户数据,并且只记录 Hub 库自己的操作。这有助于我们的团队了解该工具的使用方式以及如何构建对您而言重要的功能!在您注册 Activeloop 后,数据不再是匿名的。您始终可以使用以下 CLI 命令选择退出报告:

activeloop reporting --off

致谢

这项技术的灵感来自我们在普林斯顿大学的研究工作。我们要感谢 William Silversmith @SeungLab 提供出色的cloud-volume 工具.