CoordAtt注意力网络结构

源码:

python 复制代码
import torch
import torch.nn as nn
import math
import torch.nn.functional as F

class h_sigmoid(nn.Module):
    def __init__(self, inplace=True):
        super(h_sigmoid, self).__init__()
        self.relu = nn.ReLU6(inplace=inplace)

    def forward(self, x):
        return self.relu(x + 3) / 6

class h_swish(nn.Module):
    def __init__(self, inplace=True):
        super(h_swish, self).__init__()
        self.sigmoid = h_sigmoid(inplace=inplace)

    def forward(self, x):
        return x * self.sigmoid(x)

class CoordAtt(nn.Module):
    def __init__(self, inp, oup, reduction=32):
        super(CoordAtt, self).__init__()
        self.pool_h = nn.AdaptiveAvgPool2d((None, 1))
        self.pool_w = nn.AdaptiveAvgPool2d((1, None))

        mip = max(8, inp // reduction)

        self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0)
        self.bn1 = nn.BatchNorm2d(mip)
        self.act = h_swish()
        
        self.conv_h = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)
        self.conv_w = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)
        

    def forward(self, x):
        identity = x
        
        n,c,h,w = x.size()
        x_h = self.pool_h(x)
        x_w = self.pool_w(x).permute(0, 1, 3, 2)

        y = torch.cat([x_h, x_w], dim=2)
        y = self.conv1(y)
        y = self.bn1(y)
        y = self.act(y) 
        
        x_h, x_w = torch.split(y, [h, w], dim=2)
        x_w = x_w.permute(0, 1, 3, 2)

        a_h = self.conv_h(x_h).sigmoid()
        a_w = self.conv_w(x_w).sigmoid()

        out = identity * a_w * a_h

        return out



def CA_onnx_gen():
    conv=CoordAtt(64,64)
    dummy_input = torch.randn(8,64, 128, 128)
    out=conv(dummy_input)
    print(out.shape)
 
    print(conv)
    # conv.load_state_dict(checkpoint)
    conv.eval()
    input_names = ["input"]
    output_names = ["output"]
    torch.onnx.export(conv, dummy_input, "CA.onnx", verbose=True, opset_version=13,input_names=input_names,
                      output_names=output_names)


if __name__=="__main__":
    CA_onnx_gen()

onnx结构:

相关推荐
DongQiShanRen23 分钟前
裁决台账双向互校(中):五向一致性链——②向解读与③向实现
人工智能·深度学习·自然语言处理·集成学习·vllm
ctlover31 分钟前
Pandas进阶
人工智能·机器学习·pandas
LaughingZhu41 分钟前
Product Hunt 每日热榜 | 2026-10-03
人工智能·深度学习·神经网络·搜索引擎·百度
YOLO数据集集合1 小时前
江西九江地区洪涝无人机高分辨率影像数据集 | 洪涝监测 语义分割 无人机遥感 淹没识别 灾害评估9157期
人工智能·yolo·目标检测·无人机·洪涝·洪水灾害
DongQiShanRen2 小时前
裁决台账双向互校(下):台账哈希链、三向对账与最小落地
人工智能·深度学习·算法·目标跟踪·自然语言处理·rust·哈希算法
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-10-02
数据库·人工智能·深度学习·神经网络·搜索引擎
听风吹等浪起2 小时前
第22章:YOLOv5船舶目标检测+注意力模块改进对比,卫星遥感船舶识别实战
人工智能·yolo·目标检测
深度之眼2 小时前
深度学习研0研1如何正确 “阅读文献” ?分享 “3步高效阅读法” !
人工智能·深度学习
袖清暮雨2 小时前
机器学习之K近邻算法(KNN)
人工智能·机器学习·近邻算法
Asa121383 小时前
Nature Microbiology|不依赖系统发育的机器学习框架从基因组预测菌株水平噬菌体—宿主互作
人工智能·机器学习