LabVIEW中使用unet快速实现图像分割

简介: LabVIEW中使用unet快速实现图像分割

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主

🍻本文由virobotics(仪酷智能)原创首发

🥳欢迎大家关注✌点赞👍收藏⭐留言📝

前言

Hello,大家好,我是virobotics(仪酷智能),一个深耕于LabVIEW和人工智能领域的开发工程师。

今天我们一起来学习一下在LabVIEW中部署Unet模型,实现图像分割。


一、Unet简介

Unet是一种用于图像分割的深度学习模型,其名称源自其U形的网络结构。最初由Olaf Ronneberger、Philipp Fischer和Thomas Brox在2015年的论文《U-Net: Convolutional Networks for Biomedical Image Segmentation》中提出,旨在解决生物医学图像分割的问题。

U-Net 起源于医疗图像分割,整个网络是标准的encoder-decoder网络,特点是参数少,计算快,应用性强,对于一般场景适应度很高。原始U-Net的结构如下图所示,由于网络整体结构类似于大写的英文字母U,故得名U-net。左侧可视为一个编码器,右侧可视为一个解码器。编码器有四个子模块,每个子模块包含两个卷积层,每个子模块之后通过max pool进行下采样。由于卷积使用的是valid模式,故实际输出比输入图像小一些。具体来说,后一个子模块的分辨率=(前一个子模块的分辨率-4)/2。U-Net使用了Overlap-tile 策略用于补全输入图像的上下信息,使得任意大小的输入图像都可获得无缝分割。同样解码器也包含四个子模块,分辨率通过上采样操作依次上升,直到与输入图像的分辨率基本一致。该网络还使用了跳跃连接,以拼接的方式将解码器和编码器中相同分辨率的feature map进行特征融合,帮助解码器更好地恢复目标的细节。
image.png

与传统的基于机器学习的图像分割方法相比,Unet具有更好的性能和更高的鲁棒性。在医学影像分割方面,Unet已被用于分割肝脏、肺部、乳腺、心脏和脑部等器官。

医疗影像分割的案例部署可查看博文:https://blog.csdn.net/virobotics/article/details/125260923

unet优缺点

  • 优点:模型较为简单,对于某一特定类型分割比较清楚
  • 缺点:网络无法提取太多特征,导致对输入图片的要求比较高(如周围环境、背景等。例如本案例中仅对数据集中的车辆能够较好地分割)

二、环境搭建

2.1 部署本项目时所用环境

  • 操作系统:Windows10
  • python:3.6及以上
  • LabVIEW:2018及以上 64位版本
  • AI视觉工具包:techforce_lib_opencv_cpu-1.0.0.98.vip
  • onnx工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.16.vip【1.0.0.16及以上版本】或virobotics_lib_onnx_cpu-1.13.1.2.vip

2.2 LabVIEW工具包下载及安装网址


三、LabVIEW调用Unet实现图像分割

3.1 pytorch unet模型的获取

我们已经给大家准备了Unet模型,可以直接使用~
image.png

当然,如果读者想要自己下载模型并转换为onnx模型,那可以按照如下方式下载

image.png

将下载好的pth转为onnx(toonnx.py)

#!/usr/bin/python3

import torch
from unet import UNet


def parseToOnnx():

    net = UNet(n_channels=3, n_classes=2, bilinear=False)
    net.load_state_dict(
        torch.load('unet_carvana_scale0.5_epoch2.pth',
                   map_location=torch.device('cpu')))

    print(net.eval())

    batch_size, channels, height, width = 1, 3, 480, 640
    inputs = torch.randn((batch_size, channels, height, width))

    outputs = net(inputs)
    assert outputs.shape[0] == batch_size
    assert not torch.isnan(outputs).any(), 'Output included NaNs'

    torch.onnx.export(
        net,  # model being run
        inputs,  # model input (or a tuple for multiple inputs)
        "unet.onnx",  # where to save the model (can be a file or file-like   object)
        export_params=
        True,  # store the trained parameter weights inside the model     file
        opset_version=11,  # the ONNX version to export the model to
        do_constant_folding=
        False,  # whether to execute constant folding for optimization
        input_names=['inputs'],  # the model's input names
        output_names=['outputs'],  # the model's output names
        #dynamic_axes={
   
   
         #   'inputs': {
   
   
          #      0: 'batch_size'
           # },  # variable lenght axes
            #'outputs': {
   
   
             #   0: 'batch_size'
            #}
        #}
    )

    print("ONNX model conversion is complete.")
    return
parseToOnnx()

如果你想要自己训练模型,则可在官方网站下载数据集(温馨提示:数据集有点大哦)

官方数据集:https://www.kaggle.com/c/carvana-image-masking-challenge

image.png

3.2 查看模型输出输出

打开http://netron.app,载入本地onnx模型,我们可以看到模型的输入输出

image.png

image.png

我们查看模型的输入shape,是因为推理过程Run_one_input.vi需要输入shape,不过我们也可以使用GetInputInfo.vi来直接获取模型输入的shape

3.3 实现图像分割(unet.vi)

实现源码:
image.png

运行结果:
image.png

四、项目源码

如需LabVIEW源码,可查看;https://blog.csdn.net/virobotics/article/details/131202660

更多

总结

以上就是今天要给大家分享的内容,希望对大家有用。如有笔误,还请各位及时指正。后续还会继续给各位朋友分享其他案例,欢迎大家关注博主。我是virobotics(仪酷智能),我们下篇文章见~

如果有问题可以在评论区里讨论,提问前请先点赞支持一下博主哦,如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们的技术交流群:705637299。进群请备注:LabVIEW机器视觉

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

目录
相关文章
|
XML 存储 程序员
LabVIEW开发LabVIEW类
LabVIEW开发LabVIEW类
235 0
|
机器学习/深度学习 自然语言处理 数据可视化
UNet家族最强系列 | UNet、UNet++、TransUNet与SWin-UNet究竟哪个更强!!!
UNet家族最强系列 | UNet、UNet++、TransUNet与SWin-UNet究竟哪个更强!!!
2817 0
|
算法 搜索推荐 图计算
图计算中的社区发现算法是什么?请解释其作用和常用算法。
图计算中的社区发现算法是什么?请解释其作用和常用算法。
340 0
|
消息中间件 弹性计算 Java
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
1815 108
|
canal 消息中间件 关系型数据库
详解 canal 同步 MySQL 增量数据到 ES
canal 是阿里知名的开源项目,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 这篇文章,我们手把手向同学们展示**使用 canal 将 MySQL 增量数据同步到 ES**
详解 canal 同步 MySQL 增量数据到 ES
|
2月前
|
存储 弹性计算 安全
阿里云服务器购买价格:云服务器按量、包年包月收费标准与最新活动价格表参考
阿里云服务器按量、包年包月收费标准价格表参考,轻量应用云服务器2核2G38元1年起,经济型e实例2核2G3M带宽99元1年,通用算力型u1实例2核4G5M带宽199元1年。选择不同的实例规格,价格不一样,同时不同地域之间的云服务器价格也有所差异,下面是小编整理的阿里云服务器按量与包年包月收费标准和最新活动价格表,以供参考。
|
10月前
|
存储 监控 C++
11 个必备 Docker 工具
11 个必备 Docker 工具
2211 11
11 个必备 Docker 工具
|
12月前
|
开发框架 数据可视化 安全
功能驱动方法是什么?如何有效管理技术债务以避免项目风险?
本文探讨了功能驱动方法(FDD)与技术债务的概念及相互关系。FDD是一种高效的敏捷开发方式,强调根据客户需求快速开发独立功能;而技术债务指项目中未解决的技术问题,可能增加未来的维护成本和风险。文章详细介绍了FDD的五个核心步骤、优势,以及技术债务的成因、风险和管理策略,旨在帮助项目团队有效降低风险,确保项目可持续发展。
208 5
功能驱动方法是什么?如何有效管理技术债务以避免项目风险?
|
数据挖掘 Python
Pandas实战(1):电商购物用户行为数据分析
Pandas实战(1):电商购物用户行为数据分析
515 1
|
Linux Python
Linux离线安装Python依赖包
本文介绍了在Linux环境下离线安装Python依赖包的方法,包括从Python依赖包检索网站下载所需依赖包的压缩文件,上传到Linux服务器,然后通过解压、编译和安装步骤完成依赖包的安装。
992 0