YOLO는 많은 사람들이 사용하고 있는 객체 인식 오픈소스입니다.
이미 선행학습 (Pre-trained)된 데이터도 있지만, 제가 원하는 클래스는 송전탑 (Transmission tower) 클래스입니다.
따라서 해당 클래스만 학습해보도록 하겠습니다.
환경: Ubuntu 18.04 LTS
데이터 셋을 구하기 위해 먼저 크롤링을 해줍니다.
구글 크롬 드라이버를 이용할 것입니다.
크롬 드라이버를 본인의 크롬 버전에 맞게 다운로드 받습니다.
Link: https://chromedriver.chromium.org/downloads
크롬 버전 확인 방법은 그림 1과 같습니다.
크롤러 프로그램은 google-images-download를 사용했습니다.
Link: https://github.com/ultralytics/google-images-download
Readme에 적힌대로 진행하면 크롤링을 진행할 수 있습니다.
다음은 레이블링을 해야합니다.
이미지 내에 객체의 좌표를 로깅하는 것입니다.
본 포스팅에선 YOLO mark를 사용했습니다.
Link: https://github.com/AlexeyAB/Yolo_mark
- git clone https://github.com/AlexeyAB/Yolo_mark
- cd Yolo_mark
- cmake .
- make
- chmod u+x ./linux_mark.sh
- ./linux_mark.sh
위 커맨드들을 입력해주시면 그림 2와 같은 창이 팝업됩니다.
저는 이미 송전탑 이미지들을 넣어놔서 다음과 같은 이미지가 나오지만, 처음에는 비행기 그림이 나옵니다.
크롤링한 이미지들을 다음 경로에 넣어주면 그림 2와 같아집니다.
Path: Yolo_mark/x64/Release/data/img
레이블링 하는 법은 마우스 드래그로 합니다.
다른 상세한 단축키들은 h키를 눌러 확인할 수 있습니다.
클래스 명을 바꿔주는 방법은 다음 경로에 있는 파일을 수정하면 됩니다.
Path: Yolo_mark/x64/Release/data/obj.names
클래스 개수를 수정해주는 파일은 다음 경로의 파일입니다. 파일 내용 중 classes를 바꿔주면 됩니다.
Path: Yolo_mark/x64/Release/data/obj.data
그림 3은 드래그 후의 결과입니다. 드래그 한 후 다음 이미지로 넘어가면 train.txt로 저장되는데 이를 yolo 학습때 사용하면 됩니다.
YOLO프로그램이 있는 darknet 폴더로 들어갑니다.
현재 저희는레이블링을 하며 names, data, image 데이터 셋 3가지의 custom data를 만들었습니다. 이를 학습에 이용하기 위해 수정해봅니다.
기본적으로 data 파일은 cfg폴더에 있고, names파일과 image data는 data폴더에 있습니다.
각자 맞는 장소에 옮겨줍니다.
이때 train.txt파일 내부에는 이전 Yolo mark에서 레이블링 진행했던 경로로 되어있는데, 경로를 다음 커맨드로 일괄 치환해줍니다.
- vi train.txt
- :%s/x64\/Release\///i
- wq
선행학습된 weight 파일을 받아줍니다.
cmd: wget https://pjreddie.com/media/files/darknet53.conv.74
여기서 문제점이 있습니다. 기본적으로 -gpus 옵션은 다중 gpu도 가능한데, gpus를 enable하려면 makefile을 수정해야합니다.
makefile 1번째 줄의 GPU=0를 GPU=1로 바꿔줍니다.
본 블로깅에선 CUDA 10.1버전을 사용했는데 바꿔준 후 make를 하면 에러가 납니다. 제 생각엔 CUDA 10버전부터는 불가능한 것으로 보입니다. 따라서 CUDA 9버전이 설치되어 있는 서버에서 진행했습니다.
또한 weight를 저장하는 간격을 설정하기 위해 detector.c를 수정해 줍니다.
그림 4에서 빨간색으로 밑줄 친 부분이 몇 epoch에 weight를 저장할지 설정하는 것입니다. 기존 10000을 100으로 바꾸었습니다.
이후 학습 커맨드를 입력해줍니다.
./darknet detector train data/obj.data cfg/yolov3.cfg darknet53.conv.74 -gpus 0,1
학습 가중치 파일은 backup폴더에 저장됩니다.
그림 6과 같이 학습이 되는 것을 볼 수 있습니다.
'인공지능' 카테고리의 다른 글
pytorch model summary (0) | 2021.03.16 |
---|---|
GRU VS LSTM (0) | 2021.03.15 |
YOLO V5 사용하기 (0) | 2021.03.15 |
YOLO V3 원하는 객체만 바운더리 박스 칠하기 (0) | 2021.01.05 |
인공지능 관련 용어집 (0) | 2021.01.05 |