Pytorch利用TensorRT在NVIDIA Jetson Nano上加速

之前做了个项目,就是在Jetson Nano上做实时图像分割。输入是一个HDMI的采集卡,输出是显示器。用pytorch做了个分割模型在上面直接跑。Pytorch用的1.3,具体环境配置略过。

经过代码赤果果的搬运之后,发现inference需要70ms,加上数据采集/数据前处理和后处理和图像显示花120ms。而且原始图像和处理过的图像之间误差了1.5s以上。

首先,我们把inference的cost降下来,首先我们改成TensorRT实现。用pip3 list查找了一下,官方给的系统默认装了TensorRT 5。看了TensorRT的sample,感觉要死了,还要重新把模型撸一遍,我不答应。GitHub看看有没有人写了torch2trt。果真还有,https://github.com/NVIDIA-AI-IOT/torch2trt,里面的readme写的好人性化,我好稀罕。根据它的Setup提示安装好了。接下来根据他的说明改几行代码就OK了

from torch2trt import *
import torch
from torchvision.models import *

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

#随便加个模型,加载好参数
model_org = resnet18(pretrained=True)
model_org.to(device)
model_org.eval() #这步需要

test1 = torch.rand(1,3,224,224).to(device)

#一定要设max_workspace_size,否则会报空间不足的错误
#fp16_mode精度高一些,int8_mode精度不太好,但是速度快
model = torch2trt(model_org, [test1], fp16_mode=True, max_workspace_size=100)
model.eval()

#第一次推断耗时较长
test2 = model(test1.cuda())

...

上面调的代码跟它的说明有些不全的地方,我在注释里面都写了。fp16的推断耗时降低到30ms,int8的推断降低到25ms。但是我不在乎这5ms。但是采集的延时依旧没有降低,还是卡在1s多。究竟是怎么回事呢?

就是怎样的我也不知道了,反正根据网友的解决办法采集2次就能大大降低延时,即:

import cv2

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    ret, frame = cap.read()

我猜估计是总线被占了

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值