使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割_第1页
使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割_第2页
使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割_第3页
使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割_第4页
使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

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

三、LabVIEW调用DeepLabv3实现图像语义分割1、模型获取及转换

安装pytorch和torchvision获取torchvision中的模型:deeplabv3_resnet101(我们获取预训练好的模型):original_model=models.segmentation.deeplabv3_resnet101(pretrained=True)转onnxdefget_pytorch_onnx_model(original_model):#definethedirectoryforfurtherconver(te)dmodelsaveonnx_model_path=dirname#definethenameoffurtherconvertedmodelonnx_model_name="deeplabv3_resnet101.onnx"​#createdirectoryforfurtherconvertedmodelos.makedi(rs)(onnx_model_path,exist_ok=True)​#getfullpathtotheconvertedmodelfull_model_path=os.path.join(onnx_model_path,onnx_model_name)​#generatemodelinputgenerated_input=Variable(torch.randn(1,3,448,448))​#modelexportintoONNXformattorch.onnx.export(original_model,generated_input,full_model_path,verbose=True,input_names=["input"],output_names=["output",'aux'],opset_version=11)​returnfull_model_path完整获取及模型转换(python)代码如下:

importosimporttorchimporttorch.onnxfromtorch.autogradimportVariablefromtorchvisionimportmodelsimportre​dirname,filename=os.path.split(os.path.abspath(__file__))print(dirname)​defget_pytorch_onnx_model(original_model):#definethedirectoryforfurtherconvertedmodelsaveonnx_model_path=dirname#definethenameoffurtherconvertedmodelonnx_model_name="deeplabv3_resnet101.onnx"​#createdirectoryforfurtherconvertedmodelos.makedirs(onnx_model_path,exist_ok=True)​#getfullpathtotheconvertedmodelfull_model_path=os.path.join(onnx_model_path,onnx_model_name)​#generatemodelinputgenerated_input=Variable(torch.randn(1,3,448,448))​#modelexportintoONNXformattorch.onnx.export(original_model,generated_input,full_model_path,verbose=True,input_names=["input"],output_names=["output",'aux'],opset_version=11)​returnfull_model_path​​defmain():#initializePyTorchResNet-101modeloriginal_model=models.segmentation.deeplabv3_resnet101(pretrained=True)​#getthepathtotheconvertedintoONNXPyTorchmodelfull_model_path=get_pytorch_onnx_model(original_model)print("PyTorchResNet-101modelwassuccessfullyconverted:",full_model_path)​​if__name__=="__main__":main()​我们会发现,基于pytorch的DeepLabv3模型获取和之前的maskrcnn模型大同小异。

2、关于deeplabv3_resnet101

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

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

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

人:人动物:鸟、猫、牛、狗、马、羊车辆:飞机、自行车、船、巴士、汽车、摩托车、火车室内:瓶、椅子、餐桌、盆栽植物、沙发、电视/监视器3、LabVIEWopencvdnn调用deeplabv3实现图像语义分割(deeplabv3_opencv.vi)

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

opencvdnn调用onnx模型并选择

**图像预处理**

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

**执行推理**

后处理并实现实例分割

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

整体的程序框架如下:

语义分割结果如下:

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

整体的程序框架如下:

语义分割结果如下:

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

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

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论