0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

轻松学Pytorch之Deeplabv3推理

OpenCV学堂 来源:OpenCV学堂 2022-12-21 15:40 次阅读

Deeplabv3

Torchvision框架中在语义分割上支持的是Deeplabv3语义分割模型,而且支持不同的backbone替换,这些backbone替换包括MobileNetv3、ResNet50、ResNet101。其中MobileNetv3版本训练数据集是COCO子集,类别跟Pascal VOC的20个类别保持一致。这里以它为例,演示一下从模型导出ONNX到推理的全过程。

ONNX格式导出

首先需要把pytorch的模型导出为onnx格式版本,用下面的脚本就好啦:
model=tv.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)
dummy_input=torch.randn(1,3,320,320)
model.eval()
model(dummy_input)
im=torch.zeros(1,3,320,320).to("cpu")
torch.onnx.export(model,im,
"deeplabv3_mobilenet.onnx",
verbose=False,
opset_version=11,
training=torch.onnx.TrainingMode.EVAL,
do_constant_folding=True,
input_names=['input'],
output_names=['out','aux'],
dynamic_axes={'input':{0:'batch',2:'height',3:'width'}}
)
模型的输入与输出结构如下:

f800a568-8101-11ed-8abf-dac502259ad0.png

其中out就是我们要解析的语义分割预测结果,input表示支持动态输入格式为NCHW

推理测试

模型推理对图像有个预处理,要求如下:
transform = torchvision.transforms.Compose([
     torchvision.transforms.ToTensor(),
     torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406],
      std=[0.229, 0.224, 0.225])
 ])
意思是转换为0~1之间的浮点数,然后减去均值除以方差。 剩下部分的代码就比较简单,初始化onnx推理实例,然后完成推理,对结果完成解析,输出推理结果,完整的代码如下:
transform=torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(mean=[0.485,0.456,0.406],
std=[0.229,0.224,0.225])
])

sess_options=ort.SessionOptions()
#Belowisforoptimizingperformance
sess_options.intra_op_num_threads=24
#sess_options.execution_mode=ort.ExecutionMode.ORT_PARALLEL
sess_options.graph_optimization_level=ort.GraphOptimizationLevel.ORT_ENABLE_ALL
ort_session=ort.InferenceSession("deeplabv3_mobilenet.onnx",providers=['CUDAExecutionProvider'],sess_options=sess_options)
#src=cv.imread("D:/images/messi_player.jpg")
src=cv.imread("D:/images/master.jpg")
image=cv.cvtColor(src,cv.COLOR_BGR2RGB)
blob=transform(image)
c,h,w=blob.shape
input_x=blob.view(1,c,h,w)

defto_numpy(tensor):
returntensor.detach().cpu().numpy()iftensor.requires_gradelsetensor.cpu().numpy()

#computeONNXRuntimeoutputprediction
ort_inputs={ort_session.get_inputs()[0].name:to_numpy(input_x)}
ort_outs=ort_session.run(None,ort_inputs)
t1=ort_outs[0]
t2=ort_outs[1]
labels=np.argmax(np.squeeze(t1,0),axis=0)
print(labels.dtype,labels.shape)
red_map=np.zeros_like(labels).astype(np.uint8)
green_map=np.zeros_like(labels).astype(np.uint8)
blue_map=np.zeros_like(labels).astype(np.uint8)
forlabel_numinrange(0,len(label_color_map)):
index=labels==label_num
red_map[index]=np.array(label_color_map)[label_num,0]
green_map[index]=np.array(label_color_map)[label_num,1]
blue_map[index]=np.array(label_color_map)[label_num,2]
segmentation_map=np.stack([blue_map,green_map,red_map],axis=2)
cv.addWeighted(src,0.8,segmentation_map,0.2,0,src)
cv.imshow("deeplabv3",src)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果如下:

f812d652-8101-11ed-8abf-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据集
    +关注

    关注

    4

    文章

    1202

    浏览量

    24623
  • pytorch
    +关注

    关注

    2

    文章

    803

    浏览量

    13123

原文标题:轻松学Pytorch之Deeplabv3推理

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PyTorch 数据加载与处理方法

    PyTorch 是一个流行的开源机器学习库,它提供了强大的工具来构建和训练深度学习模型。在构建模型之前,一个重要的步骤是加载和处理数据。 1. PyTorch 数据加载基础 在 PyTorch
    的头像 发表于 11-05 17:37 260次阅读

    Pytorch深度学习训练的方法

    掌握这 17 种方法,用最省力的方式,加速你的 Pytorch 深度学习训练。
    的头像 发表于 10-28 14:05 125次阅读
    <b class='flag-5'>Pytorch</b>深度学习训练的方法

    手册上新 |迅为RK3568开发板NPU例程测试

    测试 6.1 deeplabv3语义分割 6.2 lite_transformer 6.3 LPRNet车牌识别 6.4 mobilenet图像分类 6.5 PPOCR-Rec文字识别 6.6
    发表于 10-23 14:06

    手册上新 |迅为RK3568开发板NPU例程测试

    测试 6.1 deeplabv3语义分割 6.2 lite_transformer 6.3 LPRNet车牌识别 6.4 mobilenet图像分类 6.5 PPOCR-Rec文字识别 6.6
    发表于 08-12 11:03

    pytorch怎么在pycharm中运行

    第一部分:PyTorch和PyCharm的安装 1.1 安装PyTorch PyTorch是一个开源的机器学习库,用于构建和训练神经网络。要在PyCharm中使用PyTorch,首先需
    的头像 发表于 08-01 16:22 1156次阅读

    pycharm如何调用pytorch

    引言 PyTorch是一个开源的机器学习库,广泛用于计算机视觉、自然语言处理等领域。PyCharm是一个流行的Python集成开发环境(IDE),提供了代码编辑、调试、测试等功能。将PyTorch
    的头像 发表于 08-01 15:41 492次阅读

    迅为RK3568手册上新 | RK3568开发板NPU例程测试

    deeplabv3语义分割 6.2 lite_transformer 6.3 LPRNet车牌识别 6.4 mobilenet图像分类 6.5 PPOCR-Rec文字识别 6.6 PPOCR-Det语义分割
    发表于 07-12 14:44

    pytorch如何训练自己的数据

    本文将详细介绍如何使用PyTorch框架来训练自己的数据。我们将从数据准备、模型构建、训练过程、评估和测试等方面进行讲解。 环境搭建 首先,我们需要安装PyTorch。可以通过访问PyTorch官网
    的头像 发表于 07-11 10:04 424次阅读

    PyTorch的介绍与使用案例

    PyTorch是一个基于Python的开源机器学习库,它主要面向深度学习和科学计算领域。PyTorch由Meta Platforms(原Facebook)的人工智能研究团队开发,并逐渐发展成为深度
    的头像 发表于 07-10 14:19 342次阅读

    tensorflow和pytorch哪个更简单?

    PyTorch更简单。选择TensorFlow还是PyTorch取决于您的具体需求和偏好。如果您需要一个易于使用、灵活且具有强大社区支持的框架,PyTorch可能是一个更好的选择。如果您需要一个在
    的头像 发表于 07-05 09:45 720次阅读

    如何使用PyTorch建立网络模型

    PyTorch是一个基于Python的开源机器学习库,因其易用性、灵活性和强大的动态图特性,在深度学习领域得到了广泛应用。本文将从PyTorch的基本概念、网络模型构建、优化方法、实际应用等多个方面,深入探讨使用PyTorch
    的头像 发表于 07-02 14:08 345次阅读

    请问电脑端Pytorch训练的模型如何转化为能在ESP32S3平台运行的模型?

    由题目, 电脑端Pytorch训练的模型如何转化为能在ESP32S3平台运行的模型? 如何把这个Pytorch模型烧录到ESP32S3上去?
    发表于 06-27 06:06

    大模型推理显卡选购指南:4090显卡为何成为不二

    开发者非常关注的话题。 现在市面上加速卡型号多如牛毛,但说到适用大模型推理的显卡,那4090显卡绝对是现阶段“推理王卡”般的存在。论性能不如H100,论价格不如3090,看似平平无奇的4090显卡为何能在众多竞争者中脱颖而出,成为大模型
    的头像 发表于 04-11 11:00 714次阅读
    大模型<b class='flag-5'>推理</b>显卡选购指南:4090显卡为何成为不二<b class='flag-5'>之</b>选

    TorchFix:基于PyTorch的代码静态分析

    TorchFix是我们最近开发的一个新工具,旨在帮助PyTorch用户维护健康的代码库并遵循PyTorch的最佳实践。首先,我想要展示一些我们努力解决的问题的示例。
    的头像 发表于 12-18 15:20 1023次阅读

    HarmonyOS:使用MindSpore Lite引擎进行模型推理

    场景介绍 MindSpore Lite 是一款 AI 引擎,它提供了面向不同硬件设备 AI 模型推理的功能,目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍
    发表于 12-14 11:41