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

这篇具有很好参考价值的文章主要介绍了使用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+ 语义分割含源码


二、LabVIEW调用DeepLabv3+实现图像语义分割

1、模型获取及转换

  • 下载预训练好的.pth模型文件,下载链接:https://share.weiyun.com/qqx78Pv5 ,我们选择主干网络为Mobilenet的模型
    使用LabVIEW实现 DeepLabv3+ 语义分割含源码
  • 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】来加载并推理整个模型,实现语义分割,程序源码如下:
使用LabVIEW实现 DeepLabv3+ 语义分割含源码


3、LabVIEW Pascal VOC2012上的分割结果(deeplabv3+_onnx.vi)

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


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

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


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

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


三、项目源码及模型下载

欢迎关注微信公众号: 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与人工智能技术,欢迎加入我们的技术交流群:705637299。文章来源地址https://www.toymoban.com/news/detail-545686.html

到了这里,关于使用LabVIEW实现 DeepLabv3+ 语义分割含源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像分割实战-系列教程15:deeplabV3+ VOC分割实战3-------网络结构1

    有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 deeplab系列算法概述 deeplabV3+ VOC分割实战1 deeplabV3+ VOC分割实战2 deeplabV3+ VOC分割实战3 deeplabV3+ VOC分割实战4 deeplabV3+ VOC分割实战5 本项目的网络结构在network文件夹中,主要在

    2024年01月19日
    浏览(50)
  • 改进 DeepLabV3+

    CFF结构图    10.28更新(解码复习)

    2024年02月13日
    浏览(32)
  • DeepLabv3+

    本文在进行语义分割任务时将空间金字塔池化(SPP)模块或encoder-decoder结构引入到深度神经网络中。以前的网络通过对输入的feature map使用多种尺度的卷积核或者池化操作以及多种感受野能够编码出多尺度的环境信息。而之后的一些工作中提出的网络通过逐渐恢复空间信息能

    2024年02月06日
    浏览(64)
  • deeplabv3+源码之慢慢解析 第二章datasets文件夹(1)voc.py--voc_cmap函数和download_extract函数

    第一章deeplabv3+源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3+源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3+源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3+源码之慢慢解析 根目录(4)main.py–main函数 第一章deeplabv3+源码之慢慢解析 根目

    2024年02月13日
    浏览(41)
  • Docker 部署深度学习 运行deeplabV3

    本文主要介绍docker发展历史,常用的镜像,容器命令。以及部署深度学习环境,运行deeplabV3 项目。 2010年,美国一家公司dotcloud做一些pass的云计算服务,lxc有关的容器技术,他们讲自己的技术(容器化技术)命名为Docker。 刚诞生的时候,没有引起关注,然后2013年,他们讲D

    2024年01月21日
    浏览(33)
  • DeepLabV3+:ASPP加强特征提取网络的搭建

    目录 ASPP结构介绍 ASPP在代码中的构建 参考资料 ASPP:Atrous Spatial Pyramid Pooling,空洞空间卷积池化金字塔。 简单理解就是个至尊版池化层,其目的与普通的池化层一致,尽可能地去提取特征。 利用主干特征提取网络,会得到一个浅层特征和一个深层特征,这一篇主要以如何对

    2024年02月16日
    浏览(40)
  • DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合

    目录 Mobilenetv2的改进 浅层特征和深层特征的融合 完整代码 参考资料 在DeeplabV3当中,一般不会5次下采样,可选的有3次下采样和4次下采样。因为要进行五次下采样的话会损失较多的信息。 在这里mobilenetv2会从之前写好的模块中得到,但注意的是,我们在这里获得的特征是[-

    2024年01月19日
    浏览(47)
  • 深度学习语义分割篇——FCN源码解析篇

    🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊往期回顾:深度学习语义分割篇——FCN原理详解篇 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、收藏⭐、留言📩   ​  本篇文章参考霹雳吧啦Wz在B站上的视频进行讲解,点击☞☞☞下载FCN源

    2024年02月07日
    浏览(35)
  • 语义分割系列11-DAnet(pytorch实现)

    DAnet:Dual Attention Network for Scene Segmentation 发布于CVPR2019,本文将进行DAnet的论文讲解和复现工作。 DAnet的思想并没有之前提到的DFAnet那么花里胡哨,需要各种多层次的连接,DAnet的主要思想就是——同时引入了空间注意力和通道注意力,也就是Dual Attention = Channel Attention + Posit

    2023年04月13日
    浏览(40)
  • 使用SAM进行遥感图像语义分割

    Segment Anything Model(SAM)论文 Segment Anything Model(SAM)模型解读及代码复现 Scaling-up Remote Sensing Segmentation Dataset with Segment Anything Model论文 The success of the Segment Anything Model (SAM) demonstrates the significance of data-centric machine learning. However, due to the difficulties and high costs associated with annotating Rem

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包