Data Labeling

이현근·2023년 12월 21일
0

지도학습 객체탐지를 할 것이기 때문에 모델보단 데이터다.
학습용 데이터셋 부터 만들어보겠다.

폴더구조

- Data
  ├ images
  │  └ img_n.jpg
  ├ labels
  │  ├ classes.txt
  │  └ img_n.txt
  └ meta
     ├ data.yaml
     ├ train.txt
     ├ val.txt
     └ test.txt

학습시키고자 하는 image 를 images 에 전부 집어넣는다.

Target 이미지

예시로 사용할 이미지는 아래의 커넥터 이미지이다.

커넥터엔 구멍이 6개가 있는데 다음과 같이 분류를 해본다

  • Four_hole : 십자가 주변의 4개 구멍
  • Center_hole : 중심 구멍
  • Direction_hole : 십자가 중 한방향에만 있는 구멍
    라벨링 하게되면 다음과같다.

라벨링 툴 Labelimg

Anaconda prompt 에서 다음을 진행한다

  1. 가상환경 실행
    conda activate vision_ai
  2. labelimg 설치
    pip install labelimg
  3. 실행
    label img

순조롭게 진행되었으면 다음과 같은 창이 뜬다

하지만 labelimg 는 개발이 중단되었는지 변수형식 문제가 생겨서
파일 두개를 수정해줘야... 에러가 안 뜨고 정상 작동한다.
int 입력 받는곳에 Float 들어가는 애러랑 ( float 앞에 int해주면 됨)

파일 1 경로 -
C:\Users\<user_name>\scoop\apps\anaconda3\current\App\envs\vision_ai\Lib\site-packages\labelImg\labelimg.py

# 965줄
bar.setValue(int(bar.value() + bar.singleStep() * units)) 
# 971줄
self.zoom_widget.setValue(int(value))
# 1025~1026줄
h_bar.setValue(int(new_h_bar_value))
v_bar.setValue(int(new_v_bar_value))

파일 2 경로 -
C:\Users\<user_name>\scoop\apps\anaconda3\current\App\envs\vision_ai\Lib\site-packages\libs\cnavas.py

# 526줄
p.drawRect(int(left_top.x()), int(left_top.y()), int(rect_width), int(rect_height))
# 530~531줄
p.drawLine(int(self.prev_point.x()), 0, int(self.prev_point.x()), int(self.pixmap.height()))
p.drawLine(0, int(self.prev_point.y()), int(self.pixmap.width()), int(self.prev_point.y()))

라벨 저장폴더에 Classes.txt 의 예외처리가 잘 안되있어서 Down 되는 경우가 있다
몇번 당해보면 어디가 문제인지 알 수 있으니 조심해서 라벨링 하도록 한다.


처음에 정의했던 폴더구조를 생성하고 이미지를 넣고 빈 폴더라도 넣었으면
경로를 지정한다

Open Dir - Data/images
Change Save Dir - Data/labels

좌측에 pascal Voc 로 되어있으면 클릭 하여 YOLO 로 변경해준다


좌측에 Create rectBox 를 클릭한다
마우스 옆으로 십자가 줄이 생성된다

원하는 지점의 모서리에서부터 사각형을 그리며 드래그한다.

마우스를 떼는 순간 메세지박스가 나타나며
b-box 의 class label을 해주면 된다. 지금은 Four_hole로 라벨링하였다.

데이터를 충분히 라벨링 하도록 한다.
데이터에 따라 다르지만 해당 커넥터는 한 50장이어도 충분하다

단축키는 다음과 같다

W : Create RectBox
A : 이전사진
D : 다음사진

데이터 확인

DATA/labels 안에

classes 파일과

이미지 명과 동일한 label파일이 만들어져 있다면 성공이다.
왼족 값부터 차례대로
[class x y w h] 의 값을 가지고 있다.


이미지 사이즈는 2592*1944 인데 xyxy 가 소수점인 이유는..
정규화해서.. x w 는 2592 / y h 는 1944를 곱하도록 하자

좌표계는 언젠가 한번 다루겠다

가진 모든 데이터의 라벨링을 열심히 해주시면 된다.
하다보면 요령이 생긴다.
위에 도구들을 만지다 보면 빨리하는 설정을 찾을 수 있다.

profile
사짜 Vision AI 개발자

0개의 댓글

관련 채용 정보