Activeloop的Hub是一个开源Python软件包,可将数据排列在类似Numpy的数组中。它与Tensorflow和PyTorch等深度学习框架无缝集成,可加快GPU处理和训练。我们可以使用Hub API来更新数据、可视化数据以及创建机器学习管道。
Hub让我们可以存储图像、音频、视频和时间序列数据,又能做到访问起来很快。数据可以存储在GCS/S3存储桶、本地存储或Activeloop云上。数据可直接用于训练Pytorch模型,这样您无需构建数据管道。Hub还提供数据版本控制、数据集搜索查询和分布式工作负载。
我在使用Hub后觉得很棒,能够在几分钟内创建数据并将数据推送到云端。本文介绍如何使用Hub来创建和管理数据集。
- 在Activeloop云上初始化数据集
- 处理图像
- 将数据推送到云端
- 数据版本控制
- 数据可视化
Activeloop存储
Activeloop为开源数据集和私有数据集提供免费存储。您还可以通过推荐介绍获得多达 200 GB的免费存储空间。Activeloop的Hub与Database for AI对接,让我们可以使用标签可视化数据集,复杂的搜索查询让我们可以高效地分析数据。该平台还含有100多个图像分割、分类和对象检测方面的数据集。
要创建帐户,您可以使用Activeloop网站来注册,或者输入“!activeloop register”。该命令将要求您添加用户名、密码和电子邮件。成功创建帐户后,我们将使用“!activeloop login” 来登录。现在,我们可以直接从本地机器创建和管理云数据集。
如果您使用Jupyter Notebook,请使用“!”,否则直接在CLI中添加没有!的命令。
!activeloop register
!activeloop login -u -p
初始化Hub数据集
在本教程中,我们将使用采用(CC BY 4.0)的Kaggle数据集Multi-class Weather。该数据集含有四个基于天气分类的文件夹;Sunrise、Shunshine、Rain和Cloudy。
首先,我们需要安装hub和kaggle软件包。kaggle软件包将允许我们直接下载数据集并解压缩。
!pip install hub kaggle
!kaggle datasets download -d pratik2901/multiclass-weather-dataset
!unzip multiclass-weather-dataset
下一步,我们将在Activeloop云上创建HUB数据集。数据集函数还可以创建新数据集或访问旧数据集。您还可以提供AWS存储桶地址,以便在亚马逊服务器上创建数据集。想在Activeloop上创建数据集,我们需要传递含有用户名和数据集名称的URL。
“hub://<username>/<datasetname>”
import hub
ds = hub.dataset('hub://kingabzpro/muticlass-weather-dataset')
数据预处理
在将数据处理成hub格式之前,我们需要准备数据。下面的代码将提取文件夹名称并将其存储在“class_names”变量中。在第二部分,我们将创建数据集文件夹中可用的文件列表。
from PIL import Image
import numpy as np
import os
dataset_folder = '/work/multiclass-weather-dataset/Multi-class Weather Dataset'
class_names = os.listdir(dataset_folder)
files_list = []
for dirpath, dirnames, filenames in os.walk(dataset_folder):
for filename in filenames:
files_list.append(os.path.join(dirpath, filename))
file_to_hub函数接受三个参数:文件名、数据集和类名。它从每个图像中提取标签,并将它们转换成整数。它还将图像文件转换成类似Numpy的数组,并将它们附加到tensor。就这个项目而言,我们只需要两个tensor,一个用于标签,一个用于图像数据。
compute
def file_to_hub(file_name, sample_out, class_names):
## First two arguments are always default arguments containing:
# 1st argument is an element of the input iterable (list, dataset, array,...)
# 2nd argument is a dataset sample
# Other arguments are optional
# Find the label number corresponding to the file
label_text = os.path.basename(os.path.dirname(file_name))
label_num = class_names.index(label_text)
# Append the label and image to the output sample
sample_out.labels.append(np.uint32(label_num))
sample_out.images.append(hub.read(file_name))
return sample_out
.
不妨创建一个带有“png”压缩的图像tensor和一个简单的标签tensor。确保tensor的名称应与我们在file_to_hub函数中提到的名称相似。想了解有关tensor的更多信息,请参阅《API摘要 - Hub 2.0》:https://docs.activeloop.ai/api-basics#creating-tensors-and-adding-data。
最后,我们将通过提供files_lists、hub数据集实例“ds”和class_names来运行file_to_hub函数。由于需要转换数据并推送到云端,这需要几分钟。
with ds:
ds.create_tensor('images', htype = 'image', sample_compression = 'png')
ds.create_tensor('labels', htype = 'class_label', class_names = class_names)
file_to_hub(class_names=class_names).eval(files_list, ds, num_workers = 2)
数据可视化
现在该数据集在multiclass-weather-dataset上公开可用。我们可以使用标签探索数据集或添加描述,以便其他人可以了解有关许可证信息和数据分布的更多信息。Activeloop不断添加新功能,以改善查看体验。
我们还可以使用Python API来访问数据集。我们将使用PIL的Image函数将数组转换成图像,并将其显示在Jupyter笔记本中。
Image.fromarray(ds["images"][0].numpy())
为了访问标签,我们将使用含有分类信息的class_names,并使用“标签”tensor来显示标签。
class_names = ds["labels"].info.class_names
class_names[ds["labels"][0].numpy()[0]]
>>> 'Cloudy'
提交
我们还可以创建不同的分支,并管理不同的版本,比如Git和DVC。在本节中,我们将更新class_names信息,并使用该信息创建提交。
ds.labels.info.update(class_names = class_names)
ds.commit("Class names added")
>>> '455ec7d2b49a36c14f3d80d0879369c4d0a70143'
正如我们所看到的,日志显示我们已成功地将更改提交到主分支。想了解有关版本控制的更多信息,请参阅《数据集版本控制 - Hub 2.0》:https://docs.activeloop.ai/getting-started/step-8-dataset-version-control。
log = ds.log()
---------------
Hub Version Log
---------------
Current Branch: main
Commit : 455ec7d2b49a36c14f3d80d0879369c4d0a70143 (main)
Author : kingabzpro
Time : 2022-01-31 08:32:08
Message: Class names added
您还可以使用Hub UI查看所有分支和提交。
原文A New Way of Managing Deep Learning Datasets,作者:Abid Ali Awan