OpenCVとCUDAおよびcuDNNのモジュールコンパイル

概要

ハイパフォーマンスとリソース最適化を同時に達成する必要があるエッジコンピューティングデバイスやリソース制限のある開発ボード上でのYOLOなどの複雑なディープラーニングモデル実行において、C++とOpenCVのGPU加速技術の組み合わせは伝統的なPython環境に比べて顕著な利点があります。このアプローチは実行効率を大幅に向上させるとともにランタイムリソース消費を低減し、リアルタイムオブジェクト検出・認識の実現に最適です。 C++でYOLOを実行する場合、Pythonのpipパッケージインストールのような簡単な手順では済まず、環境構築がやや複雑になります。本ケースではGPUによるアルゴリズム加速を実現するため、OpenCVのコンパイル時にCUDAおよびDNNモジュールを有効化する必要があります。

一.CUDAの導入
公式サイトから適切なバージョンを選択してください。ここでは11.7.0バージョンをインストールします。
https://developer.nvidia.com/cuda-toolkit-archive

インストールコマンド:
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
sudo sh cuda_11.7.0_515.43.04_linux.run

.runファイル実行後、acceptと入力して続行します

すでにNVIDIAドライバがインストール済みの場合はDriverオプションは選択不要です

インストール完了後、以下の環境変数設定を行います


以下のコマンドで.bashrcを編集:
vim ~/.bashrc
以下を追加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
保存後、以下のコマンドで反映:
source ~/.bashrc

以下のコマンドで確認: nvcc -V 出力結果が表示されればインストール成功です

二.cuDNNの導入

1.ダウンロード先:https://developer.nvidia.com/rdp/cudnn-archive


2.CUDAバージョンに対応するcudnnをダウンロードし、展開後CUDAインストールディレクトリにコピー:
sudo cp include/cudnn* /usr/local/cuda/include
sudo cp lib/libcudnn* /usr/local/cuda/lib64

3.ファイル権限を変更:
sudo chmod a+r /usr/local/cuda/include/cudnn*
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

三.OpenCVのコンパイル

1.ソースコードダウンロード:https://opencv.org/releases/

2.解凍後、ルートディレクトリで以下を実行:
git clone https://github.com/opencv/opencv_contrib.git

3.CUDA_ARCH_BINの取得方法:
一.git clone https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps.git
二.cd deepstream_tlt_apps/TRT-OSS/x86
三.nvcc deviceQuery.cpp -o deviceQuery
四. ./deviceQueryを実行し、Capability Majorを取得

4.コンパイル環境準備:
一.sudo apt-get update
二.sudo apt-get upgrade
三.sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
四.sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
五.sudo apt-get install libgtk-3-dev libtbb-dev libatlas-base-dev gfortran


5.コンパイル実行
一.cd opencv-4.10.0 && mkdir build && cd build
 
二.
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_GTK=ON \
-D CUDNN_INCLUDE_DIR=/usr/include \
-D CUDA_ARCH_BIN=7.5 \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_DNN=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON ..

三.make -j$(nproc)

四.sudo make install

赤枠表示が確認されればモジュール読み込み正常、その後の三・四の手順を実行してください。コンパイルには約20分程度かかります;以下はONNXモデル呼び出しの結果です。

四.OpenCVコンパイルオプション解説

オプション 説明 -D CMAKE_BUILD_TYPE=RELEASE OpenCVコンパイルモード。ここではリリース版 -D CMAKE_INSTALL_PREFIX=/usr/local OpenCVインストール先 -D OPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/modules opencv_contribモジュールパス -D WITH_CUDA=ON CUDA有効化 -D WITH_CUDNN=ON CUDNN有効化 -D WITH_GTK=ON グラフィックインターフェース(cv2.show使用時) -D CUDA_ARCH_BIN=7.5 GPU算力 -D OPENCV_DNN_CUDA=ON DNNのCUDAサポート -D ENABLE_FAST_MATH=1 数学演算高速化 -D CUDA_FAST_MATH=1 CUDA数学演算高速化 -D WITH_DNN=ON DNNモジュール有効化 -D OPENCV_GENERATE_PKGCONFIG=ON 親ディレクトリ指定

タグ: OpenCV CUDA cuDNN コンパイル GPU加速

6月30日 16:28 投稿