🙋‍♀️ AI

[DarkLabel v2] YOLO custom 학습을 위한 라벨링

수댕ʕت̫͡ʔ 2023. 4. 21. 20:47

오늘은 Yolo 커스텀 학습을 위한 라벨링 과정에 대해서 적어보려고한다.

일단 나는 졸업프로젝트를 위해서 Yolo를 이용해서 모델을 훈련중이다!

우리는 custom 데이터를 훈련시켜야하기 때문에 라벨링은 필수적이다.

1년 동안 모델 학습을 위해서 거의 2만 프레임은 라벨링을 한것같다.....하하

심지어 한 프레임당 객체가 약 14~15개여서 거의 눈물을 흘리면서 라벨링을 진행했다..

졸업 프로젝트를 하면서 객체를 몇차례바꾸고 갯수를 정확하게 판단하기 위해서 라벨링 방식을 변경하는 등 과정을 거치면서 거의 10차 라벨링을 한것같다.....ㅎㅎㅎㅎ

비록 다소 괜찮은(?) 라벨링 툴을 사용했지만 수정을 반복해야하고 아날로그적 라벨링이 정확도 개선에는 최고더라..

(수많은 라벨링을 하면서 눈물이 나면서도 라벨링을 해야하니 눈물을 흘리면서 했던 기억이 난다..^^ 물론 현재도 진행중.!)


먼저 Yolo로란 무엇인가?

 

YOLO(you only look once)는 실시간 객체 검출 알고리즘으로 이미지 내에서 객체의 위치과 종류를 동시에 예측하는 딥러닝 알고리즘이다.

이때 라벨링 작업은 왜 필요한 것일까??

 딥러닝 알고리즘의 학습을 위해서 필요하다. 딥러닝 알고리즘은 대량의 데이터를 학습함으로써 특정 패턴을 인식하고 분류할 수 있다. 이때, 학습 데이터에는 입력 데이터와 해당 데이터에 대한 레이블 즉, 정답이 포함된다.

객체 검출을 위한 라벨링 작업은 이미지나 비디오에서 객체가 존재하는 위치와 종류를 정확하게 표시하는 장업이다. 딥러닝 알고리즘은 학습을 통해 객체의 특징을 파악하고 검출한다. 라벨링 작업을 정확하게 함으로써 알고리즘이 객체를 정확하게 인식하고 검출할 수 있다. 따라서 라벨링 작업은 딥러닝 모델의 정확도를 높이는데 매우 중요한 역할을 한다. 라벨링 작업은 수작업으로 이루어지니 학습데이터에 따라 알고리즘의 정확도가 크게 달라질 수 있기 때문에 라벨링 작업은 중요한 작업이다!!


자 이제 라벨링을 하는 방법을 알아보자!

 

나는 custom 학습을 위한 라벨링을 진행하기 위하여 DarkLabel v2를 사용하였다.

아래는 내가 참고한 깃허브 링크와 영상이다!

https://github.com/darkpgmr/DarkLabel

 

GitHub - darkpgmr/DarkLabel: Video/Image Labeling and Annotation Tool

Video/Image Labeling and Annotation Tool. Contribute to darkpgmr/DarkLabel development by creating an account on GitHub.

github.com

https://www.youtube.com/watch?v=lok30aIZgUw 

영상을 보면 darklabel를 어느정도 이해할 수 있다!

 

먼저 나는 darklabel 프로그램을 다운로드 받았다.

DarkLabel2.4.zip

다운로드 받고 Darklabel.exe 파일만 실행하면 되기 때문에 사용에는 간편했다.

그리고 난 후 darklabel.yml 파일을 열어서 class명을 적어준다.

my_classes1 부분에  ["jin","sand","kan","chap","fried","shrimp","can","pring","person", "vehicle", "bicycle", "motorbike", "animal", "tree", "building"] 이렇게 추가해주면 된다!

-> my_classes1: ["jin","sand","kan","chap","fried","shrimp","can","pring","person", "vehicle", "bicycle", "motorbike", "animal", "tree", "building"]

이렇게 되면

jin : 0
sand : 1
kan : 2
chap : 3
fried : 4
shrimp: 5
can : 6
pring: 7

 

이런식으로 바운딩 박스가 기록된다.

이제 Darklabel.exe를 실행시켜준다.

그리고 나서 아래와 같이 세팅을 해준다. 

Yolo를 사용한다면 반드시 아래와 같이 세팅을 해준다!!

나는 참고로 darknet yolo를 사용하였다.

<DarkLabel>

그리고 난 후 라벨링 작업에 들어간다.

open video나 open Image로 영상이나 이미지를 불러올수있다.

Next & Predict를 누르면서 한 프레임씩 라벨링을 진행하는데 

많은 인내심이 필요하지만 끈기있게 라벨링을 한다..!

 

이렇게 하나하나 라벨링을 해준다..

라벨링이 끝나면 GT save로 txt 파일을 저장시켜주고

as Image로 해당 이미지를 쌍으로 저장시켜줘야한다!! 바로 아래의 사진같이!!

폴더를 나누어서 저장할 필요는 없지만 그게 제일 간편하다. (내 경험으로)

 

 

 

이렇게 custom yolo 학습을 위한 라벨링 방법이 끝난다!

아래는 내가 사용하면서 느꼈던 주의사항과 편한점..?을 정리한 내용이다.

<주의 사항>
- 라벨링한 txt파일과 image파일은 서로 이름이 같아야함
- txt파일과 image 파일을 쌍으로 저장
- ctrl + 마우스로 확대 축소 
- Shift 를 사용하여 수정 및 삭제 가능
- 무조건 중간중간 저장 필수!!!!!

 라벨링한 데이터를 훈련시켜본 결과 최소 5000장은 필요한 것 같았다! 

 

다음 포스팅은 객체의 갯수를 효과적으로 인식하기 위하여 라벨링 변화를 다양하게 해본 결과와 Yolo v3, 4, 5각각 훈련을 해본 결과 등에 대하여 남길예정!