mmdeploy环境部署流程

参考:mmdeploy/docs/zh_cn/01-how-to-build/linux-x86_64.md at main · open-mmlab/mmdeploy (github.com)

从零入门《openmmlab》mmdeploy[1]环境安装及简单上手_哔哩哔哩_bilibili

我的环境:

docker容器,ubuntu20.04,cuda11.7、四张3090显卡,默认以安装好PyTorch、mmcv等mmdetection需要的所有环境。

1、安装编译需要用到的库

apt update
apt install wget
apt-get install make

2、安装cuda

wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
sh cuda_11.7.0_515.43.04_linux.run

查看安装结果: 

3、查看编译工具版本

cmake -version
g++ -v

保证 cmake的版本 >= 3.14.0并且gcc 7+以上的版本,如果不是,按官方说明重装mmdeploy/docs/zh_cn/01-how-to-build/linux-x86_64.md at main · open-mmlab/mmdeploy (github.com)

4、安装 MMDeploy SDK 依赖

安装OpenCV

apt-get install libopencv-dev

安装pplcv

git clone https://github.com/openppl-public/ppl.cv.git
cd ppl.cv
export PPLCV_DIR=$(pwd)
git checkout tags/v0.7.0 -b v0.7.0
./build.sh cuda

5、安装TensorRT

下载tensorrt,下载地址https://developer.nvidia.com/nvidia-tensorrt-download

我使用的版本为:TensorRT-8.6.1.6,下载并解压TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz

 编译

pip install TensorRT-8.6.1.6/python/tensorrt-8.6.1-cp310-none-linux_x86_64.whl 
export TENSORRT_DIR=/root/TensorRT-8.6.1.6
export LD_LIBRARY_PATH=$TENSORRT_DIR/lib:$LD_LIBRARY_PATH
cd TensorRT-8.6.1.6
pip install pycuda

6、安装cudnn

下载地址:https://developer.nvidia.com/rdp/cudnn-archive

 我使用的版本为cuDNN v8.6.0,下载并解压cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz

tar -xf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz

解压后得到一个cudnn-linux-x86_64-8.6.0.163_cuda11-archive文件名,然后将其改为cudnn

设置环境变量

export CUDNN_DIR=/root/cudnn
export LD_LIBRARY_PATH=$CUDNN_DIR/lib:$LD_LIBRARY_PATH

7、下载mmdeploy并编译自定义算子

git clone https://github.com/open-mmlab/mmdeploy
cd mmdeploy/
git submodule update --init --recursive
export MMDEPLOY_DIR=$(pwd)

TensorRT 自定义算子

mkdir -p build
cmake -DCMAKE_CXX_COMPILER=g++-9 -DMMDEPLOY_TARGET_BACKENDS=trt -DTENSORRT_DIR=/root/TensorRT-8.6.1.6 -DCUDNN_DIR=/root/cudnn
make -j$(nproc) && make install

注意这里的g++-9一定要改成你g++的版本号

 8、编译 SDK 和 Demos

cd mmdeploy
pip install -e .
mkdir -p build
cmake . \-DCMAKE_CXX_COMPILER=g++-9 \-DMMDEPLOY_BUILD_SDK=ON \-DMMDEPLOY_BUILD_EXAMPLES=ON \-DMMDEPLOY_BUILD_SDK_PYTHON_API=ON \-DMMDEPLOY_TARGET_DEVICES="cuda;cpu" \-DMMDEPLOY_TARGET_BACKENDS=trt \-Dpplcv_DIR=${PPLCV_DIR}/cuda-build/install/lib/cmake/ppl \-DTENSORRT_DIR=${TENSORRT_DIR} \-DCUDNN_DIR=${CUDNN_DIR}make -j$(nproc) && make install

9、模型转换

以yolox为例,先下载权重文件

wget https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_tiny_8x8_300e_coco/yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth
cd mmdeploypython tools/deploy.py configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py ../mmdetection3/configs/yolox/yolox_tiny_8xb8-300e_coco.py ../mmdetection3/workdir/yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth ../mmdetection3/demo/demo.jpg --work-dir yolox-tiny --device cuda --dump-info

10、推理

./bin/object_detection cuda yolox-tiny/ ../mmdetection3/demo/demo.jpg 

 推理成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPNsense 24.1 - 基于 FreeBSD 的开源防火墙和路由平台

OPNsense 24.1 - 基于 FreeBSD 的开源防火墙和路由平台 请访问原文链接:https://sysin.org/blog/opnsense/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 关于 OPNsense OPNsense 是一个开源、易于使用且易于构建…

PS通过GTX实现SFP网络通信1

将 PS ENET1 的 GMII 接口和 MDIO 接口 通过 EMIO 方 式引出。在 PL 端将引出的 GMII 接口和 MDIO 接口与 IP 核 1G/2.5G Ethernet PCS/PMA or SGMII 连接, 1G/2.5G Ethernet PCS/PMA or SGMII 通过高速串行收发器 GTX 与 MIZ7035/7100 开发…

利用flask + pymysql监测数据同步中的数据是否完整

一、背景 最近项目搞重构,将原有的系统拆分成了多个子系统。但是有数据表需要在不同系统中数据,同时为了解决项目性能最了一个很简单的方案,就是公共数据存在每个系统之中。 二、分析 分析这些表,这些表相比源数据表,表…

行为型-观察者模式(Observer)

观察者模式(Observer Pattern)是一种软件设计模式,主要用于在对象之间建立一对多的依赖关系,以便当一个对象的状态发生改变时,其所有依赖的对象都会得到通知并自动更新。观察者模式属于行为型模式。以下是关于观察者模…

lvgl手势事件判断为点击事件问题

lvgl手势事件判断为点击事件问题处理方法 1.打开文件lvgl\src\core\lv_indev.c 2. 修改函数 static void indev_proc_release(_lv_indev_proc_t * proc)2.1 由原来的 /*** Process the released state of LV_INDEV_TYPE_POINTER input devices* @param proc pointer to an …

学习笔记——交通安全分析05

目录 前言 当天学习笔记整理 交通行为、心理与安全 结束语 前言 #随着上一轮SPSS学习完成之后,本人又开始了新教材《交通安全分析》的学习 #整理过程不易,喜欢UP就点个免费的关注趴 #本期内容接上一期04笔记 当天学习笔记整理 交通行为、心理与…

关于Flutter doctor里两个警告的消除

在终端里输入 flutter doctor 是我们检查flutter是否配置好的方法。 在输出信息里常碰到两个警告 ! Warning: dart on your path resolves to /usr/local/Cellar/dart/2.18.6/libexec/bin/dart,which is not inside your current Flutter SDK checkout at /Users/dengpeng/fl…

三运放仪表放大器通过设置单个电阻器的值来调整增益

从公式 1 中可以看出,我们可以通过调整单个电阻器 R G的值来调整仪表放大器的差分增益。这很重要,因为与电路中的其他电阻器不同, RG的值不需要与任何其他电阻器匹配。 例如,如果我们尝试通过更改 R 5的值来设置增益,…

TGI模型- 同期群-评论文本

用户偏好分析 TGI 1.1 用户偏好分析介绍 要分析的目标,在目标群体中的均值 和 全部群体里的均值进行比较, 差的越多说明 目标群体偏好越明显 TGI(Target Group Index,目标群体指数)用于反映目标群体在特定研究范围内…

在自己的电脑上搭建我的世界Java版服务器

很多朋友,喜欢玩Minecraft,也希望搭建一个服务器,用于和小伙伴联机; 并且,拥有服务器后,即使所有玩家都下线,“世界”依旧在运行,玩家可以随时参与其中,说不定一上线&am…

有状态服务和无状态服务

有状态服务和无状态服务在不同的业务场景下有不同的应用,以下是一些常见的例子: 有状态服务的场景: 用户会话管理: 用户登录后,会话信息(如用户ID、权限、购物车内容等)需要在服务端保持状态。…

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境),可作为深度学习信号前处理过程,水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(五)质量设计方法与工具

第五节 质量设计方法与工具 1 任 务 分 解 法 1.1 概念 任务分解法,又称工作分解结构 (Work Breakdown Structure, 简 称 WBS) 。WBS 指以可交付成果为 导向,对项目团队为实现项目目标并完成规定的可交付成果而执行的工作所进行的层次分解。W…

程序员基本功之git的使用

阿里网盘-资料链接 文章目录 git分布式版本控制工具git的基本概念开发过程中的问题常见的版本控制工具git分布式版本控制工具特点git系统所定制的若干目标git的工作流程图 GIT的安装和常用命令**创建本地git仓库步骤****本地git仓库的使用**git log详解 git分布式版本控制工具…

SpringCloud跨服务远程调用

随着项目的使用者越来越多,项目承担的压力也会越来越大,为了让我们的项目能服务更多的使用者,我们不得不需要把我们的单体项目拆分成多个微服务,就比如把一个商城系统拆分成用户系统,商品系统,订单系统&…

MQTT TCP HTTP 协议对比

目录 1. 类型与用途 2. 通信模式与特性 3. 优缺点 4. 使用场景 MQTT、TCP和HTTP在类型、用途、通信模式、特性以及使用场景等方面存在显著的区别,以下是详细的阐述: 1. 类型与用途 MQTT:MQTT是一种消息传输协议,主要适用于物…

增加软件投入的重要性:提升自动化程度与用户界面设计的价值

一、引言 在许多项目中,硬件系统通常占据了大量预算,而对软件的投入相对较少。这种不平衡往往导致软件自动化程度低、操作不便、界面简陋,过多的人工干预不仅降低了工作效率,还影响了用户体验。特别是对于一些国家项目&#xff0…

matlab:数字信号处理过程(趋势+峰值+包络+滤波+FFT)仿真

数字信号处理 消除趋势找峰值求包络平滑fftclc;clear;close all; figure(1);clf; Fs = 200;%采样频率 T = 1/Fs; %采样周期 N = 300;

「C系列」C 结构体

文章目录 一、C 结构体1. 定义结构体2. 声明结构体变量3. 初始化结构体变量4. 访问结构体成员5. 结构体数组6. 结构体指针7. 结构体嵌套 二、C 如何使用结构体1. 定义结构体类型2. 声明结构体变量3. 初始化结构体变量4. 访问结构体成员5. 结构体指针6. 在函数中使用结构体7. 注…

docker run的复杂使用

sudo docker run -dit --namenmediacross1.x -v $HOME:$HOME -v /tmp/.X11-unix:/tmp/.X11-unix -v /dev/dri:/dev/dri --privileged --networkhost -e DISPLAYunix$DISPLAY -w $HOME nova:nmediacross1.x这个Docker命令相当复杂,包含了许多选项和参数,…