使用LabVIEW实现 DeepLabv3+ 语义分割含源码

前言图像分割可以分为两类:语义分割(semantic segmentation)和实例分割(instance segmentation),前面已经给大家介绍过两者的区别,并就如何在labview上实现相关模型的部署也给大家做了讲解,今天和大家分享如何使用labview 实现deeplabv3+的语义分割,并就 pascal voc2012 (deeplabv3plus-mobilenet) 上的分割结果和城市景观的分割结果(deeplabv3plus-mobilenet)给大家做一个分享。
一、什么是deeplabv3+deeplabv3+是一个语义分割网络,使用deeplabv3作为encoder模块,并添加一个简单且有效的decoder模块来获得更清晰的分割。即网络主要分为两个部分:encoder和decoder;论文中采用的是xception作为主干网络(在代码中也可以根据需求替换成mobilenet,本文示例中即使用的mobilenet),然后使用了aspp结构,解决多尺度问题;为了将底层特征与高层特征融合,提高分割边界准确度,引入decoder部分。
encoder-decoder网络已经成功应用于许多计算机视觉任务,通常,encoder-decoder网络包含:
逐步减少特征图并提取更高语义信息的encoder模块逐步恢复空间信息的decoder模块
二、labview调用deeplabv3+实现图像语义分割1、模型获取及转换下载预训练好的.pth模型文件,下载链接:https://share.weiyun.com/qqx78pv5 ,我们选择主干网络为mobilenet的模型
git上下载开源的整个项目文件,链接为:https://github.com/vainf/deeplabv3plus-pytorch
根据requirements.txt 安装所需要的库
pip install -r requirements.txt原项目中使用的模型为.pth,我们将其转onnx模型,将best_deeplabv3plus_mobilenet_voc_os16.pth转化为deeplabv3plus_mobilenet.onnx,具体转化模型代码如下:import networkimport numpy as npimport torchfrom torch.autograd import variablefrom torchvision import modelsimport osimport redirname, filename = os.path.split(os.path.abspath(__file__))print(dirname)def get_pytorch_onnx_model(original_model): # define the directory for further converted model save onnx_model_path = dirname # define the name of further converted model onnx_model_name = deeplabv3plus_mobilenet.onnx # create directory for further converted model os.makedirs(onnx_model_path, exist_ok=true) # get full path to the converted model full_model_path = os.path.join(onnx_model_path, onnx_model_name) # generate model input generated_input = variable( torch.randn(1, 3, 513, 513) ) # model export into onnx format torch.onnx.export( original_model, generated_input, full_model_path, verbose=true, input_names=[input], output_names=[output], opset_version=11 ) return full_model_pathmodel = network.modeling.__dict__[deeplabv3plus_mobilenet](num_classes=21, output_stride=8)checkpoint = torch.load(best_deeplabv3plus_mobilenet_voc_os16.pth, map_location=torch.device('cpu'))model.load_state_dict(checkpoint[model_state])full_model_path = get_pytorch_onnx_model(model)将best_deeplabv3plus_mobilenet_cityscapes_os16.pth转化为deeplabv3plus_mobilenet_cityscapes.onnx,具体转化模型代码如下:import networkimport numpy as npimport torchfrom torch.autograd import variablefrom torchvision import modelsimport osimport redirname, filename = os.path.split(os.path.abspath(__file__))print(dirname)def get_pytorch_onnx_model(original_model): # define the directory for further converted model save onnx_model_path = dirname # define the name of further converted model onnx_model_name = deeplabv3plus_mobilenet_cityscapes.onnx # create directory for further converted model os.makedirs(onnx_model_path, exist_ok=true) # get full path to the converted model full_model_path = os.path.join(onnx_model_path, onnx_model_name) # generate model input generated_input = variable( torch.randn(1, 3, 513, 513) ) # model export into onnx format torch.onnx.export( original_model, generated_input, full_model_path, verbose=true, input_names=[input], output_names=[output], opset_version=11 ) return full_model_pathmodel = network.modeling.__dict__[deeplabv3plus_mobilenet](num_classes=19, output_stride=8)checkpoint = torch.load(best_deeplabv3plus_mobilenet_cityscapes_os16.pth, map_location=torch.device('cpu'))model.load_state_dict(checkpoint[model_state])full_model_path = get_pytorch_onnx_model(model)注意:我们需要将以上两个脚本保存并与network文件夹同路径
2、labview 调用基于 pascal voc2012训练的deeplabv3+实现图像语义分割 (deeplabv3+_onnx.vi)经过实验发现,opencv dnn因缺少一些算子,所以无法加载deeplabv3+ onnx模型,所以我们选择使用labview开放神经网络交互工具包【onnx】来加载并推理整个模型,实现语义分割,程序源码如下:
3、labview pascal voc2012上的分割结果(deeplabv3+_onnx.vi)
4、labview 调用基于 cityscapes 训练的deeplabv3+实现图像语义分割 (deeplabv3+_onnx_cityscape.vi)如下图所示即为程序源码,我们对比deeplabv3+_onnx.vi,发现其实只需要把模型和待检测的图片更换,图片尺寸比例也做一个修改即可
5、labview 城市景观的分割结果(deeplabv3+_onnx_cityscape.vi)
如您想要探讨更多关于labview与人工智能技术,欢迎加入我们的技术交流群:705637299
三、项目源码及模型下载欢迎关注微信公众号: virobotics ,回复关键字:deeplabv3+ 语义分割源码 获取本次分享内容的完整项目源码及模型。
附加说明操作系统:windows10
python:3.6及以上
labview:2018及以上 64位版本
视觉工具包:techforce_lib_opencv_cpu-1.0.0.73.vip
labview开放神经网络交互工具包【onnx】:virobotics_lib_onnx_cpu-1.0.0.13.vip
总结以上就是今天要给大家分享的内容。如果有问题可以在评论区里讨论。


TUV南德与中国信通院建立战略合作关系,开展碳数据合作
锂电池的4个子行业
智慧灌区信息化管理物联网系统解决方案
开鸿智谷“OpenHarmony在鸿控制器”获评高速公路信息化年度“最佳产品”
乐檬的归来能否给联想带来成功?
使用LabVIEW实现 DeepLabv3+ 语义分割含源码
电永磁吸盘在加工现场的加装配件诀窍详细说明
对亚太地区机器人的十大预测
Two way cross-over 3500Hz
小米集团公告称:林斌自愿承诺,按照承诺函的条款
免开发打造智能温控器,有关温控器产品方案的介绍
变频器操控原理_变频器接线标准
料理机为何选用无刷电励磁电机,它的特点是什么
智慧工地园区厂区广播对讲解决方案
温湿度监测系统在化妆品监测中的应用
基于SSM的学生管理系统
mos管的箭头表示什么?mos管电流方向与箭头
刹车液位传感器-斯丹麦德为您保驾护航
NEO区块链-DAPP开发直通车-第零篇
多核处理器的挑战,多核处理器结构与分类