前言

前面给大家介绍了使用LabVIEW工具包实现图像分类,目标检测,今天我们来看一下如何使用LabVIEW实现Mask R-CNN图像实例分割。

一、什么是图像实例分割?

图像实例分割(Instance Segmentation)是在语义检测(Semantic Segmentation)的基础上进一步细化,分离对象的前景与背景,实现像素级别的对象分离。并且图像的语义分割与图像的实例分割是两个不同的概念,语义分割仅仅会区别分割出不同类别的物体,而实例分割则会进一步的分割出同一个类中的不同实例的物体。

计算机视觉中常见的一些任务(分类,检测,语义分割,实例分割)

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

二、什么是Mask R-CNN

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

Mask R-CNN是一个实例分割(Instance segmentation)算法,可以用来做“目标检测”、“目标实例分割”、“目标关键点检测”。 Mask R-CNN算法步骤:

三、LabVIEW调用Mask R-CNN图像实例分割模型

1、Mask R-CNN模型获取及转换

model = models.detection.maskrcnn_resnet50_fpn(pretrained=True) 
 1 def get_pytorch_onnx_model(original_model):
 2     model=original_model
 3     # define the directory for further converted model save
 4     onnx_model_path = dirname
 5     
 6     # define the name of further converted model
 7     onnx_model_name = "maskrcnn_resnet50.onnx"
 8  9     # create directory for further converted model
10     os.makedirs(onnx_model_path, exist_ok=True)
11 12     # get full path to the converted model
13     full_model_path = os.path.join(onnx_model_path, onnx_model_name)
14     model.eval()
15 16     x = torch.rand(1, 3, 640, 640)
17     # model export into ONNX format
18     torch.onnx.export(
19         original_model,
20         x,
21         full_model_path,
22         input_names=["input"],
23         output_names=["boxes", "labels", "scores", "masks"],
24         dynamic_axes={"input": [0, 1, 2, 3],"boxes": [0, 1],"labels": [0],"scores": [0],"masks": [0, 1, 2, 3]},
25         verbose=True,opset_version=11
26     )
27 28     return full_model_path

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

 1 import os
 2 import torch
 3 import torch.onnx
 4 from torch.autograd import Variable
 5 from torchvision import models
 6  7 dirname, filename = os.path.split(os.path.abspath(__file__))
 8 print(dirname)
 9 10 def get_pytorch_onnx_model(original_model):
11     model=original_model
12     # define the directory for further converted model save
13     onnx_model_path = dirname
14     
15     # define the name of further converted model
16     onnx_model_name = "maskrcnn_resnet50.onnx"
17 18     # create directory for further converted model
19     os.makedirs(onnx_model_path, exist_ok=True)
20 21     # get full path to the converted model
22     full_model_path = os.path.join(onnx_model_path, onnx_model_name)
23     model.eval()
24 25     x = torch.rand(1, 3, 640, 640)
26     # model export into ONNX format
27     torch.onnx.export(
28         original_model,
29         x,
30         full_model_path,
31         input_names=["input"],
32         output_names=["boxes", "labels", "scores", "masks"],
33         dynamic_axes={"input": [0, 1, 2, 3],"boxes": [0, 1],"labels": [0],"scores": [0],"masks": [0, 1, 2, 3]},
34         verbose=True,opset_version=11
35     )
36 37     return full_model_path
38 39 40 model = models.detection.maskrcnn_resnet50_fpn(pretrained=True)
41 print(get_pytorch_onnx_model(model))

2、LabVIEW调用 Mask R-CNN (mask rcnn.vi)

注意:Mask R-CNN模型是没办法使用OpenCV dnn去加载的,因为有些算子不支持,所以我们主要使用LabVIEW开放神经网络交互工具包(ONNX)来加载推理模型。

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

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

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

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

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

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

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

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

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

3、LabVIEW调用 Mask R-CNN 实现实时图像分割(mask rcnn_camera.vi)

整体思想和上面检测图片的实力分割差不多,不过使用了摄像头,并加了一个循环,对每一帧对象进行实力分割,3080系列显卡可选择TensorRT加速推理,分割会更加流畅。我们发现这个模型其实很考验检测数量的,所以如果你只是对人进行分割,那可以选择一个干净一些的背景,整体检测速度就会快很多。 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割

四、Mask-RCNN训练自己的数据集(检测行人)

1.准备工作

2.开始训练

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

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

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

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

3、训练效果

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

4、导出ONNX

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

总结

以上就是今天要给大家分享的内容。大家可关注微信公众号:VIRobotics,回复关键字:Mask R-CNN图像实例分割源码 获取本次分享内容的完整项目源码及模型。

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

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

发表回复