当前位置: 首页 > news >正文

27 - ASPP模块

论文《Rethinking Atrous Convolution for Semantic Image Segmentation》

1、作用

DeepLabv3是一种先进的语义图像分割系统,它通过使用空洞卷积捕获多尺度上下文来显著提升性能,无需依赖DenseCRF后处理。

2、机制

DeepLabv3的核心机制围绕空洞(扩张)卷积展开。这种技术允许模型控制滤波器的视野,使其能够在多个尺度上捕获空间上下文。DeepLabv3在串联和并联架构中使用空洞卷积来提取密集的特征图,并有效地整合多尺度信息。文章还介绍了Atrous Spatial Pyramid Pooling(ASPP)模块,该模块通过在多个尺度上探索卷积特征并结合图像级特征,用于编码全局上下文。

3、独特优势

1、多尺度上下文捕获

通过在不同配置中使用空洞卷积,DeepLabv3能够从多个尺度捕获上下文信息,这对于准确分割不同大小的对象至关重要。

2、高效密集特征提取

空洞卷积使得模型能够在不需要额外参数或计算资源的情况下提取密集特征图,提高了部署效率。

3、性能提升

ASPP与图像级特征的结合显著提高了模型性能,使其在PASCAL VOC 2012等基准数据集上与其他最先进方法竞争。

4、灵活性和泛化能力

DeepLabv3的框架是通用的,可以应用于任何网络架构,为适应不同的分割任务提供了灵活性。

4、代码

from torch import nn
import torch
import torch.nn.functional as F# 定义一个包含空洞卷积、批量归一化和ReLU激活函数的子模块
class ASPPConv(nn.Sequential):def __init__(self, in_channels, out_channels, dilation):modules = [# 空洞卷积,通过调整dilation参数来捕获不同尺度的信息nn.Conv2d(in_channels, out_channels, 3, padding=dilation, dilation=dilation, bias=False),nn.BatchNorm2d(out_channels),  # 批量归一化nn.ReLU()  # ReLU激活函数]super(ASPPConv, self).__init__(*modules)# 定义一个全局平均池化后接卷积、批量归一化和ReLU的子模块
class ASPPPooling(nn.Sequential):def __init__(self, in_channels, out_channels):super(ASPPPooling, self).__init__(nn.AdaptiveAvgPool2d(1),  # 全局平均池化nn.Conv2d(in_channels, out_channels, 1, bias=False),  # 1x1卷积nn.BatchNorm2d(out_channels),  # 批量归一化nn.ReLU())  # ReLU激活函数def forward(self, x):size = x.shape[-2:]  # 保存输入特征图的空间维度x = super(ASPPPooling, self).forward(x)# 通过双线性插值将特征图大小调整回原始输入大小return F.interpolate(x, size=size, mode='bilinear', align_corners=False)# ASPP模块主体,结合不同膨胀率的空洞卷积和全局平均池化
class ASPP(nn.Module):def __init__(self, in_channels, atrous_rates):super(ASPP, self).__init__()out_channels = 256  # 输出通道数modules = []modules.append(nn.Sequential(nn.Conv2d(in_channels, out_channels, 1, bias=False),  # 1x1卷积用于降维nn.BatchNorm2d(out_channels),nn.ReLU()))# 根据不同的膨胀率添加空洞卷积模块for rate in atrous_rates:modules.append(ASPPConv(in_channels, out_channels, rate))# 添加全局平均池化模块modules.append(ASPPPooling(in_channels, out_channels))self.convs = nn.ModuleList(modules)# 将所有模块的输出融合后的投影层self.project = nn.Sequential(nn.Conv2d(5 * out_channels, out_channels, 1, bias=False),  # 融合特征后降维nn.BatchNorm2d(out_channels),nn.ReLU(),nn.Dropout(0.5))  # 防止过拟合的Dropout层def forward(self, x):res = []# 对每个模块的输出进行收集for conv in self.convs:res.append(conv(x))# 将收集到的特征在通道维度上拼接res = torch.cat(res, dim=1)# 对拼接后的特征进行处理return self.project(res)# 示例使用ASPP模块
aspp = ASPP(256, [6, 12, 18])
x = torch.rand(2, 256, 13, 13)
print(aspp(x).shape)  # 输出处理后的特征图维度

相关文章:

  • TI 毫米波雷达走读系列—— 3DFFT及测角
  • 疫菌QBD案例
  • Spring-rabbit重试消费源码分析
  • 低温对MOSFET的影响
  • SpringBoot打包运行原理和加载机制原理
  • 篇章六 论坛系统——业务开发——实现业务功能
  • JUC核心解析系列(四)——同步工具类 (Synchronizers)深度解析
  • Pytorch 卷积神经网络参数说明一
  • OSGI 是什么,有哪些具体应用、java8、9、10、11比较
  • uni-app项目实战笔记11--定义scss颜色变量方便页面引用
  • HarmonyOS 组件复用 指南
  • [直播推流] 使用 librtmp 库推流
  • 开心灿烂go开发面试题
  • C++/OpenCV地砖识别系统结合 Libevent 实现网络化 AI 接入
  • 雪豹速清APP:高效清理,畅享流畅手机体验
  • 【C++进阶篇】哈希的应用(位图)
  • 代码随想录算法训练营day4
  • Verilog自适应位宽与指定位宽不同导致模块无法正常执行
  • CMake 构建系统概述
  • CAD中DWG到DXF文件解析(一)
  • 西安网站建设罗鑫/核酸检测最新消息
  • 办公家具网站模版/中国足彩网竞彩推荐
  • 简单网页代码html作业/搜索关键词优化
  • 简单的网站制作/友情链接交换要注意哪些问题
  • wordpress密码可见不跳转/合肥seo管理
  • 做淘宝客网站一定要备案吗/软文范例100例