-
[Darknet]YOLO custom 학습(실행 리빙랩)YOLO 2023. 1. 16. 14:19728x90
먼저 해당 컴퓨터에 아래 세팅들이 다 되어있는지 확인해보세요
- CUDA
- NVIDIA driver
- cuDNN
- openCV
하나롣 부족하다면 아래 이전글을 통해 준비해주세요
[Darknet]Darknet위한 초기세팅(Ubuntu20.04)
일단 본론부터 말하면 여기서 다루는건 다음과 같다. NVIDIA driver 460 (작성자는 470) CUDA11.2 (작성자는 11.4) cuDNN8.1 openCV4.5.1 작성자 기준은 무시하셔도 됩니다. 드라이버 버전이 달라서 그렇습니다. d
play2-gound.tistory.com
이제 그렇다면 바로 시작하겠습니다.
먼저 Darknet파일을 다운 받습니다.
https://github.com/AlexeyAB/darknet.git
GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Da
YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet ) - GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object ...
github.com
git clone https://github.com/AlexeyAB/darknet.git
Darknet 폴더가 준비가 되면 폴더 안에 Makefile파일을 열어 아래처럼 설정해줍니다.(작성자 기준)
그리고서 터미널을 열어서 다음 명령어를 실행해줍니다.
cd darkent make
이렇게 Makefile에 맞춘 세팅으로 빌드를 하게 됩니다,
추가적으로 conv 파일을 준비해야합니다.
해당 파일명을 알려드릴 테니 검색을 통해서 다운 받아주시기 바랍니다.
(해당 파일은 다운 받고 darknet 폴더 안에 넣어주시면 됩니다.)
yolov3-tiny일 경우 => yolov3-tiny.conv.15
yolov4일 경우 => yolov4.conv.137
이제 학습시킬 사진들을 Bounding Box 작업해서 준비해야하는데
저는 Roboflow를 사용해서 작업을 했습니다.
사용법은 이전글을 참고해주세요
https://play2-gound.tistory.com/30
YOLO 학습용 Datasets 만들기 (Roboflow 활용법)
먼저 데이터 학습을 시킬 사진들이 준비가 되어있다면 바로 학습시키기 위한 작업을 해야합니다. 위에 사진처럼 Object detection을 위해서는 우리가 직접 Bounding box작업을 통해서 학습을 시켜야합
play2-gound.tistory.com
해당 작업을 완료하고 다운을 받으셨다면 이제 다시 darknet 폴더로 돌아와서 data폴더로 이동합니다.
cd data mkdir obj #Roboflow에서 다운받은 사진을 모두 넣기 touch obj.data #모델 학습시에 세팅 설정해주는 파일 touch obj.names #여기에는 객체인지할 모든 class명을 넣어줘야함 touch train.txt # 사진의 이름을 모두 담기 (아래에서 코드 제공) #모든 파일명은 작성자 기준이면 다른 이르믕로 생성시 아래에서 사용하는 파일명을 바꿔주셔야합니다.
1.data파일
2. names파일
3. train.txt
해당 폴더에는 모든사진과 Bounding box좌표 파일이 있어야합니다.
해당 작업을 코드로 한번에 처리할 수 있습니다.
import os import glob #폴더에 들어있는 모든 사진 이름을 리스트로 반환(경로까지 모두 포함한 상태) path_jpg = glob.glob("./darknet/data/obj/*.jpg") #모든 사진의 이름을 TXT파일에 저장 with open("./darknet/data/train.txt", 'w') as f: lines = path_jpg for line in lines: f.write(line+"\n") #TXT에 있는 경로의 일부분을 삭제해주는 과정 with open("./darknet/data/train.txt", 'r') as f: lines = f.readlines() with open("./darknet/data/train.txt", 'w') as f: for line in lines: f.write(line.replace("./darknet/",'')) f.close() print("finish") #코드 실행시 터미널 위치를 주의해 주세요
cfg폴더 설정
darknet/cfg내에서 사용하고자 하는 YOLO버전을 바꿔줘야합니다.
사용할 모델.cfg 파일을 열어서 수정해줘야하는 부분은
- [net] 부분
batch=64
subdivisions=16
width=608 #32배수로 설정
height=608 #32배수로 설정
max_batches = 500500 #class 갯수 * 2000으로 설정
steps=400000,450000 #max_batches 80% 90%로 설정 - [convolutional] 부분
*모든 부분을 수정하는것이 아닌 사진 처럼 [convolutional] - [yolo]순으로 되어있는 부분만 수정합니다
filters=255 # (class 갯수+5) * 3 설정 - [yolo] 부분
classes=80 #calss 갯수
tip) "yolo" 검색해서 [convolutional] - [yolo]순으로 이어진 부분만 수정해주면 됩니다.
tiny모델은 2개, 일반 모델은 3개 부분 수정해줘야합니다.
최종학습 실행
cd darknet ./darknet detector train data/obj.data cfg/yolov4-custom.cfg yolov4.conv.137
코드 실행시 다음처럼 창이 나온다면 학습이 진행되고 있는 것 입니다.
파이팅!!
728x90'YOLO' 카테고리의 다른 글
[YOLO] YOLOv8-custom 학습 (0) 2024.03.12 [YOLO] YOLOv5-custom 학습(신호등 인지) (0) 2023.06.21 [Darknet]학습 후 Darknet_ROS & USB_cam 세팅 (0) 2023.04.13 YOLO 학습용 Datasets 만들기 (Roboflow 활용법) (0) 2022.12.22