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

?我们会发现,基于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类,分别如下:

  • 人 :人
  • 动物:鸟、猫、牛、狗、马、羊
  • 车辆:飞机、自行车、船、巴士、汽车、摩托车、火车
  • 室内:瓶、椅子、餐桌、盆栽植物、沙发、电视/监视器
    使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割

    文章插图
3、LabVIEW opencv dnn调用 deeplabv3 实现图像语义分割(deeplabv3_opencv.vi)deeplabv3模型可以使用OpenCV dnn去加载的,也可以使用onnxruntime加载推理,所以我们分两种方式给大家介绍LabVIEW调用deeplabv3实现图像语义分割 。
  • opencv dnn 调用onnx模型并选择

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

文章插图
  • 图像预处理最终还是采用了比较中规中矩的处理方式

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

文章插图
  • 执行推理

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

文章插图
  • 后处理并实现实例分割 因为后处理内容较多,所以直接封装为了一个子VI,deeplabv3_postprocess.vi,因为Labview没有专门的切片函数,所以会稍慢一些,所以接下来还会开发针对后处理和矩阵有关的函数,加快处理结果 。
  • 整体的程序框架如下:

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

文章插图
  • 语义分割结果如下:

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

文章插图
4、LabVIEW onnxruntime调用 deeplabv3实现图像语义分割 (deeplabv3_onnx.vi)
  • 整体的程序框架如下:

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

文章插图
  • 语义分割结果如下:

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

文章插图
5、LabVIEW onnxruntime调用 deeplabv3 使用TensorRT加速模型实现图像语义分割(deeplabv3_onnx_camera.vi)
使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割

文章插图
如上图所示,可以看到可以把人和背景完全分割开来,使用TensorRT加速推理,速度也比较快 。
四、deeplabv3训练自己的数据集训练可参考:https://github.com/pytorch/vision
总结以上就是今天要给大家分享的内容 。大家可关注微信公众号: VIRobotics,回复关键字:DeepLabv3图像语义分割源码  获取本次分享内容的完整项目源码及模型 。
如果有问题可以在评论区里讨论,提问前请先点赞支持一下博主哦,如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们的技术交流群:705637299 。
如果文章对你有帮助,欢迎关注、点赞、收藏
【使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割】

经验总结扩展阅读