-
[DL][Windows11] YOLOv3 커스텀 데이터셋 만들기ML(머신 러닝)/Windows 2023. 9. 22. 02:54
YOLOv3로 학습 및 검출에 대해 앞서 포스팅 했는데요.
포스팅에 사용된 데이터셋은 직접 수집하고 수정한 데이터셋입니다.
YOLO용 데이터 셋 만들기에 대해 작성하며, 머신러닝에서의 데이터셋이 어떻게 이루어져 있는지 정리 해보겠습니다.
0. 데이터 셋 제공 사이트
- 네이버 : http://datalab.naver.com
- kaggle : https://www.kaggle.com
- google AI : https://ai.google
- data Science Cnetral : https://www.datasciencecentral.com
- Awesome Public Dataset : https://github.com/awesomedata/awesome-public-datasets
- google dataset search : https://datasetsearch.research.google.com
주인장은 kaggle과 google dataset search를 주로 사용 합니다.
특정 목적의 데이터 셋은 google dataset search를 통해 주로 찾는 답니다.
ex. facial detection dataset 같은건 w300이나 face-dataset 등 많습니다.
1. 훈련 셋, 검증 셋, 테스트 셋
크게 데이터셋은 3개로 구분해야 합니다..
훈련용 데이터 셋, 검증용 데이터 셋, 테스트용 데이터셋으로 나눈답니다.
보통은 하나의 데이터 셋을 훈련용:검증용+테스트용 or 훈련용:검증용:테스트용
으로 나누게 됩니다..
비율은 순서대로 7:3 or 7:2:1 이 가장 이상적이라고들 합니다.
2. yolo의 데이터 셋 구성
yolo에서 데이터 셋은 다음 3가지 파일이 필요합니다.
- 데이터 셋의 이미지 : 학습 혹은 검출에 사용될 이미지에요. 검출할 대상이 있어야 합니다.
- 데이터 셋의 이미지에 대응하는 txt 파일 : 검출할 대상의 좌표와 대상의 class를 분류한 정보
- 데이터셋의 class를 담은 classes.txt 파일 : 검출할 대상의 class 명을 담은 파일
데이터 셋의 이미지에 대응하는 txt 파일은 다음과 같은 형식으로 되어 있습니다.
순서대로 4는 classes의 5번째 class 명을 의미합니다. 후술 하겠지만 class는 0번부터 읽습니다.
다음으로 0.94482 0.19987 0.02637 0.04818 은 객체가 있는 bouding box의 각 꼭짓점 좌표입니다.
사각형 모양의 bouding box의 각 끝 부분을 의미합니다.
만약 한 사진 안에 여러 객체가 있다면?
다음과 같이 표기 됩니다.
마지막으로 classes 파일은 다음과 같습니다.
순서대로 0번부터 4번까지의 class 명이에요. 여기서는 예시로 class숫자를 하였지만 보통은 car, dog 등 여러 class 명을 작성합니다.
3. 데이터 셋 만들기
우선은 두 가지가 필요합니다.
- 학습에 사용될 이미지
- 이미지에서 객체를 찾아 라벨링(labeling) 작업을 해줄 도구 : ex. labelimg
학습에 사용될 이미지를 우선 모아주세요.
이미지를 모을 때는 저작권 혹은 법적으로 문제가 되지 않을 이미지여야 해요.
만약 해외 논문 투고 예정이라면 어린아이 사진은 특히 안됩니다.
해외는 어린 아이의 사진이 저작권이 없더라도 문제가 되어 반려 당하기도 합니다.
라이센스 상 문제가 없는 데이터셋을 사용했는데.. 예시 이미지가 어린 아이들 사진이라 수정해야 했어요..
이미지를 모았다면 다음 링크를 통해 파일을 받아주세요. windows_v1.8.1.zip 파일입니다.
https://github.com/HumanSignal/labelImg/releases
해당 labelImg을 받은 후, data 디렉토리 내 predefined_classes.txt 파일을 열어줍니다.
해당 파일은 찾을 class를 정의하는 파일입니다. 본인이 만들 데이터셋 에서 찾게 될 객체의 이름을 적어줍니다.
그후, labelimg.exe를 실행 합니다. windows의 pc 보호가 뜨더라도 당황하지 않고 실행 시켜주세요.
다음으로 PascalVoc 버튼을 눌러 YOLO로 바꿔줍니다.
PascalVoc로 설정 할 경우, labeling 데이터가 txt 파일이 아닌 xml 파일로 저장됩니다.
xml 파일은 YOLOv5 부터 사용되며, 저희가 사용하는 YOLOv3에는 txt 파일이 필요하므로 수정해줍니다.
다음으로 Open Dir를 눌러 데이터셋으로 사용될 이미지가 모인 디렉토리를 열어줍니다.
그 뒤 w 버튼을 누르고, 찾고자 하는 객체를 사각형 박스 안에 들어가게 드래그 해줍니다.
드래그 했다면 다음과 같이 label을 붙일 수 있게 되는데, 해당하는 객체명을 클릭합니다.
정상적으로 저장됐다면 다음과 같이 우측 상단에 클래스명이 할당 되었을 겁니다.
모든 파일을 라벨링 해주었다면, 좌측 save 버튼을 눌러 저장해줍니다.
저장된 라벨링 파일을 찾아 정상적으로 작성되었는지 확인해주시면 됩니다.
보통 저장 위치는 데이터셋 이미지와 같은 디렉토리 내에 저장합니다.
4. labelIng의 단축키 모음
아래 단축키를 참고하시면 더 빠르게 할 수 있습니다.
사용되는건 w, d, ctrl+s 뿐이지만..
라벨링 후, 본인이 만든 커스텀 데이터 셋으로 YOLOv3을 사용하는 방법은 아래 링크를 참고하세요.
https://lonaru-burnout.tistory.com/20
'ML(머신 러닝) > Windows' 카테고리의 다른 글
[ML][Windows] AMD gpu로 머신러닝을 해보자 (DirectML, TensorFlow, Pytorch) (0) 2023.12.11 [DL][Windows] 윈도우 텐서플로우 (TensorFlow) GPU 인식 문제 (2) 2023.12.07 [DL][Windows11] YOLOv3 물체 검출 학습 (0) 2023.09.22 [DL][Windows 11] 윈도우 파이토치 (PyTorch) 설치 (0) 2023.06.07 [DL][Windows 11] 윈도우 텐서플로우 (TensorFlow) 설치 (0) 2023.06.02