MMDeploy部署YOLOX-x模型

news2024/11/26 10:46:50

环境搭建

  • 本文初始环境为PyTorch 2.0.0Python 3.8(ubuntu20.04)Cuda 11.8

OpenMMLab基础环境

  • 首先安装OpenMMLab基础环境,以下代码均在命令窗口下输入
pip install openmim
mim install mmcv-full
mim install "mmengine==0.7.2"

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -e . >> /dev/null

mkdir checkpoint
mkdir output
cd ..
  • mim install mmcv-full这一步需要大概15~30分钟,没报错就耐心等待。

MMDeploy环境

  • 再次声明,下面代码均在命令窗中输入运行!!
git clone https://github.com/open-mmlab/mmdeploy.git --recursive
cd mmdeploy

# 备份镜像源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
# 更换镜像源
sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo apt-get update

python tools/scripts/build_ubuntu_x64_ort.py
  • 更改环境变量,依然是在命令行输入
export PYTHONPATH=$(pwd)/build/lib:$PYTHONPATH
export LD_LIBRARY_PATH=$(pwd)/build/lib:$(pwd)/../mmdeploy-dep/onnxruntime-linux-x64-1.8.1/lib:$LD_LIBRARY_PATH
  • 可以使用脚本检查环境安装状态python tools/check_env.py
07/14 19:14:16 - mmengine - INFO - **********Environmental information**********
07/14 19:14:17 - mmengine - INFO - sys.platform: linux
07/14 19:14:17 - mmengine - INFO - Python: 3.8.10 (default, Jun  4 2021, 15:09:15) [GCC 7.5.0]
07/14 19:14:17 - mmengine - INFO - CUDA available: True
07/14 19:14:17 - mmengine - INFO - numpy_random_seed: 2147483648
07/14 19:14:17 - mmengine - INFO - GPU 0: NVIDIA GeForce RTX 2080 Ti
07/14 19:14:17 - mmengine - INFO - CUDA_HOME: /usr/local/cuda
07/14 19:14:17 - mmengine - INFO - NVCC: Cuda compilation tools, release 11.8, V11.8.89
07/14 19:14:17 - mmengine - INFO - GCC: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
07/14 19:14:17 - mmengine - INFO - PyTorch: 2.0.0+cu118
07/14 19:14:17 - mmengine - INFO - PyTorch compiling details: PyTorch built with:
  - GCC 9.3
  - C++ Version: 201703
  - Intel(R) oneAPI Math Kernel Library Version 2022.2-Product Build 20220804 for Intel(R) 64 architecture applications
  - Intel(R) MKL-DNN v2.7.3 (Git Hash 6dbeffbae1f23cbbeae17adb7b5b13f1f37c080e)
  - OpenMP 201511 (a.k.a. OpenMP 4.5)
  - LAPACK is enabled (usually provided by MKL)
  - NNPACK is enabled
  - CPU capability usage: AVX2
  - CUDA Runtime 11.8
  - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90
  - CuDNN 8.7
  - Magma 2.6.1
  - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.8, CUDNN_VERSION=8.7.0, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.0.0, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, 

07/14 19:14:17 - mmengine - INFO - TorchVision: 0.15.1+cu118
07/14 19:14:17 - mmengine - INFO - OpenCV: 4.8.0
07/14 19:14:17 - mmengine - INFO - MMEngine: 0.7.2
07/14 19:14:17 - mmengine - INFO - MMCV: 2.0.0
07/14 19:14:17 - mmengine - INFO - MMCV Compiler: GCC 9.3
07/14 19:14:17 - mmengine - INFO - MMCV CUDA Compiler: 11.8
07/14 19:14:17 - mmengine - INFO - MMDeploy: 1.2.0+0a8cbe2
07/14 19:14:17 - mmengine - INFO - 

07/14 19:14:17 - mmengine - INFO - **********Backend information**********
07/14 19:14:17 - mmengine - INFO - tensorrt:    None
07/14 19:14:17 - mmengine - INFO - ONNXRuntime: 1.8.1
07/14 19:14:17 - mmengine - INFO - ONNXRuntime-gpu:     None
07/14 19:14:17 - mmengine - INFO - ONNXRuntime custom ops:      Available
07/14 19:14:17 - mmengine - INFO - pplnn:       None
07/14 19:14:17 - mmengine - INFO - ncnn:        None
07/14 19:14:17 - mmengine - INFO - snpe:        None
07/14 19:14:17 - mmengine - INFO - openvino:    None
07/14 19:14:17 - mmengine - INFO - torchscript: 2.0.0+cu118
07/14 19:14:17 - mmengine - INFO - torchscript custom ops:      NotAvailable
07/14 19:14:18 - mmengine - INFO - rknn-toolkit:        None
07/14 19:14:18 - mmengine - INFO - rknn-toolkit2:       None
07/14 19:14:18 - mmengine - INFO - ascend:      None
07/14 19:14:18 - mmengine - INFO - coreml:      None
07/14 19:14:18 - mmengine - INFO - tvm: None
07/14 19:14:18 - mmengine - INFO - vacc:        None
07/14 19:14:18 - mmengine - INFO - 

07/14 19:14:18 - mmengine - INFO - **********Codebase information**********
07/14 19:14:18 - mmengine - INFO - mmdet:       3.1.0
07/14 19:14:18 - mmengine - INFO - mmseg:       None
07/14 19:14:18 - mmengine - INFO - mmpretrain:  None
07/14 19:14:18 - mmengine - INFO - mmocr:       None
07/14 19:14:18 - mmengine - INFO - mmagic:      None
07/14 19:14:18 - mmengine - INFO - mmdet3d:     None
07/14 19:14:18 - mmengine - INFO - mmpose:      None
07/14 19:14:18 - mmengine - INFO - mmrotate:    None
07/14 19:14:18 - mmengine - INFO - mmaction:    None
07/14 19:14:18 - mmengine - INFO - mmrazor:     None
07/14 19:14:18 - mmengine - INFO - mmyolo:      None

YOLO-x转ONNX格式

  • 下载YOLO-x模型的预训练权重
cd ..
cd mmdetection

# 下载YOLOX-X权重
!weget https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_x_8x8_300e_coco/yolox_x_8x8_300e_coco_20211126_140254-1ef88d67.pth -P checkpoint
cd ..
  • 使用转换脚本将YOLO-x模型转换为ONNX格式
python mmdeploy/tools/deploy.py \
    mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py \
    mmdetection/configs/yolox/yolox_x_8xb8-300e_coco.py \
    mmdetection/checkpoint/yolox_x_8x8_300e_coco_20211126_140254-1ef88d67.pth \
    mmdetection/demo/demo.jpg \
    --work-dir mmdeploy_models/mmdet/yolox \
    --device cpu \
    --show \
    --dump-info
  • 在经过上述代码后,工作目录下的文件组织信息为:
 - mmdeploy_models
     - mmdet
         - yolox
        	 - deploy.json
        	 - detail.json
        	 - end2end.onnx
        	 - pipeline.json
  • 其中,end2end.onnx: 推理引擎文件。可用ONNX Runtime推理。*.json: mmdeploy SDK推理所需的meta 信息。

模型推理

后端推理

from mmdeploy.apis.utils import build_task_processor
from mmdeploy.utils import get_input_shape, load_config
import torch

deploy_cfg = '/kaggle/working/mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py'
model_cfg = '/kaggle/working/mmdetection/configs/yolox/yolox_x_8xb8-300e_coco.py'
device = 'cpu'
backend_model = ['/kaggle/input/yolo-x-onnx-model/end2end.onnx']
image = '/kaggle/working/mmdetection/demo/demo.jpg'

deploy_cfg, model_cfg = load_config(deploy_cfg, model_cfg)

task_processor = build_task_processor(model_cfg, deploy_cfg, device)
model = task_processor.build_backend_model(backend_model)

input_shape = get_input_shape(deploy_cfg)
model_inputs, _ = task_processor.create_input(image, input_shape)

with torch.no_grad():
    result = model.test_step(model_inputs)

task_processor.visualize(
    image=image,
    model=model,
    result=result[0],
    window_name='visualize',
    output_file='output_detection.png')

请添加图片描述

SDK推理

from mmdeploy_runtime import Detector
import cv2

img = cv2.imread('/kaggle/working/mmdetection/demo/demo.jpg')

# create a detector
detector = Detector(model_path='/kaggle/input/yolo-x-onnx-model', device_name='cpu', device_id=0)
# perform inference
bboxes, labels, masks = detector(img)

# visualize inference result
indices = [i for i in range(len(bboxes))]
for index, bbox, label_id in zip(indices, bboxes, labels):
  [left, top, right, bottom], score = bbox[0:4].astype(int), bbox[4]
  if score < 0.3:
    continue

  cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0))

cv2.imwrite('output_detection.png', img)

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

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

相关文章

太阳能供电户外视频远程监控4G无线物联网工业路由器ZR3000

太阳能供电技术常被应用于环保节能的项目中&#xff0c;太阳能具备节能环保、寿命长、性能稳定、维护成本低等特点&#xff0c;被各行各业采纳使用。大多数太阳能应用于户外&#xff0c;存在监控点距离较远、取电困难、宽带光纤布线成本高、环境恶劣等问题&#xff0c;现场还有…

ansible使用playbook剧本

目录 一、执行配置文件 1、修改hosts文件 2、编写yml脚本 3、语法检查[rootansible ~] ansible-playbook --syntax-check ansible.yml 4、预测试 5、执行命令 一、执行配置文件 Playbook配置文件使用YAML语法&#xff0c;具有简介明了&#xff0c;结构清晰等特点。Playbo…

对OpenAI重拳出击!美国政府出手「开源」ChatGPT,Altman惊慌连发3推

FTC突然对OpenAI展开调查&#xff0c;Altman连发3推澄清。FTC对阵OpenAI的大戏正缓缓拉开帷幕。 重磅&#xff01;美国联邦贸易委员会的调查说来就来&#xff01; 调查对象不是别人&#xff0c;正是风头正旺的OpenAI。 一封长达20页的调查要求书直接给了Sam Altman当头棒喝。…

【并发编程的艺术读书笔记】从内存图来理解java是如何执行多线程的

从内存图来理解java是如何执行多线程的 一、内存图简介 众所周知&#xff0c;java类中的成员变量会保存到方法区、java运行时的方法会存入栈中&#xff0c;随之方法中的局部变量也是存储在栈中的&#xff0c;引用类型&#xff08;new出来的对象&#xff09;存储在堆内存中。下…

【C++/嵌入式笔试面试八股】二、24.TCP三次握手四次挥手 | TCP可靠性

TCP三次握手四次挥手 64.TCP头部中有哪些信息?❤️ TCP数据报格式(左图) UDP数据报格式也放这(右图),不具体解释了。 结合三次握手四次挥手来看 端口: 区分应用层的不同应用进程 扩展:应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口…

Linux - 安装nacos 2.1.0

安装包下载 网址为 https://github.com/alibaba/nacos/tags 点击访问 本人选择的nacos版本为2.1.0 与之对应的spring代码版本为 <spring.boot.version>2.3.12.RELEASE</spring.boot.version> <spring.cloud.version>Hoxton.SR12</spring.cloud.version…

运输层(TCP运输协议相关)

运输层 1. 运输层概述2. 端口号3. 运输层复用和分用4. 应用层常见协议使用的运输层熟知端口号5. TCP协议对比UDP协议6. TCP的流量控制7. TCP的拥塞控制7.1 慢开始算法、拥塞避免算法7.2 快重传算法7.3 快恢复算法 8. TCP超时重传时间的选择8.1 超时重传时间计算 9. TCP可靠传输…

如何在vscode中debug python代码,包括如何优雅地传入多个参数

Visiul Studio Code, 简称vscode&#xff0c;是一款轻量级代码编辑器&#xff0c;其丰富的扩展程序使得其可以方便地作为任何语言的编辑器。 本文将讲述如何在vscode中对python脚本文件进行debug。 本文主要包括debug的两种方式&#xff1a; 基本debugging(basic debugging)…

咖啡店小程序怎么做

咖啡店小程序功能介绍 咖啡店小程序是一款专为咖啡店打造的移动应用程序&#xff0c;旨在提供更便利、高效的服务体验。以下是该小程序的主要功能介绍&#xff1a; 1. 菜单浏览&#xff1a;用户可以通过小程序浏览咖啡店提供的各种咖啡、茶和小吃菜单&#xff0c;包括详细的产…

Docker基础——Centos7安装Docker

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

速通sklearn库

速通sklearn库 前言 ​ 最近在复习之前学习过的知识点&#xff0c;因此想到把学过的总结一下&#xff0c;方便后面再次复习&#xff0c;所以有了这个系列。 说明 ​ 由于标题写的是“速通”&#xff0c;因此我的想法是可以让大家看完这篇文章&#xff0c;可以上手matplotlib库&…

FCPX插件-复古老电影胶片边框幻灯片照片展示介绍动画 Emotion Slides

Emotion Slides是一款fcpx插件&#xff0c;可以制作复古老电影胶片边框幻灯片照片展示介绍动画&#xff0c;完全自定义任意数量的场景&#xff0c;完全定制的控制器&#xff0c;7个独特的场景准备&#xff0c;易使用简单&#xff0c;只需拖放。 Emotion Slides插件的主要功能包…

【网络编程】传输层协议——UDP协议

文章目录 一、传输层的意义二、端口号2.1 五元组标识一个通信2.2 端口号范围划分2.3 知名端口号2.4 绑定端口号数目问题2.5 pidof & netstat命令 三、UDP协议3.1 UDP协议格式3.2 如何理解报头&#xff1f;3.3 UDP协议的特点3.4 UDP缓冲区3.5 UDP传输最大长度 一、传输层的意…

基于linux下的高并发服务器开发(第一章)- GDB调试(1)1.13

掌握一个清屏快捷键&#xff1a;CTRLL 01 / 什么是GDB 02 / 准备工作 03 / GDB 命令 -- 启动、退出、查看代码 在~/Linux/lesson08目录下有test.c文件 #include <stdio.h> #include <stdlib.h>int test(int a);int main(int argc,char* argv[]){int a,b;printf(&…

React懒加载/动态加载(Suspense +lazy())简单实例

页面嵌套 两种页面嵌套的方式&#xff0c;一种是父子组件&#xff0c;一种是懒加载1、父子组件&#xff08;可略&#xff0c;只用来做例子对比&#xff09;2、使用懒加载 两种页面嵌套的方式&#xff0c;一种是父子组件&#xff0c;一种是懒加载 1、原本需要用父子组件来实现页…

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程

目录 network 和 NetworkManager关系&#xff1a; 实验&#xff1a;编写一个扫描脚本&#xff0c;知道本局域网里哪些ip在使用&#xff0c;哪些没有使用&#xff1f; 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式&#xff1a; shell语言编写扫描脚本 思…

selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

目录 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until()或者until_not()方法结合使用 WebDriverWait与expected_conditions结合使用 显示等待,自定义等待条件 强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间&#x…

【JAVA】与数字相关的类,Number Math 类

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言数据类型Number类介绍数据格式化实例 Math类介绍静态常量实例 前言 为了解决对数字、日期和系统设置进行处理的困难&#xff0c;如&#xff1a;一些数字&数学问题、随机…

【iOS】—— 编译链接

【iOS】—— 编译链接 文章目录 【iOS】—— 编译链接编译流程预处理&#xff08;预编译Prepressing&#xff09;编译&#xff08;Compilation&#xff09;汇编&#xff08;Assembly&#xff09;链接&#xff08;Linking&#xff09; 编译流程 编译流程分为四步 预处理&#…

基于mediapipe的手势识别

安装opencv:pip install opencv-python 安装mediapipe:pip install mediapipe draw_utils.py: import cv2 import numpy as npdef draw_line(img, width, height, hand, start_index, stop_index):for i in range(start_index, stop_index):x1, y1 = int(hand.landma…