ASPP模块公式
时间: 2025-08-05 14:38:57 浏览: 7
### ASPP模块在深度学习图像分割中的应用
ASPP (Atrous Spatial Pyramid Pooling) 是一种用于捕捉不同尺度上下文信息的有效机制。该模块通过并行使用多个具有不同膨胀率的空洞卷积来实现这一点[^4]。
具体来说,假设输入特征图 \( X \in R^{H\times W\times C} \),则ASPP可以表示为:
\[ Y_i = f_{\text{conv}}(X, w_i, r_i), i=1,\ldots,n \]
其中,
- \(Y_i\) 表示第i个分支输出;
- \(f_{\text{conv}}(\cdot)\) 表示带有权重\(w_i\)和膨胀率\(r_i\)的空洞卷积操作;
- n代表ASPP中平行路径的数量。
为了融合来自各个分支的信息,通常会采用逐元素相加或者拼接的方式得到最终输出:
\[ Z=\sum^n_{i=1}{g(Y_i)} \quad 或者 \quad Z=[Y_1;...;Y_n] \]
这里\( g(\cdot) \)可能是简单的恒等映射或者是额外的一层变换函数;而`[]`表示通道维度上的级联操作。
此外,在实际部署时,还会加入全局平均池化(global average pooling)作为其中一个分支,以便更好地获取全局背景信息。
```python
import torch.nn as nn
class ASPP(nn.Module):
def __init__(self, in_channels, out_channels, rates=(6, 12, 18)):
super().__init__()
self.branches = nn.ModuleList([
nn.Conv2d(in_channels=in_channels,
out_channels=out_channels,
kernel_size=3,
dilation=r,
padding=r)
for r in rates])
# Global Average Pooling branch
self.global_avg_pool = nn.Sequential(
nn.AdaptiveAvgPool2d((1, 1)),
nn.Conv2d(in_channels, out_channels, kernel_size=1),
nn.ReLU(),
nn.Upsample(scale_factor=16, mode='bilinear', align_corners=True))
self.conv_out = nn.Conv2d(out_channels * (len(rates)+1), out_channels, kernel_size=1)
def forward(self, x):
res = []
for conv in self.branches:
res.append(conv(x))
global_feat = self.global_avg_pool(x)
res.append(global_feat.expand_as(res[-1]))
return self.conv_out(torch.cat(res, dim=1))
```
阅读全文
相关推荐



















