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

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

编辑:学姐

导语

在工业视觉应用中,目标检测算法常用于特征的粗定位,而语义分割则在特征的精定位方面有着突出的表现。使用较多的语义分割模型主要有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必读高分论文合集

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12801.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

keil5使用c++编写stm32控制程序

keil5使用c编写stm32控制程序 一、前言二、配置图解三、std::cout串口重定向四、串口中断服务函数五、结尾废话 一、前言 想着搞个新奇的玩意玩一玩来着,想用c编写代码来控制stm32,结果在keil5中,把踩给我踩闷了,这里简单记录一下…

【OCR】CTC loss原理

1 CTC loss出现的背景 在图像文本识别、语言识别的应用中,所面临的一个问题是神经网络输出与ground truth的长度不一致,这样一来,loss就会很难计算,举个例子来讲,如果网络的输出是”-sst-aa-tt-e’, 而其ground truth…

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

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

SpringBoot 集成webSocket

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

HTML5 Input 类型

文章目录 HTML5 Input 类型Input 类型: colorInput 类型: dateInput 类型: datetimeInput 类型: datetime-localInput 类型: emailInput 类型: monthInput 类型: numberInput 类型: rangeInput 类型: searchInput 类型: telInput 类型: timeInput 类型: urlInput 类型: weekHTM…

CLIMS:弱监督语义分割的跨语言图像匹配

文章目录 CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation摘要方法语言图像匹配框架 实验结果 CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation 摘要 存在的问题 CAM(类激活图)通常只激活有区别的对象…

辉煌优配|黄金价格创近两年半新高!2只黄金股一季度预增

黄金板块早盘走强。 4月14日早盘&#xff0c;黄金板块团体走高&#xff0c;次新股四川黄金开盘半小时内拉升至涨停&#xff0c;封单资金到达7279.78万元&#xff0c;中润资源、晓程科技涨幅居前&#xff0c;分别为8.96%、8.48% 消息面上来看&#xff0c;近期全球黄金期货价格节…

HTML中表格标签<table><tr><tb><th>中单元格的合并问题

前情知晓 层级关系如下&#xff1a; <table><tr><td> </td><th> </th></tr></table> <table>...</table> 用于定义一个表格开始和结束 <tr>...</tr> 定义一行标签&#xff0c;一组行标签内可以建立…

Spring Cloud微服务网关Zuul的注解@EnableZuulProxy或@EnableZuulServer做了什么事情

一、Zuul的工作原理 Zuul 1.x的版本是由Servlet以及一系列的Filter组成的&#xff0c;各个组件之间协同合作完成功能&#xff0c;且易于扩展。参看官方的架构图我画了张图&#xff1a; Zuul声明周期&#xff1a; HTTP Request -> DispatcherServlet -> ZuulHandlerMappi…

面了 6 家大厂,并拿下 5 家 offer,进大厂好像也没有那么困难吧....

前言 二月份的时候因为换工作的缘故&#xff0c;陆续参加了华为、阿里巴巴、字节跳动、拼多多、百度、Paypal 的社招面试&#xff0c;除了字节跳动流程较长&#xff0c;我主动结束面试以外&#xff0c;其他的都顺利拿到了 Offer。 最近时间稍微宽裕点了&#xff0c;写个面经&…

2021遥感应用组二等奖:近20年黄河流域植被动态与生态环境效应

作品介绍 1 研究目的 基于MODIS NDVI植被指数、土地利用数据和气象数据集&#xff0c;辅以趋势分析、偏相关分析、马尔科夫转移矩阵变化分析、多元回归分析等方法&#xff0c;全面分析黄河流域2001-2020年植被时空变化特征&#xff0c;并通过构建统计模型方式&#xff0c;定量…

图染色问题的NP完全性证明

文章目录 1.Overview2.CNF 3-sat3. Gadgets3.1 Concolorous Edges3.2 Starter/Variable Gadget3.3 Splitter Gadget3.4 OR Gadget3.5 Clause Gadget 4. To Planar Graph 最近在学 6.890&#xff0c;然后 devans 刚好问了我这个问题&#xff0c;然后尝试编了一个证明。 1.Overv…

独家 | 招商银行:玩转校园招聘新方式 挖掘金融科技新人才

数字经济时代&#xff0c;金融科技人才队伍的引进与培养是招商银行人才体系建设的关键任务。 01.金融科技校招2大核心课题 招商银行数字化转型过程中&#xff0c;线上化、生态化、平台化、智能化、数据化全面加速发展&#xff0c;对人才队伍能力提出新要求。 2大核心课题&am…

Spring Bean的生命周期

Spring Bean 的完整生命周期主要包括以下阶段&#xff1a; 实例化&#xff08;Instantiation&#xff09;&#xff1a;Spring 容器通过调用 Bean 的构造函数来创建 Bean 的实例。这是 Bean 生命周期的第一步。 设置属性值&#xff08;Setting Bean Properties&#xff09;&…

【分布式】熔断、降级傻傻分不清楚-熔断和降级的真实关系

文章目录 前言降级熔断什么是服务熔断 熔断和降级的关系降级方式1、熔断降级&#xff08;不可用&#xff09;2、超时降级3、限流降级 总结 前言 刚开始我以为熔断和降级是一体的&#xff0c;以为他们必须配合使用&#xff1b; 只不过名字不一样而已&#xff0c;但是当我经过思…

如何实现视觉识别形状

1. 功能说明 通过摄像头识别圆形及矩形两种形状。 2. 电子硬件 本实验中采用了以下硬件&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09; 扩展板 Bigfish2.1 电池7.4V锂电池通信2510通信转接板WiFi路由器 其它 摄像头 配置OpenCV的Visual Studio 2015.…

MySQL having关键字详解、与where的区别

1、having关键字概览 1.1、作用 对查询的数据进行筛选 1.2、having关键字产生的原因 使用where对查询的数据进行筛选时&#xff0c;where子句中无法使用聚合函数&#xff0c;所以引出having关键字 1.3、having使用语法 having单独使用&#xff08;不与group by一起使用&a…

(SQL学习随笔3)SQL语法——SELECT语句

导航 基本认识FROM关键字LIMIT与OFFSETORDER BY WHERE条件查询单值比较多条件组合范围筛选空值匹配LIKE通配条件分组 运算符和函数数据变换 分组运算表连接内连接左(右)外连接全外连接 外键约束窗口函数UNION&#xff1a;表上下拼接子查询条件判断PostgreSQLMySQL 基本认识 SE…

两种方法实现杨辉三角(java实现)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

Consul TTL健康检查方式

consul比较常用的健康检查方式为http健康检查方式&#xff0c;也还有使用TTL方式来进行健康检查的&#xff0c;下面从spring-cloud-consul-discovery这个SDK来着手分析。 构建ConsulAutoRegistration&#xff0c;这里的工作是组成服务注册的报文&#xff0c;有一个setCheck方法…