로컬 환경에서 폴더가 분리된 이미지 파일에 따라 ABEJA Platform의 데이터 세트 만들기
18291 단어 ABEJAPlatform기계 학습
입문
본 보도는 다음과 같은 절차를 총결한 보도이다.
사전 준비
데이터 준비
예제로 다운로드된 이미지(757MB).
데이터 Lake 채널 만들기
Console의 DataLake Channel에서 "+ Channel 만들기"를 클릭하여 Channel을 만듭니다.
Stanford Dogs Dataset
생성된 채널의 ID를 유지합니다.
데이터 Lake 채널에 데이터 업로드
SDK를 사용하여 로컬에서 다운로드한 이미지 파일을 업로드합니다.
현재 디렉터리를 다운로드한 이미지 폴더 바로 아래로 이동하여 Python 해석기를 시작합니다.
우선 이미지 파일의 수량을 확인하십시오.
from glob import glob
# load filenames for images
file_names = list(glob('./*/*'))
dir_names = list(glob('./*'))
# print number of images in dataset
print('There are %d total images.' % len(file_names))
모두 20560장이 있습니다.이번에는 그중의 블루계 견종 데이터만 선정하고 싶어요.
# select directories
selected_dirnames = [d for d in dir_names if 'bull' in d]
print(selected_dirnames)
그런 다음 ABEJA Platform SDK에 대한 자격 증명을 설정합니다.콘솔 오른쪽 상단의 계정 이름을 클릭하면 사용자 ID, 개인 액세스 토큰, 제작 ID가 표시됩니다.
크리덴샤르의 user_id는 콘솔에 표시되는 사용자 ID (13자리 숫자) 의 시작 부분에 "user-"를 추가합니다.
# set credential
credential = {
'user_id': 'user-XXXXXXXXXXXXX',
'personal_access_token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}
organization_id='XXXXXXXXXXXXX'
데이터를 데이터 lake에 업로드합니다.방금 기록된 채널 ID를 업로드 대상으로 지정합니다.또한 업로드할 때 서명을 메타데이터로 이미지에 부여합니다.이번 데이터 집합은 폴더 이름이'n02096585-Bostonubull'의 형식이 되어 폴더 이름에서 필요하지 않은 숫자·기호를 삭제하고 대문자로 변환된 것을 라벨 이름으로 한다.
from abeja.datalake import Client as DatalakeClient
# set datalake channel_id
channel_id = 'XXXXXXXXXXXXX'
datalake_client = DatalakeClient(organization_id, credential)
channel = datalake_client.get_channel(channel_id)
import os
from tqdm import tqdm
# upload directory data to datalake
for d in tqdm(selected_dirnames):
# convert to uppercase and remove numbers
label_name = os.path.basename(d).upper()[10:]
metadata = {'label': label_name}
channel.upload_dir(d, metadata=metadata)
이미지가 업로드되었습니다.탭 이름이 메타데이터로 부여된 것도 확인했다.데이터 세트 만들기
그리고 데이터 sets를 만듭니다.
먼저 이미지 분류에 사용할 교사 데이터 탭을 만듭니다.ABEJA Platform은 JSON을 통해 레이블을 관리합니다.
import json
labels = sorted([os.path.basename(d).upper()[10:] for d in selected_dirnames])
labels_and_id = []
label_to_id = {}
for i, name in enumerate(labels):
label_to_id[name] = i
labels_and_id.append({'label_id': i,
'label': name})
# define category name
category_name = 'bull-classificaiton'
# create dataset label
category = {
'category_id': 0,
'name': category_name,
'labels': labels_and_id}
props = {'categories': [category]}
json.dumps(props)
위 명령을 입력하면 다음 레이블이 출력됩니다.{
"categories": [
{
"category_id": 0,
"labels": [
{
"label": "BOSTON_BULL",
"label_id": 0
},
{
"label": "BULL_MASTIFF",
"label_id": 1
},
{
"label": "FRENCH_BULLDOG",
"label_id": 2
},
{
"label": "STAFFORDSHIRE_BULLTERRIER",
"label_id": 3
}
],
"name": "bull-classificaiton"
}
]
}
컨트롤러의 데이터 sets에서 "+ 데이터 sets 만들기"를 누르십시오.데이터 세트의 이름과 유형(이번에는 Classification)을 입력하고 속성에 JSON 탭을 복사하여 붙여넣습니다. Datasets를 만듭니다.
마지막으로 Datalake에 업로드된 데이터를 Datasets에 등록합니다.
방금 만든 데이터 sets의 표지를 등록 목표로 지정합니다.
# create dataset by importing datalake files
from abeja.datasets import Client as DatasetClient
dataset_client = DatasetClient(organization_id, credential)
# define dataset id
dataset_id = 'XXXXXXXXXXXXX'
dataset = dataset_client.get_dataset(dataset_id)
for f in tqdm(channel.list_files()):
data_uri = f.uri
filename = f.metadata['filename']
label = f.metadata['label']
label_id = label_to_id[label]
if os.path.splitext(filename)[1].lower() == '.jpg' or \
os.path.splitext(filename)[1].lower() == '.jpeg':
content_type = 'image/jpeg'
elif os.path.splitext(filename)[1].lower() == '.png':
content_type = 'image/png'
else:
print('{} is invalid file type.'.format(filename))
continue
source_data = [{'data_uri': data_uri, 'data_type': content_type}]
attributes = {'classification': [{'category_id': 0, 'label_id': label_id, 'label': label}]}
dataset.dataset_items.create(source_data, attributes)
교사 데이터 제작 완료!레이블을 클릭하면 각 레이블이 필터링한 이미지를 미리 보기에서 확인할 수 있습니다.
총결산
본고는 ABEJA Platform SDK를 사용하여 로컬 환경에서 폴더를 나누는 이미지 파일에서 ABEJA Platform의 Classification용 데이터 집합을 만드는 절차를 총괄하였다.이번에는 일부 콘솔을 사용하고 SDK를 사용하여 모든 단계를 수행할 수 있습니다.자세한 내용은 공식 문서 를 참조하십시오.
참고 자료
예제 코드(Jupyter Notebook 형식)
https://sdk-spec.abeja.io/datalake/sample_tutorial.html#steps-1-create-a-datalake-channel
ABEJA 플랫폼에 주석 데이터 업로드
https://github.com/abeja-inc/Platform_handson/blob/master/bulldog_classification/notebook/Create_ABEJA_Platform_dataset.ipynb
Reference
이 문제에 관하여(로컬 환경에서 폴더가 분리된 이미지 파일에 따라 ABEJA Platform의 데이터 세트 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yushin_n/items/98fcc788710c0ace3a4a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)