Datumaro 개념 및 실습

서준교·2022년 7월 27일
0
post-thumbnail

1. Datumaro란?

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/

2. Datumaro 용어 정리

  • Project - 데이터셋과 플러그인, 모델 및 메타 데이터의 집합
  • Dataset - 미디어 파일 또는 annotation으로 구성된 데이터의 집합
  • Dataset item - 데이터셋을 구성하는 각각의 데이터 (annotation 포함)

3. Datumaro 실습

Datumaro Project는 각각의 데이터셋에 대한 VCS를 의미하며, GitDVC 를 바탕으로 설계되어 있습니다.

먼저, 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()
profile
매일 성장하는 개발자가 되고 싶습니다. 😊

0개의 댓글