Jetson Nanoはopencv4.3.0をコンパイルしてインストールし、cuDNNアクセラレーションを有効にします

予備概要:
  opencvを使用する場合は、cudaを使用して関連モデルの読み込みプロセスを高速化してみてください。ただし、実際の使用では次の問題が発生します。

Traceback (most recent call last):
File "/home/colin/works/face_detect/detect_faces_video.py", line 70, in <module>
CatchUsbVideo("Find face", 0, 0)
File "/home/colin/works/face_detect/detect_faces_video.py", line 56, in CatchUsbVideo
resImage = detect_faces_image.face_detector(frame, 1)
File "/home/colin/works/face_detect/detect_faces_image.py", line 81, in face_detector
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
AttributeError: module 'cv2.dnn' has no attribute 'DNN_BACKEND_CUDA'
GST_ARGUS: Cleaning up

  インストールされたopencvには「DNN_BACKEND_CUDA」の定義はありません。Jetson nanoの元のシステムにインストールされているopencvのバージョンは4.1.1であり、現時点で使用されている元のシステムのバージョンは更新されていませんが、バージョン4.2.0の更新でDNNモジュールが追加されました。以下を参照してください。OpenCV 4.2.0がリリースされ、IntelのオープンソースコンピュータービジョンライブラリとOpenCV 4.2.0プルリクエストCUDAバックエンド(DNNモジュール#14827用)
  では、最初に元のシステムにインストールされているOpenCVをアンインストールします。

sudo apt-get remove libopencv*

  cudaをサポートするopencvのインストールに関して、jetsonhacksには、詳細な説明とインストールスクリプトが記載された、共有する関連記事があります。ただし、ネットワークの問題があるため、このスクリプトを使用して正常にインストールするか、ダウンロードしてインストールしてください。はい、試してみたい場合はこの投稿を参照できます:https
//www.jetsonhacks.com/2019/11/22/opencv-4-cuda-on-jetson-nano/、キーポイントを抽出しますこの上司の投稿の

JetsonでOpenCVを構築するための優れたリソースがすでにいくつかあります。まず、このGithubリポジトリに「公式」NVIDIAスクリプトがあります。https//github.com/AastaNV/JEPこの記事の執筆時点では、OpenCVスクリプトはscriptsディレクトリにあり、スクリプトの名前はinstall_opencv4.xです。 x_Jetson.sh

  バージョン4.4.0をインストールしました。実際、初期インストールは4.3.0でしたが、さまざまなバグのため、4.4.0に簡単に変更できましたが、opencv4.3.0の一部を含むインストールプロセス全体も一緒に記録されます。
1.opencv-4.3.0およびopencv_contrib-4.3.0をダウンロードします。

curl -L https://github.com/opencv/opencv/archive/4.3.0.zip -o opencv-4.3.0.zip
curl -L https://github.com/opencv/opencv_contrib/archive/4.3.0.zip -o opencv_contrib-4.3.0.zip

2.ファイルを解凍します

unzip opencv-4.3.0.zip
unzip opencv_contrib-4.3.0.zip

3.コンパイル

cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.3.0/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

エラー:コンパイル中にエラーが発生しました

[ 25%] Building CXX object modules/core/CMakeFiles/opencv_core_pch_dephelp.dir/opencv_core_pch_dephelp.cxx.o
In file included from /home/colin/tool/opencv-4.2.0/modules/core/src/precomp.hpp:55:0,
from /home/colin/tool/opencv-4.2.0/release/modules/core/opencv_core_pch_dephelp.cxx:1:
/home/colin/tool/opencv-4.2.0/modules/core/include/opencv2/core/private.hpp:66:12: fatal error: Eigen/Core: No such file or directory
# include <Eigen/Core>
^~~~~~~~~~~~
compilation terminated.

  固有ライブラリが見つかりませんか?

将安装的Eigen库进行链接:
cd /usr/include
sudo ln -sf eigen3/Eigen Eigen

4.インストール

make &&  sudo make install

  幸い、次のインストールには何の問題もありませんでしたが、実際の呼び出し中にはまだ問題がありました。プログラムの実行中は、次のプロンプトが表示されます。

setUpNet DNNモジュールはCUDAバックエンドで構築されていません。CPUへの切り替え
  実際、上記のプロセス中にプロンプ​​トが表示されましたが、次の図に示すように、エラーを直接報告せずに無視しました。
ここに画像の説明を挿入します

Could NOT find CUDNN: Found unsuitable version "..", but required is at least "7.5" (found /usr/local/cuda-10.2/lib64/libcudnn.so)

システムがcuDNNで正しくインストールされているかどうかを確認します。dpkg
ここに画像の説明を挿入します
- l| grep -i cudnn cuDNNは正常にインストールされ、バージョンは8.0であり、opencvインストールの少なくとも「7.5」の要件を満たしています。cuDNNのバージョンがインストールされていることを示すNVIDIA開発者フォーラムの投稿を参照してください。投稿のポータルは次のとおりです:https://forums.developer.nvidia.com/t/opencv-4-2-0-and -cudnn-for- jetson-nano / 112281/32、ああ、うまくいきました。

cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3"-D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON  -D CUDNN_VERSION='8.0' -D CUDNN_INCLUDE_DIR='/usr/include/' -D CUDA_ARCH_PTX="" -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.3.0/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..          

cmakeのと再びコンパイル、cuDNNを見つけることができます:
ここに画像の説明を挿入します

ここに画像の説明を挿入します
が、他の問題がまだコンパイル処理中に発生します。

/home/colin/tool/opencv-4.3.0/modules/dnn/src/layers/…/cuda4dnn/primitives/…/csl/cudnn/convolution.hpp:266:21:エラー: 'CUDNN_CONVOLUTION_FWD_PREFER_FASTEST'はで宣言されていませんこのスコープ
/home/colin/tool/opencv-4.3.0/modules/dnn/src/layers/…/cuda4dnn/primitives/…/csl/cudnn/transpose_convolution.hpp:42:21:エラー: 'CUDNN_CONVOLUTION_BWD_DATA_PREFER_FASTEST'はありませんでしたこのスコープで宣言

  Nvidiaフォーラムの投稿を見てください。これは、opencvとcuDNNバージョンの適応の問題であるはずです。詳細については、以下を参照してください。cuda4dnn(build):cuDNN 8#17685の基本サポートを追加し、opencvバージョンを4.4.0に更新し、追加します。 opencvバージョン4.4.0これまでにcuDNN8バージョンの関連サポートがインストールされており、opencv4.4.0をインストールすることで関連する問題が解決されています。
OK、GPUアクセラレーションを使用したシステム条件の比較の前後:
cudaアクセラレーションをオンにする前:cudaアクセラレーションを
ここに画像の説明を挿入します
ここに画像の説明を挿入します
オンにした
ここに画像の説明を挿入します
ここに画像の説明を挿入します
  効果は明ら​​かです。元々CPUで純粋に実行されていた顔検出は、基本的に70〜80%を占めていました。 CPUの4つのコア。ただし、GPUは0%を占めます。アクセラレーションをオンにすると、CPUはコアの55%しか占めず、GPUも実行されます。

おすすめ

転載: blog.csdn.net/qq_33475105/article/details/111659692