SPAN: Spatial Pyramid Attention Network for Image Manipulation Localization

本文介绍了一个基于Spatial Pyramid Attention Network (SPAN) 的图像操纵定位方法,该网络来源于USC、IIT和Facebook AI的研究。文章指出,SPAN模型需要至少两个GPU来运行,且未提供requirement.txt,这给单GPU用户带来了困难。网络结构包括预训练的Mantra Net特征提取器和5个Self-Attention Blocks,其中Self-Attention Block被解释为一种特殊的卷积层,能够捕获像素邻域的信息。代码链接和作者的不厚道行为也在讨论之中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SPAN: Spatial Pyramid Attention Network for Image Manipulation
Localization

  • University of Southern California, Los Angeles, USA
  • Indian Institute of Technology, Bombay, Mumbai, India
  • Facebook AI, Menlo Park, USA

ECCV 2020

在这里插入图片描述

代码链接

https://github.com/ZhiHanZ/IRIS0-SPAN/blob/d8e4241f151ef2f40eacbb970fe5e3f531c6a4b4/README.md

不过这个作者提供的权重是多gpu的,准确来说是2个GPU,没有这个资源用他这个训练好的模型。受不了。这个作者也是不厚道。使用的tensorflow的框架。
这个代码整了两天没跑起来。生气


这个作者的不厚道有2点

  • 至少配备2个GPU才能够使用这个模型。给multi gpu训练的模型是一种很糟糕的行为,根本就没打算让大多数人测试。
  • 没有提供requirement.txt.

网络框架

在这里插入图片描述
这个 pre-trained feature extracion 使用的是mantra net 的预训练模型,训练时候冻结。

后接5个self attention block.

这个self attention有些玄妙。

self attention block

在这里插入图片描述
不知道有没有理解错。
只需要理解成特殊的卷积层即可。
输入输出的矩阵大小没有变化。

中间层把D通道转为了9D通道(假设了n=1,为8邻域。)
9D为自身以及周围的8个点。为原本的通道数*9.

这个玄妙的地方大概在于 能够把一个像素点为中心的周围(2n+1)*(2n+1)邻域之内的所有像素的信息全部接收到一个对应点。

本来这东西是NLP领域提出的,不使用RNN,就得到时间顺序信息。图像和语言还是有些差别的。语言中的语言顺序和图像的邻域或许是等价的吧。

这是抄的这个作者的tensorflow 代码

基本和此图的结果相同,可能卷积层的数量稍微有点出入。
在这里插入图片描述

self attention 代码

from keras.engine.topology import Layer
import tensorflow as tf
import keras
from matplotlib.image import imread, imsave
from keras import backend as K


class PixelAttention(Layer):
    def __init__(self, kernel_range=[3, 3], shift=1, ff_kernel=[3, 3], useBN=False, useRes=False, **kwargs):
        self.kernel_range = kernel_range  # should be a list
        self.shift = shift
        self.ff_kernel = ff_kernel
        self.useBN = useBN
        self.useRes = useRes
        super(PixelAttention, self).__init__(**kwargs)

    def build(self, input_shape):
        D = input_shape[-1]
        n_p = self.kernel_range[0] * self.kernel_range[1]
        self.K_P = self.add_weight(name='K_P', shape=(1, 1, D, D * n_p),
                                   initializer='glorot_uniform',
                                   trainable=True)
        self.V_P = self.add_weight(name='V_P', shape=(1, 1, D, D * n_p),
                                   initializer='glorot_uniform',
                                   trainable=True)
        self.Q_P = self.add_weight(name='Q_P', shape=(1, 1, D, D),
                                   initializer='glorot_uniform',
                                   trainable=True)

        self.ff1_kernel = self.add_weight(name='ff1_kernel',
                                          shape=(3, 3, D, D),
                                          initializer='glorot_uniform', trainable=True)
        self.ff1_bais = self.add_weight(name='ff1_bias',
                                        shape=(D,), initializer='glorot_uniform', trainable=True)
        self.ff2_kernel = self.add_weight(name='ff2_ke
### 多尺度空间金字塔注意力机制的有效方法 #### 关键概念解析 多尺度空间金字塔注意力机制通过引入不同尺度的感受野来捕捉图像中的特征,从而提高模型对复杂场景的理解能力。这种机制通常结合卷积神经网络(CNN),利用多个分支处理同一输入的不同分辨率版本。 #### 实现细节 为了有效地应用多尺度空间金字塔注意力机制,在每个块级别计算来自各个分支生成的特征图加权平均值[^1]。权重由学习到的标量参数决定,这些参数指示相对于其他映射而言应关注的程度。此过程允许模型自适应地聚焦于重要的局部区域,而忽略不那么相关的部分。 对于具体实现方式之一——CBAM模块,则进一步区分了通道维度上的注意力建模以及空间位置上的建模,并且两者之间采用串联结构依次执行[^2]。值得注意的是,在实际操作过程中,可以同时运用最大池化与均值池化的策略获取全局上下文信息。 此外,当涉及到语义分割任务时,有研究指出使用硬标签而非软标签能够提升存储效率及训练速度[^4]。这意味着尽管某些情况下可能损失了一定程度的概率分布表达力,但在特定应用场景下依然可以获得性能优势。 ```python import torch.nn as nn class MultiScaleSpatialPyramidAttention(nn.Module): def __init__(self, channels): super(MultiScaleSpatialPyramidAttention, self).__init__() # 定义不同的感受野大小 self.branches = nn.ModuleList([ nn.Conv2d(channels, channels, kernel_size=3, padding=dilation, dilation=dilation) for dilation in [1, 2, 4] ]) def forward(self, x): attentions = [] for branch in self.branches: atten_map = branch(x).sigmoid() attentions.append(atten_map * x) out = sum(attentions) / len(attentions) return out ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值