首页 > 其他分享 >SFMA(提取全局和局部特征 并进行简单的融合)

SFMA(提取全局和局部特征 并进行简单的融合)

时间:2024-11-17 18:59:01浏览次数:1  
标签:__ dim 提取 nn self torch SFMA 全局 Conv2d

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


class DMlp(nn.Module):
    '''
    用来提取局部特征
    '''
    def __init__(self, dim, growth_rate=2.0):
        super().__init__()
        hidden_dim = int(dim * growth_rate)
        self.conv_0 = nn.Sequential(
            nn.Conv2d(dim,hidden_dim,3,1,1,groups=dim),
            nn.Conv2d(hidden_dim,hidden_dim,1,1,0)
        )
        self.act =nn.GELU()
        self.conv_1 = nn.Conv2d(hidden_dim, dim, 1, 1, 0)

    def forward(self, x):
        x = self.conv_0(x)
        x = self.act(x)
        x = self.conv_1(x)
        return x


class SMFA(nn.Module):
    '''
    或许能代替自注意力 用来提取全局特征  这个里面也包括了局部特征的提取
    '''
    def __init__(self, dim=36):
        super(SMFA, self).__init__()
        self.linear_0 = nn.Conv2d(dim,dim*2,1,1,0)
        self.linear_1 = nn.Conv2d(dim,dim,1,1,0)
        self.linear_2 = nn.Conv2d(dim,dim,1,1,0)

        self.lde = DMlp(dim,2)

        self.dw_conv = nn.Conv2d(dim,dim,3,1,1,groups=dim)

        self.gelu = nn.GELU()
        self.down_scale = 8

        self.alpha = nn.Parameter(torch.ones((1,dim,1,1)))
        self.belt = nn.Parameter(torch.zeros((1,dim,1,1)))

    def forward(self, f):
        _,_,h,w = f.shape
        y, x = self.linear_0(f).chunk(2, dim=1)  # 输入信息 通道翻倍 然后按通道分成两部分 x y
        x_s = self.dw_conv(F.adaptive_max_pool2d(x, (h // self.down_scale, w // self.down_scale)))  #  x 进行最大池化和深度卷积 全局特征
        x_v = torch.var(x, dim=(-2,-1), keepdim=True)  # x 统计空间信息的差异
        # 全局信息和空间信息差异 加权融合   1*1的卷积融合通道信息 激活函数 再通过插值调整到和x相同 然后与x相乘
        x_l = x * F.interpolate(self.gelu(self.linear_1(x_s * self.alpha + x_v * self.belt)), size=(h,w), mode='nearest')
        y_d = self.lde(y)  # 倒残差结构  这个就是局部信息模块
        # 处理之后的x和y再通过加法和1*1的卷积融合
        return self.linear_2(x_l + y_d)

if __name__ == '__main__':
    block = SMFA(dim=32)
    input = torch.rand(1, 32, 64, 64)
    output = block(input)
    print(input.size())
    print(output.size())

标签:__,dim,提取,nn,self,torch,SFMA,全局,Conv2d
From: https://www.cnblogs.com/plumIce/p/18550900

相关文章

  • 批量提取当前文件夹pdf书籍目录
    importfitz#PyMuPDFimportpandasaspdimportos#获取当前文件夹中所有的PDF文件pdf_files=[fforfinos.listdir('.')iff.endswith('.pdf')]#提取目录信息的函数defextract_toc(toc,toc_list,level=0):foritemintoc:#确保目录项至少......
  • WPF如何全局应用黑白主题效果
    灰白色很多时候用于纪念,哀悼等。那么使用WPF如何来做到这种效果呢?要实现的这种效果,我们会发现,它其实不仅仅是要针对图片,而是要针对整个窗口来实现灰白色。如果只是针对图片的话,我可以可以对图片进行灰阶转换,即可达到灰色效果。以下是图片转灰阶的代码,当然方法不仅仅是这一种......
  • 美团商家联系电话采集软件团购外卖信息批量提取器
    定义目标:明确需要采集的数据,如商家名称、地址、评分、销量等。分析页面结构:通过浏览器的开发者工具,分析美团团购或外卖页面的HTML结构,找出包含所需数据的标签。模拟用户请求:使用requests库模拟用户访问美团页面,可能需要处理登录、反爬虫机制(如Cookies、Headers、验证码等)。解析......
  • go fiber:全局中间件添加排除的path
    一,代码:全局中间件对所有的api生效,如果有个别不想应用全局中间件的api,则需要从代码中进行排除:例如:支付宝或微信的回调接口packagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2""regexp")funcApiSign(c*fiber.Ctx)error{//得到当前url ......
  • go fiber: 多个全局中间件的执行顺序
    一,代码:middleware.gopackagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2")funcMiddle1(c*fiber.Ctx)error{ fmt.Println("middle1before") err:=c.Next() fmt.Println("middle1after") returnerr}......
  • opencv 之 图像处理与透视变换:从发票图片提取有效信息
    摘要在日常生活中,发票的处理是一项常见的任务。然而,由于拍摄角度、光线等因素的影响,直接从照片中提取发票信息往往存在困难。本文将介绍如何使用OpenCV库进行图像处理和透视变换,从而有效地从发票图片中提取有用信息。我们将通过一个具体的例子,展示如何从一张发票图片中提取出......
  • 百度爱采购商家电话采集软件,卖家联系方式批量提取工具
    百度爱采购商家电话采集软件,卖家联系方式批量提取工具`以下是一个简单的示例脚本,用于从模拟的简单网页结构(假设类似百度爱采购商家展示页面的简单结构)中提取商家联系方式(这里仅为示例,实际百度爱采购的页面结构复杂得多且有反爬机制,未经授权爬取是违反规定的哦,此示例仅用于学习理......
  • ISO数据提取(ISO_9660)
    iso_extractor.h#pragmaonce#include<vector>#include<string>#include<fstream>#definePATH_SEPARATOR_WIN("\\")#definePATH_SEPARATOR_UNIX("/")typedefstruct_iso_primary_vol_desciso_pri......
  • Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件
    本文将介绍一种手动的轻量级的方式,还原HTTP/TLS协议中传输的文件,为流量数据包中的文件分析提供帮助。如果捕获的数据包中存在非文本类文件,例如png,jpg等图片文件,或者word,Excel等office文件异或是其他类型的二进制文件或者编码文件。如果想要了解这些非文本文件中的内容,往往......
  • 【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】
    目录一、全局锁二、表级锁    1.表锁    2.元数据锁    3.意向锁三、行级锁    1.行锁        2.间隙锁        3.临建锁锁是处理并发情况下,对数据的一致性的关键因素,也是并发情况下对效率影响非常大的。1、......