안녕하세요
오늘은 label studio ml backend 구축에 대해서 해 보기 전, label-studio에 대해서 알아보는 포스팅을 하도록 하겠습니다.
상당히 복잡한 프로세스를 거쳤기에, 쉽지않은 프로세스가 될 것으로 보입니다.
일단 선행조건으로, label-studio 를 설치하고 실행하는 것이 될 것입니다.
label studio 란, labeling을 할 수 있게 해주는 labeling 툴 중 하나입니다.
기존의 labelImg라는 툴을 사용했었는데, labelImg를 다운받으려고 검색하던 와중
label studio로 병합되었다는 소식을 들었습니다.
label studio는 오픈소스 타입의 labeling tool 입니다.
하지만 label studio 는 django 기반의 웹 프레임워크 기반으로 제공됩니다.
저는 맥북을 사용하기 때문에 pip 나 brew로 설치할 수 있고,
도커로도 설치할 수도 있습니다.
이렇게 웹사이트 형태로 제공되는 이유는,
각각의 어노테이션 레이블링 자체를, 각각의 로컬의 디비에 보관할 수 있도록 하게 할 수 있고,
각각의 어노테이션을 다른 형태의 포맷으로 export할 수 있는 장점이 있습니다. (ex. COCO, YOLO 등..)
또한, 이미지 라벨링 이외에도 비디오 라벨링, 소리 데이터 라벨링, 텍스트 라벨링 등 여러가지 라벨링도
할 수 있는 장점이 있습니다.
또한, 여러 사람들이 함께 하는 labeling을 하는 경우 합치는 것도 상당히 용이합니다.
하지만 여기에 몇 가지 주의사항이 있습니다.
첫번째 주의사항은, 사진들을 곧바로 import하는 게 아니라,
Setting -> Cloud Storage -> Source Cloud Storage -> Add Source Storage -> Storage Type - Local Files 를 사용해서
Treat every object as a source file 체크하고 올려야 한다는 점입니다.
만약 이렇게 업로드 하지 않고 import를 해서 올린다면, 이미지들 앞에 이상한 hash 파일명이 붙은 상태로 올라가게 됩니다.
(그 이유는 저도 모르겠습니다.. ) 나중에 이미지 파일 이름들의 충돌을 막기 위해서 인듯 한데, labeling을 머지하는 입장에서는
상당히 짜증나는 내용이 아닐 수 없는 듯 합니다.
나중에 이미지들과 label들을 export 할 때도 이렇게 변경된 파일이름과 라벨들로 export되기 때문에, 이를 방지하기 위해서라도 꼭 필요한 내용이 아닐 수 없을 것 같습니다.
Source Cloud Storage를 세팅한 이후, Sync storage를 해줍니다.
두 번째 주의사항은, 여러 사람들이 한 내용들을 합칠 때 입니다.
여러 사람들이 어노테이션을 한 내용들을 합하는 방법입니다.
이 방법을 몰라서 저희 팀 사람들이 많이 고생을 했습니다.
https://github.com/heartexlabs/label-studio/issues/2086
이 스택오버플로우 게시물에 참고를 많이 하긴 했었는데,
핵심은 이미지 데이터와 Json 파일을 export하는 것입니다.
이렇게 Json파일과 이미지 파일들을 다운 받은 이후,
예를 들어 이미지 파일들을 /a/b/c/라는 경로에 다운 받은 이후,
Json 파일들에 data 경로들을 /a/b/c/d.jpg 같이 바꿔줍니다.
이후, 위에서 말했던 cloud storage option을 이번에는 Treat every object as a source file 체크하지 않고,
/a/b/c/만 셋업한 이후에 닫습니다.
그 이후 Sync Storage를 하지 않습니다!
Json을 Import합니다.
제대로 모든 게 세팅 되었다면 마법처럼 라벨들이 합쳐질 것입니다.
추가) 처음 cloud storage option에 세팅 할 때, environment variable 세팅을 해야되는 경우가 있습니다.
다음 documentation을 참고하셔두 되고, 실제로 이 환경변수들만 추가 해주면 됩니다.
export LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
export LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/Users/user/
export LOCAL_FILES_SERVING_ENABLED=true
제 맥북의 경우 zsh을 사용하기 때문에,
.zshenv에 위의 코드를 넣어 준 이후,
source .zshenv를 하면 환경변수가 됨을 알 수가 있습니다.
이로서 label studio에 대한 포스팅을 마치도록 하겠습니다.
'Machine Learning' 카테고리의 다른 글
gradient descent 직접 구현하기 (linear regression) (1) | 2023.05.17 |
---|---|
Cloud(GCP)를 이용한 ML-Pipeline 만들기 - 1. Vertex AI AutoML (0) | 2023.05.03 |
dvc 를 이용해서 데이터 버전 관리하기 (ft. mlops) (0) | 2022.04.14 |
Adam Optimization에 대한 설명 (0) | 2022.02.24 |
Gradient Descent(경사 하강)에 대해서 알아봅시다! (0) | 2022.02.18 |