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

    文章

    1230

    浏览量

    26036
  • pytorch
    +关注

    关注

    2

    文章

    813

    浏览量

    14681

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    北京迅为itop-3588开发板NPU例程测试deeplabv3 语义分割

    北京迅为itop-3588开发板NPU例程测试deeplabv3 语义分割
    的头像 发表于 07-22 15:51 812次阅读
    北京迅为itop-3588开发板NPU例程测试<b class='flag-5'>deeplabv3</b> 语义分割

    大模型推理显存和计算量估计方法研究

    随着人工智能技术的飞速发展,深度学习大模型在各个领域得到了广泛应用。然而,大模型的推理过程对显存和计算资源的需求较高,给实际应用带来了挑战。为了解决这一问题,本文将探讨大模型推理显存和计算量的估计
    发表于 07-03 19:43

    将Whisper大型v3 fp32模型转换为较低精度后,推理时间增加,怎么解决?

    将 openai/whisper-large-v3 FP32 模型转换为 FP16、INT8 和 INT4。 推理所花费的时间比在 FP32 上花费的时间要多
    发表于 06-24 06:23

    AI功能(SC171开发套件V3

    AI功能(SC171开发套件V3) 序列 课程名称 视频课程时长 视频课程链接 课件链接 工程源码 1 图像语义分割(deeplabv3)案例----基于SC171开发套件V3 7分44秒
    发表于 04-16 18:48

    有奖直播 | @4/8 轻松部署,强大扩展边缘运算 AI 新世代

    MemryX推出全新MemryXMX3AI推理加速卡,采用PCIeGen3M.2M-Key接口,提供高达20TOPS的强大算力,为工业计算机带来即插即用的AI部署体验。结合OrangePi5Plus
    的头像 发表于 03-27 16:31 832次阅读
    有奖直播 | @4/8 <b class='flag-5'>轻松</b>部署,强大扩展边缘运算 AI 新世代

    使用OpenVINO™进行推理时的内存泄漏怎么解决?

    使用 OpenVINO™ 进行推理时,内存会随着时间的推移而增加,并导致程序崩溃。
    发表于 03-06 08:29

    壁仞科技支持DeepSeek-V3满血版训练推理

    DeepSeek在开源周开源了部分关键模块的代码及推理系统参考架构,再次引发行业震动,但目前尚未开源DeepSeek-V3 满血版完整训练代码。壁仞科技凭借八大自主创新技术,实现
    的头像 发表于 03-04 14:01 1913次阅读

    OpenAI O3与DeepSeek R1:推理模型性能深度分析

    OpenAI刚推出的O3和DeepSeek的R1代表了推理模型领域的重大进步。这两种模型都因在各种基准测试中的出色表现而备受关注,引发了人们对人工智能的未来及其对各个行业的潜在影响的讨论。据我们所知
    的头像 发表于 02-18 11:07 1296次阅读

    使用NVIDIA推理平台提高AI推理性能

    NVIDIA推理平台提高了 AI 推理性能,为零售、电信等行业节省了数百万美元。
    的头像 发表于 02-08 09:59 1308次阅读
    使用NVIDIA<b class='flag-5'>推理</b>平台提高AI<b class='flag-5'>推理</b>性能

    OpenAI即将推出o3 mini推理AI模型

    近日,OpenAI首席执行官Sam Altman在社交媒体平台X上发表了一篇引人关注的文章。在文章中,他透露了一个重要信息:OpenAI已经成功完成了全新推理AI模型o3 mini版本的研发工作,并
    的头像 发表于 01-20 10:54 780次阅读

    OpenAI即将推出o3-mini,助力高级推理普及

    -mini的推出预示着高级推理技术将更加易于获取且价格更为亲民。 据了解,o3-mini是OpenAI在人工智能领域的一次重要创新,旨在打破高级推理技术的壁垒,使其能够更广泛地应用于各个行业和领域。通过o
    的头像 发表于 01-17 10:22 969次阅读

    大模型训练框架(五)Accelerate

    轻松切换不同的并行策略,同时它还支持混合精度训练,可以进一步提升训练效率。 1. 导入 Accelerate只需添加四行代码,即可在任何分布式配置中运行相同的 PyTorch 代码!让大规模训练和推理
    的头像 发表于 01-14 14:24 1765次阅读

    OpenAI发布新一代推理模型o3及o3-mini

    近日,OpenAI在为期12天的发布会上宣布了新一代推理模型o3及其精简版o3-mini。这两款模型被专门设计用于在回答问题之前进行更深入的思考,以期提高答案的准确性。 据悉,o3模型
    的头像 发表于 12-24 09:29 1139次阅读

    利用Arm Kleidi技术实现PyTorch优化

    PyTorch 是一个广泛应用的开源机器学习 (ML) 库。近年来,Arm 与合作伙伴通力协作,持续改进 PyTorch推理性能。本文将详细介绍如何利用 Arm Kleidi 技术提升 Arm
    的头像 发表于 12-23 09:19 1614次阅读
    利用Arm Kleidi技术实现<b class='flag-5'>PyTorch</b>优化

    vLLM项目加入PyTorch生态系统,引领LLM推理新纪元

    近日,vLLM项目宣布正式成为PyTorch生态系统的一部分,标志着该项目与PyTorch的合作进入了一个全新的阶段。本文将从以下几个方面进行介绍,特别提醒:安装方案在第四个部分,可选择性阅读
    的头像 发表于 12-18 17:06 1565次阅读
    vLLM项目加入<b class='flag-5'>PyTorch</b>生态系统,引领LLM<b class='flag-5'>推理</b>新纪元