Datumaro는 Dataset Management Framework로, 데이터셋 구축과 변형, 분석과 같은 기능을 지원하는 프레임워크 및 CLI입니다.
Datumaro의 설치는 다음과 같이 진행합니다.
### 가상환경 세팅
$ python -m pip install virtualenv
$ python -m virtualenv venv
$ source venv/bin/activate
$ pip install "datum[default]"
다음 명령어로 datum 프로젝트를 현재 위치한 디렉토리에 생성합니다.
$ datum create [-h] [-o DST_DIR] [--overwrite]
Datumaro가 지원하는 데이터셋의 종류는 아래 링크에서 확인 가능합니다.
https://openvinotoolkit.github.io/datumaro/docs/formats/
Datumaro Project는 각각의 데이터셋에 대한 VCS를 의미하며, Git
과 DVC
를 바탕으로 설계되어 있습니다.
먼저, datum create
명령을 통해 Datumato Project를 생성합니다.
.dvc
, .dvcignore
, .git
, .gitignore
파일이 생성되며 프로젝트가 초기화됩니다.
프로젝트에 추가할 이미지 데이터셋을 가져옵니다.
가져온 이미지 데이터셋의 format을 파악해야 합니다. datum detect-format
명령을 사용합니다.
detect-format
명령은 데이터셋에 존재하는 모든 유형의 format을 보여줍니다.
$ datum detect-format coco_img
Datumaro는 가져온 이미지 데이터셋을 align_celeba
, celeba
, image_dir
, imagenet
총 4가지 형태의 format으로 분류하였습니다.
데이터셋을 Datumaro Project에 등록하기 위해서는 하나의 format으로 통일시켜야 합니다. coco
format으로 데이터를 변환하도록 하겠습니다.
데이터 format 변환에는 datum convert
명령을 사용합니다.
$ datum convert [-h] [-i SOURCE] [-if INPUT_FORMAT] -f OUTPUT_FORMAT
[-o DST_DIR] [--overwrite] [-e FILTER] [--filter-mode FILTER_MODE]
[-- EXTRA_EXPORT_ARGS]
—save-images
옵션을 추가해야 모든 이미지 데이터가 저장됩니다. 해당 옵션을 적용하지 않으면 이미지 데이터가 없는 디렉터리 구조만 생성됩니다.
$ datum convert -i coco_img -if image_dir -f coco -- --save-images
명령을 실행하면 다음과 같이 <project name>-coco
형식의 폴더가 생성되고, 지정한 format에 부합하는 디렉터리 구조로 이미지 데이터셋이 변환됩니다.
현재 프로젝트에 새로 생성된 coco format의 이미지 데이터셋을 추가합니다. datum add
명령어를 사용합니다.
$ datum add [-h] -f FORMAT [-r PATH] [--no-check]
[-p PROJECT_DIR] path [-- EXTRA_FORMAT_ARGS]
새로 생성된 coco 데이터셋 파일에 대한 명령을 실행합니다.
$ datum add -p . -f coco datumaro-test-coco
해당 데이터셋은 프로젝트의 working tree에 추가됩니다. 이제 python 모듈을 통해 데이터셋에 접근할 수 있습니다.
build_targets:
datumaro-test-coco:
parents: []
stages:
- hash: ''
kind: ''
name: root
params: {}
type: source
project:
stages:
- hash: ''
kind: ''
name: root
params: {}
type: project
format_version: 2
sources:
datumaro-test-coco:
format: coco
options:
keep_original_category_ids: false
path: ''
url: /Users/mzc01-jkseo/datumaro-test/datumaro-test-coco
모듈로 접근할 경우 다음과 같이 API로 사용할 수 있습니다.
from datumaro.project import Project
# load a Datumaro project
project = Project('directory')
# create a dataset
dataset = project.working_tree.make_dataset()
# keep only annotated images
dataset.select(lambda item: len(item.annotations) != 0)
# change dataset labels
dataset.transform('remap_labels',
mapping={
'cat': 'dog', # rename cat to dog
'truck': 'car', # rename truck to car
'person': '', # remove this label
},
default='delete') # remove everything else
# iterate over dataset elements
for item in dataset:
print(item.id, item.annotations)
# export the resulting dataset in COCO format
dataset.export('dst/dir', 'coco')
# optionally, release the project resources
project.close()