Machine Learning

label studio ml backend 구축 (1. label studio 소개, import, export 및 labeling 머지!)

jinmc 2022. 12. 12. 15:21
반응형

안녕하세요

오늘은 label studio ml backend 구축에 대해서 해 보기 전, label-studio에 대해서 알아보는 포스팅을 하도록 하겠습니다.

 

https://labelstud.io/

 

상당히 복잡한 프로세스를 거쳤기에, 쉽지않은 프로세스가 될 것으로 보입니다.

일단 선행조건으로, 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하는 게 아니라, 

 

오른쪽 위에 보면 Import해서 이미지들을 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으로 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에 대한 포스팅을 마치도록 하겠습니다.

 

반응형