- 概要
- スタートアップガイド
- ユーザガイド
-
リファレンス
-
ABEJA Platform CLI
- CONFIG COMMAND
- DATALAKE COMMAND
- DATASET COMMAND
- TRAINING COMMAND
-
MODEL COMMAND
- check-endpoint-image
- check-endpoint-json
- create-deployment
- create-endpoint
- create-model
- create-service
- create-trigger
- create-version
- delete-deployment
- delete-endpoint
- delete-model
- delete-service
- delete-version
- describe-deployments
- describe-endpoints
- describe-models
- describe-service-logs
- describe-services
- describe-versions
- download-versions
- run-local
- run-local-server
- start-service
- stop-service
- submit-run
- update-endpoint
- startapp command
-
ABEJA Platform CLI
- FAQ
- Appendix
アノテーション済みデータのアップロード
公開されているベンチマークデータセットや、過去にアノテーションしたデータをABEJA Platformにアップロードする手順について説明します。
事前準備
Datalakeチャンネルの作成とデータのアップロード
まず、Datalakeチャンネルを作成します。
from abeja.datalake import Client as DatalakeClient
from abeja.datalake.storage_type import StorageType
ABEJA_ORGANIZATION_ID = 'XXXXXXXXXXXXXX'
ABEJA_PLATFORM_USER_ID = 'XXXXXXXXXXXXXX'
ABEJA_PLATFORM_TOKEN = 'XXXXXXXXXXXXXX'
credential = {
'user_id': ABEJA_PLATFORM_USER_ID,
'personal_access_token': ABEJA_PLATFORM_TOKEN
}
datalake_client = DatalakeClient(organization_id=ABEJA_ORGANIZATION_ID, credential=credential)
name = 'XXXXXXXXXXXXXXXXXXX'
description = 'XXXXXXXXXXXXXXXXXXXXXXX'
channel = datalake_client.channels.create(name, description, StorageType.DATALAKE.value)
次に、データをアップロードします。
channel = datalake_client.get_channel(channel.channel_id)
file = channel.upload_file('cat.jpg')
Datasetの作成(Classification編)
Datasetの箱は以下のように作成します。最初にスキーマ(クラスの情報)を定義します。ここでは、dog/catの2クラスの分類問題とします。マルチクラス分類の場合は、categories
のリストに複数のカテゴリを追加します。
from abeja.datasets import Client as DatasetClient
datasets_client = DatasetClient(organization_id=organization_id, credential=credential)
labels = [{"label_id": 0, "label": "dog"}, {"label_id": 1, "label": "cat"}]
category = {'labels': labels, 'category_id': 0, 'name': 'cats_dogs'}
props = {"categories": [category]}
dataset = datasets_client.datasets.create(name='XXXXXXXXXXXXX', type='classification', props=props)
アノテーションデータは以下のようにアップロードします。
source_data = [
{
'data_type': 'image/jpeg',
'data_uri': 'datalake://{}/{}'.format(channel.channel_id, file.file_id),
}
]
data = {
'category_id': 0,
'label_id': 1
}
attributes = {'classification': [data]}
dataset_item = dataset.dataset_items.create(source_data=source_data, attributes=attributes)
Datasetの作成(Detection編)
Detectionの場合は、以下のようになります。スキーマとしては先ほどと同様に犬と猫の2値分類とします。type
をdetection
に変更します。
from abeja.datasets import Client as DatasetClient
datasets_client = DatasetClient(organization_id=organization_id, credential=credential)
labels = [{"label_id": 0, "label": "dog"}, {"label_id": 1, "label": "cat"}]
category = {'labels': labels, 'category_id': 0, 'name': 'cats_dogs'}
props = {"categories": [category]}
dataset = datasets_client.datasets.create(name='XXXXXXXXXXXXX', type='detection', props=props)
アノテーションデータは以下のようにアップロードします。
source_data = [
{
'data_type': 'image/jpeg',
'data_uri': 'datalake://{}/{}'.format(channel.channel_id, file.file_id),
}
]
rect = {'xmin': 200, 'ymin': 0, 'xmax': 1000, 'ymax': 900}
det1 = {
'category_id': 0,
'label_id': 1,
'rect': rect
}
attributes = {'detection': [det1]}
dataset_item = dataset.dataset_items.create(source_data=source_data, attributes=attributes)
Datasetの作成(Custom編)
Classification/Detectionだけではなく、自由な形式のアノテーションを利用できます。この場合、type
をcustom
にします。
from abeja.datasets import Client as DatasetClient
datasets_client = DatasetClient(organization_id=organization_id, credential=credential)
labels = [{"label_id": 0, "label": "dog"}, {"label_id": 1, "label": "cat"}]
category = {'labels': labels, 'category_id': 0, 'name': 'cats_dogs'}
props = {"categories": [category]}
dataset = datasets_client.datasets.create(name='XXXXXXXXXXXXX', type='custom', props=props)
アノテーションデータは以下のようにアップロードします。
source_data = [
{
'data_type': 'image/jpeg',
'data_uri': 'datalake://{}/{}'.format(channel.channel_id, file.file_id),
}
]
d = {
'category_id': 0,
'label_id': 1,
'text': 'nyaan'
}
attributes = {'custom': [d]}
dataset_item = dataset.dataset_items.create(source_data=source_data, attributes=attributes)
データの確認
最後にアップロードしたデータを確認してみましょう。
from abeja.datasets import Client as DatasetClient
client = DatasetClient(organization_id=organization_id, credential=credential)
dataset = client.get_dataset(XXXXXXXXXXXX)
dataset_list = list(dataset.dataset_items.list(prefetch=False))
d = dataset_list[0]
file_content = d.source_data[0].get_content()
file_like_object = io.BytesIO(file_content)
img = Image.open(file_like_object)
annotation = d.attributes