一种管理深度学习数据集的新方法

译文
人工智能 深度学习 开源
本文介绍了使用Activeloop的Hub 2.0实现图像、音频和视频数据集的创建、版本控制、查询以及可视化。

Hub简介

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,一个用于标签,一个用于图像数据。

@hub.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


责任编辑:华轩 来源: 51CTO
相关推荐

2022-11-22 11:18:38

Java虚拟线程

2022-03-10 12:16:14

侧信道内存攻击网络攻击

2016-12-26 18:39:32

Android应用进程存活率

2021-02-18 18:13:34

LinuxARM树莓派

2016-12-26 18:25:29

Android应用进程存活率

2018-10-07 07:00:59

2023-08-08 11:28:06

企业首席执行官

2015-08-21 09:14:40

大数据

2021-09-26 10:49:27

计算机互联网 技术

2024-11-05 08:19:11

深度学习神经网络机器学习

2021-09-27 10:12:42

欺骗防御rMTD网络攻击

2022-05-26 10:57:51

机器人人工智能

2023-07-06 15:29:52

数据中心能源回收

2021-09-08 10:55:05

云计算云存储数据存储

2019-07-12 13:50:36

物联网大数据安全

2022-07-07 10:47:16

IngressKubernetes

2011-07-15 10:48:20

英特尔谷歌数据中心

2010-04-01 09:30:57

2024-01-23 17:33:36

2024-10-23 19:47:54

点赞
收藏

51CTO技术栈公众号