(labelpix 깃허브 주소)
https://github.com/emadboctorx/labelpix
먼저 내가 만들 데이터셋 생성기에 연동시킬 labelpix라는 github에 있는 labeling tool이 있다.
사진을 업로드해서 클래스를 입력한다음 바운딩박스를 마우스로 그려주면 해당하는 정보를 Pascal VOC(xml), YOLO(txt)버전으로 변환하여 이미지 라벨링을 해주는 유용한 툴이다.
이렇게 마우스로 드래그 한 bounding box의 정보가 xml, txt 파일로 저장이 된다
여기서 눈썰미가 좋은사람은 알아채겠지만 txt 파일에 있어선 안될 정보가 담겨있다.
<문제점>
YOLO버전 BBOX의 정보는 class_num, CenterX, CenterY, W, H 순서로 클래스를 표현하는 index, 중심지점, 넓이 ,높이로 이뤄져 있다.
그런데class num 1에 해당하는 CenterX 정보에 음수가 적혀있고 0 에 해당하는 정보의 CenterY에도 좌표가 음수로 나타내져있다.
대충 눈대중으로 봐도 화면 밖에 그려져있는 bbox는 없는데 일단 xml, yolo 버전 라벨을 이용해 bbox를 시각화 해보겠다
xml파일의 라벨링 정보는 제대로 bbox가 그려지는 반면에, txt파일속 정보로 bbox를 그리면 저렇게 어처구니 없는 상자가 나온다.
<원인>
labelpix 코드 내부에 마우스로 드래그를 해서 bbox를 그리면 해당 bbox의 xmin, ymin, xmax, ymax, 그림 전체의 width, height를 받아서 yolo data전용 cx, cy, w, h로 변환시켜주는 메소드를 보았는데 변환해주는 수식 자체가 엉망인데다가
bbox를 우하단, 우상단, 좌하단부터 그리기 시작해 화면 밖으로 넘어가면 xmax, ymax값이 음수로 나와서 계산식 자체가 엉망이 되기때문에
xmax, ymax가 width, height를 넘어가지 않도록 고정시켜 줘야 하며
CenterX = (xmin + xmax)/2
CenterY = (ymin + ymax)/2
bw = xmax - xmin
bh = ymax - ymin
의 식을 만족한채로 어느점부터 시작해서 바운딩박스를 그리던지 return되는 min,max (x,y)값들은 일정해야 하기 때문에 labelpix의 코드를 수정했다.
코드가 수정된 후 YOLO의 라벨링파일을 시각화시킨 사진과 txt파일 내용이다 정상적으로 잘 작동한다.
'Project' 카테고리의 다른 글
인공지능 경진대회 우수상 (0) | 2021.11.17 |
---|---|
인공지능 경진대회 - Kaggle Wafer defect dection (CNN을 이용한 웨이퍼 결함 탐지) (2) | 2021.11.17 |
인공지능 경진대회 - Kaggle Cat&Dog Dataset 이진분류 (0) | 2021.11.17 |