Superb AI Suite CLI 가이드 따라하기

7935 단어 MLML

목차

  • 준비물
  • 참고
  • 설치
  • account (teamname)의 API Key 얻기
  • suite-cli에 내 기본계정 설정하기
  • account의 프로젝트 목록 보기
  • 이미지만 올리기
  • 라벨 json만 올리기 ( + result key 오류 해결하기 )
  • 이미지와 라벨 json 같이 올리기
  • 로그보기

준비물

  • python
  • pip

참고자료

슈퍼브에이아이 가이드 내용을 그대로 따라했다.
이 CLI 프로그램은 깃허브에도 올라가있다.

설치

pip install spb-cli

account (teamname)의 API Key 얻기

로그인 - Settings - Advanced - Copy 로 API Key 를 복사할 수 있다.
아직 Key를 만들지 않았다면, 마찬가지로 이 페이지에서 생성할 수 있다.

suite-cli에 내 기본계정 설정하기

spb configure를 입력한 뒤, account (teamname)과 API Key를 입력하면 계정 설정을 저장할 수 있다.

이후 spb configure --list를 하면 입력해둔 계정 정보를 볼 수 있다.

실행하면 아래와 같은 결과가 된다.

wonjinyi@wonjinYi:~$ spb configure
Suite Account Name: wonjin
Access Key: abcdabcdabcdabcad123456abcd
Profile default is counfigured with account name 'wonjin'.

wonjinyi@wonjinYi:~$ spb configure --list
[default]
account_name = wonjin
access_key = abcdabcdabcdabcad123456abcd

account의 프로젝트 목록 보기

spb describe projects
위 커맨드를 입력하면 프로젝트 이름, 라벨 수, 섭밋비율을 확인할 수 있다.

결과는 아래와 같다.

wonjinyi@wonjinYi:~$ spb describe projects
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┃ NAME                                               ┃ LABELS ┃ PROGRESS ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
│ Serperbuy-2_GinPixel_Test                          │      6 │       0% │
│ cropTest                                           │    200 │      10% │
│ goyangyi_lagacyProject                             │     12 │       8% │
│ goyangyi                                           │    212 │       5% │
│ cani                                               │      4 │      75% │
│ Sample project                                     │     21 │      47% │
└──────────────────┴────────┴────────┘

이미지만 올리기

spb upload dataset
위 커맨드를 입력하면 rawdata(이 포스트의 경우는 이미지)를 업로드할 수 있다.
아래 사진처럼 업로드할 이미지가 있는 디렉토리에서 커맨드를 실행해야 한다.

특이사항은 아래와 같다.

  • 입력하도록 되어있는 account name은 대소문자를 가리지 않는다. (실제 Suite에 있는 프로젝트 이름이 WONJIN이라도, CLI에서는 wonjin으로 같은 프로젝트를 가리킬 수 있다.)
  • 업로드시 입력한 dataset이름이 Suite상에 존재하지 않았다면, 새로운 dataset을 만들고 이 안에 rawdata들을 업로드한다.

실행한 결과는 아래와 같다.

wonjinyi@wonjinYi:~/Desktop/catcat/onlyUploadImages$ spb upload dataset
Project Name: learn-suite-cli
Dataset Name: cli-test
Uploading 5 data and 0 labels to dataset 'cli-test' under project 'Learn-Suite-CLi'. Proceed? [y/N]: y
Uploading data:
100%|█████████████████████████████| 5/5 [00:02<00:00,  2.29it/s]

** Result Summary **
Successful upload of 5 out of 5 data. (100%) - 0 ERRORS

라벨 json만 올리기 (+result key 오류 해결하기)

spb upload labels
Suite상에 이미지가 이미 올라가있다면 라벨(어떤 rawdata에 대한 annotation들의 정보)만 업로드하여 덮어씌울 수 있다.

라벨의 구조는 위 사진처럼 Export된 Zip파일을 다운받고, 압축을 풀어 [labels]폴더 안을 보면 알 수 있다.

아래 사진에 보이는 [labels]안의 json파일들이 실제로 Suite에서 사용하는 어노테이션 데이터이다. 자세한 구조는 여기에서 볼 수 있다.

[labels]안쪽 파일들의 이름은 rawdata의 이름이 아닌 label-id이다. 어떤 rawdata가 label-id와 매칭되는지는 [meta]폴더 안의 내용들을 통해 알 수 있다. (rawdata이름별 meta json파일을 까보면, 라벨id가 나와있다.)

본인의 경우는 아래 사진처럼 Suite에 이미 아래의 두 이미지가 업로드 되어있다.

  • cat.1.jpg
  • cat.2.jpg

이 상태에서 아래의 라벨정보를 담은 두 개의 json을 업로드 하여 Suite의 라벨상에 덮어씌울것이다. (라벨정보 json의 이름은 Suite에 올라간 라벨의 Datakey와 같아야 한다.)

  • cat.1.jpg.json
  • cat.2.jpg.json

그런데 이상하게 실행결과가 아래와 같다. 잘 쓴것같은데 'result' 키를 못찾겠다면서 에러를 뱉는다.
이게 슈퍼브에이아이 가이드에 설명되지 못한 함정이다.

wonjinyi@wonjinYi:~/Desktop/catcat/onlyLabels$ spb upload labels
Project Name: learn-suite-cli
Dataset Name: catcat
Uploading 2 labels to project 'Learn-Suite-CLi'. Proceed? [y/N]: y
100%|████████████████████| 2/2 [00:01<00:00,  1.15it/s]

** Result Summary **
Successful upload of 0 out of 2 labels. (0.0%) - 2 ERRORS

** Error Table **
┏━━━━━━━━━━━┳━━━━━┓
┃ FILE NAME ┃ LABEL UPLOAD ┃
┡━━━━━━━━━━━╇━━━━━━┩
│ cat.2.jpg │ 'result'     │
│ cat.1.jpg │ 'result'     │
└───────────┴────┘
[21:42:59] Check the log file for more details                               label_data.py:212
           - /home/wonjinyi/anaconda3/lib/python3.7/site-packages/spb/logs/… label_data.py:213
           - /home/wonjinyi/anaconda3/lib/python3.7/site-packages/spb/logs/… label_data.py:214

문제를 해결하려면 label json파일을 까서 "result"라는 키로 한 번 감싸줘야한다. 여기를 보면 이 형식은 현재 최신버전의 Image프로젝트가 아닌 레거시 Image프로젝트(deprecated)의 Annotation Json 파일 형식이라고 설명되어있다.

최신버전 Image프로젝트에 업로드 하려고 하는데도, 레거시 Image프로젝트(deprecated)의 형식을 따라야 한다는 것이다.

"result"키를 추가한 다음 업로드를 재시도하면, 위 내용처럼 정상적으로 업로드가 되는 것을 확인할 수 있다.

wonjinyi@wonjinYi:~/Desktop/catcat/onlyLabels$ spb upload labels
Project Name: learn-suite-cli
Dataset Name: catcat
Uploading 2 labels to project 'Learn-Suite-CLi'. Proceed? [y/N]: y
100%|████████████████████████| 2/2 [00:02<00:00,  1.22s/it]

** Result Summary **
Successful upload of 2 out of 2 labels. (100.0%) - 0 ERRORS

참고로 업로드 이후 json파일을 살펴보면, spb-cli가 Suite상에 이미 올라가있던 라벨의 정보를 자동으로 내려받아 json파일에 붙여버린 것을 알 수 있다.

Suite에서 확인해보아도 정상적으로 어노테이션 정보가 덮어씌워져있다.

이미지와 라벨 json 같이 올리기

spb upload dataset --include-lable
이미지와 라벨정보 json을 동시에 올릴 수도 있다.

이 때에도 위의 '라벨 json만 올리기' 부분과 마찬가지로 각 label json들을 "result" key로 한 겹 감싸주어야 정상적으로 동작한다.

아래 사진의 상태에서 upload 커맨드를 실행하면 관련 내용이 출력되며 정상적으로 업로드 된다.

wonjinyi@wonjinYi:~/Desktop/catcat/imageWithLabel$ spb upload dataset --include-label
Project Name: learn-suite-cli
Dataset Name: cli-test-imagewithlabel
Uploading 3 data and 3 labels to dataset 'cli-test-imagewithlabel' under project 'Learn-Suite-CLi'. Proceed? [y/N]: y
Uploading data:
100%|██████████████████████| 3/3 [00:00<00:00,  3.60it/s]
Uploading labels:
100%|██████████████████████| 3/3 [00:01<00:00,  2.83it/s]

** Result Summary **
Successful upload of 3 out of 3 data. (100%) - 0 ERRORS
Successful upload of 3 out of 3 labels. (100%) - 0 ERRORS

Suite에서 살펴보아도 정상적으로 이미지와 라벨json이 업로드 된 것을 확인할 수 있다.

로그 보기

/home/wonjinyi/anaconda3/lib/python3.7/site-packages/spb/logs
위와같은 형태의 spb - logs 디렉토리로 들어가면 확인할 수 있다.

좋은 웹페이지 즐겨찾기