Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

0과 1 사이

YOLO를 이용한 핵심 이미지 트레이닝 및 라벨링 본문

(0, 1)/손마리

YOLO를 이용한 핵심 이미지 트레이닝 및 라벨링

고후 2022. 1. 27. 18:18

 

커스텀 데이터를 이용해 YOLO를 트레이닝 하는 것은 인터넷에도 많이 나와있다.
https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

 

AlexeyAB/darknet

YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet ) - AlexeyAB/darknet

github.com

위 링크를 많이 참고했다.
YOLO는 학습시킬 트레이닝 이미지와 그에 대한 라벨링 파일(txt), 테스트 이미지만 있다면 쉽게 딥러닝을 트레이닝 시킬 수 있는 오픈소스이다.

우선은 라벨링이 필수적이다.
이미지 데이터를 준비하고, 이를 9:1로 쪼개어 트레이닝과 테스트 셋으로 나눈다. 테스트 셋은 트레이닝 시 필요한데, 없이 진행해도 작동은 하지만 정확도를 확인해보기 위해서는 필수적이다.

위처럼 LabelImg 툴을 이용하여 라벨링했다. 위와 같이 해당 영역을 드래그하여 박스친후, 올바른 클래스 이름을 입력하면 라벨링이 완료된다. 위에서는 클래스 이름을 10으로 입력했다. 그런데 10이 아닌 ㄱ을 입력해도 txt에는 클래스를 숫자로 입력한다. 무슨 뜻이냐면 해당 클래스가 라벨들 중 몇번째인지 가르키는 인덱스값으로 저장한다는 것이다. 위에서 10으로 라벨링을 했어도 10이 만약 0번 인덱스에 있다면 txt에는 0이 저장된다.
단순 노가다 작업이라고 할수있다.


https://t-okk.tistory.com/7

 

DataSet labeling(라벨링_labelIMG이용)

라벨링하기 위해서 labelIMG 툴을 이용하였다. In windows 1. labelIMG 설치 https://github.com/tzutalin/labelImg tzutalin/labelImg :metal: LabelImg is a graphical image annotation tool and label object..

t-okk.tistory.com

라벨링은 위 사이트를 참고했다.
텍스트 파일을 열면 5개의 숫자가 써있다.


해당 파일의 첫번째 숫자는 클래스 번호이고, 마지막 4개의 숫자는 바운딩된 박스의 x,y 센터좌표와 높이, 너비이다.
이미지에 대한 텍스트 파일은 해당되는 이미지와 같은 이름을 가져야한다.


여기까지 하면 트레이닝 준비의 1/2은 완료.
마지막 1/2은 cfg파일과 data파일, names파일, train.txt와 test.txt를 본인의 커스텀 데이터에 맞게 수정하는 것이다.
cfg파일에서는 구분할 클래스 개수에 따라 레이어를 변경해주어야 한다. AB 다크넷 사이트에 들어가면 자세히 나와있다.
train.txt에는 트레인할 jpg의 목록을 명시해두고, test.txt에는 테스트할 jpg의 목록을 명시해준다. 참고로 준비된 이미지셋을 트레인셋과 테스트셋으로 나눠주는 코드는 구글에 널려있으니 참고할것.
names 파일에는 클래스 명에 따른 클래스 이름을 지정해주는 것이다. 우리 팀을 예로 들면 8은 쓰러지다1, 9는 쓰러지다2이다. 0~(클래스개수-1)까지 각각 클래스 이름을 지정해야한다. 줄 단위로 구분된다.
2days
3days
yes
no1
no2
...
등으로 설정해준다.

이후 data파일에는 train.txt와 test.txt, names파일들의 경로, 클래스 개수를 명시해주어야한다.

그 뒤 트레이닝 시키면

위와 같이 트레이닝이 시작된다. 중간에 멈춘다해도 멈춘 weights 파일을 다시 트레이닝시킬 수 있다. 또한 가끔 하드웨어의 사양에 따라 보틀넥 에러가 나기도 한다. 이때는 cfg파일에서 batches를 좀더 작게 수정시켜준다.
모두 똑같이 따라했는데 트레이닝 시켰을 때 에러가 발생한다면 90%확률로 경로에러일 것이다. data파일 안에 있는 train, test, names 파일의 경로가 올바른지, train,test 안에 있는 jpg와 txt 라벨링 파일들의 경로가 모두 올바른지 확인해야 한다.

올바르게 트레이닝 시키면 정확도가 100이 출력되는 것을 볼수있다.(데이터셋에 따라 다를것)

 

이 때 중요한 것은, 만약 정확도가 떨어지기 시작하면 무조건 조기종료 시켜야한다는 것이다. 저 이미지의 경우 끝까지 트레이닝을 완료했지만, 3600 배치 쯤에서 이미 한번 정확도가 떨어졌기 떄문에 조기종료 시켰어야 한다.

 

왜냐하면, 정확도가 떨어진다는 것은 최적의 모델에서 이미 멀어지기 시작했다는 것이다.. 딥러닝의 gradient descent와도 관련 있따.

Comments