관리 메뉴

NineTwo meet you

Yolov3 환경 세팅 및 데이터 학습 진행 튜토리얼 본문

기타

Yolov3 환경 세팅 및 데이터 학습 진행 튜토리얼

NineTwo 2021. 8. 10. 15:07
반응형

0. 환경 세팅

yolov3을 위해서는 Nvidia driver와 cuda를 설치하는 것이 좋다.

Ubuntu 18.04 Nvidia driver 설치

 

Ubuntu 18.04 Nvidia driver 설치

nvidia gpu를 사용하기 위해서는 nvidia에서 제공하는 GPU Driver를 os에 맞게 설치해야 한다. 다음 명령어를 입력해봤을때 nvidia-smi 맨 아래와 같은 결과가 나온다면 아직 Nvidia driver를 삭제하지 않은 것

settembre.tistory.com

Ubuntu 18.04 CUDA 설치

 

Ubuntu 18.04 CUDA 설치

CUDA (Computed Unified Device Architecture) NVIDIA에서 개발한 GPU 개발 툴로 nvidia-driver, CUDA, CUDNN만 설치하면 딥러닝을 쉽게 사용할 수 있기 때문에 CUDA를 설치해보자. 앞서 nvidia-driver가 설치되..

settembre.tistory.com

Ubuntu 18.04 cuDNN 설치

 

Ubuntu 18.04 cuDNN 설치

cuDNN CUDA기반의 Deep Neural Network 라이브러리를 의미한다. cuDNN을 설치하기전 Nvidia driver와 CUDA를 설치해야 한다. 로그인 cuDNN을 다운받기 위해서는 Nvida에 회원 가입을 하고 로그인 해야 한다. (필..

settembre.tistory.com

Ubuntu 18.04openCV 설치 및 완전 삭제

 

Ubuntu 18.04 openCV 설치 및 완전 삭제

openCV 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리이다. openCV 버전 확인 openCV가 설치되어 있는 경우 다음 명령어를 입력했을때 버전이 출력된다. pkg-config --modversion opencv openCV..

settembre.tistory.com

1. Darknet ( AlexeyAB) 버전 설치

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

git clone 결과

$  cd darknet

위에서 설치한 driver와 cuda를 이용해 GPU를 사용할 수 있도록 Makefile을 수정한다.

$ gedit Makefile

기존 파일

GPU=0
CUDNN=0
CUDNN_HALF=0
OPENCV=0
AVX=0
:

수정된 파일

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
:
$ make

make 전
make 진행 중
make 후

2. Pre-trained weights 다운로드

$ wget https://pjreddie.com/media/files/darknet53.conv.74

3. 폴더 구조화

custom디렉터리와 data아래 Test_image, Train_image 디렉토리를 각각 생성합니다.

darknet
    - darknet53.conv.74
    - custom
        - custom.data
        - custom.names
        - custom_yolov3.cfg
        - test.txt
        - train.txt
    - data
        - Test_image
            - 1.jpg
            - 1.txt
            :
        - Train_image
            - 101.jpg
            - 101.txt
            :
    :

4. 이미지 및 주석 파일 설정

앞서 data 디렉토리 안에 Test_image와 Train_image 디렉토리를 생성했다.

각 디렉토리 안에 다음 사진처럼 이미지와 label 된 txt 파일을 같은 디렉터리 안에 저장한다.

Test_image 디렉토리

5. test.txt & train.txt

다음 파이썬 파일을 실행하여 /Train_image과 /Test_image에 있는 jpg 또는 PNG 파일의 경로를 custom/train.txt 파일과custom/test.txt로 변환하여 custom디렉터리 안에 저장한다.

[TrainTxt.py]

import os
path_dir = '/home/XXX/darknet/data/Train_image'
 
file_list = os.listdir(path_dir)

f = open("/home/XXX/darknet/custom/train.txt", 'w')
for i in file_list:
	if i[-4:] != '.txt':
		f.write('/home/XXX/darknet/data/Train_image/'+i+'\n')

f.close()

[TestTxt.py]

import os
path_dir = '/home/XXX/darknet/data/Test_image'
 
file_list = os.listdir(path_dir)

f = open("/home/XXX/darknet/custom/test.txt", 'w')
for i in file_list:
	if i[-4:] != '.txt':
		f.write('/home/XXX/darknet/data/Test_image/'+i+'\n')

f.close()

train.txt

6. custom.names

검출하고자 하는 목록을 custom.names라는 이름으로 custom디렉터리에 저장한다.

custom.names

7. custom.data

학습을 위한 class의 개수를 지정하고 train.txt의 경로, valid.txt의 경로, custom.names의 경로, weight를 저장할 디렉터리를 입력하고 custom.data라는 이름으로 custom 디렉토리에 저장한다.

custom.data

8. custom_yolov3.cfg

darknet/cfg 디렉토리 아래 yolov3.cfg을 custom 디렉터리로 복사해 사용하도록 한다.

아래 명령어는 darknet 디렉터리에서 실행한다.

$ cp cfg/yolov3.cfg custom/custom_yolov3.cfg

custom_yolov3.cfg 파일은 모델의 구조 및 train에 대한 설정이 들어있는 파일이다.

Ctrl + f를 이용해 "[yolo]"를 검색하면 3개가 나온다. 3개 모두 다음과 같이 설정을 바꿔야 한다.

[yolo]를 기준으로 아래 있는 classes와 바로 위에 있는 filters 값을 조정한다.

classes =  검출하고 자 하는 class 수
filters = 필터 수 = (4 + 1 + 클래스 수) * 3

custom_yolov3.cfg [yolo]

다음은 기본 net 설정 값에 대한 설명이다.

batch = 기본 값 64
subdivisions = 기본값 8, Out of memory에러시 16, 32, 64로 조절 후 학습 시도
width 및 height = 기본 값은 416, 608로 변경해 학습 가능
learning_rate = 기본값 0.001, multi-gpu 사용 시 0.001 / gpu 수만큼 조절 가능
burn_in = 기본값 1000, multi-gpu 사용 시 1000 * gpu 수 만큼 조절
max_batches = 보통 class 수 * 2000 + 200으로 설정 (200은 알맞은 가중치를 얻기 위한 값)
steps = max_batches 사이즈의 80% 와 90%를 설정 (200을 더하지 않은 상태의)
# epoch = max_batches * batch / len(image)

custom_yolov3.cfg [net]

9. train

$ ./darknet detector train custom/custom.data custom/custom_yolov3.cfg darknet53.conv.74 | tee backup/train.log

training

iteration마다 생성되는 loss값을 확인하고 싶다면 다른 terminal창에서 다음 코드 입력 시 iteration: loss(iou), loss(classify), learning rate, iteration time, 훈련 이미지 개수 순서로 확인이 가능하다.

$ grep “avg” backup/train.log

10. Object Detection!

test를 진행하기 전에 이전에 만든 cfg 파일을 복사해 test를 위한 cfg 파일을 생성한다.

$ cp ./custom/custom_yolov3.cfg ./custom/custom_yolov3_test.cfg

새로 생성된 custom_yolov3_test.cfg의 batch와 subdivisions의 값을 1로 바꾼다.

custom_yolov3_test.cfg [net]

test를 진행한다.

$ ./darknet detector test custom/custom.data custom/custom_yolov3.cfg backup/custom_yolov3_000.weights

다음과 같이 Enter Image Path라는 문구가 나오면 Object Detection을 보고 싶은 사진의 경로를 입력한다.

:
Enter Image Path:./data/Test_image/*. jpg

[mAP & IoU check!!]

./darknet detector map custom/custom.data custom/custom_yolov3.cfg backucustom_yolov3_final.weights

참고 자료

https://eehoeskrap.tistory.com/370

https://keyog.tistory.com/6

반응형
Comments