이번 포스팅에서는 YOLO Darknet의 설치 및 실행에 대해서 포스팅하겠습니다.
[Object Detection / Deeplearning] YOLO Darknet v2 - [1]
1. Install
이전 포스팅에서 언급하였던, YOLO Darknet github에서 코드를 다운 받습니다.
다운 받으셨으면 이전 포스팅의 구성처럼 파일 계층이 있을겁니다.
Darknet을 Install하기 위해서는 Makefile을 보시면 됩니다.
설치를 위해서 주로 보셔야하는 옵션은 GPU / CUDNN / OPENCV / OPENMP / DEBUG 입니다.
GPU는 NVIDIA Graphics 카드가 컴퓨터에 설치가 되어있고, CUDA가 설치되었다면 값을 1로 변경해주시면 됩니다.
만약 GPGPU를 이용한 병렬연산을 하지 않겠다하시면 옵션을 0으로 두시면됩니다.
CUDNN도 마찬가지로 CUDA가 설치되어있고, CUDNN까지 설치를 하셨다면 CUDNN 옵션을 1로 변경해주시면 됩니다.
OPENCV옵션은 OpenCV가 컴퓨터에 설치되어있다면 옵션을 1로 주시면 됩니다.
제가 마지막으로 확인한 OpenCV 버전에 대한 지원은 2.4.x ~ 3.3.0까지 작동하는 것을 확인하였습니다.
OPENMP 옵션은 컴퓨터에 OpenMP가 설치가 되어있다면 1로 변경해주시면 되겠습니다.
DEBUG모드는 제가 사용해보지 않았지만 사용하시려면 옵션값을 1로 주시면 됩니다.
Darknet을 원활하게 실행시키시려면 최소한 OpenCV와 CUDA를 설치하셔서 OPENCV옵션과 GPU옵션을 1로 사용하시길
추천드립니다.
Makefile GPU=0 CUDNN=0 OPENCV=0 OPENMP=0 DEBUG=0 ARCH= -gencode arch=compute_30,code=sm_30 \ -gencode arch=compute_35,code=sm_35 \ -gencode arch=compute_50,code=[sm_50,compute_50] \ -gencode arch=compute_52,code=[sm_52,compute_52] # -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated? # This is what I use, uncomment if you know your arch and want to specify # ARCH= -gencode arch=compute_52,code=compute_52 VPATH=./src/:./examples SLIB=libdarknet.so ALIB=libdarknet.a EXEC=darknet OBJDIR=./obj/ CC=gcc NVCC=nvcc AR=ar ARFLAGS=rcs OPTS=-Ofast LDFLAGS= -lm -pthread COMMON= -Iinclude/ -Isrc/ CFLAGS=-Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC ifeq ($(OPENMP), 1) CFLAGS+= -fopenmp endif ifeq ($(DEBUG), 1) OPTS=-O0 -g endif CFLAGS+=$(OPTS) ifeq ($(OPENCV), 1) COMMON+= -DOPENCV CFLAGS+= -DOPENCV LDFLAGS+= `pkg-config --libs opencv` COMMON+= `pkg-config --cflags opencv` endif ifeq ($(GPU), 1) COMMON+= -DGPU -I/usr/local/cuda/include/ CFLAGS+= -DGPU LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand endif ifeq ($(CUDNN), 1) COMMON+= -DCUDNN CFLAGS+= -DCUDNN LDFLAGS+= -lcudnn endif OBJ=gemm.o utils.o cuda.o deconvolutional_layer.o convolutional_layer.o list.o image.o activations.o im2col.o col2im.o blas.o crop_layer.o dropout_layer.o maxpool_layer.o softmax_layer.o data.o matrix.o network.o connected_layer.o cost_layer.o parser.o option_list.o detection_layer.o route_layer.o box.o normalization_layer.o avgpool_layer.o layer.o local_layer.o shortcut_layer.o activation_layer.o rnn_layer.o gru_layer.o crnn_layer.o demo.o batchnorm_layer.o region_layer.o reorg_layer.o tree.o lstm_layer.o EXECOBJA=captcha.o lsd.o super.o art.o tag.o cifar.o go.o rnn.o segmenter.o regressor.o classifier.o coco.o yolo.o detector.o nightmare.o attention.o darknet.o ifeq ($(GPU), 1) LDFLAGS+= -lstdc++ OBJ+=convolutional_kernels.o deconvolutional_kernels.o activation_kernels.o im2col_kernels.o col2im_kernels.o blas_kernels.o crop_layer_kernels.o dropout_layer_kernels.o maxpool_layer_kernels.o avgpool_layer_kernels.o endif EXECOBJ = $(addprefix $(OBJDIR), $(EXECOBJA)) OBJS = $(addprefix $(OBJDIR), $(OBJ)) DEPS = $(wildcard src/*.h) Makefile include/darknet.h #all: obj backup results $(SLIB) $(ALIB) $(EXEC) all: obj results $(SLIB) $(ALIB) $(EXEC) $(EXEC): $(EXECOBJ) $(ALIB) $(CC) $(COMMON) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(ALIB) $(ALIB): $(OBJS) $(AR) $(ARFLAGS) $@ $^ $(SLIB): $(OBJS) $(CC) $(CFLAGS) -shared $^ -o $@ $(LDFLAGS) $(OBJDIR)%.o: %.c $(DEPS) $(CC) $(COMMON) $(CFLAGS) -c $< -o $@ $(OBJDIR)%.o: %.cu $(DEPS) $(NVCC) $(ARCH) $(COMMON) --compiler-options "$(CFLAGS)" -c $< -o $@ obj: mkdir -p obj backup: mkdir -p backup results: mkdir -p results .PHONY: clean clean: rm -rf $(OBJS) $(SLIB) $(ALIB) $(EXEC) $(EXECOBJ)
옵션을 다 설정하셨다면, Makefile을 저장해주시고, Darknet 디렉토리 안에서 다음과 같은 명령어를 입력해줍니다.
# make #
2. Test
1. 단일 Image
# ./darknet detector test cfg/voc.data yolo-voc.cfg yolo-voc.weights data/dog.jpg #
2. WebCam OR 동영상
# ./darknet detector demo cfg/voc.data yolo-voc.cfg yolo-voc.weights <동영상 파일 위치> #
이번 포스팅에서는 YOLO Darknet v2의 설치 및 실행에 대해서 포스팅하였습니다.
다음 포스팅에서는 YOLO Darknet v2를 어떻게 학습시키는지에 대해서 포스팅하겠습니다.