Hub에서 제공하는 Data 2.0을 소개합니다.
Hub는 PyTorch/TensorFlow 등의 프레임워크에서 데이터에 접근 & 관리하고 버전관리까지 할 수 있는 가장 빠른 방법이며, 로컬이나 클라우드 어디서든 사용 가능합니다.
또한 언제든 확장 가능한 데이터 파이프라인입니다.
[ English | Français | 简体中文 | Türkçe | 한글 | Bahasa Indonesia] | Русский]
소프트웨어 2.0 시대에 맞춰, Hub는 데이터 2.0을 제공합니다. 대부분의 데이터 사이언티스트와 인공지능 연구자들은 모델을 학습시키는 것 보다 데이터 관리와 전처리에 대부분의 시간과 노력을 투자하는데, Hub를 통해 이 문제를 해결할 수 있습니다. 저희는 여러분의 데이터셋들을 petabyte 규모까지도 numpy 형태의 어레이로 클라우드에 저장하여 어떤 컴퓨터에서든 원활하게 접근하고 작업할 수 있게끔 합니다. Hub를 이용하면 이미지, 텍스트, 오디오, 비디오 등의 데이터들을 미리 다운로드하지 않고도 로컬에 저장된 것처럼 빠르게 접근하고, 또 활용할 수 있습니다. 또한 팀원들끼리 하나의 데이터셋을 동기화하여 사용할 수도 있습니다.
Hub 는 Waymo, Red Cross, World Resources Institute, Omdena 등에서 이미 사용되고 있습니다.
- 버전 관리가 가능한 대규모의 데이터셋을 저장하고 검색할 수 있습니다.
- Google Docs를 쓸 때처럼 다수의 데이터 사이언티스트들이 서로 간섭받지 않으면서 동일한 데이터셋을 가지고 실시간 협업할 수 있습니다.
- 동시에 여러 기기에서 접속할 수 있습니다.
- Activeloop 뿐만아니라 로컬, 구글클라우드, S3, Azure 등 다양한 플랫폼에 배포할 수 있습니다. (Activeloop가 default이며, 또한 무료입니다!)
- Numpy, Dask, Ray, PyTorch, or TensorFlow 등의 다양한 머신러닝 프레임워크들과 연동하는 것이 가능합니다.
- 저장되는 어레이의 크기는 자유입니다. 100k by 100k짜리 이미지도 저장 가능합니다!
- 저장되는 어레이들의 shape또한 제각각으로 할 수 있습니다.
- 특별한 조작 없이도 빠르게 저장된 데이터들을 Visualize할 수 있습니다.
app.activeloop.ai (무료 tool)를 이용하여 Hub에 업로드된 데이터를 visualize한 결과.
여러분의 개인 데이터나 공용 데이터를 로컬 또는 아무 클라우드에서나 사용할 수 있습니다.
공용 데이터셋을 로드하려면, 그걸 활용하기 위해 코드를 작성해야 하고, 또 그러기 위해서는 API에 접근하고 사용법을 익히는 데 많은 시간이 소요되는 것이 현실입니다. Hub를 이용하면 단 2줄의 코드만으로 단 3분 안에 필요로 하시는 데이터셋을 준비하실 수 있습니다.
pip3 install hub
여러분은 Hub를 이용하여 몇 줄의 간단한 코드만으로 구성된 절차를 거쳐서 공용 데이터셋에 접근하실 수 있습니다. 예를 들어 MNIST database의 첫 1000개의 이미지들을 numpy array 포맷으로 불러오고 싶으시다면 다음과 같은 코드를 작성하시면 됩니다:
from hub import Dataset
mnist = Dataset("activeloop/mnist") # loading the MNIST data lazily
# saving time with *compute* to retrieve just the necessary data
mnist["image"][0:1000].compute()
app.activeloop.ai에 방문하시면 MNIST 말고도 다양한 다른 공용 데이터셋들에 접근하실 수 있는 링크도 얻으실 수 있습니다.
데이터를 로드해서 여러분의 모델을 바로 학습시킬 수 있습니다. Hub는 Pytorch, Tensorflow와 연동이 가능하고, 데이터 형식 간의 변환 또한 쉽게 가능합니다. 다음은 Pytorch에서 hub를 이용한 예시입니다:
from hub import Dataset
import torch
mnist = Dataset("activeloop/mnist")
# converting MNIST to PyTorch format
mnist = mnist.to_pytorch(lambda x: (x["image"], x["label"]))
train_loader = torch.utils.data.DataLoader(mnist, batch_size=1, num_workers=0)
for image, label in train_loader:
# Training loop here
만약 여러분이 기존 방식처럼 로컬에서 여러분만의 데이터셋을 사용하고 싶으시다면, 다음과 같이 데이터셋을 생성하실 수도 있습니다:
from hub import Dataset, schema
import numpy as np
ds = Dataset(
"./data/dataset_name", # file path to the dataset
shape = (4,), # follows numpy shape convention
mode = "w+", # reading & writing mode
schema = { # named blobs of data that may specify types
# Tensor is a generic structure that can contain any type of data
"image": schema.Tensor((512, 512), dtype="float"),
"label": schema.Tensor((512, 512), dtype="float"),
}
)
# filling the data containers with data (here - zeroes to initialize)
ds["image"][:] = np.zeros((4, 512, 512))
ds["label"][:] = np.zeros((4, 512, 512))
ds.flush() # executing the creation of the dataset
로컬 데이터 뿐만 아니라 s3://bucket/path
, gcs://bucket/path
또는 Azure 경로까지 정해주실 수 있습니다. 이곳에서 클라우드에 저장된 데이터를 다루는 법에 대한 추가적인 정보를 얻으실 수 있습니다.
또한, 공개된 공용 데이터셋인데 Hub에서 그 데이터셋을 찾으실 수 없는 경우에는, 저희에게 요청하실 수 있습니다. 저희가 가능한 한 모두가 사용 가능할 수 있도록 최선을 다하겠습니다.
- Activeloop에 무료 계정을 생성하고 로컬에서 인증합니다:
activeloop register
activeloop login
# alternatively, add username and password as arguments (use on platforms like Kaggle)
activeloop login -u username -p password
- 데이터셋을 생성한 후 이름을 정하고, 당신의 계정에 업로드합니다. 예시는 다음과 같습니다:
from hub import Dataset, schema
import numpy as np
ds = Dataset(
"username/dataset_name",
shape = (4,),
mode = "w+",
schema = {
"image": schema.Tensor((512, 512), dtype="float"),
"label": schema.Tensor((512, 512), dtype="float"),
}
)
ds["image"][:] = np.zeros((4, 512, 512))
ds["label"][:] = np.zeros((4, 512, 512))
ds.flush()
- 전 세계 어디에서나 커맨드 라인 입력이 가능한 어떤 기기로든 당신의 데이터셋에 다음과 같이 접근하실 수 있습니다:
from hub import Dataset
ds = Dataset("username/dataset_name")
대규모 데이터셋을 업로드하거나 다양한 변환을 적용하는 등 더 복잡한 작업을 수행하기를 원하신다면, 저희의 공식 문서를 확인해주시기 바랍니다.
examples 경로에는 Hub에 대해 대략적으로 배워볼 수 있는 예제들이 주피터 노트북 형태로 제공되고 있습니다. 아래는 몇몇 유용한 노트들의 리스트입니다.
노트 | 설명 | |
---|---|---|
Uploading Images | Hub에 이미지를 업로드하고 저장하는 방법에 관한 소개입니다. | |
Uploading Dataframes | 데이터프레임을 Hub에 업로드하는 방법에 관한 소개입니다. | |
Uploading Audio | Hub에서 음성 데이터를 다루는 방법에 관한 설명입니다. | |
Retrieving Remote Data | 데이터를 검색하는 방법에 관한 설명입니다. | |
Transforming Data | Hub를 이용하여 데이터를 변환하는 방법에 관한 간략한 소개입니다. | |
Dynamic Tensors | 데이터의 shape이나 size를 다루는 방법에 관한 내용입니다. | |
NLP using Hub | 실제로 CoLA 데이터셋을 이용해 BERT 모델을 Fine Tune하는 방법에 관한 예제입니다. |
- 위성과 드론 이미지: 확장성있는 항로를 통해 농사의 효율 높이기, 인도의 경제 복지 지도 만들기, 적십자와 함께 케냐의 메뚜기 문제 해결하기
- 의료 영상: MRI나 X-Ray와 같은 볼륨 이미지
- 자율주행 자동차: Radar, 3D LIDAR, Point Cloud, Semantic Segmentation, Video Objects
- 상업: 셀프 계산대 데이터셋
- 미디어: 영상, 비디오, 오디오 데이터
Hub와 유사한 기능을 제공하는 데이터셋 관리 라이브러리가 꽤 존재합니다. 실제로 상당수의 사용자들이 PyTorch나 Tensorflow Dataset들을 Hub로 마이그레이션합니다. 다음은 여러분이 Hub로 오시게 되면 겪게 되실 몇 가지 놀라운 차이점들입니다:
- 데이터셋이 chunk의 형태로 제공되기 때문에 그것들을 한꺼번에 미리 다운로드한 후에 사용할 필요 없이 원격으로 스트리밍하실 수 있습니다.
- 데이터의 필요한 부분만이 평가되기 때문에, 여러분은 즉각적으로 데이터를 활용하실 수 있습니다.
- 여러분이 보유하신 메모리보다 큰 규모의 데이터셋을 저장하고 활용하실 수 있습니다.
- 당신의 데이터셋을 다양한 기기들에 걸쳐 다수의 사용자들과 함께 협업하고 버전도 관리할 수 있습니다.
- Visualization Tool과 같이 여러분이 데이터를 쉽게 이해하실 수 있게 돕는 장치들을 갖출 수 있게 됩니다.
- 다수의 학습 라이브러리를 위해서 단 한번만 데이터를 준비하면 됩니다. (예를 들어, 여러분은 PyTorch와 Tensorflow 각각을 이용해서 학습을 하기 위해 동일한 데이터셋을 사용하실 수 있습니다.)
데이터셋 관리 및 전처리에 관한 최신 정보를 얻고 싶으시거나 Activeloop 팀 또는 다른 사용자들로부터 도움을 받고 싶으시다면 저희 Slack 커뮤니티에 참여하세요!
저희 컨트리뷰터 분들께 항상 진심으로 감사드립니다!
contributors-img를 통해 만든 이미지입니다.
Hub에 기여하고 싶으시다면 CONTRIBUTING.md 문서를 참고해주세요.
Activeloop의 Hub 포맷은 여러분께서 적은 리소스로 빠른 인퍼런스 속도를 달성할 수 있게끔 해드립니다. 저희는 30개가 넘는 유명한 데이터셋을 미이 보유중입니다. 대표적으로는 다음과 같습니다:
- COCO
- CIFAR-10
- PASCAL VOC
- Cars196
- KITTI
- EuroSAT
- Caltech-UCSD Birds 200
- Food101
위 리스트와 저희 visualizer web app 링크를 확인하시고 해당 데이터셋들을 여러분의 모델을 학습시키는데 바로 활용해보세요!
Hub를 사용하고 계시다면 모두가 알 수 있게 README에 저희 뱃지를 추가해주세요:
[![hub](https://img.shields.io/badge/powered%20by-hub%20-ff5a1f.svg)](https://github.com/activeloopai/Hub)
다른 데이터셋 관리 패키지들과 마찬가지로 Hub
는 공용 데이터셋을 다운로드하고 준비할 수 있게 하는 유틸리티 라이브러리입니다. 당사는 이러한 데이터셋들을 호스팅 또는 배포하는 것이 아니며, 품질 또는 공정성을 보증하거나 각 데이터셋의 라이선스가 있음을 주장하지 않습니다. 데이터셋 사용 권한에 관한 라이선스를 확인하는 것은 사용자의 책임입니다.
만약 당신이 어떤 데이터셋의 소유자이고 데이터셋의 부가 설명, 인용 정보 등을 추가하고 싶거나 또는 본 라이브러리에 해당 데이터셋이 포함되는 것을 원치 않으실 경우 GitHub issue를 통해 알려주시길 바랍니다. ML 커뮤니티에 대한 당신의 기여에 깊은 감사의 말씀을 드립니다.
이 기술은 Princeton University에서의 경험에서 영감을 받아 시작되었으며, William Silversmith @SeungLab에게 그의 멋진 cloud-volume 툴에 대해 감사를 표하고 싶습니다. 또한 저희는 Zarr의 헤비 유저이며 그들의 커뮤니티가 이러한 기반을 마련해 준 점에 대해서도 큰 감사의 말씀 드립니다.