导语

在工业视觉应用中,目标检测算法常用于特征的粗定位,而语义分割则在特征的精定位方面有着突出的表现。使用较多的语义分割模型主要有FCN、deeplab系列、unet等,根据自身的实践来看deeplabv3+以及unet往往能够在工业数据集上有着良好的检测效果。这里就先介绍下deeplabv3+的工业应用流程。

1、代码获取

1.1这里推荐使用的代码库

https://github.com/bubbliiiing/deeplabv3-plus-pytorch

1.2版本选择

详解语义分割deeplabv3+模型的工业应用流程-LMLPHP

2、两种途径

很多教程往往只会说按照readme的要求安装requirements即可,但是往往会出现torch或者torchvision安装失败等现象,这里提供两种途径可以规避可能出现的坑。

2.1 pytorch与torchvision的离线安装

首先在官网https://download.pytorch.org/whl/torch_stable.html下载对应的torch以及torchvision版本。下载完成后cmd定位到下载文件夹后利用文件夹名进行安装即可,例如(torch1.4)E:\torch>pip install torch-1.4.0-cp37-cp37m-win_amd64.whl

2.2 镜像安装库

例如安装opencv_python==4.1.2.30可通过pip install opencv_python==4.1.2.30 -i

https:://pypi.doubanio.com/simple。

3、模型训练

3.1训练数据处理

使用labelme工具制作自己的数据集,制作完成后将原图与json格式文件一起放入datasets\before文件夹下,运行json_to_dataset.py生成检测图片与标签图片,分别位于datasets\JPEGImages、datasets\SegmentationClass下。最后将这两个文件夹copy到VOCdevkit\VOC2007文件夹下,运行voc_annotation.py即可生成最终的训练数据集格式。

注意点:运行json_to_dataset.py之前需要将classes更改成自己数据集种类,例如classes=[“_background_”,”luo”]。

3.2 模型训练

该代码库对于模型训练参数的更改设置均在train.py文件中做了很详细的说明,可以按照给出的注释适配自己的数据。

4、模型导出

目前模型部署的工具有很多例如openvino、libtorch、tensorrt、onnxruntime、opencvdnn等,个人使用比较多的是openvino、libtorch、tensorrt,现在就以libtorch为例来说明下模型部署的流程。

4.1 pth2pt

Libtorch接受的是pt格式的模型文件,所以需要将训练得到的pth权重文件转化为pt模型文件格式,转化代码为:

import torch
import torchvision
from nets.deeplabv3_plus import DeepLab
model = DeepLab(num_classes=2)#自己定义的网络模型
model.load_state_dict(torch.load("D:/deeplearning/pytorch/deeplabv3-plus-pytorch-main/logs/ep300-loss0.008-val_loss0.005.pth"))#保存的训练模型
model.eval()
#如果是基于GPU的libtorch部署则需要加以下两句
model.cuda()
example = torch.rand(1, 3, 512, 512).to('cuda')#生成一个随机输入维度的输入
#如果是基于CPU的libtorch部署则为以下三句,无需cuda,注释掉即可。
example = torch.rand(1, 3, 256, 256)#生成一个随机输入维度的输入
traced_script_module = torch.jit.trace(model, example)
traced_script_module.save("deeplabv3.pt")

5、模型部署

5.1基于Windows的libtorch安装以及vs2019配置

5.1.1下载与安装

5.1.2附加依赖

  • 1)opencv:需要提前配置opencv,本文以opencv3.4.0为例;

  • 2)cuda:如果需要GPU部署的话需要提前配置cuda,本文以cuda10.2为例如只需要CPU部署这步可忽略。

5.1.3下载地址

  • 1)libtorch下载地址: https://pytorch.org/get-started/locally/

5.1.4 vs2019配置libtorch(注意文件路径即可)

release、X64

VC++-目录:

包含:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include
D:\opencv\build\include\opencv
D:\opencv\build\include\opencv2
D:\opencv\build\include
D:\libtorch\include\torch\csrc\api\include
D:\libtorch\include

库目录:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib
D:\opencv\build\x64\vc15\lib
D:\libtorch\lib

链接器-输入:
D:\libtorch\lib\torch.lib
D:\libtorch\lib\torch_cuda.lib
D:\libtorch\lib\caffe2_detectron_ops_gpu.lib
D:\libtorch\lib\caffe2_module_test_dynamic.lib
D:\libtorch\lib\torch_cpu.lib
D:\libtorch\lib\c10_cuda.lib
D:\libtorch\lib\caffe2_nvrtc.lib
D:\libtorch\lib\mkldnn.lib
D:\libtorch\lib\c10.lib
D:\libtorch\lib\dnnl.lib
D:\libtorch\lib\libprotoc.lib
D:\libtorch\lib\libprotobuf.lib
D:\libtorch\lib\libprotobuf-lite.lib
D:\libtorch\lib\fbgemm.lib
D:\libtorch\lib\asmjit.lib
D:\libtorch\lib\cpuinfo.lib
D:\libtorch\lib\clog.lib
D:\opencv\build\x64\vc14\lib\opencv_world340.lib

5.2 基于libtorch的部署代码如下

详解语义分割deeplabv3+模型的工业应用流程-LMLPHP

详解语义分割deeplabv3+模型的工业应用流程-LMLPHP

结语

至此基于deeplabv3+的工业应用流程分析就此结束了,本人也是初次撰稿,希望未来将两年多工业界AI探索应用的经验分享给大家,很多不足的地方需要各位积极指正大家一起进步,加油谢谢!

关注下方《学姐带你玩AI》🚀🚀🚀

回复“500”获取AI必读高分论文合集

(包含语义分割等多个细分方向)

码字不易,欢迎大家点赞评论收藏!

04-14 22:39