当前位置: 首页 > news >正文

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,输入信息如下:

        No LSB modules are available.Distributor ID: UbuntuDescription:    Ubuntu 20.04.6 LTSRelease:        20.04Codename:       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,输入信息如下:            

            nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2022 NVIDIA CorporationBuilt on Tue_Mar__8_18:18:20_PST_2022Cuda compilation tools, release 11.6, V11.6.124Build 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)驱动版本:   

    +-----------------------------------------------------------------------------------------+| NVIDIA-SMI 555.52.01              Driver Version: 555.99         CUDA Version: 12.5     ||-----------------------------------------+------------------------+----------------------+| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC || Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. ||                                         |                        |               MIG M. ||=========================================+========================+======================||   0  NVIDIA GeForce RTX 4070 Ti     On  |   00000000:01:00.0  On |                  N/A || 30%   27C    P8              6W /  285W |     792MiB /  12282MiB |      0%      Default ||                                         |                        |                  N/A |+-----------------------------------------+------------------------+----------------------++-----------------------------------------------------------------------------------------+| Processes:                                                                              ||  GPU   GI   CI        PID   Type   Process name                              GPU Memory ||        ID   ID                                                               Usage      ||=========================================================================================||    0   N/A  N/A        23      G   /Xwayland                                   N/A      ||    0   N/A  N/A        28      G   /Xwayland                                   N/A      ||    0   N/A  N/A        30      G   /Xwayland                                   N/A      |+-----------------------------------------------------------------------------------------+

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

    1. apt update2. apt install build-essential3. apt install -y openssl libssl-dev4. wget https://cmake.org/files/v3.17/cmake-3.17.1.tar.gz( 速度太慢,可以使用迅雷下载 )5. tar -zxvf cmake-3.17.1.tar.gz6. cd cmake-3.17.17. ./configure8. make9. make install10. 执行 cmake  --version 显示 cmake version 3.17.1

            

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

        apt install build-essential cmake git pkg-config libgtk-3-dev \libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \gfortran openexr libatlas-base-dev python3-dev python3-numpy \libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \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. 

        cmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local \-D INSTALL_C_EXAMPLES=ON \-D INSTALL_PYTHON_EXAMPLES=ON \-D OPENCV_GENERATE_PKGCONFIG=ON \-D OPENCV_EXTRA_MODULES_PATH=/soft/opencv_contrib-3.4.6/modules \-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 函数的代码修改为如下所示:                

                cv::Mat src = cv::imread("../0001.jpg");cv::Mat gray;cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);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,添加如下内容:             

        set(OpenCV_DIR "/soft/opencv-3.4.6/build")set(TRT_DIR "/soft/TensorRT-8.6.1.6")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 研究下是否是参数设置的问题,类似阈值啥的,类似那种在性能和识别率之间权衡的参数配置

http://www.lryc.cn/news/430359.html

相关文章:

  • vue打包设置 自定义的NODE_ENV
  • python爬虫521
  • CSS中flex:1是什么属性
  • 网络硬件升级指南:提升性能的策略与实践
  • XSS-过滤特殊符号的正则绕过
  • CocosCreator3.8 IOS 构建插屏无法去除的解决方案
  • Linux软件编程---数据库
  • Spring 源码解读专栏:从零到一深度掌握 Spring 框架
  • 帆软-秋招提前批-笔试
  • 嵌入式AI快速入门课程-K510篇 (第七篇 系统BSP开发)
  • 代码随想录算法训练营day52:图03:101. 孤岛的总面积;102. 沉没孤岛;103. 水流问题
  • 开源大模型本地私有化部署
  • 站长为什么要搭建个人博客网站
  • Golang | Leetcode Golang题解之第355题设计推特
  • Redis如何实现发布/订阅?
  • EmguCV学习笔记 VB.Net 4.4 图像形态学
  • HarmonyOS 开发
  • 拒绝拖延!Kimi助你一天内速成论文初稿!
  • Python画笔案例-005 绘制迷宫
  • 【鸿蒙学习】HarmonyOS应用开发者高级认证 - 应用性能优化二(代码层面)
  • 【Docker】如何将A机器内的镜像,导入到B机器?
  • 动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本
  • 爬虫案例4——爬取房天下数据
  • 网络硬盘录像机NVR程序源码NVR全套运用方案
  • 03:电容的充放电特性及应用举例
  • 【专题】2023-2024中国游戏企业研发竞争力报告合集PDF分享(附原数据表)
  • 会话跟踪方案:Cookie Session Token
  • jemeter压力测试入门
  • SpringBoot3 简单集成 Spring AI 并使用
  • 【C/C++】程序设计基础知识(数据类型与表达式、控制语句、数组与结构)