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

news/2024/10/23 7:32:01/

来源:投稿 作者:某一个名字

编辑:学姐

导语

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

1、代码获取

1.1这里推荐使用的代码库

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

1.2版本选择

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

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

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

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

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


http://www.ppmy.cn/news/46937.html

相关文章

android framework-PackageManagerService(PKMS)包管理服务

一、概述 Android系统启动过程中,会启动一个包管理服务PackageManagerService(PKMS),这个服务主要负责扫描系统中指定目录,找出里面以apk结尾的文件,通过对这些文件进行解析,得到应用程序的所有信息并完成应用程序的安…

【AI生产力工具】ChatPDF:将 PDF 文档转化为交互式阅读体验的利器

文章目录 简介一、ChatPDF 是什么?二、ChatPDF 的优势三、ChatPDF 的应用场景四、如何使用 ChatPDF?五、结语 简介 随着数字化时代的发展,PDF 文件已经成为了日常工作和学习中不可或缺的一部分。然而,仅仅将 PDF 文件上传或下载并…

【排序】快速排序(递归和非递归)

快速排序 前言图解大致思路对于hoare版本对于挖坑法对于前后指针法 实现方法递归非递归 快排的优化(基于递归的优化)三数取中法小区间优化 时间复杂度和空间复杂度 前言 快速排序,听名字就比较霸道,效率根名字一样,非…

理解C语言中的空指针和野指针

在C语言中,指针是一个非常重要的概念,可以用于操作变量和数据结构。但是,指针也是很容易出错的地方。其中包括两种可能的错误:空指针和野指针。 空指针 空指针指代无效的地址,表示指针不指向内存中的任何一个合法对象…

深入剖析:如何优化Android应用的性能和内存管理

深入剖析:如何优化Android应用的性能和内存管理 性能和内存管理的重要性 在今天的移动应用开发中,用户对于应用的性能和体验要求越来越高。一款性能卓越的Android应用能够提供流畅的操作体验、快速的响应速度以及较低的资源消耗,从而提高用户…

Android 11.0 设置默认DNS

1.前言 在11.0的系统rom产品定制化开发中,由于是wifi产品的定制,需要对wifi功能要求比较高,所以在wifi需求方面要求设置默认的dns功能,这就需要分析网络通讯 流程,然后在联网之后,设置默认的dns,来实现功能要求 2.设置默认DNS的核心类 frameworks\base\core\java\andr…

深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧

深入探索 Qt WebEngineCore:从基础原理到高级应用与技巧 Diving into Qt WebEngineCore: From Basic Principles to Advanced Applications and Techniques 一、Qt WebEngineCore 模块简介及原理 (Introduction and Principles of Qt WebEngineCore Module)Qt WebEn…

使用layui组件库制作进度条

使用layui组件库制作进度条 html代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Example</title><!-- 引入 layui 的 CSS 文件 --><link rel"stylesheet" href"https://cdn.staticfil…