Ubuntu16.04+CUDA9.0+Opencv2.4.9+Opencv3.4.3
9489 ワード
1、私のパソコンの配置:Ubuntu 16.04+Cuda 9.0+cudnn 7.6.2+Opencv 2.4.9+Opencv 3.4.32、多くの工事を走る時にGPU加速を使うことが多いので、自分のパソコンにCUDAとgpuモジュールを入れたOpencvをインストールしました.多くの工事はOpencv 2または3のバージョンなので、いっそパソコンに直接この2つのバージョンをインストールしました.使用時に直接切り替えてください.3、ここでインストールの全過程を紹介します.コマンドのインストール中に問題が発生した場合は、本明細書の最後に類似の問題と解決策があるかどうかを直接確認します.
ここではもうくどくどしないで、詳しいインストール方法は私の別の記録文章を参考にすることができます.
Opencv 2.4.9はOpencv 3.4.3の依存項目と同じなので、ここに書きます.
ソースコードのインストール方式を採用するので、先にOpencv 2.4.9ソースコードをダウンロードする.次に、解凍してopencv 2.4.9フォルダに入り、次のコマンドを入力します.
ソースコードのインストール方式を採用するので、先にOpencv 3.4.3ソースコードをダウンロードする.Opencv 3を使用して顔認識を実行するときに問題が発生するのは、opencv 3にopencv_が欠けているためです.contribモジュール、opencvをダウンロードcontrib-3.4.3(opencv対応バージョンをダウンロード)モジュールを解凍しopencv 3に移動する.4.3フォルダOpencv 3.4.3フォルダに移動して、次のコマンドを入力します.
これはOpencv 2とOpencv 3をインストールする全体の過程で、順調にインストールが完了すればそれに越したことはありませんが、意外なことに直接コンパイルインストールは間違いに違いありません.大丈夫です.エラーが発生した場合は、本明細書の最後に似たような問題と解決策があるかどうかを確認します.
解決方法:opencv-2.4.9/cake/openCVDetectCUDAを変更します.cmakeファイル、ファイルの中で以下の内容を含みます:
if(CUDA_GENERATION STREQUAL “Fermi”) set(__cuda_arch_bin “2.0 2.1(2.0)”) elseif(CUDA_GENERATION STREQUAL “Kepler”) if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “3.0”) else() set(__cuda_arch_bin “3.0 3.5”) endif()
変更後:
if(CUDA_GENERATION STREQUAL “Fermi”) set(__cuda_arch_bin “3.0 3.5”) elseif(CUDA_GENERATION STREQUAL “Kepler”) if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “3.0”) else() set(__cuda_arch_bin “3.0 3.5”) endif()
参考ブログ:ubuntu 16.04はcuda 9.0環境でopencv 2をコンパイルインストールする.4.13.7
解決方法:この問題は5.1の問題と似ており、opencv-2.4.9/cake/openCVDetectCUDAも修正する必要がある.cmakeファイル:
if(NOT DEFINED __cuda_arch_bin) if(ANDROID) set(__cuda_arch_bin “3.2”) set(__cuda_arch_ptx “”) else() if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “1.1 1.2 1.3 2.0 2.1(2.0) 3.0”) else() set(__cuda_arch_bin “1.1 1.2 1.3 2.0 2.1 3.0 3.5”) endif() set(__cuda_arch_ptx “3.0”) endif() endif()
変更後:
if(NOT DEFINED __cuda_arch_bin) if(ANDROID) set(__cuda_arch_bin “3.2”) set(__cuda_arch_ptx “”) else() if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “1.1 1.2 1.3 2.0 2.1(2.0) 3.0”) else() set(__cuda_arch_bin “3.0 3.5”) endif() set(__cuda_arch_ptx “3.0”) endif() endif()
これはCUDA 9でNVIDIAがlibnppiをsoをlibnppcに変更する.so libnppial.so libnppicc.so libnppicom.so libnppidei.so libnppif.so libnppig.so libnppim.so libnppist.so libnppisu.so libnppitc.so libnpps.so . 解決方法:opencv-2.4.9/make/FIndCUDAを修正する.cmakeファイルのいくつかの内容は、最初の場所:
unset(CUDA_nppi_LIBRARY CACHE)
次のように変更します.
unset(CUDA_nppial_LIBRARY CACHE) unset(CUDA_nppicc_LIBRARY CACHE) unset(CUDA_nppicom_LIBRARY CACHE) unset(CUDA_nppidei_LIBRARY CACHE) unset(CUDA_nppif_LIBRARY CACHE) unset(CUDA_nppig_LIBRARY CACHE) unset(CUDA_nppim_LIBRARY CACHE) unset(CUDA_nppist_LIBRARY CACHE) unset(CUDA_nppisu_LIBRARY CACHE) unset(CUDA_nppitc_LIBRARY CACHE)
2番目:
find_cuda_helper_libs(nppi)
変更後:
find_cuda_helper_libs(nppial) find_cuda_helper_libs(nppicc) find_cuda_helper_libs(nppicom) find_cuda_helper_libs(nppidei) find_cuda_helper_libs(nppif) find_cuda_helper_libs(nppig) find_cuda_helper_libs(nppim) find_cuda_helper_libs(nppist) find_cuda_helper_libs(nppisu) find_cuda_helper_libs(nppitc)
2番目の修正箇所の次は、3番目の修正箇所です.
変更後:
参考ブログ:ubuntu 16.04はcuda 9.0環境でopencv 2をコンパイルインストールする.4.13.7
下図の問題が発生した場合は、NCVpixelOperationsとなります.hppファイルに問題が発生しました.私はここでダウンロードしました.ダウンロードしたファイルでopencv-2.4.9/modules/gpu/src/nvidia/coreフォルダの下のNCVpixelOperations.hppファイルを置換すればよい、親測は有効である.
エラーは、/opencv-2.4.9/modules/gpu/srcフォルダの下にgraphcutsが表示されます.cppファイル、ファイルを開くと、次のようになります.
次のように変更します.
参考ブログ:caffe学習(三):caffe開発環境インストール(Ubuntu)
解決方法:opencv-3.4.3/make/openCVDetectCUDAを修正する.cmakeファイル:
次のように変更します.
**解決策:**ここではexampleをコンパイルせずにcamkeコマンドを
問題の説明は次のとおりです.
Pangolin X11: Unable to retrieve framebuffer options
解決方法:ソースディレクトリPangolin/src/display/deviceの下のdisplay_x11.cppファイル注釈の2行のコードでいいです.このファイルを修理した後、pangolinを再コンパイルしてインストールする必要があります.次のように変更します.
参考ブログ:Pangolin X 11:Unable to retrieve framebuffer options
以上が私がOpencv GPUモジュールをインストールする時に出会ったすべての問題であり、コンピュータ環境の配置が異なるとまたいくつかの新しい問題に直面する可能性があるので、以上の解決策がすべてのコンピュータのインストール時の問題を解決できることを保証しない.また、後で本当に工事をしているとき、opencvのcudaヘッダファイルが見つからない場合もあります.cmakeの後にパラメータ項目を加えてopencvを再コンパイルするかもしれません.この部分は理解が深くないので、言わないでください.私の穴埋めの過程がみんなを助けることができることを望んで、同時に上のブロガーたちの資料にも感謝します.
1.Cuda 9.0とcudnnを取り付ける
ここではもうくどくどしないで、詳しいインストール方法は私の別の記録文章を参考にすることができます.
2、インストール依存項目
Opencv 2.4.9はOpencv 3.4.3の依存項目と同じなので、ここに書きます.
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 libjasper-dev libdc1394-22-dev
3、Opencv 2.4.9をインストールする
ソースコードのインストール方式を採用するので、先にOpencv 2.4.9ソースコードをダウンロードする.次に、解凍してopencv 2.4.9フォルダに入り、次のコマンドを入力します.
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DCUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so -D CMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Fermi ..
make -j4
sudo make install
4、Opencv 3.4.3をインストールする
ソースコードのインストール方式を採用するので、先にOpencv 3.4.3ソースコードをダウンロードする.Opencv 3を使用して顔認識を実行するときに問題が発生するのは、opencv 3にopencv_が欠けているためです.contribモジュール、opencvをダウンロードcontrib-3.4.3(opencv対応バージョンをダウンロード)モジュールを解凍しopencv 3に移動する.4.3フォルダOpencv 3.4.3フォルダに移動して、次のコマンドを入力します.
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.3/modules/ -DCUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so -D CMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Fermi ..
make -j4
sudo make install
これはOpencv 2とOpencv 3をインストールする全体の過程で、順調にインストールが完了すればそれに越したことはありませんが、意外なことに直接コンパイルインストールは間違いに違いありません.大丈夫です.エラーが発生した場合は、本明細書の最後に似たような問題と解決策があるかどうかを確認します.
5、問題と解決方法
5.1 Opencv 2.4.9インストール中に「nvcc fatal:Unsupported gpu architecture'compute_20」という問題が発生
解決方法:opencv-2.4.9/cake/openCVDetectCUDAを変更します.cmakeファイル、ファイルの中で以下の内容を含みます:
if(CUDA_GENERATION STREQUAL “Fermi”) set(__cuda_arch_bin “2.0 2.1(2.0)”) elseif(CUDA_GENERATION STREQUAL “Kepler”) if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “3.0”) else() set(__cuda_arch_bin “3.0 3.5”) endif()
変更後:
if(CUDA_GENERATION STREQUAL “Fermi”) set(__cuda_arch_bin “3.0 3.5”) elseif(CUDA_GENERATION STREQUAL “Kepler”) if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “3.0”) else() set(__cuda_arch_bin “3.0 3.5”) endif()
参考ブログ:ubuntu 16.04はcuda 9.0環境でopencv 2をコンパイルインストールする.4.13.7
5.2 Opencv 2.4.9インストール中に「nvcc fatal:Unsupported gpu architecture‘compute_11’」の問題が発生
解決方法:この問題は5.1の問題と似ており、opencv-2.4.9/cake/openCVDetectCUDAも修正する必要がある.cmakeファイル:
if(NOT DEFINED __cuda_arch_bin) if(ANDROID) set(__cuda_arch_bin “3.2”) set(__cuda_arch_ptx “”) else() if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “1.1 1.2 1.3 2.0 2.1(2.0) 3.0”) else() set(__cuda_arch_bin “1.1 1.2 1.3 2.0 2.1 3.0 3.5”) endif() set(__cuda_arch_ptx “3.0”) endif() endif()
変更後:
if(NOT DEFINED __cuda_arch_bin) if(ANDROID) set(__cuda_arch_bin “3.2”) set(__cuda_arch_ptx “”) else() if(${CUDA_VERSION} VERSION_LESS “5.0”) set(__cuda_arch_bin “1.1 1.2 1.3 2.0 2.1(2.0) 3.0”) else() set(__cuda_arch_bin “3.0 3.5”) endif() set(__cuda_arch_ptx “3.0”) endif() endif()
5.3 Opencv 2.4.9インストール中の「CUDA_nppi_LIBRARY」に関する問題
これはCUDA 9でNVIDIAがlibnppiをsoをlibnppcに変更する.so libnppial.so libnppicc.so libnppicom.so libnppidei.so libnppif.so libnppig.so libnppim.so libnppist.so libnppisu.so libnppitc.so libnpps.so . 解決方法:opencv-2.4.9/make/FIndCUDAを修正する.cmakeファイルのいくつかの内容は、最初の場所:
unset(CUDA_nppi_LIBRARY CACHE)
次のように変更します.
unset(CUDA_nppial_LIBRARY CACHE) unset(CUDA_nppicc_LIBRARY CACHE) unset(CUDA_nppicom_LIBRARY CACHE) unset(CUDA_nppidei_LIBRARY CACHE) unset(CUDA_nppif_LIBRARY CACHE) unset(CUDA_nppig_LIBRARY CACHE) unset(CUDA_nppim_LIBRARY CACHE) unset(CUDA_nppist_LIBRARY CACHE) unset(CUDA_nppisu_LIBRARY CACHE) unset(CUDA_nppitc_LIBRARY CACHE)
2番目:
find_cuda_helper_libs(nppi)
変更後:
find_cuda_helper_libs(nppial) find_cuda_helper_libs(nppicc) find_cuda_helper_libs(nppicom) find_cuda_helper_libs(nppidei) find_cuda_helper_libs(nppif) find_cuda_helper_libs(nppig) find_cuda_helper_libs(nppim) find_cuda_helper_libs(nppist) find_cuda_helper_libs(nppisu) find_cuda_helper_libs(nppitc)
2番目の修正箇所の次は、3番目の修正箇所です.
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
変更後:
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
参考ブログ:ubuntu 16.04はcuda 9.0環境でopencv 2をコンパイルインストールする.4.13.7
5.4 Opencv 2.4.9インストール中の「NCVpixelOperations.hpp」に関する問題
下図の問題が発生した場合は、NCVpixelOperationsとなります.hppファイルに問題が発生しました.私はここでダウンロードしました.ダウンロードしたファイルでopencv-2.4.9/modules/gpu/src/nvidia/coreフォルダの下のNCVpixelOperations.hppファイルを置換すればよい、親測は有効である.
5.5 Opencv 2.4.9インストール中に「graphcuts.cpp」ファイルにエラーがある
エラーは、/opencv-2.4.9/modules/gpu/srcフォルダの下にgraphcutsが表示されます.cppファイル、ファイルを開くと、次のようになります.
if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
次のように変更します.
if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
参考ブログ:caffe学習(三):caffe開発環境インストール(Ubuntu)
5.6 Opencv 3.4.3インストール中に「nvcc fatal:Unsupported gpu architecture‘compute_20’」に関する問題
解決方法:opencv-3.4.3/make/openCVDetectCUDAを修正する.cmakeファイル:
set(__cuda_arch_ptx "")
if(CUDA_GENERATION STREQUAL "Fermi")
set(__cuda_arch_bin "2.0")
elseif(CUDA_GENERATION STREQUAL "Kepler")
set(__cuda_arch_bin "3.0 3.5 3.7")
elseif(CUDA_GENERATION STREQUAL "Maxwell")
set(__cuda_arch_bin "5.0 5.2")
elseif(CUDA_GENERATION STREQUAL "Pascal")
set(__cuda_arch_bin "6.0 6.1")
elseif(CUDA_GENERATION STREQUAL "Volta")
set(__cuda_arch_bin "7.0")
elseif(CUDA_GENERATION STREQUAL "Auto")
次のように変更します.
set(__cuda_arch_ptx "")
if(CUDA_GENERATION STREQUAL "Fermi")
set(__cuda_arch_bin "3.0")
elseif(CUDA_GENERATION STREQUAL "Kepler")
set(__cuda_arch_bin "3.0 3.5 3.7")
elseif(CUDA_GENERATION STREQUAL "Maxwell")
set(__cuda_arch_bin "5.0 5.2")
elseif(CUDA_GENERATION STREQUAL "Pascal")
set(__cuda_arch_bin "6.0 6.1")
elseif(CUDA_GENERATION STREQUAL "Volta")
set(__cuda_arch_bin "7.0")
elseif(CUDA_GENERATION STREQUAL "Auto")
5.7 Opencv 3インストール中の「multi.cpp」ファイルに関する問題
**解決策:**ここではexampleをコンパイルせずにcamkeコマンドを
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.3/modules/ -DCUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so -D CMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs -D WITH_CUDA=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Fermi ..
5.8 Opencv 2とOpencv 3のgpuモジュールを取り付けた後、工事を実行中にpangolinにエラーが発生した
問題の説明は次のとおりです.
Pangolin X11: Unable to retrieve framebuffer options
解決方法:ソースディレクトリPangolin/src/display/deviceの下のdisplay_x11.cppファイル注釈の2行のコードでいいです.このファイルを修理した後、pangolinを再コンパイルしてインストールする必要があります.次のように変更します.
static int visual_attribs[] =
{
GLX_X_RENDERABLE , True,
GLX_DRAWABLE_TYPE , GLX_WINDOW_BIT,
GLX_RENDER_TYPE , GLX_RGBA_BIT,
GLX_X_VISUAL_TYPE , GLX_TRUE_COLOR,
GLX_RED_SIZE , 8,
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8,
GLX_ALPHA_SIZE, 8,
GLX_DEPTH_SIZE, 24,
GLX_STENCIL_SIZE, 8,
GLX_DOUBLEBUFFER , glx_doublebuffer ? True : False,
//GLX_SAMPLE_BUFFERS , glx_sample_buffers,
//GLX_SAMPLES , glx_sample_buffers > 0 ? glx_samples : 0,
None
};
参考ブログ:Pangolin X 11:Unable to retrieve framebuffer options
以上が私がOpencv GPUモジュールをインストールする時に出会ったすべての問題であり、コンピュータ環境の配置が異なるとまたいくつかの新しい問題に直面する可能性があるので、以上の解決策がすべてのコンピュータのインストール時の問題を解決できることを保証しない.また、後で本当に工事をしているとき、opencvのcudaヘッダファイルが見つからない場合もあります.cmakeの後にパラメータ項目を加えてopencvを再コンパイルするかもしれません.この部分は理解が深くないので、言わないでください.私の穴埋めの過程がみんなを助けることができることを望んで、同時に上のブロガーたちの資料にも感謝します.