dali预处理-yolov5trt推理-pytorch后处理-nvidia-triton部署
0.概述
整个triton的目录结构如下:
1.dali进行图像预处理
运行下面的脚本回生成一个dali后缀的图像处理引擎,这里面的细节参数请看dali的官方文档、
import nvidia.dali as dali
@dali.pipeline_def(batch_size=128, num_threads=4, device_id=0)
def pipe():img0 = dali.fn.external_source(device="cpu", name="IMG1")images = dali.fn.resize(img0, resize_x=640, resize_y=384)images = dali.fn.crop_mirror_normalize(images,dtype=dali.types.FLOAT,output_layout="CHW",std=[255,255,255])return images
def main():pipe().serialize(filename='model.dali')# pipe.build()# o = pipe.run()if __name__ == '__main__':main()
将dali生成的dali文件放到triton内,并定义好输入输出的config.pbtxt文件
config.pbtxt文件:
name: "dalli_preprocess"
backend: "dali"
max_batch_size: 128
input [
{name: "IMG1"data_type: TYPE_UINT8dims: [ 360, 640, 3 ]
}
]output [
{name: "DALI_PRE_OUT"data_type: TYPE_FP32dims: [3, 384, 640 ]
}
]instance_group [{count: 5kind: KIND_CPU}
]
最后的目录结构应该是这样的
models
└── dalli_preprocess├── 1│ └── model.dali└── config.pbtxt
2. yolov5trt
这里用到了tensorrtx项目:https://github.com/wang-xinyu/tensorrtx
可自行查阅相关资料,最后我们会得到一个"yolov5.engine"和一个"myplugin.so"
yolov5.engine 重命名为 model.plan
定义config.pbtxt文件
name: "detect_yolov5"
platform: "tensorrt_plan"
max_batch_size: 128
input [{name: "data"data_type: TYPE_FP32dims: [3, 384, 640 ]}
]
output [{name: "prob"data_type: TYPE_FP32dims: [ 6001, 1, 1]}
]instance_group [{count: 2kind: KIND_GPU}
]
将之前创建的各种文件按如下文件夹目录放置
models
├── dalli_preprocess
│ ├── 1
│ │ └── model.dali
│ └── config.pbtxt
│
└── detect_yolov5(新)├── 1(新)│ └── model.plan(新)└── config.pbtxt(新)plugins(新)
└──libmyplugins.so(新)
3. pytorch-nms后处理
这里的推理后端环境要自己搭建,搭建脚本如下,请仔细阅读根据实际情况删减
conda create -n yolov5_base64_input python=3.8
conda activate yolov5_base64_input
export PYTHONNOUSERSITE=True
conda install pytorch torchvision cudatoolkit=11.6 -c pytorch -c conda-forge
conda install numpy pillow conda-pack
pip install pybase64
conda-pack
#这里会将整个环境打包得到一个tar.gz的包
conda deactivate
conda env remove -n yolov5_base64_input
后处理脚本
import json
import numpy as np
import triton_python_backend_utils as pb_utils
from PIL import Image
from processing import preprocess, postprocess
import re
import base64
from io import BytesIOclass TritonPythonModel:def initialize(self, args):self.model_config = json.loads(args['model_config'])def execute(self, requests):responses = []for request in requests:# # 获取请求数据# img3_base64 = img3_base64.as_numpy().astype(np.bytes_)nms_threshold = pb_utils.get_input_tensor_by_name(request, "POST_INPUT_NMS")confidence = pb_utils.get_input_tensor_by_name(request, "POST_INPUT_CONF")tersor = pb_utils.get_input_tensor_by_name(request, "POST_INPUT_TENSOR")yolov5_result = tersor.as_numpy().astype(np.float32)nms_threshold = nms_threshold.as_numpy().astype(np.float32)[0]confidence = confidence.as_numpy().astype(np.float32)[0]out = {}for i in range(len(yolov5_result)):# 这里调用的就是后处理了,参考yolov5原作者处理方式detected_objects = postprocess(np.array([yolov5_result[i]]), 680, 384, confidence, nms_threshold)pic_per = list(map(lambda x :x.out_str(), detected_objects))out['pic_'+str(i)] = pic_perout_tensor_0 = pb_utils.Tensor("POST_OUTPUT",np.array([str(out)]).astype(np.bytes_))responses.append(pb_utils.InferenceResponse([out_tensor_0]))return responsesdef finalize(self):"""`finalize` is called only once when the model is being unloaded.Implementing `finalize` function is OPTIONAL. This function allowsthe model to perform any necessary clean ups before exit."""print('Cleaning up...')
定义输入输出config,pbtxt(需要把环境制定,这里的路径是docker的)
name: "detect_postprocess"
backend: "python"
max_batch_size: 128
input [
{name: "POST_INPUT_TENSOR"data_type: TYPE_FP32dims: [ 6001,1,1]
},
{name: "POST_INPUT_CONF"data_type: TYPE_FP32dims: [ 1]
},
{name: "POST_INPUT_NMS"data_type: TYPE_FP32dims: [ 1]
}
]output [
{name: "POST_OUTPUT"data_type: TYPE_STRINGdims: [ 1 ]
}
]parameters: {key: "EXECUTION_ENV_PATH",value: {string_value: "/plugins/yolov5_base64_input.tar.gz"}
}instance_group [{count: 5kind: KIND_GPU}
]
此时目录结构:
models
├── dalli_preprocess
│ ├── 1
│ │ └── model.dali
│ └── config.pbtxt
│
├── detect_postprocess(新)
│ ├── 1(新)
│ │ ├── boundingbox.py(新)
│ │ ├── model.py(新)
│ │ └── processing.py(新)
│ └── config.pbtxt(新)
│
└── detect_yolov5├── 1│ └── model.plan└── config.pbtxtplugins
├── libmyplugins.so
└── yolov5_base64_input.tar.gz(新)
4.组合前三个组件
定义config.pbtxt
name: "detect_yolov5_pipeline"
platform: "ensemble"
max_batch_size: 128
input [{name: "img1"data_type: TYPE_UINT8dims: [ 360, 640, 3 ]},{ name: "nms_threshold"data_type: TYPE_FP32dims: [ 1 ]},{ name: "confidence"data_type: TYPE_FP32dims: [ 1 ]}
]
output [{name: "OUTPUT0"data_type: TYPE_STRINGdims: [ 1 ]}
]ensemble_scheduling {step [{model_name: "detect_dalli_preprocess"model_version: -1input_map {key: "IMG1"value: "img1"}output_map {key: "DALI_PRE_OUT"value: "preprocessed_image"}},{model_name: "detect_yolov5"model_version: -1input_map {key: "data"value: "preprocessed_image"},output_map {key: "prob"value: "infer_out"}},{model_name: "detect_postprocess"model_version: -1input_map {key: "POST_INPUT_TENSOR"value: "infer_out"},input_map {key: "POST_INPUT_CONF"value: "confidence"},input_map {key: "POST_INPUT_NMS"value: "nms_threshold"},output_map {key: "POST_OUTPUT"value: "OUTPUT0"}}]}
此时的目录结构
models
├── dalli_preprocess
│ ├── 1
│ │ └── model.dali
│ └── config.pbtxt
├── detect_postprocess
│ ├── 1
│ │ ├── __pycache__
│ │ │ ├── boundingbox.cpython-38.pyc
│ │ │ ├── model.cpython-38.pyc
│ │ │ └── processing.cpython-38.pyc
│ │ ├── boundingbox.py
│ │ ├── model.py
│ │ └── processing.py
│ └── config.pbtxt
├── detect_yolov5
│ ├── 1
│ │ └── model.plan
│ └── config.pbtxt
└── detect_yolov5_pipeline(新)├── 1(新,空文件夹)└── config.pbtxt(新)plugins
├── libmyplugins.so
└── yolov5_base64_input.tar.gz
5.启动命令
docker run \
--gpus 1 \
--shm-size=2g \
--rm \
-p8000:8000 -p8001:8001 -p8002:8002 \
-v /home/ubuntu/project/triton_deploy/models:/models -v /home/ubuntu/project/triton_deploy/plugins:/plugins \
--env LD_PRELOAD=/plugins/libmyplugins.so nvcr.io/nvidia/tritonserver:22.08-py3 tritonserver \
--model-repository=/models
dali预处理-yolov5trt推理-pytorch后处理-nvidia-triton部署相关推荐
- triton部署yolov5笔记(五)
github链接:https://github.com/Lobaer-D/triton-onnx 整体流程可以参考CSDN链接 triton部署yolov5笔记(一) triton部署yolov5笔记 ...
- [AI画图本地免安装部署]Windows 10 Nvidia平台部署AUTOMATIC1111 版本 stable diffusion 免安装版
文章目录 [AI画图本地免安装部署]Windows 10 Nvidia平台部署AUTOMATIC1111 版本 stable diffusion 免安装版 1. 网络准备 1. 下载资源 2. 开始部 ...
- triton部署yolov5笔记(三)
直达链接 Triton部署YOLOV5笔记(一) Triton部署YOLOV5笔记(二) triton部署yolov5笔记(三) triton部署yolov5笔记(四) 拉取镜像 docker pul ...
- Pytorch模型通过paddlelite部署到嵌入式设备
Pytorch模型通过paddlelite部署到嵌入式设备 一.把模型转为嵌入式设备能够识别的格式 1.把.pt或.pth的pytorch模型转为.onnx格式中间过渡状态模型格式,github上X2 ...
- 英伟达DALI加速技巧:使数据预处理比原生PyTorch运算速度快4倍
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 你的数据处理影响整个训练速度,如果加上英伟达 DALI 库,处理速度比原生 PyT ...
- 英伟达DALI加速技巧:让数据预处理速度比原生PyTorch快4倍
点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自机器之心. 选自towardsdatascience 作者:Pieterluitjens 机器之心编译 参与:一鸣.嘉明.思 你的数据处理影响 ...
- python数据集的预处理_关于Pytorch的MNIST数据集的预处理详解
关于Pytorch的MNIST数据集的预处理详解 MNIST的准确率达到99.7% 用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,伪随机化等. 操作系统:ubuntu ...
- 安装Pytorch时NVIDIA驱动更新,CUDA版本问题
近几个月就要开题了,准备做图像处理,需要安装Pytorch,在装pytorch GPU版的时候踩过不少坑,因为显卡的原因一直装不好GPU版,很困惑很痛苦,网上找了许多教程都没有说更新驱动driver的 ...
- pytorch 41 yolov8的无nsm后处理的onnxruntime部署方案
自onnx11版本及以后,onnx支持将nms操作嵌入到模型中.本博文将yolov8模型的nms操作嵌入到模型中可以大幅度的简化模型部署代码,提升模型推理速度(在以往大家都是使用opencv的库进行n ...
最新文章
- RabbitMQ OS X下安装及常用命令-1
- SharePoint 2013创建应用程序时IIS端口文件夹下没文件
- python面向对象初识
- 软件系统架构~视点和视图
- uni怎么使用原生html标签,uni-app如何完美解析富文本内容
- 【Flink on k8s】JConsole 远程监控 TaskManager
- CCF 2013-12-1 出现次数最多的数
- 数组去重实现的方式(越多越好)
- Android官方文档中文版
- 汇川小型PLC-MODBUS(485)通讯模式
- android教师评价系统源码,教师评价系统
- 苹果cms tv.html,苹果cms添加TV电视直播教程
- 如何通过球面投影(Spherical Projection)将点云转换为距离图像(Range Images)
- 冰冻三尺非一日之寒——大型网站架构演进
- 无法获取链接服务器 XXX 的 OLE DB 访问接口 SQLNCLI10 的架构行集 DBSCHEMA_TABLES_INFO。该访问接口支持该接口,但使用该接口时返回了失败代码。...
- Geek 设计师们疯狂的桌面
- 拼多多产品怎么引流?拼多多商品怎么引更多的流量?
- Python pyglet 自制3D引擎入门(一) -- 绘制几何体、创建3D场景
- 计算机辅助项目管理实验论文,计算机辅助项目管理B卷
- Linux_用户账号权限的设定教程!
热门文章
- 前端微信小程序仿菜谱精灵
- PAT 1029 旧键盘
- 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
- 小米官网的设计 致敬
- 微信公众号h5游戏核销流程
- 【01误区解读】知识图谱与文献计量你一定做错了~CiteSpace时区图
- java unsupport_Java-如何使用Android自动化修复“ UnsupportedC...
- CVPR 2022 论文列表
- MS Office EXCEL常用函数
- C# 绘制CIE1931彩色马蹄形图(CIE1931色坐标描点显示软件)