알려진 네트워크를 이용하여 Jetson TX2 Yolo-v4 Inference Test 를 진행해 보겠습니다. Quantization 을 비롯한 여러 Network Optimization 기법은 사용하지 않고 그냥 Yolo-v4 Full Network 을 이용해 high precision 추론을 수행해 보려고 합니다. NVIDIA Jetson TX2 설치를 모두 완료했다면, CUDA와 cuDNN 같은 도구들도 함께 설치가 되었을 것입니다.
이러한 도구들을 이용해 간단한 Object Detection Test 를 수행해 보겠습니다.
Darknet 다운로드 및 빌드
Darknet 다운로드
Yolo 시리즈 객체 감지 알고리즘은 Darknet framework을 이용해 구현된 구현물을 주로 사용합니다.
먼저 TX2 보드의 적당한 위치에 Darknet 코드를 clone 하겠습니다.
$ git clone https://github.com/AlexeyAB/darknet
AlexeyAB 님의 darknet은 pjreddie 님의 darknet의 fork 입니다. 현재 여러가지 최신 기법들이 더 빨리 적용되고 있는 것 같아 해당 fork를 사용하겠습니다.
혹시 원본을 사용하고 싶은 경우 다음 링크 Pjreddie Darknet 을 이용하시기 바랍니다. Clone이 완료되었다면 darknet 디렉토리로 이동합니다.
$ cd darknet
Makefile 수정
다운로드가 완료되었다면 빌드를 하기 위해 Makefile을 약간 수정하겠습니다.
GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
...
# 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_61,code=[sm_61,compute_61]
ARCH= -gencode arch=compute_61,code=[sm_61,compute_61]
GPU, CUDNN, OPENCV 를 각각 사용 설정합니다. 그리고 아키텍쳐는 cuDNN 버전에 따라 지원하는 버전을 사용하면 됩니다. SDK Manager를 이용해 설치하였다면 위 예제와 같이 작성하면 됩니다.
여러 가지 아키텍쳐를 사용하려고 하면 빌드 시간이 오래걸리기도 하고, 사용하지 않는 아키텍쳐를 굳이 모두 빌드할 필요는 없습니다.
Darknet Build
Makefile 수정을 완료했다면 빌드합니다.
$ make
Model Download
Yolo-v4 를 이용해 Inference 하기 위해서는 두 가지 요소가 필요합니다. Network에 대한 정보를 가지고 있는 설정과 각 layer의 가중치 정보를 가지고 있는 Model 입니다.
설정은 git clone할 때 이미 다운로드 했을 것입니다. Darknet 디렉토리의 하위에 있는 cfg/ 디렉토리에서 각 Yolo 시리즈의 네트워크 설정을 확인할 수 있을 것입니다.
그런데 Model 데이터는 용량이 대략 200~300 MB 정도로 크기 때문에 보통 github를 통해 배포하지 않고, 별도의 링크를 통해 배포합니다. Yolo-v4 모델을 다운로드 합니다.
Jetson TX2 Yolo-v4 Inference Test
Model 다운로드가 완료되었다면 다운로드한 모델 파일을 darknet 디렉토리로 이동합니다.
Full Network 으로 Inference 하는데에다 기본 배치 크기가 64개로 설정되어 있어 TX2 메모리가 부족한 경우가 발생합니다.
이런 경우 보드가 죽어서 리부팅하게 되므로, 배치 크기를 줄이고 시험하는 것이 좋습니다.
[net]
#batch=64
batch=8
subdivisions=8
...
원래 64인 배치 개수를 8개로 줄였습니다. 이제 모든 준비가 완료되었습니다.
다음의 명령으로 Jetson TX2 Yolo-v4 Inference Test 를 수행할 수 있습니다.
$ ./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights
네트워크와 모델 로딩이 완료되면 이미지 경로를 입력할 수 있는 프롬프트가 출력됩니다.
원하는 이미지의 경로를 입력하면 추론하여 coco class 에 따라 객체 검출이 되는 것을 확인할 수 있습니다.
![Jetson TX2 Yolo-v4 Inference Test](https://voidint.com/wp-content/uploads/2020/07/yolo-v4-inference-1.png)
참고로 DeepStream framework 를 이용한 low precision yolo-v3 inference 예제도 함께 살펴보시기를 추천합니다.
0개의 댓글