yolox-ros-deepstream


cv-detect-ros子項目(四)(yolox-ros-deepstream)

硬件環境

  • 英偉達jetson nano 板載計算機(原則上jetson 系列產品都能適配此項目)
  • 鼠標鍵盤(推薦使用有線連接方式)

軟件環境

  • Jetpack 4.5.1 (ubuntu 18.04)
  • TensorRT 7.1
  • CUDA 10.2
  • cuDNN 8.0
  • OpenCV 4.1.1
  • deepstream 5.1

相關資源百度雲盤鏈接如下:

鏈接:https://pan.baidu.com/s/1uRdl1Z6jUQXZyhmFKPmj5w  提取碼:3dS0
如下圖所示:
enter image description here

一、安裝ROS操作系統

備注:(以下操作最好在搭建梯子或者更換國內源的情況下進行,否則下載速度很慢)

請參考ROS官方安裝連接: 官方安裝教程
也可按以下步驟安裝:

- sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- sudo apt install curl 
- curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -(**若出現`gpg: no valid OpenPGP data found`可直接跳過 **)
- sudo apt update
- sudo apt install ros-melodic-desktop-full
- echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
- source ~/.bashrc
- source /opt/ros/melodic/setup.bash
- sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
- sudo apt install python-rosdep
- sudo rosdep init
- rosdep update
  • 以上步驟執行完成后,可嘗試在終端運行roscore命令,若出現下圖所示,說明ros安裝正常:
    enter image description here

二、安裝DeepStream on TX2(Jetpack 4.5.1)

(備注):若使用SDKManager軟件對TX2進行刷機,且刷入系統時選擇了DeepStream 5.1選項,便會自動安裝 DeepStream,無需進行以下手動安裝。

1.安裝依賴

執行下面命令來安裝需要的軟件包:

sudo apt install \
libssl1.0.0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4=2.11-1

2.安裝 DeepStream SDK

(1)進入官方DeepStream SDK選擇DeepStream 5.1 for Jetson並下載(Jetpack 4.5.1 向下兼容)
備注):也可在本人提供相關資源百度雲盤鏈接中下載deepstream_sdk_5.1_jetson.tbz2文件包
enter image description here

(2)下載后得到壓縮文件deepstream_sdk_5.1_jetson.tbz2,輸入以下命令以提取並安裝DeepStream SDK:

sudo tar -xvf deepstream_sdk_5.1_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.1
sudo ./install.sh
sudo ldconfig

(3) DeepStream測試

  • 執行以下命令:

cd /opt/nvidia/deepstream/deepstream-5.1/sources/objectDetector_Yolo

  • 執行編譯命令

sudo CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo
出現如下圖所示結果,說明編譯成功:
enter image description here

  • 編輯文件prebuild.sh並注釋掉除yolov3-tiny的語句
    執行以下命令(下載yolov3-tiny.cfg和yolov3-tiny.weights):

sudo ./prebuild.sh

  • 執行命令:

deepstream-app -c deepstream_app_config_yoloV3_tiny.txt

若能生成相關engine引擎並啟動視頻流檢測,則說明DeepStream SDK安裝成功,如下圖所示:
guoenter image description here


三、安裝onnx2trt(在jetson nano 上完成)

  1. 查看TensoRT版本

dpkg -l |grep TensorRT

  1. 安裝cmake

    • 刪除原來的cmake

    sudo apt remove cmake
    sudo apt purge --auto-remove cmake

    • 下載所需版本,解壓

    tar -xzvf cmake-3.21.2.tar.gz
    cd ~/cmake-3.21.2

    • 編譯安裝
      執行命令......

    ./bootstrap
    make -j4
    sudo make install

    • 如果編譯安裝cmake時如果出現錯誤:could not find OpenSSL,執行

    sudo apt install libssl-dev

    • 移動路徑

    sudo cp ./bin/cmake /usr/bin/

    • 驗證安裝結果

    cmake --version

  2. 安裝protobuf

    • 下載protobuf-3.17.3.zip並解壓

      unzip protobuf-3.17.3.zip

    • 執行以下命令(其中sudo make install 等待時間較長)

          cd protobuf-3.17.3
          ./autogen.sh
          ./configuremake
          sudo make install
          sudo ldconfig
          protoc --version
      
  3. 安裝onnx-tensorrt

    git clone -b 7.1 https://github.com/onnx/onnx-tensorrt.git

    • 克隆后onnx-tensorrt/third_party/onnx中內容是空的,需要下載與tensorrt7.1匹配的onnx1.6
      下載地址為:https://github.com/onnx/onnx/releases ,也可在百度網盤中下載。
      將下載后的內容,解壓放置到onnx-tensorrt/third_party/

       tar -xzvf onnx-1.6.0.tar.gz 
       mv onnx-1.6.0 onnx
      
    • 執行以下命令

       cd onnx-tensorrt
       mkdir build
       cd build
       cmake .. -DTENSORRT_ROOT=/usr/src/tensorrt
       make -j4
       sudo make install
       onnx2trt -V
      
  4. 生成yolox的TensorRT engine 文件(必須在同一jetson nano 上完成!!!)

    • 相關資源百度雲盤鏈接中將yolox_s.onnx、yolox_tiny.onnx、yolox_nano.onnx到Jetson Nano上,可放置於home目錄下,並依次執行 以下命令:

      onnx2trt yolox_s.onnx -o yolox_s.engine

      onnx2trt yolox_tiny.onnx -o yolox_tiny.engine

      onnx2trt yolox_nano.onnx -o yolox_nano.engine

      若要自己生成.onnx文件,請進入以下鏈接:
      yolox導出onnx

四、從github克隆cv-detect-ros項目,並將本人設計好的yolox-ros-deepstream子項目的相關子文件夾拷貝到相應目錄下進行編譯

  1. 從github克隆cv-detect-ros項目(建議在搭建梯子的環境下進行git clone)

先按 ctrl + alt +t 進入終端(默認克隆的文件在家目錄下)

git clone https://github.com/guojianyang/cv-detect-ros.git

  1. 首先對我們所要操作的文件夾賦予權限

sudo chmod -R 777 /opt/nvidia/deepstream/deepstream-5.1/sources/

  1. 再拷貝cv-detect-ros/yolox-ros-deepstream/yolox-ros文件夾到opt/nvidia/deepstream/deepstream-5.1/sources/
    yolox-ros中的文件內容如下圖所示:
    enter image description here

sudo cp ~/cv-detect-ros/yolox-ros-deepstream/yolox-ros /opt/nvidia/deepstream/deepstream-5.1/sources/

  1. 拷貝步驟(三)中生成的yolox、yolox-tiny和yolox-nano的engine文件到opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros

cp ~/yolox_s.engine /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros

cp ~/yolox_tiny.engine /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros

cp ~/yolox_nano.engine /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros

  1. 編譯

     cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros
     CUDA_VER=10.2 make -C nvdsinfer_custom_impl_yolox
    

    對於yolox-tiny和yolox-nano的部署, nvdsparsebbox_yolox.cpp中先修改

    static const int INPUT_W = 416; //640;
    static const int INPUT_H = 416; //640;
    

    然后在進行編譯

  2. 搭建自定義的rostpoic話題消息的工作空間boxes_ws,建立ros接口

  • 將git clone 的文件夾cv-detect-ros/yolovx-ros-deepstream/boxes_ws復制到home目錄下

sudo cp -r ~/cv-detect-ros/yolox-ros-deepstream/boxes_ws ~/

  • 進入boxes_ws文件夾,編譯ros工作空間

cd ~/boxes_ws

  • boxes_ws目錄下若有 build和devel文件,則需刪除后再編譯,否則無需執行本步驟

rm -r build devel

  • 編譯

catkin_make

  • 編譯成功后,需將boxes_ws工作空間添加環境變量

sudo gedit .bashrc

echo "source ~/boxes_ws/devel/setup.bash" >> ~/.bashrc

source ~/.bashrc

  • 將src下功能包darknet_ros_msgs建立軟連接至/opt/nvidia/deepstream/deepstream-5.1/sources/yolovx-ros/目錄下

cd ~/boxes_ws/src
ln -s ~/boxes_ws/src/ darknet_ros_msgs /opt/nvidia/deepstream/deepstream-5.1/sources/yolovx-ros/

  • 測試ros接口是否成功建立

cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolovx-ros/

  在當前目錄終端下運行`python2`(一定要python2),並導入以下功能包:

from darknet_ros_msgs.msg import BoundingBox_tensor,BoundingBoxes_tensor

   若以上導入沒有報錯,則說明ros接口創建成功!!!  

五、落地部署測試

  • 測試推理視頻文件

    • 啟動檢測程序(啟動成功后會出現檢測畫面)

      cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros
      
      deepstream-app -c deepstream_app_config.txt
      
    • 將yolox-ros-deepstream中的client_ros.py文件復制到/opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/中

      cp -r ~/cv-detect-ros/yolox-ros-deepstream/client_ros.py /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/

    • ctrl + alt +t 新建終端,啟動roscore

      roscore

    • ctrl + alt +t新建一個終端,並進入目錄/opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/

      cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/
      python2 client_ros.py

    • client_ros.py文件啟動后,檢測到的目標數據以topic的形式發布出來,可通過訂閱話題boundingboxes_tensor實時查看目標檢測的數據

    • 如下圖所示:
      enter image description here

  • USB攝像頭視頻測試

    • 攝像頭簡單檢測指令(ros的接入與上述一樣):

        ls /dev/video*
      
    • 安裝v4l-utils工具:

        sudo apt install v4l-utils
      
    • 檢測攝像頭比較完整信息的指令:

        v4l2-ctl --list-devices
      
    • 攝像頭更細致規格的查看指令:

        v4l2-ctl --device=/dev/video0 --list-formats-ext
        v4l2-ctl --device=/dev/video1 --list-formats-ext
      
    • yolox usb攝像頭測試指令:

        deepstream-app -c source1_usb_dec_infer_yolox.txt
      
  • CSI攝像頭視頻測試(ros的接入與上述一樣):

      deepstream-app -c source1_csi_dec_infer_yolox.txt
    

六、針對自定義數據模型的修改

  • 修改config_infer_primary.txt中的參數(num-detected-classes為自定義的類別數)

          num-detected-classes=80
    
  • 在labels.txt中修改類別名稱文件,換成自定義的類別名稱


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM