ABAP BP屏幕增强

1、 BUT000表增强CI_EEW_BUT000,CI_EEW_BUT000_X



2、 创建增强结构ZSBUT00_CUST,该结构在DSAVB事件中,会被使用到

3、 创建函数组ZSD_BP,增强相关的程序必须全部放在该程序中,包括函数、屏幕、变量

4、 在ZSD_BP的include top中定义变量如下:

5、 创建屏幕9001,屏幕字段从表BUT000直接F6生成,命名格式必须为BUT000-XXXXX


6、9001屏幕的PBO、PAI如下


6、 屏幕增强配置,进入TCODE: BUPT 

7、 创建应用程序



8、 创建数据集



9、 创建字段组



10、 创建视图




11、 创建PBO函数无输入输出参数

function zsd_but000_pbo.
*"----------------------------------------------------------------------
*"*"本地接口:
*"-------------------------------------------------------------------
  data:
    lt_but000   type table of but000.

* step 1: request data from xo for dynpro structure
  "if gs_but000 is initial.
    cvi_bdt_adapter=>data_pbo(
      exporting
        i_table_name = table_name_but000
      importing
        e_data_table = lt_but000[]
    ).
  "endif.

  if lt_but000[] is initial.
    clear gs_but000.
  else.
    read table lt_but000 into gs_but000 index 1.
  endif.


endfunction.

12、 创建PAI函数,无输入输出参数

function zsd_but000_pai.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
  data:
      lt_but000         type table of but000.
  field-symbols:
    <but000>          like line of lt_but000.

  check cvi_bdt_adapter=>is_direct_input_active( ) = false.
* step 1: update xo memory from dypro structure
  cvi_bdt_adapter=>get_current_bp_data(
    exporting
      i_table_name = table_name_but000
    importing
      e_data_table = lt_but000[]
  ).

  if lt_but000[] is initial.
    if gs_but000 is not initial.
      gs_but000-partner = cvi_bdt_adapter=>get_current_bp( ).
      append gs_but000 to lt_but000.
    endif.
  else.
    read table lt_but000 assigning <but000> index 1.
    <but000>-zbpmid = gs_but000-zbpmid.
    assign gs_but000 to <but000>.
  endif.

  cvi_bdt_adapter=>data_pai(
    i_table_name = table_name_but000
    i_data_new   = lt_but000[]
    i_validate   = false
  ).
endfunction.

13、 将程序名、屏幕号、PBO、PAI函数分配给视图

14、 创建部分



15、 给部分分配视图

16、 创建屏幕


17、 屏幕->部分

18、 创建屏幕顺序








19、 业务伙伴视图




20、定义事件







<think>好的,我现在需要处理用户关于金字塔分割注意力模块(PSA)的查询。用户希望了解相关概念、实现方法、代码或论文。首先,我得回忆一下之前提供的引用内容,确保信息准确。 首先,引用[1]提到EPSANet是基于CenterNet的目标检测,使用了金字塔分割注意力模块。引用[3]和[4]详细描述了PSA的结构,分为四个步骤:SPC模块分割多尺度特征,SEWeight提取注意力,Softmax重新校准,最后元素积融合。用户可能需要具体的步骤解释和代码实现。 接下来,我需要整理这些信息,确保符合用户的要求。用户可能需要知道PSA如何提高效率,比如多尺度特征的处理和注意力机制的结合。根据引用[4],PSA模块通过分割和拼接获得多尺度特征,然后应用SEWeight模块提取注意力,再通过Softmax调整权重,最后融合。这应该分步骤解释清楚。 关于实现代码,用户可能期望看到PyTorch的示例代码。我需要参考引用[4]中的步骤来构建代码结构,比如SPC模块可能使用不同卷积核的分组卷积,分割后拼接,然后SEWeight生成注意力向量,应用Softmax,最后相乘合并。要注意通道数的调整,确保各步骤正确衔接。 论文方面,用户需要知道EPSANet的论文名称和作者,以及开源链接。引用[1]和[2]都提到了EPSANet的论文题目,需要正确引用。同时,开源代码可能在GitHub上,可以附上链接。 用户可能还会对PSA的优势和应用感兴趣,比如即插即用、多尺度特征融合、高效性等,这些在引用[3]和[4]中有提到,需要总结出来。 最后,生成的相关问题需要围绕PSA的结构、优势、与其他注意力的对比、具体应用展开,帮助用户进一步探索。需要确保问题有针对性,引导用户深入理解。 现在需要检查是否所有信息都准确,没有遗漏关键步骤,代码是否符合PyTorch的常见写法,比如使用nn.Module,正确使用卷积和激活函数。同时确保引用标识正确对应,比如[^1]、[^3]、[^4]的来源是否准确。 总结来说,回答应分模块结构、实现步骤、代码示例、论文信息、优势应用,并附相关问题。确保用中文,LaTeX格式正确,变量用$符号,独立公式用$$,如SPC模块中的卷积操作可能需要数学表达式。例如,分割后的特征图尺寸变化可能需要用公式表示,但用户示例中未使用,可能不需要太复杂。保持回答清晰易懂,符合用户需求。</think>### 金字塔分割注意力模块(PSA)详解 #### 1. **核心概念** 金字塔分割注意力(Pyramid Split Attention, PSA)是一种高效的多尺度通道注意力机制,通过**金字塔特征分割**和**动态权重校准**增强卷积神经网络的表达能力。其核心思想是通过多尺度特征融合和通道注意力重标定,提升模型对关键特征的捕捉能力[^3][^4]。 --- #### 2. **模块结构与实现步骤** PSA模块主要分为以下四个步骤(参考图3结构): 1. **分割与拼接(SPC)** 输入特征图$X \in \mathbb{R}^{C \times H \times W}$,通过不同卷积核的分组卷积(如$3\times3$, $5\times5$等)生成多尺度特征,再沿通道维度拼接,得到多尺度特征图$F_{multi} \in \mathbb{R}^{kC \times H \times W}$($k$为尺度数量)。 2. **通道注意力提取(SEWeight)** 对每个尺度的子特征图分别应用SE(Squeeze-and-Excitation)模块,生成通道注意力向量$A_i \in \mathbb{R}^{C}$,公式为: $$ A_i = \sigma(W_2 \cdot \delta(W_1 \cdot \text{GAP}(F_i))) $$ 其中$\text{GAP}$为全局平均池化,$\delta$为ReLU,$\sigma$为Sigmoid,$W_1, W_2$为全连接层权重。 3. **权重重新校准(Softmax)** 对不同尺度的注意力向量进行Softmax归一化,确保权重总和为1: $$ \hat{A}_i = \frac{\exp(A_i)}{\sum_{j=1}^k \exp(A_j)} $$ 4. **特征融合** 将校准后的权重与对应特征图进行元素级乘积,再沿通道维度拼接,输出精细化特征$Y \in \mathbb{R}^{C \times H \times W}$。 --- #### 3. **PyTorch实现代码示例** ```python import torch import torch.nn as nn class PSA(nn.Module): def __init__(self, in_channels, reduction=4, scales=[3,5,7]): super().__init__() self.scales = scales self.conv_groups = [nn.Conv2d(in_channels, in_channels, kernel_size=s, padding=s//2, groups=in_channels) for s in scales] self.se_weights = nn.ModuleList([ nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Conv2d(in_channels, in_channels // reduction, 1), nn.ReLU(), nn.Conv2d(in_channels // reduction, in_channels, 1), nn.Sigmoid() ) for _ in scales ]) self.softmax = nn.Softmax(dim=1) def forward(self, x): b, c, h, w = x.size() # Step 1: 多尺度特征拼接 multi_scale = [conv(x) for conv in self.conv_groups] multi_scale = torch.cat(multi_scale, dim=1) # [b, k*c, h, w] # Step 2: 提取各尺度注意力权重 attns = [se(x) for se in self.se_weights] attns = torch.cat(attns, dim=1) # [b, k*c, 1, 1] # Step 3: Softmax权重校准 attns = attns.view(b, len(self.scales), c) attns = self.softmax(attns) # [b, k, c] # Step 4: 加权融合 multi_scale = multi_scale.view(b, len(self.scales), c, h, w) out = (multi_scale * attns.unsqueeze(-1).unsqueeze(-1)).sum(dim=1) return out ``` --- #### 4. **关键论文与资源** - **论文**: [^1][^2] *EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network*(CVPR 2021) 作者:Zhang et al. 链接:https://arxiv.org/abs/2105.14447 - **开源代码**: GitHub仓库:https://github.com/jiangtao2016/EPSANet --- #### 5. **优势与应用场景** 1. **即插即用**:可直接嵌入ResNet、YOLOv5等主流网络。 2. **多尺度特征融合**:通过金字塔分割增强模型对复杂场景的适应性。 3. **高效性**:相比SENet,计算量降低约30%。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值