DeepLabV3+:ASPP加强特征提取网络的搭建

news2024/11/13 8:02:23

目录

ASPP结构介绍

ASPP在代码中的构建

参考资料


ASPP结构介绍

ASPP:Atrous Spatial Pyramid Pooling,空洞空间卷积池化金字塔。
简单理解就是个至尊版池化层,其目的与普通的池化层一致,尽可能地去提取特征。

利用主干特征提取网络,会得到一个浅层特征和一个深层特征,这一篇主要以如何对较深层特征进行加强特征提取,也就是在Encoder中所看到的部分。

它就叫做ASPP,主要有5个部分:

  • 1x1卷积
  • 膨胀率为6的3x3卷积
  • 膨胀率为12的3x3卷积
  • 膨胀率为18的3x3卷积
  • 对输入进去的特征层进行池化

接着会对这五个部分进行一个堆叠,再利用一个1x1卷积对通道数进行调整,获得上图中绿色的特征。

ASPP在代码中的构建

import torch
import torch.nn as nn
import torch.nn.functional as F

class ASPP(nn.Module):
    def __init__(self, dim_in, dim_out, rate=1, bn_mom=0.1):
        super(ASPP, self).__init__()
        self.branch1 = nn.Sequential(
            nn.Conv2d(dim_in, dim_out, kernel_size=(1,1), stride=(1,1), padding=0, dilation=rate, bias=True),
            nn.BatchNorm2d(dim_out, momentum=bn_mom),
            nn.ReLU(inplace=True),
        )
        self.branch2 = nn.Sequential(
            nn.Conv2d(dim_in, dim_out, kernel_size=(3,3), stride=(1,1), padding=6 * rate, dilation=6 * rate, bias=True),
            nn.BatchNorm2d(dim_out, momentum=bn_mom),
            nn.ReLU(inplace=True),
        )
        self.branch3 = nn.Sequential(
            nn.Conv2d(dim_in, dim_out, kernel_size=(3,3), stride=(1,1), padding=12 * rate, dilation=12 * rate, bias=True),
            nn.BatchNorm2d(dim_out, momentum=bn_mom),
            nn.ReLU(inplace=True),
        )
        self.branch4 = nn.Sequential(
            nn.Conv2d(dim_in, dim_out, kernel_size=(3,3), stride=(1,1), padding=18 * rate, dilation=18 * rate, bias=True),
            nn.BatchNorm2d(dim_out, momentum=bn_mom),
            nn.ReLU(inplace=True),
        )
        self.branch5_conv = nn.Conv2d(dim_in, dim_out, kernel_size=(1,1), stride=(1,1), padding=0, bias=True)
        self.branch5_bn = nn.BatchNorm2d(dim_out, momentum=bn_mom)
        self.branch5_relu = nn.ReLU(inplace=True)

        self.conv_cat = nn.Sequential(
            nn.Conv2d(dim_out * 5, dim_out ,kernel_size=(1,1), stride=(1,1), padding=0, bias=True),
            nn.BatchNorm2d(dim_out, momentum=bn_mom),
            nn.ReLU(inplace=True),
        )

    def forward(self, x):
        [b, c, row, col] = x.size()
  
        # 五个分支
        conv1x1 = self.branch1(x)
        conv3x3_1 = self.branch2(x)
        conv3x3_2 = self.branch3(x)
        conv3x3_3 = self.branch4(x)
   
        # 第五个分支,进行全局平均池化+卷积
        global_feature = torch.mean(x, 2, True)
        global_feature = torch.mean(global_feature, 3, True)
        global_feature = self.branch5_conv(global_feature)
        global_feature = self.branch5_bn(global_feature)
        global_feature = self.branch5_relu(global_feature)
        global_feature = F.interpolate(global_feature, (row, col), None, 'bilinear', True)
  
        # 五个分支的内容堆叠起来,然后1x1卷积整合特征。
        feature_cat = torch.cat([conv1x1, conv3x3_1, conv3x3_2, conv3x3_3, global_feature], dim=1)
        result = self.conv_cat(feature_cat)
        return result


if __name__ == "__main__":
    model = ASPP(dim_in=320, dim_out=256, rate=16//16)
    print(model)

那么从这里来看的话,也是相当清晰的,branch*(1、2、3、4、5)分别代表了ASPP五个部分在def __init__()可以体现,对于每一个都是卷积、标准化、激活函数。

第五个部分可以看到def forward中,首先呢,是要进行一个全局平均池化,再用1x1卷积通道数的整合,标准化、激活函数,接着采用上采样的方法,把它的大小调整成和我们上面获得的分支一样大小的特征层,这样我们才可以将五个部分进行一个堆叠,使用的是torch.cat()函数实现,最后,利用1x1卷积,对输入进来的特征层进行一个通道数的调整,获得想上图中绿色的部分,接着就会将这个具有较高语义信息的有效特征层就会传入到Decoder当中。

参考资料

(6条消息) Pytorch-torchvision源码解读:ASPP_xiongxyowo的博客-CSDN博客_aspp代码

DeepLabV3-/deeplabv3+.pdf at main · Auorui/DeepLabV3- (github.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码开发——创新赋能企业办公模式转变

近年来,国内云计算高速发展、SAAS 软件模式快速普及、企业数字 化的需求增长等方面促进了低代码平台开发与应用的高速发展,使之成为继 RPA之后企业数字化转型的明星工具。如果说RPA 将线上流程自动化,那么低代码解决了更基础的问题&#xff…

微信小程序 java Springboot大学生心理健康测试职位推荐系统

心理测试学生端要求在系统的安卓手机上可以运行,主要实现了线上考试测试等相关信息的查看,并且根据需求进行对管理端;首页、个人中心、学生管理、职业职位管理、职位申请管理、活动类型管理、活动项目管理、活动报名管理、试卷管理、试题管理…

Python算术运算符

Python算术运算符以下假设变量: a10,b20:运算符描述实例加 - 两个对象相加a b 输出结果 30-减 - 得到负数或是一个数减去另一个数a - b 输出结果 -10*乘 - 两个数相乘或是返回一个被重复若干次的字符串a * b 输出结果 200/除 - x除以yb / a …

C++内联函数:那时我还太年轻,并不知道使用inline带来的效率,早已在暗中标好了价格

👑专栏内容:C学习笔记⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐 文章目录一、前言二、内联函数1、起源2、概念三、与宏的区别1、宏的缺点2、两者区别四、内联函数的代价代价一:可执…

1.DjangoRestFramework【前后端分离项目搭建】

1.使用cmd创建项目 在你需要创建项目的文件夹中打开cmd,进入对应的Django的虚拟环境中输入下面语句: django-admin startproject drfproject然后使用pycharm打开项目 2.创建子apps 在tirminal中输入: python manage.py startapp user python manage.py startapp shop3.注册…

博途1200PLC/1500PLCMODBUS从站通信应用(MB_SLAVE指令)

博途PLC作为MODBUS主站通信请参看下面的文章链接: 博途PLC 1200/1500PLC MODBUS-RTU通讯优化(状态机编程)_博途plc modbus-rtu通信优化_RXXW_Dor的博客-CSDN博客博途PLC 1200/1500PLC MODBUS-RTU通讯_RXXW_Dor的博客-CSDN博客_博图modbus通讯1、1200PLC的modbus通讯,可以参看…

3.3 接口

文章目录1.接口的概念2.接口格式3.接口的特点3.1 练习-1:创建接口3.2 练习-2:创建接口实现类3.3 练习-3:创建接口测试类4.接口的用法5.接口的多继承多实现6.接口总结6.1 类与类的关系6.2 类与接口的关系6.3 接口与接口的关系6.4 抽象类与接口的区别1.接口的概念 与之前学习过的…

webpackEslint插件使用

webpackEslint插件使用 首先安装eslint-webpack-plugin npm i eslint-webpack-plugin -S 注意:如果未安装eslint>7,还需要先安装eslint npm i eslint -S 然后把插件添加到你的webpack配置,例如 const ESLintPluginreuqire(eslint-webpack-plugin) mo…

Android开发常谈—【热启动冷启动】

冷启动概述 app冷启动: 当应用启动时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用, 这个启动方式就叫做冷启动(后台不存在该应用进程)。冷启动因为系统会重新创建一个新的进程分配给…

【坤坤讲师--图】KM算法

KM算法 KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yj的顶标为B[j],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立。KM算法的正…

Python语言零基础入门教程(一)

Python 基础语法 Python 语言与 Perl,C 和 Java 等语言有许多相似之处。但是,也存在一些差异。 在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程。 第一个 Python 程序 交互式编程 交互式编程不需要创建脚本文件&#…

【算法竞赛模板】单调队列与单调栈

【算法竞赛模板】单调队列与单调栈一、概念解析二、单调栈三、单调队列一、概念解析 单调栈:具有单调(递增或递减)性质和栈性质的数据结构     时间复杂度为 O(n)单调队列:具有单调(递增或递减)性质和…

R22-11 《Specification of Time Synchronization》文摘

1 Introduction and functional overview【功能】Time Synchronization between different applications and/or ECUs【目的】be able to track such events in time or to trigger them at an accurate point in time.【方式】ATime Synchronization APIis offered to the App…

webpack基础理解

webpack基础理解 webpack就是将不同格式的文件打包成浏览器能够执行识别的文件 首先创建一些文件 npm init -y 初始化文件 生成一个配置文件package.json 这里如果直接打开静态文件引入main 他会提示你import引入这种模块化语法有问题浏览器并不能直接识别,这时就…

计算机组成原理 第四章笔记记录

为笔记记录,会有个人的理解在里面,若有错误请指出,看到了就改,视频链接 指令格式 指令和指令集的定义 指令:指示计算机执行某种操作的命令,是计算机运行的最小功能单位 指令集:一台计算机的所有指令的集合构成该计算机的指令系统…

微信小程序【获取用户昵称头像和昵称(附源码)】

获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo 登录过程 前端源码:https://pan.baidu.com/s/1uz2Gm2FMB-8RFVkhlHY3kQ 提取码:zb4w 后端源码:https://pan.baidu.com/s/1iPpLrXzWnpAsk5UsfKesGw 提取码:8bwm 小程…

Java poi之word文本图片内容提取

目录结构前言文档准备引入Maven依赖代码块提取结果验证孤勇者提取结果青鸟提取结果对比前言 应公司需求,需实现以下功能 word文本内容的替换;word文本内容的提取;word文档中图片的提取存放 此文章将使用Apache POI实现Word文档中文本内容及…

2023-2-3 刷题情况

二叉树着色游戏 题目描述 有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中,给出二叉树的根节点 root,树上总共有 n 个节点,且 n 为奇数,其中每个节点上的值从 1 到 n 各不相同。 最开始时: 「一号」玩家从 …

BIGEMAP GIS Office添加离线地图

BIGEMAP GIS Office添加离线地图发布时间:2019-01-04 版权:BIGEMAP添加离线地图相关应用:搭建 离线地图 二次开发目的:搭建内网地图服务器,内网中可多人访问的地图服务,无需上网工具下载:1、BIG…

2023年企业必不可少的私域运营系统

随着人口红利消失、流量越来越贵、公域转化越来越难,2023年,能够提升用户全生命周期的私域运营,已经成为企业不得不做的事。 面对这种情况,企业必须要引入一款专业且高效的私域运营利器,来实现高效率私域运营管理。快…