LoginSignup
1
2

More than 3 years have passed since last update.

Darknetをビルド済みなXavierNX/JetsonNANOのDockerイメージを作成

Last updated at Posted at 2020-05-28

はじめに

JetsonではDockerがつかえますが、NvidiaはがNGCから取得させてくれるイメージの中には、OpenCVが動くものも、Darknetが動くものもありません。
Jetson Xavier NX/JetsonNANOでDNN_BACKEND_CUDAが使えるOpenCV4.3をDockerでビルドで作成したイメージを使ってDarknetが動くイメージを作成しました。

やったこと

  • OpenCV4.3をインストールしたイメージをベースにdarknetがビルド済みなイメージを作成しました。

手順

git clone https://github.com/sowd0726/Jetson_docker.git
cd Jetson_docker
cd darknet
sudo mkdarknet.sh

でdarknet:100とタグ付けされたイメージができあがります。

sudo docker run -it --rm --net=host --runtime nvidia -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix darknet:100

で実行が可能です。
カメラが使いたい場合には以下

sudo docker run -it --rm --net=host --runtime nvidia --device /dev/video0:/dev/video0:mwr -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix darknet:100

Dockerfile内でのDarknetのビルド手順

darknetのビルドは
git clone https://github.com/AlexeyAB/darknet
して
cd darknet
して
Makefileの以下を編修してビルドするだけです。
これをDockerfile内で自動化してあります。

# 以下でCUDA,OPENCV,GPU,LIBSO,CUDNN_HALFを1に変更
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
...
# 6.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]
...
# Xavierの7.2をイネーブル
ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]

JetsonNANOの場合は、上記のCUDNN_HALFを変更しないようにしてアーキテクチャを53に

# 以下でCUDA,OPENCV,GPUを1に変更
GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
...
# 6.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]
...
# NANO(Makefile上はTX1のとこにあります)の5.3をイネーブル
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]

で、これをmakeするDockerfileを作成しました。ベースとしてJetson Xavier NX/JetsonNANOでDNN_BACKEND_CUDAが使えるOpenCV4.3をDockerでビルドで作成したイメージをつかってるので、そっちを先につくるか、OpenCVがはいってるイメージをベースに指定する必要があります。

XavierNX
FROM opencv430:103
RUN cd /root &&\
 git clone https://github.com/AlexeyAB/darknet
RUN cd /root/darknet &&\
 sed -i 's/GPU=0/GPU=1/' Makefile && \
 sed -i 's/CUDNN=0/CUDNN=1/' Makefile && \
 sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile && \
 sed -i 's/OPENCV=0/OPENCV=1/' Makefile && \
 sed -i 's/LIBSO=0/LIBSO=1/' Makefile && \
 sed -i 's/-gencode arch=compute_61,code=\[sm_61,compute_61\]/#-gencode arch=compute_61,code=\[sm_61,compute_61\]/' Makefile && \
 sed -i 's/# ARCH= -gencode arch=compute_72,code=\[sm_72,compute_72\]/ARCH= -gencode arch=compute_72,code=\[sm_72,compute_72\]/' Makefile
RUN cd /root/darknet && \
 make -j4 && \
 echo "** Bye :)"
CMD ["/bin/bash"]
JetsonNANO
FROM opencv430:103
RUN cd /root &&\
 git clone https://github.com/AlexeyAB/darknet
RUN cd /root/darknet &&\
 sed -i 's/GPU=0/GPU=1/' Makefile && \
 sed -i 's/CUDNN=0/CUDNN=1/' Makefile && \
# sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile && \
 sed -i 's/OPENCV=0/OPENCV=1/' Makefile && \
 sed -i 's/LIBSO=0/LIBSO=1/' Makefile && \
 sed -i 's/-gencode arch=compute_61,code=\[sm_61,compute_61\]/#-gencode arch=compute_61,code=\[sm_61,compute_61\]/' Makefile && \
 sed -i 's/# ARCH= -gencode arch=compute_53,code=\[sm_53,compute_53\]/ARCH= -gencode arch=compute_53,code=\[sm_53,compute_53\]/' Makefile
RUN cd /root/darknet && \
 make -j4 && \
 echo "** Bye :)"
CMD ["/bin/bash"]

git cloneした場合には

cd Jetson_docker
cd darknet
sudo mkdarknet.sh

で勝手にボードを判定してイメージを作成します

蛇足。。Darknetビルド時のエラー

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
./src/image_opencv.cpp:16:10: fatal error: opencv2/core/version.hpp: No such file or directory
 #include <opencv2/core/version.hpp>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

っていわれてはまりました。pkgconfig用のファイルを作成する方法がわからずcmakeのコードを探しまわるはめになりました。
OPENCVをビルドするときに、cmakeのオプションに以下をつけないと発生します。
-D OPENCV_GENERATE_PKGCONFIG=ON

1
2
1

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
2