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 研究下是否是参数设置的问题,类似阈值啥的,类似那种在性能和识别率之间权衡的参数配置
相关文章:
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_…...
vue打包设置 自定义的NODE_ENV
默认NODE_ENV 自定义process.env.NODE_ENV的值_process.node.env的值-CSDN博客 NODE_ENV开发环境下:NODE_ENVdevelopment(默认) 生产环境下:NODE_ENVproduction(默认) NODE_ENV 除了默认的 development 和 production 以外,确实可以自定义…...
python爬虫521
爬虫521 记录 记录 最近想学爬虫,尝试爬取自己账号下的文章标题做个词云 csdn有反爬机制 原理我就不说啦 大家都写了 看到大家结果是加cookie 但是我加了还是521报错 尝试再加了referer 就成功了(╹▽╹) import matplotlib import requests from wordcloud impor…...
CSS中flex:1是什么属性
flex: 1 是 CSS 中的一个简写属性,用于设置 Flex 项目的灵活伸缩比例(flex-grow)、收缩比例(flex-shrink)以及基础大小(flex-basis)。具体来说,flex: 1 实际上是以下三个属性的简写&…...
网络硬件升级指南:提升性能的策略与实践
随着企业对网络依赖程度的增加,网络性能的提升已成为信息技术部门的首要任务。本文将探讨如何通过升级网络硬件来提高网络性能,包括选择正确的硬件、实施升级策略和考虑未来网络的可扩展性。 一、网络性能的重要性 在数字化时代,网络是企业…...
XSS-过滤特殊符号的正则绕过
目录 靶场练习地址:https://xss.pwnfunction.com/ 题目源码: 代码分析: 方法一:匿名函数 方法二:使用eval函数绕过限制 示例: 方法三:利用hash绕过 靶场练习地址:https://xs…...
CocosCreator3.8 IOS 构建插屏无法去除的解决方案
CocosCreator3.8 IOS 构建插屏无法去除的解决方案 在实际项目开发过程中,我们通常无需CocosCreator 自带的插屏,一般采用自定义加载页面。 然后在构建IOS 项目时,启用(禁用)插屏无法操作,如下图所示&#…...
Linux软件编程---数据库
目录 一、数据库 1.1.概念 1.2.类型 1.关系型数据库 2.非关系型数据库 1.3.SQL语言 1.4.如何在Linux安装sqlite数据库 1.确保虚拟机可以上网 2.配置apt-get工具集合 3.安装sqlite数据库 1.5.sqlite3 1.创建数据库 2.查看数据表 3.退出数据库 4.SQL语句 二、数…...
Spring 源码解读专栏:从零到一深度掌握 Spring 框架
前言 Spring 是 Java 世界中无可争议的王者框架,它以其灵活、轻量、强大而著称,成为企业级开发的首选工具。然而,很多开发者在使用 Spring 时,往往只停留在会用的层面,对于其内部实现和设计原理知之甚少。本专栏旨在通…...
帆软-秋招提前批-笔试
单选 1. 有四个同学,每个人得到的桃子数量不同,4个到7个之间。然后,4个人都吃掉了1个或2个桃,结果每个人剩下的桃数量还是各不相同。4个人吃过桃后,说了如下的话。其中,吃了2个桃的人撒谎了,吃了1个桃的人说了实话。 安娜:"我吃过红色的桃。" …...
嵌入式AI快速入门课程-K510篇 (第七篇 系统BSP开发)
第七篇 系统BSP开发 文章目录 第七篇 系统BSP开发1. 嵌入式Linux系统介绍嵌入式Linux系统组成产品形态嵌入式芯片启动流程Linux系统Linux系统框架嵌入式编译环境 2.嵌入式Linux开发准备手册文档开发工具配套硬件工程源码 3.嵌入式Linux开发组成概述编译工具链什么是工具链什么是…...
代码随想录算法训练营day52:图03:101. 孤岛的总面积;102. 沉没孤岛;103. 水流问题
101. 孤岛的总面积 卡码网:101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单…...
开源大模型本地私有化部署
1、安装ollama ollma下载 https://ollama.com/download/windows linux 安装 curl -fsSL https://ollama.com/install.sh | sh 运行 ollama run gemma:2b ollama run gemma:7b 使用端口11434 2、下载 open-webui 代码 https://github.com/open-webui/open-webui.git 生成目录…...
站长为什么要搭建个人博客网站
搭建个人博客网站是一个值得考虑的选择,它不仅有助于个人成长,还能在多个方面带来积极的影响。以下是几个主要的理由: 一、记录与备忘 方便回顾与查阅:博客网站成为了一个个人知识库,记录下来的内容方便后续查阅和回顾…...
Golang | Leetcode Golang题解之第355题设计推特
题目: 题解: type Twitter struct {Tweets []intUserTweets map[int][]intFollows map[int][]intIsFollowMy map[int]bool }/** Initialize your data structure here. */ func Constructor() Twitter {// 每一次实例化的时候,都重新分配一次…...
Redis如何实现发布/订阅?
引言 Redis是一款高性能的内存数据存储系统,除了常用的键值存储功能外,还提供了发布/订阅(Pub/Sub)机制。通过发布/订阅机制,Redis可以实现消息的广播或者实时通知功能,是一种非常有用的功能。 本文将详细…...
EmguCV学习笔记 VB.Net 4.4 图像形态学
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSD…...
HarmonyOS 开发
环境 下载IDE 代码 import { hilog } from kit.PerformanceAnalysisKit; import testNapi from libentry.so; import { router } from kit.ArkUI; import { common, Want } from kit.AbilityKit;Entry Component struct Index {State message: string Hello HarmonyOS!;p…...
拒绝拖延!Kimi助你一天内速成论文初稿!
撰写学术论文是一项需要周密计划和精确执行的任务。它要求作者对文章的每个部分进行深入思考,以确保论文结构的合理性和论述的清晰度。利用Kimi的功能,我们可以更系统地进行写作,从构思到最终成稿,逐步构建出一篇高质量的学术论文…...
Python画笔案例-005 绘制迷宫
1、绘制迷宫 通过 python 的turtle 库绘制一个迷宫的图案,如下图: 2、实现代码 从图上可以看出,内测最短的竖线开始,每次右转 90 度后,线段都增加 8 个单位,所以我们是用 for 循环,循环 50 次…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
