技术标签: tensorrt 边缘计算 深度学习 人工智能 deepstream
tensorflow | temsorrt |
---|---|
NWHC | NCWH |
N:batch-size
W:width
H:height
C:通道
cd /opt/developutils/deepstream/tensorrt/TensorRT-7.2.3.4/samples/python/end_to_end_tensorflow_mnist
python -m pip install -r requirements.txt
mkdir models
python model.py
convert-to-uff models/lenet5.pb
python sample.py -d /opt/developutils/deepstream/tensorrt/TensorRT-7.2.3.4/data/
参考:TensorRT的介绍与应用 看到yolov3
### 模型转换代码
resnet50---》onnx---》engine---》load engine
“”"
@Time: 2021/8/11下午5:10
@Author: geekplusa
@FIleName: app_onnx_resnet50.py
@Descripttion: [resnet50—》onnx—》engine—》load engine]
@Software: PyCharm
“”"
#~~~~~~~~~import-start
import torch
import torchvision
from torchsummary import summary
import time
import pycuda.driver as cuda
import pycuda.autoinit
#~~~~~~~import-end
torch.manual_seed(0)
device = torch.device(‘cuda:0’ if torch.cuda.is_available() else ‘cpu’)
resnet50 = torchvision.models.resnet50().to(device)
resnet50.eval()
input_data = torch.randn(1, 3, 1080, 1920, dtype=torch.float32, device=device)
output_data_pytorch = resnet50(input_data).cpu().detach().numpy()
nRound = 1
torch.cuda.synchronize()
t0 = time.time()
for i in range(nRound):
resnet50(input_data)
torch.cuda.synchronize()
t1 = time.time()
time_pytorch = (t1 - t0) /nRound
print(‘PyTorch time:’, time_pytorch)
input_names = [‘input’]
output_names = [‘output’]
torch.onnx.export(resnet50, input_data, ‘resnet50.onnx’, input_names=input_names, output_names=output_names, verbose=True, opset_version=11)
torch.onnx.export(resnet50, input_data, ‘resnet50.dynamic_shape.onnx’, dynamic_axes={“input”: [0, 2, 3]}, input_names=input_names, output_names=output_names, verbose=True, opset_version=11)
“”"
继续运行python代码前,先执行如下命令
trtexec --verbose --onnx=…/samples/python/network_api_pytorch_mnist/resnet50.onnx --saveEngine=…/samples/python/network_api_pytorch_mnist/resnet50.trt
trtexec --verbose --onnx=…/samples/python/network_api_pytorch_mnist/resnet50.onnx --saveEngine=…/samples/python/network_api_pytorch_mnist/resnet50_fp16.trt --fp16
以下命令仅供参考
trtexec --verbose --onnx=…/samples/python/network_api_pytorch_mnist/resnet50.dynamic_shape.onnx --saveEngine=resnet50.dynamic_shape.trt --optShapes=input:1x3x1080x1920 --minShapes=input:1x3x1080x1920 --maxShapes=input:1x3x1080x1920
trtexec --verbose --onnx=…/samples/python/network_api_pytorch_mnist/resnet50.dynamic_shape.onnx --saveEngine=resnet50.dynamic_shape_fp16.trt --optShapes=input:1x3x1080x1920 --minShapes=input:1x3x1080x1920 --maxShapes=input:1x3x1080x1920 --fp16
“”"
from trt_lite2 import TrtLite
import numpy as np
import os
class PyTorchTensorHolder(pycuda.driver.PointerHolderBase):
def init(self, tensor):
super(PyTorchTensorHolder, self).init()
self.tensor = tensor
def get_pointer(self):
return self.tensor.data_ptr()
for engine_file_path in [‘resnet50.trt’, ‘resnet50_fp16.trt’]:
if not os.path.exists(engine_file_path):
print(‘Engine file’, engine_file_path, ‘doesn’t exist. Please run trtexec and re-run this script.’)
exit(1)
print('====', engine_file_path, '===')
trt = TrtLite(engine_file_path=engine_file_path)
trt.print_info()
i2shape = {0: (1, 3, 1080, 1920)}
io_info = trt.get_io_info(i2shape)
d_buffers = trt.allocate_io_buffers(i2shape, True)
output_data_trt = np.zeros(io_info[1][2], dtype=np.float32)
d_buffers[0].copy_(input_data.reshape(d_buffers[0].size()))
trt.execute([t.data_ptr() for t in d_buffers], i2shape)
output_data_trt = d_buffers[1].cpu().numpy()
torch.cuda.synchronize()
t0 = time.time()
for i in range(nRound):
trt.execute([t.data_ptr() for t in d_buffers], i2shape)
torch.cuda.synchronize()
time_trt = (time.time() - t0) / nRound
print('TensorRT time:', time_trt)
print('Speedup:', time_pytorch / time_trt)
print('Average diff percentage:',
np.mean(np.abs(output_data_pytorch - output_data_trt) / np.abs(output_data_pytorch)))
文章浏览阅读432次。题意:有一个谷仓,它的容量为N。第i天先会增加M(不会超出它的容量),然后减少i, 问第几天后谷仓为空,且第一天谷仓是满的。第i天 增加 减少 1 0 1 2 1
文章浏览阅读2.1k次,点赞2次,收藏25次。VS作为宇宙第一编辑器,对Python开发也有很好的支持。添加安装打开Visual Studio Installer点击修改勾选python以及用于科学分析脚本简单使用新建一个python项目选择Python环境查看Python环境添加Python环境可以选择当前已经有的环境,或者创建新的环境.常用的调试快捷键F5 F9 F10 F11这些vs常用的调试快捷键都是可以用的几个有用的窗口打开python调试交互窗口菜单:调试->窗口->python调试交_vs2019 python调试
文章浏览阅读5.9k次,点赞4次,收藏27次。知乎同名账号同步发布。目录0,参考文献和前置知识和阅读注意1,[ECCV20]Contrastive Learning for Unpaired Image-to-Image Translation1.1,创新点和架构1.2,multi-layer、patchwise的对比学习0,参考文献和前置知识和阅读注意参考文献本文通过两篇paper,简述一下如何利用对比学习做无监督。(ECCV20)Contrastive Learning for Unpaired Image-to-Image Tra_unpaired deep image deraining using dual contrastive learning论文引用
文章浏览阅读141次。D. Labyrinthtime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputYou are playing some computer game. One of its levels puts you in a ..._4 5 3 2 1 2 ..... .***. ...** *....codeforces
文章浏览阅读2.7k次。刚开始一直没搞清楚abstract factory 和factory method有什么区别..因为二者常常混在一起用。再仔细想想:AF出来的是一个Factory,这个factory可以创造一系列产品。而FM所属对象本身就是一个factory,调用FM函数将产生一个产品。AF---->Factory(自己可能就提供FM)---->Product。它这个和AF是面向不同层次的,AF更加广泛高一些。当然也可以做一个AF类,而且只有一个createProduct函数(本来一个F
文章浏览阅读1.9k次,点赞4次,收藏3次。这一篇我们来了解一下vscode插件的代码结构_.vscode文件夹
文章浏览阅读2.5k次,点赞3次,收藏22次。PPP(Point to Point Protocol)广域网点对点串行链路上的封装协议,相比HDLC(High-Level Data Link Control)协议具有更好的扩展功能,例如数据压缩、身份验证、链路捆绑等。PPP基本配置(Authentication) PPP身份认证(PAP) PPP身份认证(CHAP) PPP链路捆绑(MultiLink)一: PPP基本配置..._gns3ppp协议
文章浏览阅读215次。“Java is still not dead—and people are starting to figure that out.”本教程将用带注释的简单代码来描述新特性,你将看不到大片吓人的文字。一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:复制代码代码如下:_java 1.8 annotation 的作用域 use_type和type_parameter
文章浏览阅读8.9k次。sudo apt-get install gnome-shell_ubuntu启动gnome桌面
文章浏览阅读1.4k次。项目中经常遇到一些问题:添加到表中数据一般不会出现什么错误,反而读取数据各种报错像我这种,自以为很简单的读取,也不debug,直接获取数据,然后。。非常浪费时间,有个别报错。查看的时候,原来是某个字段为空 转化 数据类型的出现错误。解决办法:那就是‘设置默认值’我试过在实体里添加默认值 没有效果数据库---找到数据表-修改字段默认值--存入数据的时候还是没有效果..._mysql laravel 给某个字段设置默认值
文章浏览阅读3.8w次,点赞4次,收藏17次。html+css 图片右上角加删除叉,图片删除_css 右上角半圆删除
文章浏览阅读3.3k次。我们离开电脑一段时间后,ghost win8系统也会根据用户设置时间自动进入睡眠或待机状态。但是有win8系统用户反馈进入睡眠状态后播放音乐也会自动停止,需要手动按下键盘或移动鼠标才能继续播放音乐,那么如何设置win8系统进入睡眠状态后音乐继续播放呢?方法当然是有的,有需要不妨看看下面详细操作。解决方法:1、接在桌面空白的地方单击右键选择“个性化”;2、开“个性化”,点击右下角的“屏幕保护程序”进..._联想电脑休眠有音乐