基于DeepLabv3+实现图像分割

2024-06-04 01:12
文章标签 实现 图像 分割 deeplabv3

本文主要是介绍基于DeepLabv3+实现图像分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. 作者介绍
  • 2. DeepLabv3+算法
    • 2.1 DeepLabv3+算法介绍
    • 2.2 DeepLabv3+模型结构
  • 3. 实验过程基于DeepLabv3+实现图像分割
    • 3.1 VOC数据集介绍
    • 3.2 代码实现
    • 3.3 问题分析
  • 4. 参考连接

1. 作者介绍

吴天禧,女,西安工程大学电子信息学院,2023级研究生,张宏伟人工智能课题组
研究方向:模式识别与智能系统
电子邮件:230411046@stu.xpu.edu.cn

路治东,男,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:2063079527@qq.com

2. DeepLabv3+算法

2.1 DeepLabv3+算法介绍

DeepLabv3+是一种先进的语义图像分割算法,它通过结合编码器-解码器架构和Atrous卷积来实现对图像中每个像素的精确分类。
该算法利用DeepLabv3作为编码器,有效地捕捉丰富的上下文信息,并通过一个简单而有效的解码器模块来细化分割结果,尤其是在物体的边界区域。Atrous卷积允许模型以任意分辨率提取特征,这为处理不同尺寸的物体提供了灵活性。
此外,DeepLabv3+还采用了Xception模型和深度可分离卷积技术,显著提高了计算效率,同时保持了分割精度。

2.2 DeepLabv3+模型结构

图 1 DeepLabv3+模型结构

图1展示了DeepLabv3+模型的结构,该模型结合了编码器-解码器结构的优势以及空间金字塔池化模块。(a)部分显示了空间金字塔池化(Spatial Pyramid Pooling, SPP)模块,它通过在不同比例的网格上进行池化操作来捕获多尺度上下文信息。(b)部分展示了编码器-解码器(Encoder-Decoder)结构,它能够通过逐步恢复空间信息来捕获更锐利的物体边界。©部分则展示了带有Atrous卷积的编码器-解码器结构,这是DeepLabv3+模型的核心,其中编码器模块包含了丰富的语义信息,而解码器模块则用于恢复详细的物体边界。Atrous卷积允许以任意分辨率提取特征,这为模型提供了灵活性。

在这里插入图片描述

图2详细展示了DeepLabv3+模型的编码器和解码器模块。编码器模块通过多尺度的Atrous卷积来编码多尺度上下文信息,而解码器模块则用于细化分割结果,尤其是在物体边界上。在该模型中,首先使用Atrous卷积提取特征,然后通过解码器模块逐步恢复图像的空间分辨率,以获得更精细的分割效果。

在这里插入图片描述

图3解释了深度可分离卷积的概念,这是一种减少计算复杂度的技术。(a)图展示了深度卷积(Depthwise Convolution),它对每个输入通道独立应用卷积核。(b)图展示了点卷积(Pointwise Convolution),它在深度卷积的输出上进行1x1的卷积,以组合不同通道的信息。©图展示了Atrous深度可分离卷积,这是在深度卷积中应用了Atrous卷积,允许模型以不同的采样率来捕获多尺度信息。

在这里插入图片描述

图4描述了对Xception模型的修改,使其更适合于语义图像分割任务。修改包括增加更多的层以捕获更深层次的特征,将所有最大池化操作替换为带有步长的深度可分离卷积,以及在每个3x3深度卷积后添加额外的批量归一化(Batch Normalization)和ReLU激活函数,这与MobileNet的设计相似。

3. 实验过程基于DeepLabv3+实现图像分割

3.1 VOC数据集介绍

PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛,PASCAL全称:Pattern Analysis, Statical Modeling and Computational Learning,是一个由欧盟资助的网络组织。PASCAL VOC挑战赛主要包括以下几类:图像分类(Object Classification),目标检测(Object Detection),目标分割(Object Segmentation),行为识别(Action Classification) 等。

在这里插入图片描述
下面是数据集的展示,包括(a)图像分类与目标检测任务;(b)分割任务,注意,图像分割一般包括语义分割、实例分割和全景分割,实例分割是要把每个单独的目标用一种颜色表示(下图中间的图像),而语义分割只是把同一类别的所有目标用同一颜色表示(下图右侧的图片);(c)行为识别任务;(d)人体布局检测任务。

在这里插入图片描述

VOC数据集中主要包含20个目标类别,这个图展示了所有类别的名称以及所属大类。

在这里插入图片描述

3.2 代码实现

Main.py是一个用于图像分割的深度学习训练脚本。

  1. get_argparser() 函数定义了一个命令行参数解析器,允许用户在运行脚本时指定各种配置选项,如数据集路径、模型类型、训练选项、学习率、批大小等。
  2. validate() 函数执行模型的验证,计算指标(如IoU),并可选择保存验证结果和可视化样本。
  3. 主函数 main()
    设置数据集类别数(基于所选数据集);
    初始化可视化工具;
    设置GPU和随机种子;
    加载和初始化数据加载器;
    根据参数构建模型,并将其置于GPU上;
    设置优化器、学习率调度器和损失函数;
    如果提供了检查点文件,恢复训练状态;
    进入训练循环,包括前向传播、损失计算、反向传播和参数更新;
    在每个验证间隔执行验证,并根据验证结果更新最佳模型;
    使用Visdom可视化训练损失和验证指标。
  4. 训练循环:
    模型设置为训练模式;
    迭代训练数据加载器中的批次;
    执行前向传播,计算损失;
    执行反向传播,更新模型参数;
    在指定间隔打印损失并进行可视化;
    定期执行验证,并保存最佳模型。
  5. 检查点保存 save_ckpt() 函数负责保存当前模型的状态、优化器状态、学习率调度器状态和最佳验证分数到文件。
  6. 可视化
    如果启用,使用Visdom可视化训练损失和验证指标。
  7. 模型评估
    如果设置了–test_only ,模型将进行评估而不进行训练。

3.3 问题分析

python main.py --model deeplabv3plus_resnet50 --enable_vis --vis_port 28333 --gpu_id 0 --year 2012 --crop_val --lr 0.01 --crop_size 513 --batch_size 16 --output_stride 16

在这里插入图片描述
下载的voc数据集中没有2008_000942.png图,这个图应该在2012_aug中,但下载的voc2012中没有,训练时改成2012就可以了,测试也一样。

4. 参考连接

  1. Voc数据集
  2. DeepLabv3+论文
  3. 代码:VainF/DeepLabV3Plus-Pytorch: Pretrained DeepLabv3 and DeepLabv3+ for Pascal VOC & Cityscapes

这篇关于基于DeepLabv3+实现图像分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028646

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现