2 minute read

딥러닝 모델을 트레이닝함에 있어서 필수 요소인 데이터,
그리고 라벨링에 대한 표준 규격이 필요하다고 생각한다.
라벨링 가이드 라인을 제작할 때, GT 이미지를 가지고 모델이 디텍션할 수 있는 범위를 예측하는 모델이 필요하다.

라벨링 작업자에 따라서 같은 이미지라도 바운딩 박스의 퀄리티가 다를 수 있기 때문이다.
다양한 경우의 라벨링 실험을 통해서 모델을 구축하고 각각의 결과를 확인해본다.

라벨링 어디서 어떻게 해볼까?

YOLO, COCO, VOC, KITTI 등등 다양한 데이터 포맷이 있지만, 왠만한 메이저 라벨링 프로그램의 경우 저 포맷들을 다 지원하고 있다.

  1. LabelImg https://github.com/tzutalin/labelImg
    깃허브에 친숙한 사람이라면 LabelImg를 설치해서 사용하는 것이 좋다.

  2. LabelBox https://labelbox.com/
    리눅스, 깃허브… 알고싶지도 않을 경우, 혹은 작업자들의 편의를 위한 경우에 LabelBox를 사용하는 것이 좋다.
    웹사이트에 나의 프로젝트를 만들고, 이미지 파일을 업로드해서 바로 라벨링을 진행할 수 있기 때문에 접근성이 좋다.
    라벨링 정보를 LabelBox 스타일의 json 파일로 export하기 때문에, 다양한 포맷으로 변경하려면 약간의 노력이 필요하다.
    이후에 Roboflow까지 이용하면, 편하게 특정 데이터 포맷으로 다운로드 할 수 있다.

0. 라벨링의 목적

오브젝트 디텍션 모델을 트레이닝하기 위해서 이미지 파일과 객체의 GT 위치를 포함한 바운딩 박스 정보 데이터를 구축하는 것.

1. 객체들이 겹쳐있을 때

타겟 객체의 이미지를 최대한 포함하는 선에서 바운딩박스를 잡는다. 다른 객체가 섞이는 정도가 커질수록 오탐지의 확률이 올라간다.

2. 이미지 안의 객체를 라벨링에서 놓쳤을 때

트레이닝 단계에서 객체를 제대로 학습하지 못하게 되지만, 전체적인 비율을 생각해보았을 때 모델의 성능에 큰 해를 끼치는 것은 아니다.
하지만, 언라벨링 데이터의 비율이 높다면 positive / negative 를 제대로 구별할 수 없기 때문에 training-validation phase에서 문제를 겪을 수 있다.
이럴 경우, 추후에 객체 인식 모델을 사용해면, 기존 데이터셋 안에서 라벨링이 제대로 안되어있는 객체들을 찾을 수 있을 것이다.

3. 객체를 잘못 라벨링했을 때

트레이닝 단계에서 잘못된 라벨을 사용하여 모델의 cost function을 최적화하기 때문에, 모델의 성능에 직접적으로 악영향을 준다.

4. 바운딩 박스를 작게 쳤을 때

실제 객체보다 작게 바운딩 박스를 치게 되면, 해당 부분을 제외한 나머지 부분에 대한 정보를 그 객체의 특징으로 학습할 수 없기 때문에 정보의 손실이라고 볼 수 있다.

5. 바운딩 박스를 크게 쳤을 때

6. class id가 밀렸을 때

이미지의 객체를 트레이닝할 때 사용했던 class id로 추론하기 때문에 바운딩 박스는 잘 잡으면서 클래스는 잘 못 맞출 수 있다. 이럴 경우 GT file의 class id를 수정해야한다.

7. 라벨링 얼마나 해야하는지?

인식하고자 하는 객체에 따라서 다르다.
모양, 색깔, 크기에 따라서 작업의 난도가 상승한다고 생각할 수 있다.
직접 이미지 파일들을 열어보고 구별을 해보면 어떤 객체 or 상황에서 구별이 잘 안되는 지 알 수 있다.
YOLOv5m 기준, LOL 미니맵의 챔피언 인식 모델의 경우,
280 x 280 이미지 파일 100장, 클래스 분포는 100 ~ 70 정도로 균일한 편이었을 때 mAP 0.7 정도의 성능을 확인할 수 있었다.
챔피언의 테두리에 있는 원의 색깔이 레드팀과 블루팀에 따라서 다른데, 그 정도의 차이로도 구별이 전혀 안되는 모습을 보이기도 했다.

EfficientDet-D4 기준, WRS 로봇팔의 조립 작업에 사용되는 12개의 부품들을 detection 하는 모델의 경우,
1920 x 1200 사이즈 200장의 이미지를 사용해서 mAP 0.866의 성능을 확인할 수 있었다.
로봇 대회의 특성상, 사진의 배경이 거의 일정했고 객체의 형태와 재질에도 차이가 조금씩 있어서 구별이 용이했던 것 같다.

YOLOv5x 기준, Global road damage detection 모델의 경우,
체코, 인도, 일본의 도로에 있는 파손 부위를 디텍션하기 위하여 600 x 600 이미지와 720 x 720 이미지를 사용하였고,
F1 score 0.58 정도의 성능을 확인할 수 있었다. 각각의 나라마다 수천장의 이미지를 사용하였으나, 클래스의 분포가 매우 불균형적이었고 특정 클래스의 경우에는 98개밖에 없었다.
나라마다 도로의 모습이 다르지만 같은 클래스로 라벨링하는 과정에서 영향이 있었을 것이라고 생각한다.

8. Pseudo labeling vs Human labeling

모델이 특정 수치 이상의 퍼포먼스를 낼 때, 그 모델을 사용해서 라벨링을 하면 사람이 라벨링하는 것보다 좋은 결과를 얻을 수 있을까?
-> 라벨링 GT에 대해 QA를 어떻게 할 것인가에 대한 방법론 필요.
원론적인 문제: 라벨링의 퀄리티 체크.

TBD: 어떤 metric으로 성능을 평가할 것인가? 차이가 있을까?