지도학습 객체탐지를 할 것이기 때문에 모델보단 데이터다.
학습용 데이터셋 부터 만들어보겠다.
- Data
├ images
│ └ img_n.jpg
├ labels
│ ├ classes.txt
│ └ img_n.txt
└ meta
├ data.yaml
├ train.txt
├ val.txt
└ test.txt
학습시키고자 하는 image 를 images 에 전부 집어넣는다.
예시로 사용할 이미지는 아래의 커넥터 이미지이다.
커넥터엔 구멍이 6개가 있는데 다음과 같이 분류를 해본다
Anaconda prompt 에서 다음을 진행한다
- 가상환경 실행
conda activate vision_ai
- labelimg 설치
pip install labelimg
- 실행
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를 곱하도록 하자
좌표계는 언젠가 한번 다루겠다
가진 모든 데이터의 라벨링을 열심히 해주시면 된다.
하다보면 요령이 생긴다.
위에 도구들을 만지다 보면 빨리하는 설정을 찾을 수 있다.