Advertisement

深度学习论文: Refining activation downsampling with SoftPool及其PyTorch实现

阅读量:

Optimizing the activation downsampling process through the introduction of SoftPool及其对应的PyTorch implementation.该研究不仅提出了有效的SoftPool方法来优化激活池化过程,还提供了完整的Python实现细节,其中包括该研究中所涉及的关键技术参数和实验设置.此外,该工作还提供了一个详细的网络架构设计文档,其中包含所有必要的计算步骤和参数配置细节.具体而言,该研究采用了以下关键组件:(1)基于SoftPool的激活池化模块;(2)基于残差连接的网络结构;(3)基于Adam优化器的训练策略.这些组件通过协同作用实现了对原始图像信息的有效捕捉与深度特征的有效提取.此外,该研究还提供了一个详细的网络架构设计文档,其中包含所有必要的计算步骤和参数配置细节.具体而言,该研究采用了以下关键组件:(1)基于SoftPool的激活池化模块;(2)基于残差连接的网络结构;(3)基于Adam优化器的训练策略.这些组件通过协同作用实现了对原始图像信息的有效捕捉与深度特征的有效提取

1 概述

基于核的SoftPool方法,使用了激活值的 softmax 加权和。

在这里插入图片描述

特点:

  • SoftPool 操作具有良好的微分性质。
    • SoftPool 能够有效地保留大量激活描述特征,并保证较低的计算开销和占用内存。
    • 该方法对于小尺寸目标表现出较高的适应性,在处理大规模目标时效率有所降低。

2 Pool操作的各种变体

在这里插入图片描述

3 SoftPool

SoftPool实现比较简单,指数加权后经过MaxPool,最后归一化。

提出的SoftPool计算过程如下:

在这里插入图片描述

PyTorch代码:

复制代码
    import torch
    import torch.nn as nn
    
    class SoftPool1D(torch.nn.Module):
    def __init__(self,kernel_size=2,stride=2):
        super(SoftPool1D, self).__init__()
        self.avgpool = torch.nn.AvgPool1d(kernel_size,stride)
    
    def forward(self, x):
        x_exp = torch.exp(x)
        x_exp_pool = self.avgpool(x_exp)
        x = self.avgpool(x_exp*x)
        return x/x_exp_pool
    
    
    class SoftPool2D(nn.Module):
    def __init__(self, kernel_size=2, stride=2):
        super(SoftPool2D, self).__init__()
        self.avgpool = nn.AvgPool2d(kernel_size, stride)
    
    def forward(self, x):
        x_exp = torch.exp(x)
        x_exp_pool = self.avgpool(x_exp)
        x = self.avgpool(x_exp * x)
        return x / x_exp_pool
    
    
    class SoftPool3D(torch.nn.Module):
    def __init__(self,kernel_size,stride=2):
        super(SoftPool3D, self).__init__()
        self.avgpool = nn.AvgPool3d(kernel_size,stride)
    
    def forward(self, x):
        x_exp = torch.exp(x)
        x_exp_pool = self.avgpool(x_exp)
        x = self.avgpool(x_exp*x)
        return x/x_exp_pool
    
    
    if __name__=='__main__':
    model = SoftPool2D()
    print(model)
    
    input = torch.randn(1, 64, 56, 56)
    out = model(input)
    print(out.shape)
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

全部评论 (0)

还没有任何评论哟~