当前位置:   article > 正文

retinaface在ubuntu20.04(wsl2)下使用tensorrt(c++)部署

retinaface在ubuntu20.04(wsl2)下使用tensorrt(c++)部署

1. 参考博客:
            1. Retinaface Tensorrt Python/C++部署:https://blog.csdn.net/weixin_45747759/article/details/124534079
            2. B站视频教程:https://www.bilibili.com/video/BV1Nv4y1K727/
            3. Retinaface_Tensorrt github 仓库:https://github.com/Monday-Leo/Retinaface_Tensorrt
            4. Ubuntu 20.04 上安装 CMake 3.20 的详细步骤:https://blog.csdn.net/qq_50380073/article/details/139766140
            5. Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system:https://blog.csdn.net/quantum7/article/details/135332971
            6. 如何在 Ubuntu 20.04 上安装 OpenCV:https://blog.csdn.net/qq_33532713/article/details/122994933
            7. 安装OpenCV时遇到的几种错误:https://blog.csdn.net/weixin_44697198/article/details/125101732
            8. 【torch、torchvision、torchaudio】版本对应关系:https://blog.csdn.net/qq_38308388/article/details/130947484

2. 确认 ubuntu 版本:
            执行 lsb_release -a,输入信息如下:

  1. No LSB modules are available.
  2.         Distributor ID: Ubuntu
  3.         Description:    Ubuntu 20.04.6 LTS
  4.         Release:        20.04
  5.         Codename:       focal


       

3. ubuntu20.04( wsl2 ) 中安装 TensorRT-8.6.1.6、cuda_11.6、cudnn:
            1. 安装步骤:略( 参考 https://blog.csdn.net/heshiyuan1406146854/article/details/141247117 )
            2. 版本展示:
                        1. 执行 nvcc  -V,输入信息如下:            

  1. nvcc: NVIDIA (R) Cuda compiler driver
  2.             Copyright (c) 2005-2022 NVIDIA Corporation
  3.             Built on Tue_Mar__8_18:18:20_PST_2022
  4.             Cuda compilation tools, release 11.6, V11.6.124
  5.             Build cuda_11.6.r11.6/compiler.31057947_0

                        2. 从 tensorrt 安装位置 /soft/TensorRT-8.6.1.6 可以看出版本为 8.6.1.6
                        3. cudnn 版本: cudnn-linux-x86_64-8.9.7.29_cuda11-archive

4. 英伟达显卡(NVIDIA GeForce RTX 4070 Ti)驱动版本:   

  1. +-----------------------------------------------------------------------------------------+
  2. | NVIDIA-SMI 555.52.01 Driver Version: 555.99 CUDA Version: 12.5 |
  3. |-----------------------------------------+------------------------+----------------------+
  4. | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
  5. | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
  6. | | | MIG M. |
  7. |=========================================+========================+======================|
  8. | 0 NVIDIA GeForce RTX 4070 Ti On | 00000000:01:00.0 On | N/A |
  9. | 30% 27C P8 6W / 285W | 792MiB / 12282MiB | 0% Default |
  10. | | | N/A |
  11. +-----------------------------------------+------------------------+----------------------+
  12. +-----------------------------------------------------------------------------------------+
  13. | Processes: |
  14. | GPU GI CI PID Type Process name GPU Memory |
  15. | ID ID Usage |
  16. |=========================================================================================|
  17. | 0 N/A N/A 23 G /Xwayland N/A |
  18. | 0 N/A N/A 28 G /Xwayland N/A |
  19. | 0 N/A N/A 30 G /Xwayland N/A |
  20. +-----------------------------------------------------------------------------------------+

5. ubuntu20.04(wsl2) 中安装 cmake( 3.17.1 ):

  1. 1. apt update
  2.     2. apt install build-essential
  3.     3. apt install -y openssl libssl-dev
  4.     4. wget https://cmake.org/files/v3.17/cmake-3.17.1.tar.gz( 速度太慢,可以使用迅雷下载 )
  5.     5. tar -zxvf cmake-3.17.1.tar.gz
  6.     6. cd cmake-3.17.1
  7.     7. ./configure
  8.     8. make
  9.     9. make install
  10.     10. 执行 cmake  --version 显示 cmake version 3.17.1

            

6. ubuntu20.04(wsl2) 中安装 opencv( 3.4.6 ):
            1. 安装构建工具和所有的依赖软件包:       

  1. apt install build-essential cmake git pkg-config libgtk-3-dev \
  2.         libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
  3.         libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
  4.         gfortran openexr libatlas-base-dev python3-dev python3-numpy \
  5.         libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \
  6.         libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

            2. 在 github 上下载 opencv-3.4.6.zip、opencv_contrib-3.4.6.zip
            3. unzip opencv-3.4.6.zip && unzip opencv_contrib-3.4.6.zip
            4. cd opencv-3.4.6 && mkdir  build && cd build
            5. 

  1. cmake -D CMAKE_BUILD_TYPE=RELEASE \
  2.         -D CMAKE_INSTALL_PREFIX=/usr/local \
  3.         -D INSTALL_C_EXAMPLES=ON \
  4.         -D INSTALL_PYTHON_EXAMPLES=ON \
  5.         -D OPENCV_GENERATE_PKGCONFIG=ON \
  6.         -D OPENCV_EXTRA_MODULES_PATH=/soft/opencv_contrib-3.4.6/modules \
  7.         -D BUILD_EXAMPLES=ON ..

            6. make( 报找不到文件 "#include boostdesc_bem.i" 等,请参考博客:https://blog.csdn.net/weixin_44697198/article/details/125101732
            7. make  install
            8. 验证 opencv 是否安装成功:
                        方法1:在任意位置执行 pkg-config --modversion opencv,输出 3.4.6
                        方法2:
                                    1. cd /soft/opencv-3.4.6/samples/cpp/example_cmake
                                    2. 因为我的电脑为台式机,没有摄像头,该测试样例下的 example.cpp 是调用摄像头进行测试的,我这里修改了 example.cpp 的代码,主要是将 main 函数的代码修改为如下所示:                

  1. cv::Mat src = cv::imread("../0001.jpg");
  2.                 cv::Mat gray;
  3.                 cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
  4.                 cv::imwrite("../0001_gray.jpg", gray);

                                      即将一个图片转换为灰度图
                                    3. 向 /soft/opencv-3.4.6/samples/cpp/example_cmake 目录上传一张 0001.jpg
                                    4. mkdir build && cd build && cmake .. && make,发现在 /soft/opencv-3.4.6/samples/cpp/example_cmake 目录下成功生成了灰度图 0001_gray.jpg


7.  下载 Retinaface_Tensorrt 代码:

    mkdir /data/code/c_code && cd  /data/code/c_code && git clone  git clone https://github.com/Monday-Leo/Retinaface_Tensorrt


8.  下载 Pytorch_Retinaface 代码:

    mkdir /data/code/python_code && cd /data/code/python_code && git clone https://github.com/biubug6/Pytorch_Retinaface


9.  安装 Python 的 torch 环境( ps:一定要加对应的版本号,否则下载的版本对应的cuda不符合自己的电脑实际安装的 cuda 版本;不要指定国内镜像,国内镜像很可能找不到自己电脑 cuda 版本对应的版本的 python 安装包 ):

    pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116 torchaudio==0.12.0 -f https://download.pytorch.org/whl/torch_stable.html


10. 安装 opencv-python :

    pip install opencv-python  -i  https://pypi.mirrors.ustc.edu.cn/simple/


11. 将 /data/code/c_code/Retinaface_Tensorrt/gen_wts.py 拷贝到 /data/code/python_code/Pytorch_Retinaface 目录


12. 将百度网盘( https://pan.baidu.com/s/12nl4d_oKrj2aLXEKYcwxiQ( l7ls ) ) 中的2个权重文件( Resnet50_Final.pth、mobilenet0.25_Final.pth ) 拷贝到 /data/code/python_code/Pytorch_Retinaface 下的 weights 目录( 不存在 weights,新建即可 )

13. 可以去修改 /data/code/python_code/Pytorch_Retinaface/gen_wts.py 文件中如下行的 default 和 help 参数:

parser.add_argument('--network', default='mobile0.25', help='mobile0.25 or resnet50')   // 大概是在第11行

           
14. 执行 python3 gen_wts.py,发现在 /data/code/python_code/Pytorch_Retinaface 下成功生成了 mobile0_25.wts( 此时通过 win10宿主机的任务管理器发现是在消耗 GPU )


15. 测试 Retinaface_Tensorrt:
            1. cd /data/code/c_code/Retinaface_Tensorrt,修改 CMakeLists.txt,添加如下内容:             

  1. set(OpenCV_DIR "/soft/opencv-3.4.6/build")
  2.         set(TRT_DIR "/soft/TensorRT-8.6.1.6")
  3.         include_directories( "/soft/TensorRT-8.6.1.6/include" )


            2. cp /soft/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/lib/libnvinfer.so /usr/local/lib/
            3. mkdir  build
            4. cd build
            5. cmake ..
            6. make

                        常见报错的解决方案:

                               1. 头文件、库文件找不到:根据自己安装 opencv、cuda、tensorrt、cudnn 等的方式不同,可能会找不到一些文件,使用 find 命令查找对应的文件所在位置,修改具体报错的源文件或者修改CMakeLists.txt,或者修改 ubuntu 环境变量等,怎么熟练怎么来

                                2. github上 Retinaface_Tensorrt 仓库中的操作指南中作者是举的在 windows 上使用 vs ide来编译的例子,使用的是 CMakeLists.txt( 是给 window环境使用的 ),还有一个 CMakeLists_linux.txt,我使用的是后者,但是会有一个坑,就是当头文件、库文件的问题都解决好以后,会碰到一个在 /data/code/c_code/Retinaface_Tensorrt/retina_mnet.cpp 和
/data/code/c_code/Retinaface_Tensorrt/retina_r50.cpp 文件中报错,不识别 “extern "C" __declspec(dllexport) void Detect(void *h, int rows,....” 这句语法的问题,这是因为 dllexport 是给 windows 平台使用的( 可执行百度 dllexport 用法 ),Linux 平台不需要,直接干掉就行,即把  __declspec(dllexport) 删掉即可


            7. 发现在当前目录下成功生成了 retina_mnet
            8. 将 /data/code/python_code/Pytorch_Retinaface 目录下的 mobile0_25.wts 问价复制到当前目录下
            9. 执行 .retina_mnet -s               // 将wts转换为engine序列化模型
            10. 大概等待几分钟后在当前目录下成功生成了 retina_mnet.engine
            11. cp /data/code/c_code/Retinaface_Tensorrt/pictures/test.jpg  ./
            12. ./retina_mnet -d        // 发现执行成功了,对 test.jpg 进行人脸检测,在当前目录下生成了框选人脸后的图片 0_mnet_result.jpg
            13. 测试人脸识别时发现一个有趣的现象,一张人很多的大合照,没识别出任何人脸,怀疑可能是因为人脸太多,或者每个人脸都不是很清晰,但是我将图片放大( 清晰度是没有变化的,虽然人脸大了,但是更模糊了 ),截取了图片中一部分的照片,再进行识别,发现识别出了很多人脸了,todo 研究下是否是参数设置的问题,类似阈值啥的,类似那种在性能和识别率之间权衡的参数配置

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/1008419
推荐阅读
相关标签
  

闽ICP备14008679号