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

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

3天内不再提示

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

LabVIEW深度学习实战 来源:LabVIEW深度学习实战 作者:LabVIEW深度学习实战 2023-05-26 10:23 次阅读

前言

图像分割可以分为两类:语义分割(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模块

1.png


二、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 network
import numpy as np
import torch
from torch.autograd import Variable
from torchvision import models
import os
import re

dirname, 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_path

model = 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 network
import numpy as np
import torch
from torch.autograd import Variable
from torchvision import models
import os
import re


dirname, 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_path


model = 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)

1.png


4、LabVIEW 调用基于 Cityscapes 训练的deeplabv3+实现图像语义分割 (deeplabv3+_onnx_cityscape.vi)

如下图所示即为程序源码,我们对比deeplabv3+_onnx.vi,发现其实只需要把模型和待检测的图片更换,图片尺寸比例也做一个修改即可

在这里插入图片描述


5、LabVIEW 城市景观的分割结果(deeplabv3+_onnx_cityscape.vi)

1.png

如您想要探讨更多关于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


总结

以上就是今天要给大家分享的内容。如果有问题可以在评论区里讨论。

审核编辑 黄宇

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

    关注

    1959

    文章

    3651

    浏览量

    321786
  • 人工智能
    +关注

    关注

    1789

    文章

    46545

    浏览量

    236820
  • 图像分割
    +关注

    关注

    4

    文章

    182

    浏览量

    17959
收藏 人收藏

    评论

    相关推荐

    手把手教你使用LabVIEW实现Mask R-CNN图像实例分割源码

    使用LabVIEW实现Mask R-CNN图像实例分割
    的头像 发表于 03-21 13:39 2153次阅读
    手把手教你使用<b class='flag-5'>LabVIEW</b><b class='flag-5'>实现</b>Mask R-CNN图像实例<b class='flag-5'>分割</b>(<b class='flag-5'>含</b><b class='flag-5'>源码</b>)

    使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割

    使用LabVIEW实现deeplabV3语义分割
    的头像 发表于 03-22 15:06 1613次阅读
    使用<b class='flag-5'>LabVIEW</b><b class='flag-5'>实现</b>基于pytorch的<b class='flag-5'>DeepLabv3</b>图像<b class='flag-5'>语义</b><b class='flag-5'>分割</b>

    van-自然和医学图像的深度语义分割:网络结构

    最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输入图像大小与输入相对应。反卷积:端到端的像素级语义分割需要输出大小和输入图像大小一致。但是传统的conv+pooling结构会缩小图片尺寸
    发表于 12-28 11:03

    van-自然和医学图像的深度语义分割:网络结构

    最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输入图像大小与输入相对应。反卷积:端到端的像素级语义分割需要输出大小和输入图像大小一致。但是传统的conv+pooling结构会缩小图片尺寸
    发表于 12-28 11:06

    聚焦语义分割任务,如何用卷积神经网络处理语义图像分割

    CNN架构图像语义分割 图像分割是根据图像内容对指定区域进行标记的计算机视觉任务,简言之就是「这张图片里有什么,其在图片中的位置是什么?」本文聚焦于语义
    发表于 09-17 15:21 546次阅读

    DeepLab进行语义分割的研究分析

    DeepLab是谷歌使用tensorflow基于CNN开发的语义分割模型,至今已更新4个版本。最新版本是DeepLabv3+,在此模型中进一步将深度可分离卷积应用到孔空间金字塔池化和解码器模块,从而
    发表于 10-24 08:00 11次下载
    DeepLab进行<b class='flag-5'>语义</b><b class='flag-5'>分割</b>的研究分析

    语义分割算法系统介绍

    图像语义分割是图像处理和是机器视觉技术中关于图像理解的重要任务。语义分割即是对图像中每一个像素点进行分类,确定每个点的类别,从而进行区域划分,为了能够帮助大家更好的了解
    的头像 发表于 11-05 10:34 6554次阅读

    分析总结基于深度神经网络的图像语义分割方法

    随着深度学习技术的快速发展及其在语义分割领域的广泛应用,语义分割效果得到显著提升。对基于深度神经网络的图像语义
    发表于 03-19 14:14 21次下载
    分析总结基于深度神经网络的图像<b class='flag-5'>语义</b><b class='flag-5'>分割</b>方法

    一种改进DeepLabv3+网络的肠道息肉分割方法

    为了提高结肠镜下肠道息肉检测率,提出了一种改进 Deep Labv3+网络的肠道息肉分割方法。在数据预处理阶段,利用中值滤波的非线性滤波特性去除掉图像反光区域,并结合 Grab Cut算法对息肉区域
    发表于 04-13 10:53 11次下载
    一种改进<b class='flag-5'>DeepLabv3+</b>网络的肠道息肉<b class='flag-5'>分割</b>方法

    基于深度学习的遥感影像典型要素提取方法

    为提取髙分辨率遥感影像的典型要素(建筑物及道路),基于深度学习,提出一种语义分割与全连接条件随机场(CRF)相结合的提取方法。以 Deeplabv3+作为语义
    发表于 06-03 10:29 4次下载

    基于图像语义分割的毛笔笔触实时生成技术

    和笔迹。使得现存书法笔迹生成软件仅仅用于娱乐,而难以上升到数字化书法教育层面。文中从计算机视觉的角度出发,通过4个相机获取毛笔的实时书写图像:针对 Deeplabv3+语义分割算法无法有效地
    发表于 06-07 15:10 2次下载

    使用OpenVINO™ 部署PaddleSeg模型库中的DeepLabV3+模型

    下的DeepLabV3+路面语义分割模型转换为OpenVINO   工具套件的IR模型并且部署到CPU上。   为了使本文拥有更广的受众面,文章的目标部署平台选择了CPU和iGPU。关于如何部署到边缘设备例如Intel
    的头像 发表于 11-22 14:58 9794次阅读
    使用OpenVINO™ 部署PaddleSeg模型库中的<b class='flag-5'>DeepLabV3+</b>模型

    轻松学Pytorch之Deeplabv3推理

    Torchvision框架中在语义分割上支持的是Deeplabv3语义分割模型,而且支持不同的backbone替换,这些backbone替换
    的头像 发表于 12-21 15:40 931次阅读

    图像分割语义分割中的CNN模型综述

    图像分割语义分割是计算机视觉领域的重要任务,旨在将图像划分为多个具有特定语义含义的区域或对象。卷积神经网络(CNN)作为深度学习的一种核心模型,在图像
    的头像 发表于 07-09 11:51 547次阅读

    图像语义分割的实用性是什么

    图像语义分割是一种重要的计算机视觉任务,它旨在将图像中的每个像素分配到相应的语义类别中。这项技术在许多领域都有广泛的应用,如自动驾驶、医学图像分析、机器人导航等。 一、图像语义
    的头像 发表于 07-17 09:56 320次阅读