슈퍼브에이아이 가이드 내용을 그대로 따라했다.
이 CLI 프로그램은 깃허브에도 올라가있다.
pip install spb-cli
로그인 - Settings - Advanced - Copy
로 API Key 를 복사할 수 있다.
아직 Key를 만들지 않았다면, 마찬가지로 이 페이지에서 생성할 수 있다.
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
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(이 포스트의 경우는 이미지)를 업로드할 수 있다.
아래 사진처럼 업로드할 이미지가 있는 디렉토리에서 커맨드를 실행해야 한다.
특이사항은 아래와 같다.
실행한 결과는 아래와 같다.
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
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에 이미 아래의 두 이미지가 업로드 되어있다.
이 상태에서 아래의 라벨정보를 담은 두 개의 json을 업로드 하여 Suite의 라벨상에 덮어씌울것이다. (라벨정보 json의 이름은 Suite에 올라간 라벨의 Datakey와 같아야 한다.)
그런데 이상하게 실행결과가 아래와 같다. 잘 쓴것같은데 '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에서 확인해보아도 정상적으로 어노테이션 정보가 덮어씌워져있다.
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 디렉토리로 들어가면 확인할 수 있다.