본문 바로가기

Deep Learning/Darknet

[Darknet yolo]yolo를 이용한 물체감지(Object Detection) 튜토리얼

반응형

 윈도우 환경에서 YOLO CNN을 이용한 물체감지(Object Detection) 튜토리얼

darknet과 yolo 관련자료 링크 -> https://pjreddie.com/darknet/yolo/


<yolov3 레이어를 이용한 물체감지를 해보자!>


알파고를 필두로 인공지능이 핫해지면서 딥러닝이다 4차산업혁명이다 뭐다 하면서 세상이 바뀌어가는 것 같다.  더불어 하드웨어의 성능이 고도화되면서 인공지능을 복잡한 연산이 가능해지면서 인공지능의 대부흥시대를 살아가고 있다. 훌륭한 개발자들이 Tensorflow, Caffe, Darknet 등의 딥러닝 오픈소스 프레임워크를 공개하면서 인공지능의 맛을 볼 수 있게 되었다. 

영상에서 haar-cascade 등 전통적인 영상처리를 통해 사람이나 움직이는 물체를 감지하려는 노력은 꽤 오래 전부터 있어왔고, 성과도 꽤나 있었던 것으로 보인다. 하지만 인공지능 알고리즘이 사용되면서 그 정확도는 그것들 보다 월등한 결과를 보여주기도 한다. 커뮤니티나 블로그 같은 곳에서는 인공지능의 정확도가 너무 높으니까 그 동안 해오던 노력들이 허탈하다 라는 반응도 종종 봤던 것 같다. 하지만 딥러닝 하나의 방법만으로는 실제상황에 적용하기에는 어려운 점도 있고 전처리도 필요하기 때문에 기존의 노력들이 인공지능에 더해지면 더욱 훌륭한 뭔가가 나오지 않을까 라고 생각한다.

아마 이번 포스트는 튜토리얼 정도가 될 것 같은데, github의 설명자료에 영어로 자세히 나와있기 때문에 거의 한글로 번역본정도의 수준이 되지 않을까 싶다. 추가로 설치나 이런 저런걸 하면서 겪었던 문제점이나 노하우도 작성해보고자 한다. yolov2때부터 사용했으니까 뭔가 그 동안 쌓였왔던 노하우가 있지 않을까...?(나의 바람)

어쨌든 그래서 준비한 YOLOv3를 이용한 물체감지 튜토리얼 시작!


1. 윈도우에서 사용가능한 YOLOv3 

<훌륭한 알고리즘 YOLO, 윈도우에서 사용가능!>

원래 darknet 프레임워크는 리눅스 기반으로 만들어진 것으로 아는데 어떤 훌륭한 개발자가 그것을 그대로 윈도우환경에서 구동할 수 있게 만들어두었다.

링크 -> https://github.com/AlexeyAB/darknet

링크에 들어가면 github에 정리된 코드들과 정리된 문서들을 만날 수 있다. 영어를 잘 하고 github사용이 익숙한 분들은 그냥 저 링크 설명을 보고 설치하는 것도 좋다.


2. YOLOv3 사용을 위해 필요한 환경 설정

YOLOv3를 사용하기 위해 필요한 것은 다음과 같다.

빌드를 위한 MS Visual Studio 2015 버전(영어버전 추천)

그래픽카드와 GPU사용을 위한 CUDA(yolo는 cpu사용도 가능하긴 한데 GPU사용을 압도적으로 추천한다. 아마 cpu사용하면 프로세스가 너~무 느려서 결과를 못볼 것이다.)

신경망의 훈련속도 가속을 위한 cuDNN

감지한 물체에 박스를 쳐주는 역할을 하는 OpenCV이다.

하나하나 다운받아 설치해보자


2-1. CUDA 설치

1. NVIDIA홈페이지에서 CUDA 10.0 다운로드(원래 9.1버전을 사용했는데 홈페이지 들어가서 봤는데 뭔가 달라져서 readme파일 확인해보니 15시간 전에 코드가 업데이트 되었다. 이것이 오픈소스의 매력)

CUDA 10.0 버전 다운로드 링크 -> https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal

<다운로드!>

2. 다운로드한 파일을 실행하면 자동으로 실행이 쭉쭉 진행된다. 환경변수 등록도 다 되니 참 편하다. 설치되는 경로는 안바꾸는게 편하다. CUDA는 여러가지 버전을 다양하게 설치해서 사용할 수 있다. 환경변수 관리만 잘하면 다양한 버전을 사용해 볼 수 있다.


2-2. cuDNN설치 

1. NVIDIA 홈페이지에서 cuDNN 다운로드, cuDNN을 다운로드 하려면 NVIDIA개발자 등록을 해야한다. NVIDIA 계정을 만들고 등록을 하면 다운 받을 수 있다.

cuDNN 다운로드 링크 -> https://developer.nvidia.com/rdp/cudnn-download

<CUDA버전을 잘 확인하고 cuDNN을 다운로드 한다>

다운받은 파일은 zip압축파일 일텐데 압축해제하고 CUDA가 설치되어있는 폴더에 복사/붙여넣기 해주면된다. CUDA를 설치할 때 경로를 변경하지 않았다면 CUDA가 설치되어있는 폴더는 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1 이런식으로 되어있을 것이다. bin폴더 등을 복사해서 붙여 넣어 주자.

시스템 환경변수에 cuDNN도 추가해주어야 한다.

이미지 출처 : https://hsto.org/files/a49/3dc/fc4/a493dcfc4bd34a1295fd15e0e2e01f26.jpg

2-3. OpenCV 설치

OpenCV는 3.x버전을 사용하면 된다. 나는 3.4.0버전을 사용했다. yolo문서에도 3.4.0버전을 추천한다. 3버전 중에서 원하는 것을 다운받아 설치하면 된다. 설치경로는 C:\opencv이런식으로 하면 편하다.

OpenCV다운로드 링크 -> https://opencv.org/releases.html


2-4. Darknet 다운로드

github에서 darknet을 다운받는다. 초록색의 clone or download 버튼이 있다. Downlad ZIP을 선택하자 이게 편하다. 

다운받은 ZIP파일을 원하는 위치에 압축해제하자. C:\ 추천

Darknet 빌드에 필요한 환경이 구성되었다!


3. Darknet 빌드

1. darknet.sln 실행

2. 프로젝트를 x64, Release로 세팅

3. project 우클릭 -> properties -> (right click on project) -> properties -> C/C++ -> General -> Additional Include Directories : 본인의 OpenCV include 경로 추가 ex) C:\opencv_3.4.0\opencv\build\include

4.  project 우클릭 -> properties -> Linker -> General -> Additional Library Directories: 본인의 OpenCV lib경로 추가 ex) C:\opencv_3.4.0\opencv\x64\vc14\lib

5. CUDA 환경변수 확인

6. 빌드(한 방에 된다면 축하합니다. 아마 비주얼 스튜디오 사용경험이 적다면 에러가 날 확률이 매우 높다. 프로젝트의 속성을 잘 확인해보자. 쓸 데 없는 것은 다 지워도 된다.)


4. Darknet 실행

실행하기 전에 OpenCV에 있는 opencv_world340.dll, opencv_ffmpeg340_64.dll파일을 darknet.exe가 있는 폴더로 복사/붙여넣기 해준다.


4-1 실행 커맨드에 대한 설명

darknet은 다른 오픈소스프로그램과 비슷하게 배치파일 형태로 프로그램을 실행시킬 수 있다.

이번 튜토리얼에서 실행해 볼 것은 이미지 한 장을 테스트 하는 것이므로 커맨드는 다음과 같이 구성된다.

darknet.exe detector test data/coco.data cfg/yolov3.cfg weights/yolov3.weights dog.jpg

detector는 darknet실행할 때 꼭 써줘야하는 커맨드 역할이 있는지는 모르겠는다(관심이 없었음)

test는 image 파일을 test할 때 사용하는 커맨드

cfg는 layer 구조에 대한 내용이 들어있다.

weights파일은 학습시킨 가중치 파일이다.

dog.jpg파일은 테스트 해볼 이미지 파일이다.

다른 포스트에 cfg, data, weights등 필요한 문서, 명령어에 대한 설명 등을 작성할 예정이다.


4-2. 실행결과

<CNN레이어를 쭉 읽고>

<결과가 윈도우 콘솔에 출력되고(BOUND BOX좌표는 원래안나옵니다. 나오게 코드를 수정했음)>

<이런식으로 박스를 씌운다(원래 박스에 이름도 나오는데 안나오게 코드를 수정했음)>


작년인지 재작년부터 정말 잘 써먹은 DARKNET. 성능이 정말 좋다. 

지금까지 프로그램을 설치하고 실행하는 튜토리얼을 진행해봤다. 다음에는 학습은 어떻게 하는지 구성은 대체 어떻게 되어있는지에 대해 포스팅 할 예정이다


반응형

'Deep Learning > Darknet' 카테고리의 다른 글

[Darknet YOLO] 데이터 파일 정리 - 3  (0) 2018.12.18
[Darknet YOLO] Darknet-YOLO 사용법  (1) 2018.12.17