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

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

3天内不再提示

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

LabVIEW深度学习实战 来源: LabVIEW深度学习实战 作者: LabVIEW深度学习实 2023-03-22 15:06 次阅读

前言

今天我们一起来看一下如何使用LabVIEW实现语义分割。

一、什么是语义分割

**图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割,例如让计算机在输入下面左图的情况下,能够输出右图。语义在语音识别中指的是语音的意思,在图像领域,语义指的是图像的内容,对图片意思的理解,比如下图的语义就是一个人牵着四只羊;分割的意思是从像素的角度分割出图片中的不同对象,对原图中的每个像素都进行标注,比如下图中浅黄色代表人,蓝绿色代表羊。语义分割任务就是将图片中的不同类别,用不同的颜色标记出来,每一个类别使用一种颜色。常用于医学图像,卫星图像,无人车驾驶,机器人等领域。 **

在这里插入图片描述

  • 如何做到将像素点上色呢?

**语义分割的输出和图像分类网络类似,图像分类类别数是一个一维的one hot 矩阵。例如:三分类的[0,1,0]。语义分割任务最后的输出特征图是一个三维结构,大小与原图类似,其中通道数是类别数,每个通道所标记的像素点,是该类别在图像中的位置,最后通过argmax 取每个通道有用像素 合成一张图像,用不同颜色表示其类别位置。 语义分割任务其实也是分类任务中的一种,他不过是对每一个像素点进行细分,找到每一个像素点所述的类别。 这就是语义分割任务啦~ **

在这里插入图片描述

二、什么是deeplabv3

**DeepLabv3是一种语义分割架构,它在DeepLabv2的基础上进行了一些修改。为了处理在多个尺度上分割对象的问题,设计了在级联或并行中采用多孔卷积的模块,通过采用多个多孔速率来捕获多尺度上下文。此外,来自 DeepLabv2 的 Atrous Spatial Pyramid Pooling模块增加了编码全局上下文的图像级特征,并进一步提高了性能。 **

在这里插入图片描述

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

1、模型获取及转换

  • 安装pytorch和torchvision
  • 获取torchvision中的模型:deeplabv3_resnet101(我们获取预训练好的模型):
original_model = models.segmentation.deeplabv3_resnet101(pretrained=True)
  • 转onnx
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 = "deeplabv3_resnet101.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, 448, 448)
    )
​
    # model export into ONNX format
    torch.onnx.export(
        original_model,
        generated_input,
        full_model_path,
        verbose=True,
        input_names=["input"],
        output_names=["output",'aux'],
        opset_version=11
    )
​
    return full_model_path

完整获取及模型转换python代码如下:

import os
import torch
import torch.onnx
from torch.autograd import Variable
from torchvision import models
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 = "deeplabv3_resnet101.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, 448, 448)
    )
​
    # model export into ONNX format
    torch.onnx.export(
        original_model,
        generated_input,
        full_model_path,
        verbose=True,
        input_names=["input"],
        output_names=["output",'aux'],
        opset_version=11
    )
​
    return full_model_path
​
​
def main():
    # initialize PyTorch ResNet-101 model
    original_model = models.segmentation.deeplabv3_resnet101(pretrained=True)
​
    # get the path to the converted into ONNX PyTorch model
    full_model_path = get_pytorch_onnx_model(original_model)
    print("PyTorch ResNet-101 model was successfully converted: ", full_model_path)
​
​
if __name__ == "__main__":
    main()
​

我们会发现,基于pytorch的DeepLabv3模型获取和之前的mask rcnn模型大同小异。

2、关于deeplabv3_resnet101

我们使用的模型是:deeplabv3_resnet101,该模型返回两个张量,与输入张量相同,但有21个classes。输出[“out”]包含语义掩码,而输出[“aux”]包含每像素的辅助损失值。在推理模式中,输出[‘aux]没有用处。因此,输出“out”形状为(N、21、H、W)。我们在转模型的时候设置H,W为448,N一般为1;

我们的模型是基于VOC2012数据集

VOC2012数据集分为20类,包括背景为21类,分别如下:

  • 人 :人
  • 动物:鸟、猫、牛、狗、马、羊
  • 车辆:飞机、自行车、船、巴士、汽车、摩托车、火车
  • 室内:瓶、椅子、餐桌、盆栽植物、沙发、电视/监视器

3、LabVIEW opencv dnn调用 deeplabv3 实现图像语义分割(deeplabv3_opencv.vi)

deeplabv3模型可以使用OpenCV dnn去加载的,也可以使用onnxruntime加载推理,所以我们分两种方式给大家介绍LabVIEW调用deeplabv3实现图像语义分割。

  • opencv dnn 调用onnx模型并选择

    在这里插入图片描述

  • **图像预处理 **

    最终还是采用了比较中规中矩的处理方式

在这里插入图片描述

  • **执行推理 **

在这里插入图片描述

  • 后处理并实现实例分割

    因为后处理内容较多,所以直接封装为了一个子VI, deeplabv3_postprocess.vi,因为Labview没有专门的切片函数,所以会稍慢一些,所以接下来还会开发针对后处理和矩阵有关的函数,加快处理结果。

  • 整体的程序框架如下:

    在这里插入图片描述

  • 语义分割结果如下:

    在这里插入图片描述

4、LabVIEW onnxruntime调用 deeplabv3实现图像语义分割 (deeplabv3_onnx.vi)

  • 整体的程序框架如下:

    在这里插入图片描述

  • 语义分割结果如下:

    在这里插入图片描述

5、LabVIEW onnxruntime调用 deeplabv3 使用TensorRT加速模型实现图像语义分割(deeplabv3_onnx_camera.vi)

在这里插入图片描述

如上图所示,可以看到可以把人和背景完全分割开来,使用TensorRT加速推理,速度也比较快。

大家可关注微信公众号: VIRobotics ,回复关键字:DeepLabv3图像语义分割源码 获取本次分享内容的完整项目源码及模型。

如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们:705637299,进群请备注暗号:LabVIEW机器学习

四、deeplabv3训练自己的数据集

训练可参考: https://github.com/pytorch/vision

总结

以上就是今天要给大家分享的内容。

如果文章对你有帮助,欢迎关注、点赞、收藏

审核编辑 黄宇

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

    关注

    1914

    文章

    3615

    浏览量

    316900
  • 人工智能
    +关注

    关注

    1775

    文章

    43712

    浏览量

    230488
  • 机器学习
    +关注

    关注

    66

    文章

    8095

    浏览量

    130515
  • 深度学习
    +关注

    关注

    73

    文章

    5223

    浏览量

    119864
  • pytorch
    +关注

    关注

    2

    文章

    759

    浏览量

    12822
收藏 人收藏

    评论

    相关推荐

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

    使用LabVIEW实现 DeepLabv3+ 语义分割含源码
    的头像 发表于 05-26 10:23 575次阅读
    使用<b class='flag-5'>LabVIEW</b><b class='flag-5'>实现</b> <b class='flag-5'>DeepLabv</b>3+ <b class='flag-5'>语义</b><b class='flag-5'>分割</b>含源码

    目标检测和图像语义分割领域性能评价指标

    目标检测和图像语义分割领域的性能评价指标
    发表于 05-13 09:57

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

    最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输入图像大小与输入相对应。反卷积:端到端的像素级语义分割需要输出大小和输入
    发表于 12-28 11:03

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

    最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输入图像大小与输入相对应。反卷积:端到端的像素级语义分割需要输出大小和输入
    发表于 12-28 11:06

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

    CNN架构图像语义分割 图像分割是根据图像内容对指定区域进行标记的计算机视觉任务,简言之就是「这
    发表于 09-17 15:21 441次阅读

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

    形成更快,更强大的语义分割编码器-解码器网络。DeepLabv3+是一种非常先进的基于深度学习的图像语义
    发表于 10-24 08:00 11次下载
    DeepLab进行<b class='flag-5'>语义</b><b class='flag-5'>分割</b>的研究分析

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

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

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

    对应用于图像语义分割的几种深度神经网络模型进行简单介绍,接着详细阐述了现有主流的基于深度神经网络的图像语义
    发表于 04-02 13:59 11次下载
    基于深度神经网络的<b class='flag-5'>图像</b><b class='flag-5'>语义</b><b class='flag-5'>分割</b>方法

    基于Deeplabv3架构的串联空洞卷积神经网络

    室外网球场实景环境下的语义分割是开发网球运动服务机器人需要解决的一项关键技术。针对室外网球场环境由于光照、视角等因素的变化导致难以进行精细分割的问题,提出一种基于 Deeplabv3
    发表于 04-29 14:51 26次下载
    基于<b class='flag-5'>Deeplabv3</b>架构的串联空洞卷积神经网络

    轻松学PytorchDeeplabv3推理

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

    图像语义分割的概念与原理以及常用的方法

    (Graph partitioning segmentation methods),在深度学习(Deep learning, DL)“一统江湖”之前,图像语义分割方面的工作可谓“百花齐放”。
    的头像 发表于 04-20 10:01 2261次阅读

    PyTorch教程14.9之语义分割和数据集

    电子发烧友网站提供《PyTorch教程14.9之语义分割和数据集.pdf》资料免费下载
    发表于 06-05 11:10 0次下载
    <b class='flag-5'>PyTorch</b>教程14.9之<b class='flag-5'>语义</b><b class='flag-5'>分割</b>和数据集

    PyTorch教程-14.9. 语义分割和数据集

    在 SageMaker Studio Lab 中打开笔记本 在 第 14.3 节-第 14.8 节讨论对象检测任务时,矩形边界框用于标记和预测图像中的对象。本节将讨论语义分割问题,重点关注如何将
    的头像 发表于 06-05 15:44 396次阅读
    <b class='flag-5'>PyTorch</b>教程-14.9. <b class='flag-5'>语义</b><b class='flag-5'>分割</b>和数据集

    DeepLabV3开发板应用

    电子发烧友网站提供《DeepLabV3开发板应用.zip》资料免费下载
    发表于 06-20 15:05 0次下载
    <b class='flag-5'>DeepLabV3</b>开发板应用

    使用PyTorch加速图像分割

    使用PyTorch加速图像分割
    的头像 发表于 08-31 14:27 477次阅读
    使用<b class='flag-5'>PyTorch</b>加速<b class='flag-5'>图像</b><b class='flag-5'>分割</b>