前言前面给大家介绍了使用labview工具包实现图像分类,目标检测,今天我们来看一下如何使用labview实现mask r-cnn图像实例分割。
一、什么是图像实例分割?图像实例分割(instance segmentation)是在语义检测(semantic segmentation)的基础上进一步细化,分离对象的前景与背景,实现像素级别的对象分离。并且图像的语义分割与图像的实例分割是两个不同的概念,语义分割仅仅会区别分割出不同类别的物体,而实例分割则会进一步的分割出同一个类中的不同实例的物体。
计算机视觉中常见的一些任务(分类,检测,语义分割,实例分割)
二、什么是mask r-cnn
mask r-cnn是一个实例分割(instance segmentation)算法,可以用来做“目标检测”、“目标实例分割”、“目标关键点检测”。 mask r-cnn算法步骤:
首先,输入一幅你想处理的图片,然后进行对应的预处理操作,或者预处理后的图片;将其输入到一个预训练好的神经网络中(resnext等)获得对应的feature map;对这个feature map中的每一点设定预定的roi,从而获得多个候选roi;将这些候选的roi送入rpn网络进行二值分类(前景或背景)和bb回归,过滤掉一部分候选的roi接着,对这些剩下的roi进行roialign操作(即先将原图和feature map的pixel对应起来,然后feature map和固定的feature对应起来);**最后,对这些roi进行分类(n类别分类)、bb回归和mask生成(在每一个roi里面进行fcn操作) **三、labview调用mask r-cnn图像实例分割模型1、mask r-cnn模型获取及转换安装pytorch和torchvision获取torchvision中的模型(我们获取预训练好的模型):model = models.detection.maskrcnn_resnet50_fpn(pretrained=true)转onnxdef get_pytorch_onnx_model(original_model): 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 = maskrcnn_resnet50.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) model.eval() x = torch.rand(1, 3, 640, 640) # model export into onnx format torch.onnx.export( original_model, x, full_model_path, input_names=[input], output_names=[boxes, labels, scores, masks], dynamic_axes={input: [0, 1, 2, 3],boxes: [0, 1],labels: [0],scores: [0],masks: [0, 1, 2, 3]}, verbose=true,opset_version=11 ) return full_model_path完整获取及模型转换python代码如下:
import osimport torchimport torch.onnxfrom torch.autograd import variablefrom torchvision import modelsdirname, filename = os.path.split(os.path.abspath(__file__))print(dirname)def get_pytorch_onnx_model(original_model): 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 = maskrcnn_resnet50.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) model.eval() x = torch.rand(1, 3, 640, 640) # model export into onnx format torch.onnx.export( original_model, x, full_model_path, input_names=[input], output_names=[boxes, labels, scores, masks], dynamic_axes={input: [0, 1, 2, 3],boxes: [0, 1],labels: [0],scores: [0],masks: [0, 1, 2, 3]}, verbose=true,opset_version=11 ) return full_model_pathmodel = models.detection.maskrcnn_resnet50_fpn(pretrained=true)print(get_pytorch_onnx_model(model))2、labview调用 mask r-cnn (mask rcnn.vi)注意:mask r-cnn模型是没办法使用opencv dnn去加载的,因为有些算子不支持,所以我们主要使用labview开放神经网络交互工具包(onnx)来加载推理模型。
onnxruntime调用onnx模型并选择加速方式
**图像预处理 **
**执行推理 **
我们使用的模型是:maskrcnn_resnet50_fpn,其输出有四层,分别为boxes,labels,scores,masks,数据类型如下:
** 可以看到,labels的类型为int64,所以我们的源码中需要“get_rresult_int64.vi,index为1,因为labels为第二层,即下标为1;**
另外三个输出我们都可以使用float32来获取了,masks虽然数据类型是uint8,但在实操过程中发现,它其实做过归一化处理了,也可以使用float32.
后处理并实现实例分割
因为后处理内容较多,所以直接封装为了一个子vi, mask_rcnn_post_process.vi,源码如下:
** 整体的程序框架如下:**
实例分割结果如下,我们会发现这个模型跑起来,他花的时间比之前就更长了。因为他不但要获取每一个对象的区域,还要也要把这个区域的轮廓给框出来,我们可以看到五个人及篮球都框出来了,使用不同的颜色分割出来了。
3、labview调用 mask r-cnn 实现实时图像分割(mask rcnn_camera.vi)整体思想和上面检测图片的实力分割差不多,不过使用了摄像头,并加了一个循环,对每一帧对象进行实力分割,3080系列显卡可选择tensorrt加速推理,分割会更加流畅。我们发现这个模型其实很考验检测数量的,所以如果你只是对人进行分割,那可以选择一个干净一些的背景,整体检测速度就会快很多。
大家可关注微信公众号: virobotics ,回复关键字: mask r-cnn图像实例分割源码 获取本次分享内容的完整项目源码及模型。
四、mask-rcnn训练自己的数据集(检测行人)1.准备工作训练需要jupyterlab环境,没有安装的同学需要通过pip install jupyterlab 安装**如果无法解决jupyterlab环境 可以使用colab或者kaggle提供的免费gpu环境进行训练 **训练源码:mask-rcnn.ipynb2.开始训练**根据提示运行这段代码,自动或手动下载依赖文件数据集并建立数据集解析类 **
定义单轮训练的函数:网络结构直接采用torchvison里现有的,不再重新定义
出现如下输出表示训练进行中
**修改这个文件名,改成自己的图片名字,运行看下训练效果 **
3、训练效果
4、导出onnx
如果文章对你有帮助,欢迎关注、点赞、收藏
紫米10000mAh双向快充移动电源高清图赏
数字资产交易平台DIIEX.COM,将颠覆传统交易所平台币发行模式
获得美国豁免!晶圆大厂将扩建中国工厂!
转盘型自动数粒仪配置作用和效果分析
英伟达正在为RTX30系列GPU研究智能内存访问技术
手把手教你使用LabVIEW实现Mask R-CNN图像实例分割(含源码)
Synopsys EDA设计平台通过了ISO 26262 认证
各类处理器中的仲裁
连接器3芯电蜂
基于LabVIEW的步进电机控制方法设计详解
小品牌在手机市场跑道上的姿态各异,最终哪家会逆风翻盘?
明年推出的苹果MacBook Pro新品或将支持Face ID面容识别功能
TPSM82913低纹波降压模块,带集成铁氧体磁珠滤波器补偿
政策密集发布添助力 大陆成IIoT市场领头羊
英特尔称第二季度22nm将占总出货量的25%
Intel成功取得俄亥俄州土地,已经开始建设20A工艺晶圆厂
多波形信号发生器设计原理分析
电气火灾监控系统的功能都包括哪些
直流电阻测试仪的作用
minigui是什么