赞
踩
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: Ubuntu
- Description: Ubuntu 20.04.6 LTS
- Release: 20.04
- 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,输入信息如下:
- nvcc: NVIDIA (R) Cuda compiler driver
- Copyright (c) 2005-2022 NVIDIA Corporation
- Built on Tue_Mar__8_18:18:20_PST_2022
- Cuda compilation tools, release 11.6, V11.6.124
- 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)驱动版本:
+-----------------------------------------------------------------------------------------+ | 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 update
- 2. apt install build-essential
- 3. apt install -y openssl libssl-dev
- 4. wget https://cmake.org/files/v3.17/cmake-3.17.1.tar.gz( 速度太慢,可以使用迅雷下载 )
- 5. tar -zxvf cmake-3.17.1.tar.gz
- 6. cd cmake-3.17.1
- 7. ./configure
- 8. make
- 9. make install
- 10. 执行 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 研究下是否是参数设置的问题,类似阈值啥的,类似那种在性能和识别率之间权衡的参数配置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。