1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

cuda10.0が入っているJetson NanoにYOLOv4-tinyを入れる

Last updated at Posted at 2022-09-29

背景

やむを得ない理由で、cuda10.0が入っているJetsonNanoにdarknetとyolov4-tinyを入れる必要があったのですが、その際ちょっと手間取ったのでそのメモ。

環境

$ jetson_release
 - NVIDIA Jetson NANO/TX1
   * Jetpack 4.3 [L4T 32.3.1]
   * CUDA GPU architecture 5.3
 - Libraries:
   * CUDA 10.0.326
   * cuDNN 7.6.3.28-1+cuda10.0
   * TensorRT 6.0.1.10-1+cuda10.0
   * Visionworks 1.6.0.500n
   * OpenCV 4.1.1 compiled CUDA: YES
 - Jetson Performance: inactive

手順

1. フレームワークであるdarknetを入れる

$ git clone https://github.com/AlexeyAB/darknet

2. Makefileを修正する

$ cd darknet
$ vim Makefile

以下の様に修正

darknet/Makefile
GPU=1  
CUDNN=1  
CUDNN_HALF=0  # jetson nanoの場合は0でok 
OPENCV=1  
libso=1

# 64行目あたり
NVCC=/usr/local/cuda/bin/nvcc

3. yolov4-tinyを入れる

wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights

4. コンパイルする

$ make -j5

※時短の為に5スレッドでの分散ビルドをしています(以下記事参考)

ビルドの途中でエラー

このまま上手くいけばいいな~と思っていたら案の定、途中でidentifier "cudaStreamCaptureModeGlobal" is undefinedというエラーが出ました

./src/network_kernels.cu(721): error: identifier "cudaStreamCaptureModeGlobal" is undefined

./src/network_kernels.cu(721): error: too many arguments in function call

2 errors detected in the compilation of "/tmp/tmpxft_00005fdb_00000000-6_network_kernels.cpp1.ii".
Makefile:184: recipe for target 'obj/network_kernels.o' failed
make: *** [obj/network_kernels.o] Error 1

原因

調べたらgithubのissueにちゃんと書いてありました
このissueでのやり取りを見ていくと大体つかめると思います

原因となっていたのはnetwork_kernels.cuの以下の部分

darknet/src/network_kernels.cu
CHECK_CUDA(cudaStreamBeginCapture(stream0,cudaStreamCaptureModeGlobal));

↑はCUDA10.1以降向けに追加されたもので、CUDA10.0の際に発生していたissueを解決するための関数
この関数によって推論の実行スピードが20%上昇するとの事

It seems yes, it was added in CUDA 10.1, because there was an issue for CUDA 10.0 triton-inference-server/server#635 (comment)

In general this is related to this feature, that can accelerate any neural network +20% for Inference (Detection): #7444

解決策

因みに無くても動くとの事なので、コメントアウトしてもう一度makeしてみます

./src/network_kernels.cu
// CHECK_CUDA(cudaStreamBeginCapture(stream0,cudaStreamCaptureModeGlobal));
$ make clean
$ make -j5

今度はエラーが起きず無事に終了しました(darknetという名前のファイルが出来ていれば成功です)

5. 正常に動作するか確認

$ ./darknet detect cfg/yolov4-tiny.cfg yolov4-tiny.weights data/dog.jpg

こんな感じのログが出ます

 CUDA-version: 10000 (10000), cuDNN: 7.6.3, GPU count: 1  
 OpenCV version: 4.1.1
 0 : compute_capability = 530, cudnn_half = 0, GPU: NVIDIA Tegra X1 
net.optimized_memory = 0 
mini_batch = 1, batch = 1, time_steps = 1, train = 0
...
(途中略)
...
[yolo] params: iou loss: ciou (4), iou_norm: 0.07, obj_norm: 1.00, cls_norm: 1.00, delta_norm: 1.00, scale_x_y: 1.05
nms_kind: greedynms (1), beta = 0.600000 
Total BFLOPS 6.910 
avg_outputs = 310203 
 Allocate additional workspace_size = 26.22 MB 
Loading weights from weights/yolov4-tiny.weights...
 seen 64, trained: 0 K-images (0 Kilo-batches_64) 
Done! Loaded 38 layers from weights-file 
 Detection layer: 30 - type = 28 
 Detection layer: 37 - type = 28 
data/dog.jpg: Predicted in 67.070000 milli-seconds.
bicycle: 60%
dog: 84%
truck: 79%
car: 46%

無事動作しました!
ちなみに推論のスピードは67ミリ秒(0.067秒)でした

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?