> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# [YOLO DARKNET]  구성 및 설치, 사용방법
- URL: https://www.popit.kr/yolo-darknet-setup-and-usage/
- Published: 2017-06-04T13:11:28.000Z
- Updated: 2017-06-04T13:56:46.000Z
- Author: Martin
- Tags: #소프트웨어, 딥러닝, YOLO Darknet

이번 포스팅에서는 딥러닝 프레임워크 중, [Real Time Detection & Recognition으로 유명한 YOLO Darknet](http://martin.pixelstairs.com/51?ref=popit.kr)(번역) ([논문 원본](https://pjreddie.com/media/files/papers/yolo.pdf?ref=popit.kr))의 구성, 설치 및 사용방법에 대해서 포스팅하겠습니다.

[YOLO Darknet 페이지(](https://pjreddie.com/darknet/yolo/?ref=popit.kr)[https://pjreddie.com/darknet/yolo/](https://pjreddie.com/darknet/yolo/?ref=popit.kr)[)](https://pjreddie.com/darknet/yolo/?ref=popit.kr) 를 확인하시면, 조금 더 자세한 정보를 확인할 수 있습니다.

# Pre - requirement

1. [OpenCV 2.4.XX](http://martin.pixelstairs.com/15?ref=popit.kr)
2. [CUDA](http://martin.pixelstairs.com/category/IT/TensorFlow?ref=popit.kr)

# Install

Darknet의 소스는 다음 [github 저장소](https://github.com/pjreddie/darknet?ref=popit.kr)에서 확인할 수 있습니다. 이번 포스팅에서는 최신버전의 코드(Darknet V2)가 아닌, 다음과 같은 [이전버전(Darknet V1)의 코드](https://github.com/pjreddie/darknet/tree/b8eb8b0a4016232c8da95c26501ac60ea9491901?ref=popit.kr)를 사용하였습니다. Yolo Darknet의 폴더 구조는 다음과 같습니다.  

```
darknet
  |
  |- cfg /
  |- data/
  |-LICENSE
  |-Makefile
  |-obj/
  |-README.md
  |-results/
  |-scripts/ 
  |-src/
```

Makefile을 열어보면, 다음과 같은 내용을 확인할 수 있습니다.

![](https://www.popit.kr/content/images/wp/2017/06/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7-2017-05-17-%EC%98%A4%ED%9B%84-3.26.31-503x600.png)

- CUDA 설치를 완료했다면, GPU=0을 GPU=1로
- OpenCV 설치를 완료했다면, OPENCV=0을 OPENCV=1로 바꾸어줍니다.
- 둘 다 설치가 안되어있다면, OPENCV=0, GPU=0으로 설정합니다.

OpenCV와 CUDA 없이도 실행은 가능하나, Yolo Darknet에서 사용할 수 있는 기능에 대한 제약이 많아지게 됩니다. 해당 Makefile에서 몇가지를 살펴보면 다음과 같습니다.

- ***NVCC=nvcc -> CUDA compiler***
- ***VPATH=./src/ -> 소스코드 위치***
- ***EXEC -> 실행 파일 명***
- ***CC -> C Compiler***
- ***LDFLAGS -> linker option***
- ***CFLAGS -> compile option***

이제 해당 내용에 대한 설정을 완료했다면, 터미널창(리눅스 기준) make 명령어를 입력하여 코드를 Compile해줍니다. 컴파일이 완료되면 폴더에 darknet이라는 실행파일이 만들어집니다.

# Test

YOLO Darknet의 기본적인 명령어는 다음과 같은 구성을 갖습니다.

./ (실행파일) (Darknet에서 지원하는 딮러닝 아키텍쳐 종류) (사용할 함수 이름) (설정파일) (가중치<Weights>파일) (추가옵션)

예)

1. **단일 이미지에 대한 테스트**

```
./darknet yolo test cfg/yolo.cfg yolo.weights data/dog.jpg
```

1. **카메라 스트리밍 영상 혹은 동영상에 대한 테스트**

```
./darknet yolo demo cfg/yolo.cfg yolo.weights -c<number> : 카메라 index number

./darknet yolo demo cfg/yolo.cfg yolo.wegiths test.mp4 : 동영상에 대한 테스트
```

![](https://www.popit.kr/content/images/wp/2017/06/Screen_Shot_2016-11-17_at_11.14.54_AM-600x498.png)

기본적으로 VOC에 대한 가중치 파일은 YOLO Darknet 사이트에서 제공하나, 실제 원하는 도메인에 사용하고자 한다면, 직접 학습을 시켜야합니다.

# Train

YOLO Darknet 폴더 안의 scr/yolo.c 파일을 열어보면 다음과 같은 내용을 확인할 수 있습니다.  

```c
char *voc_names[] = {"aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", 

"diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"};

char *train_images = "/data/voc/train.txt";

char *backup_directory = "/home/pjreddie/backup/";
```

***char \*voc\_names\[\]***는 클래스의 이름을 설정하는 변수이며, ***char \*train\_images***는 학습할 image들의 list.txt파일의 위치, ***char \*backup\_directory***는 학습을 하면서 중간결과들을 저장해놓는 폴더 위치입니다. 최종 가중치 파일(Weights)파일도 해당 디렉토리에 저장됩니다.

사용할 용도에 맞게 위의 내용을 변경 및 원하는 딮러닝 모델(cfg파일)을 만든 후에 darknet 폴더에서 다시 make를 실행한 후, 다음과 같은 명령어를 입력하여 학습을 진행합니다.  

```
./darknet yolo train cfg/yolo.cfg (pre-trained model)
```

여기서 Pre-trained Model이 없다면, 가중치는 자체적으로 초기화한 가중치 값을 사용하게 됩니다. 학습이 정상적으로 진행이 된다면, 다음과 같은 화면이 나타나게 됩니다.

![](https://www.popit.kr/content/images/wp/2017/06/Screenshot-at-2017-05-17-15_52_48-600x567.png)