본문 바로가기
프로그래밍/딥러닝 (Deep Learning)

darknet YOLO로 물체 인식하기 (deep learning, object detection)

by GhostWeb 2020. 1. 4.
반응형


이번에는 darknet Yolo v3를 환경 구축(설치)과 물체 인식을 해보도록 할게요.


▷ 테스트 환경

1. Ubuntu (버추얼 머신 - 우분투 가상 환경)

2. 노트북 (Intel i3-2330M 2.20Hz, RAM 8GB, SSD, GT 540M)


▷ 기타 환경 (옵션, 없거나 이용하지 않아도 상관없음)

1. OpenCV

2. GPU, Cudnn, CUDA(NVIDIA Graphic Card)



1. 코드 다운로드


먼저 github를 통해 darknet을 다운로드하세요.

다운로드하는 방법은 링크를 통해 github 사이트에서 다운로드 버튼을 클릭하거나 터미널 창을 열어 아래의 명령어를 입력하면 받을 수 있어요. ( https://github.com/pjreddie/darknet)


- 터미널에서 다운로드

git clone https://github.com/pjreddie/darknet



우분투에 git이 없다고 나오는 경우에는 아래의 명령어를 입력하여 git을 설치하세요.


sudo apt install git






2. 코드 빌드


git clone 하여 github에서 코드 다운로드를 완료하면 darknet 폴더가 생기는 이 폴더로 이동한 다음 사용하는 환경에 맞게 Makefile를 수정한 다음 make 하면 돼요.

기본 설정은 CPU로 되어 있어 GPU를 사용하실 분은 MakeFile을 열어 사용 체크를 해줘야 돼요.

(2.1 ~ 2.2 해당하는 작업)


2.1. Makefile 설정

vi 또는 gedit를 이용하여 Makefile을 열어 GPU, OpenCV 사용 여부 등을 설정해주세요.

단순히 CPU로 사용하실 분은 건너뛰셔도 돼요.


 $ gedit Makefile



GPU=0 # GPU 사용 시 1로 변경

CUDNN=0 # Cudnn 사용 시 1로 변경 (NVIDIA)

OPENCV=0 # opencv 사용 시 1로 변경 >물체 인식 후 이미지 뷰의 창을 띄워 결과 확인 가능


2.2. 빌드

 cd darknet

 make


만약 시스템에 make, gcc, pkg-config가 설치되어 있지 않으면 아래의 명령어를 입력하여 설치하고 make 하세요.



- 기본

 sudo apt install make

 sudo apt install gcc




- pkg-config: not found

sudo apt-get install pkg-config






3. 물체 인식하기


우선 아래의 명령어를 터미널에 입력하여 yolov3 가중치를 다운로드하세요.

darknet의 경우 여러 가중치를 사용할 수도 있어요.

이는 밑에서 설명하도록 할게요.


3.1. 가중치 다운로드

가중치 다운로드하기 위해 터미널에 다음과 같은 명령어를 입력하세요.

(또는 아래의 링크를 웹브라우저에 입력하여 다운로드)


wget https://pjreddie.com/media/files/yolov3.weights



3.2 물체 인식하기

지금은 yolov3를 기준으로 다음과 같이 cfg, weights, 인식할 이미지 등을 같이 입력하면 돼요.


./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg


cfg/yolov3.cfg : 설정값

yolov3.weight : 가중치



결과를 확인하면 해당 이미지를 처리하는데 걸린 시간과 객체의 이름, 인식률(%)이 표시돼요.

그리고 인식 결과가 이미지 darknet 폴더 내에 predictions.jpg로 저장돼요.


Loading weights from yolov3.weights...Done!

data/dog.jpg: Predicted in 67.919827 seconds.

dog: 100%

truck: 92%

bicycle: 99%



Makefile에서 OPENCV를 1로 설정하여 make 하였다면 결과 창이 떠요.


실행 중에 Killed가 뜨면 메모리 관련, 시스템 환경으로 인한 실행 중단 일 수 있어요.

저는 버추얼 머신의 기본 메모리를 낮게 잡아놔 총 4GB로 설정해주니 죽지 않고 잘 실행되네요.



위의 명령어로는 기본 인식률 0.25(25%)가 넘는 경우에만 Bounding Box(네모) 표시하기 때문에 원하는 인식률 이상의 객체를 뽑아내고 싶으신 분은 뒤에 [ -thresh 원하는 값 ]을 입력해주시면 돼요.

-thresh 0 : 전체

-thresh 0.9 : 90% 이상인 경우만 표시


./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0.95


Loading weights from yolov3.weights...Done!

data/dog.jpg: Predicted in 45.647927 seconds.

dog: 100%

bicycle: 99%



저는 버추얼 머신(VM)의 우분투 환경, CPU만 사용한 결과로 실제 시스템 환경에서 GPU 사용을 할 경우에는 이 결과보다 빠르게 나와요.


이외에도 yolov3-tiny라고 다른 가중치를 이용하여 물체 인식을 할 수도 있어요.

yolov3-tiny의 경우 yolov3보다 가볍지만 정확도는 떨어지는 모델이며 사용법은 yolov3와 비슷하여 앞의 명령어에서 cfg, weight 부분을 바꿔주면 돼요.


 wget https://pjreddie.com/media/files/yolov3-tiny.weights

 ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg






4. YOLO3, YOLO3-Tiny 인식 결과 비교


▷ 테스트 이미지 : ./data/dog.jpg

▷ 테스트 환경 : 버추얼 머신(VM 환경), CPU


▷ YOLO3

Loading weights from yolov3.weights...Done!

./data/dog.jpg: Predicted in 51.491298 seconds.

dog: 100%

truck: 92%

bicycle: 99%


▷ YOLO3-Tiny

Loading weights from yolov3-tiny.weights...Done!

./data/dog.jpg: Predicted in 1.888756 seconds.

dog: 56%

car: 52%

truck: 56%

car: 62%

bicycle: 58%



정확도 : Yolo3 >Yolo3-Tiny

처리 속도 : Yolo3-Tiny >Yolo3


Yolo3 Tiny가 속도가 빠른 대신 인식 정확도는 Yolo3가 더 높아요.

그래서 임베디드 같은 낮은 사양의 환경에서는 Yolo3 Tiny를 이용하는 게 좋을듯하네요.

이 밖에도 darknet 폴더 내부에 있는 data 폴더에 다양한 이미지들이 있으니 참고하세요.


그리고 YOLOv3는 80개의 클래스를 제공하고 있는데요.

data/coco.names 파일을 열면 클래스 네임들을 볼 수 있어요.

person

bicycle

car

....


그럼 이상으로 포스팅을 마치면 다음은 YOLO Train(학습) 편으로 돌아올게요.



반응형