Jetson에서 ROS Melodic을 대상으로 CUDA의 효과적인 OpenCV를 구축하기 위한 메모

개시하다

  • 기본 OpenCV에서 CUDA가 올바르지 않습니다. GPU를 사용할 때 원본에서 OpenCV를 구축해야 합니다.
  • OpenCV 버전 정보

  • JetPack 4.4~4.6 Ubuntu 18.04 기반, CUDA 10.2 포함.
  • 우분투 18.04용 ROS 디스플레이는 멜로디컬이다.
  • ROS Melodic의 기본 OpenCV 버전은 3.2.0입니다.
  • OpenCV의 버전을 변경하여 구축할 수도 있지만 여기서는 CUDA만 유효하게 하려고 하기 때문에 버전이 같다.
  • 구축 프로그램


  • 참조Installation in Linux로 설치를 수행합니다.
  • GiitHub에서 소스 파일을 복제합니다.
    $ cd ~/<my_working_directory>
    $ git clone -b 3.2.0 --depth 1 https://github.com/opencv/opencv.git
    $ git clone -b 3.2.0 --depth 1 https://github.com/opencv/opencv_contrib.git
    $ cd opencv
    $ mkdir build
    $ cd build
    
  • 환경에 따라 일부 원본 파일을 수정합니다.상세한 상황은 아래의 각 절을 참조하시오.
  • NVIDIA NPPIcmake/FindCUDA.cmake 수정에 대비
  • fp16 헤더 파일에 대응하기 위해 수정modules/cudev/include/opencv2/cudev/common.hpp
  • CMake를 사용하여 구성합니다.옵션 상세 정보는 아래의 각 절을 참조하시오.
    $ cmake \
      -DWITH_CUDA=ON \
      -DCUDA_ARCH_BIN=xx \
      -DENABLE_PRECOMPILED_HEADERS=OFF \
      -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_INSTALL_PREFIX=/usr/local \
      ..
    $ make
    $ sudo make install
    
  • NVIDIA NPPI 정보


  • NVIDIA NPPI CUDA에서 이미지 처리를 위한 프로그램 라이브러리
  • OpenCV의 구축 수요에 따라 CUDA 8.0 이후의 NPPI는 몇 개로 분할되었고 OpenCV 3.2.0은 이 분할을 지원하지 않는다
  • OpenCV 3.4.0 이후 대응 완료
    https://github.com/opencv/opencv/blob/6d4f66472e14b29b8e1623859cfebfdc67f677c3/cmake/FindCUDA.cmake#L790-L806

    fp16 헤드 파일 정보

  • CUDA 9.0 이후 fp16과 관련된 일부 내장 기능이 삭제된 것 같아서 같은 기능을 사용하려면 cmake/FindCUDA.cmake 헤더 파일을 포함해야 한다.
  • cuda_fp16.hmodules/cudev/include/opencv2/cudev/common.hpp.
  • -DCUDA_ARCH_BIN 옵션 정보

  • NVIDIA의 GPU는 모델에 따라 Compute Capability(CC)를 설정합니다.
  • Jetson Nano는 Maxwell 아키텍처, CC는 5.3
  • Jetson TX2는 Pascal 아키텍처, CC는 6.2
  • Jetson Xavier는 Volta 아키텍처, CC는 7.2
  • CUDA를 유효하게 설정하고 OpenCV를 구축할 때 원래 구축할 수 있는 CC는 자동으로 여러 개를 설정하지만 OpenCV3.2.0이면 Jetson을 위한 어떤 것도 설정하지 않는다.
  • https://github.com/opencv/opencv/blob/70bbf17b133496bd7d54d034b0f94bd869e0e810/cmake/OpenCVDetectCUDA.cmake#L64-L84
  • Jetson을 위해서는 cmake 옵션#include <cuda_fp16.h>을 통해 CC
  • 를 지정해야 합니다.

    -DENABLE_PRECOMPILED_HEADERS 옵션 정보

  • 구축 시간을 단축하기 위해 컴파일된 페이지의 눈썹을 사용합니다.
  • -DCUDA_ARCH_BIN의 오류입니다.이 옵션을 OFF로 설정합니다.
  • 기존 패키지 제거

  • 기존 OpenCV 및 관련 패키지(cv bridge 등)를 제거합니다.관련 포장도 해제될 수 있으니 주의하세요.(기존 OpenCV와 공존하는 방법은 조사되지 않음)
    $ sudo apt purge ros-melodic-cv-bridge
    $ sudo apt purge libopencv*
    
  • 제거된 패키지의 원본 파일을 ~/catkin에 넣기ws로 복제하여 구축합니다.
    $ cd ~/catkin_ws/src
    $ git clone -b melodic https://github.com/ros-perception/vision_opencv.git
    $ git clone https://github.com/ros-visualization/rqt_image_view.git
    
  • 참고 자료

  • Installation in Linux
  • OpenCV configuration options reference
  • REP3 Target Platforms
  • CMake Error: Variables are set to NOTFOUND
  • Error compiling OpenCV, fatal error: stdlib.h: No such file or directory
  • NVIDIA ON-DEMAND/Your GPU Compute Capability
  • Jetson Xavier로 OpenCV4.0+CUDA를 구축하면 Xavier가 실행할 수 없는 프로그램이 완성됩니다
  • 좋은 웹페이지 즐겨찾기