AlexeyAB/darknet을 사용하였습니다.

Custom object 학습하는 법 (yolov3-tiny.ver)


1. 우선 cfg파일(cfg/yolov3-tiny_obj.cfg)을 수정해줍니다. test 부분이 주석처리 되어있지 않다면 우선 test 부분을 주석처리 해줍니다.

1-1.

첫번째로 train 부분을 수정합니다.
batch = 64, subdivision = 16으로 변경합니다.
max_batches는 class의 갯수 * 2000으로 변경합니다. 저의 경우에는 class의 갯수가 2개였기 때문에, 4000으로 변경하였습니다.
steps는 max_batches의 80%와 90%로 변경합니다. 저는 3200, 3600으로 변경하였습니다.
network의 사이즈는 width = 416, height = 416이 default이나, 32의 배수는 모두 가능합니다.

1-2.

다음으로 yolo layer를 변경해줍니다.
classes를 본인이 원하는 class의 갯수로 변경합니다. 저는 2로 변경했습니다.


1-3.

yolo layer 바로 위의 convolutional layer에서 filters를 변경해줍니다.
초기값은 filters = 255이지만, filters = (classes+5)*3 으로 변경합니다.
정확한 공식은 (classes+1+coords)*mask입니다. 만약 v2 버전을 사용하시게 되면 mask가 없는데 이때는 mask 대신 num을 사용해주시면 됩니다.
class가 2이므로 21로 바꿔주었습니다.


2. obj.names 파일을 생성해줍니다.

directory는 항상 darknet.exe를 기준으로 생각하면 됩니다.
저는 이미지를 data/obj 폴더 안에 넣을 것이므로, data/ 안에 obj.names를 만들었습니다.
내용은 다음과 같습니다.

class name 1
class name 2

annotation tool을 사용해서 class에 해당하는 번호를 부여했을 때, 해당 클래스의 이름을 지정해주는 파일입니다.


3. obj.data 파일을 생성해줍니다.

해당 파일 또한 data/ 안에 obj.data를 만들었습니다.
내용은 다음과 같습니다.

classes= 2
train  = data/train.txt
valid  = data/test.txt
names = data/obj.names
backup = backup/

이 때, 저는 validation set을 사용해서 mAP를 계산할 예정이므로, 따로 validation의 경로를 추가하였으나, 필요하지 않다면 valid 부분은 사용하지 않아도 무방합니다.


4. train에 사용할 이미지 파일을 넣어줍니다.

저의 경우에는 data/obj 안에 넣어주었고, 이미지와 annotation tool을 통해 생성한 txt 파일이 함께 들어가야 합니다.

4-1 이미지를 labeling 하는 방법은 다음과 같습니다.

https://github.com/AlexeyAB/Yolo_mark

해당 주소를 clone합니다.
이 후, 원하는 경로에 이미지를 넣고 실행 파일 내의 이미지 경로를 변경해줍니다.
저의 경우 ubuntu를 사용하였기 때문에 linux_mark.sh 파일에서 이미지의 경로를 변경해주었고, 이미지는 data/obj 에 넣을 것이었으므로 Yolo_mark 폴더 내부에 data/obj 폴더를 생성하여 그 안에 넣어주었습니다.
이후 bash linux_mark.sh 명령어를 터미널 창에서 실행하면 자동으로 train.txt 파일이 생성됩니다. 해당 파일을 darknet 폴더 안의 data/ 안에 넣어줍니다.


5. pretrained 모델을 다운로드 받아줍니다.

저의 경우에는 미리 학습된 데이터를 fine tuning하는 방식을 사용하기 위해서  yolov3-tiny.conv.11 파일을 다운로드 받았습니다.
경로는 다음과 같습니다.

https://drive.google.com/file/d/18v36esoXCh-PsOKwyP2GWrpYDptDY8Zf/view?usp=sharing


6. training을 시작합니다.

우분투에서의 명령어는 다음과 같습니다.

./darknet detector train data/obj.data cfg/yolov3-tiny_obj.cfg yolov3-tiny.conv.11

이 때, mAP를 계산하고 싶다면 명령어는 다음과 같습니다.

./darknet detector train data/obj.data cfg/yolov3-tiny_obj.cfg yolov3-tiny.conv.11 -map

darknet 실행 파일의 경로에 backup/ 폴더가 있어야 weight가 저장됩니다.
weight는 100 iteration 마다 yolov3-tiny_obj_last.weights 파일 저장이 되고, 1000 iteration이 되면 yolov3-tiny_obj_X000.weights 파일이 저장되게 됩니다.


7. 이 후 해당 weight로 test를 하는 경우, 명령어는 다음과 같습니다.

./darknet detector test data/obj.data cfg/yolov3-tiny_obj.cfg yolov3-tiny_obj_4000.weights

또는 영상을 test 하시고 싶은 경우, 다음 명령어로 가능합니다.

./darknet detector demo data/obj.data cfg/yolov3-tiny_obj.cfg yolov3-tiny_obj_4000.weights -ext_output test.mp4

웹캠 버전은 다음과 같습니다.

./darknet detector demo data/obj.data cfg/yolov3-tiny_obj.cfg yolov3-tiny_obj_4000.weights -c 0

'AI, 빅데이터 > DeepLearning' 카테고리의 다른 글

우분투에서 TensorFlow 설치하기  (0) 2019.10.01

파이썬과 c, c++을 이미 알고 있다면 거의 대부분의 명령어가 이미 익숙할 것이다.
강의 들으면서 좀 다른 부분들을 정리했다.

'AI, 빅데이터 > R programming' 카테고리의 다른 글

Ubuntu 18.04에 R 설치하기  (0) 2020.02.17

최근에 ADsP 자격증 시험에 관심이 생겨서 R programming을 공부하는 중이다.

https://www.inflearn.com/course/R-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EA%B8%B0%EC%B4%88#

불러오는 중입니다...

참고한 강의는 다음과 같다.

 

 

요즘에는 거의 Ubuntu 18.04에서만 작업을 하고, 가끔 개인 노트북으로 작업할 때만 윈도우를 쓰기 때문에 그냥 Ubuntu에 R을 설치했다. 설치하는 방법은 간단하다.

 

CRAN에서 제공하는 외부 repository를 통해 추가해야 한다. 따라서 우선 GPG(Gnu Privacy Guard) key를 설치한다.

> sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

 

한 번 key를 입력하면 repository를 추가할 수 있다.

> sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/'

package 추가하기 전에 update를 한 번 해주자.

> sudo apt update

 

이제 R을 설치한다.

> sudo apt install r-base

Y를 한 번 해주면 이제 잘 설치가 되었을 것이다.

 

R을 실행하려면 다음과 같이 입력하면 된다.

> sudo -i R

 

참고한 블로그는 다음과 같다.

https://www.digitalocean.com/community/tutorials/how-to-install-r-on-ubuntu-18-04#step-1-%E2%80%94-installing-r

 

How To Install R on Ubuntu 18.04 | DigitalOcean

R is an open-source programming language that specializes in statistical computing and graphics. In this tutorial, we will install R and show how to add packages from the official Comprehensive R Archive Network (CRAN).

www.digitalocean.com

 

'AI, 빅데이터 > R programming' 카테고리의 다른 글

R programming 기본  (0) 2020.02.17

오늘은 TensorFlow를 설치해보도록 하겠습니다.

TensorFlow란 구글에서 제공하는 open source 라이브러리 입니다. Python이라는 언어를 가지고 data flow graph를 활용하여 수학적인 계산을 할 수 있습니다.

 

https://namu.wiki/w/%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C%EC%9A%B0

 

텐서플로우 - 나무위키

텐서플로우는 다음과 같은 특징을 가진다. 데이터 플로우 그래프를 통한 풍부한 표현력아이디어 테스트에서 서비스 단계까지 이용 가능계산 구조와 목표 함수만 정의하면 자동으로 미분 계산을 처리 케라스(Keras)는 TensorFlow, Theano, CNTK 등 딥 러닝 라이브러리를 포함하고 있어 쉽게 다층 퍼셉트론 신경망 모델, 컨볼루션 신경망 모델, 순환 신경망 모델, 조합 모델 등을 구성할 수 있다. 텐서플로우 2.0은 대부분의 신경망 구현을 케라스로 하

namu.wiki

 

 여기서 data flow graph란 node에서 계산이 이루어지고 edge가 data를 의미하는 그래프를 말합니다.

설치는 굉장히 간단합니다!

 

pip install --upgrade tensorflow 

 

명령어를 통해서 설치가 가능합니다.

굉장히 간단 ..

 

사실 지금까지 C++을 주 언어로 사용하고 있었다.

그러나 최근 딥러닝을 공부하면서 파이썬을 공부하고 있다!

자료형에서부터 차이가 좀 있었는데, List나 dictionary가 대표적인 것 같다.

 

그럼 List부터 알아보자.

(실행 환경은 Jupyter notebook이었다)

 

우선 List의 정의는 다음과 같다.

List "여러 정보를 하나로 묶어서 저장하고 관리할 수 있게 하는 데이터 구조"

C++에서 Array와 유사한 점이 많은데 선언은 다음과 같이 할 수 있다.

List의 선언

대괄호 안에 , 로 구분하여 값을 입력해주면 된다. List는 문자열, 숫자 등을 원소로 가질 수 있으며 C에서 처럼 자료형을 굳이 명시해주지 않아도 자동으로 자료형을 스스로 인지해준다.

List안의 원소에는 Array와 비슷하게 index로 접근이 가능하다.

 

C++와 다른 독특한 점은 in 과 not in으로 요소가 있는지 없는지 확인이 가능하다는 점이다.

예를 들어 fruit이라는 List안에 apple, banana, orange등의 요소가 있을 때, 다음과 같이 확인이 가능하다.

List 내부 요소 확인

 

List를 순회하는 방법에서도 C++와 차이가 있다. C++에서는 변수를 하나 지정하여 index를 바꿔가면서 참조하는 방식을 사용했다면 Python에서는 다음과 같은 방법으로 List를 순회한다. (물론 index를 사용해서 참조하는 방법 또한 가능하다!)

List의 순회

 

List에서 사용 가능한 함수는 다음 문서를 참조하면 좋다!

http://python-ds.com/python-3-list-methods

 

Python 3 List Methods & Functions

Python 3 List Methods & Functions List of list methods and functions available in Python 3. List Methods Method Description Examples append(x) Adds an item (x) to the end of the list. This is equivalent to a[len(a):] = [x]. a = ["bee", "moth"] print(a) a.a

python-ds.com

 

+ Recent posts