728x90

장학금 나이따 나이따

 

728x90
728x90
wafer_defect탐지
728x90
728x90
ResNet50V2
728x90
728x90

 

(labelpix 깃허브 주소)

https://github.com/emadboctorx/labelpix

 

emadboctorx/labelpix

labelpix is a graphical image labeling interface for drawing bounding boxes - emadboctorx/labelpix

github.com

 

먼저 내가 만들 데이터셋 생성기에 연동시킬 labelpix라는 github에 있는 labeling tool이 있다.

사진을 업로드해서 클래스를 입력한다음 바운딩박스를 마우스로 그려주면 해당하는 정보를 Pascal VOC(xml), YOLO(txt)버전으로 변환하여 이미지 라벨링을 해주는 유용한 툴이다.

labelpix
생성된 xml(좌) ,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파일 (우) TXT파일

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의 코드를 수정했다.

 

수정 전 labelpix 안 문제의 코드 

 

 

수정 후 코드 

 

코드가 수정된 후 YOLO의 라벨링파일을 시각화시킨 사진과 txt파일 내용이다 정상적으로 잘 작동한다.

728x90

+ Recent posts