在这项工作中,我们提出了一个称为 TransWeather 的单编码器-单解码器变压器网络,以一次性解决所有恶劣天气去除问题。我们没有使用多个编码器,而是在转换器解码器中引入天气类型查询来学习任务(图 1 (c))。
在这里,多头自注意力机制将天气类型查询作为输入,并将其与从 transformer 编码器提取的特征中获取的键和值相匹配。这些天气类型嵌入与网络一起学习,以理解和调整图像中出现的天气退化类型。
使用卷积块将解码后的特征和从编码器获得的分层特征融合并投影到图像空间。因此,TransWeather 只需一个编码器和一个解码器来学习天气类型并生成清晰的图像。
与 CNN 相比,Transformers 擅长提取丰富的全局信息 [9]。然而,我们认为当补丁像 ViT [9] 中的那样大时,我们无法过多地关注补丁中的信息。像雨条、雨滴和雪这样的天气退化通常规模很小,因此在一个补丁中可能会出现多个伪影。
为此,我们提出了一种带有补丁内变换器(Intra-PT)块的新型变换器编码器。 Intra-PT 处理从原始补丁创建的子补丁,并挖掘较小补丁的特征和细节。因此,Intra-PT 专注于主要补丁内部的注意力,以有效消除天气退化。我们使用高效的自注意力机制来计算子补丁之间的注意力以保持低计算复杂度。
Intra-PT 块有助于提取精细细节,有助于在我们对较小的补丁进行操作时消除较小的退化。请注意,除了在图像级别完成的第一阶段外,Intra-PT 块在特征级别创建补丁。 Intra-PT 块的输出自注意特征被添加到同一阶段主块的自注意特征。
我们定义天气类型查询来解码任务,预测任务特征向量并使用它来恢复干净的图像。这些天气类型查询是可学习的嵌入,它们与我们网络的其他参数一起学习。这些查询涉及变压器编码器的特征输出。这里的转换器解码器在单级运行,但有多个块。
我们在图 3 中说明了转换器解码器块。这些转换器块类似于编码器解码器转换器块 [50]。与 Q、K 和 V 从同一输入中获取的自注意力变换器块不同,这里的 Q 是天气类型可学习嵌入,而 K 和 V 是从变换器编码器的最后阶段获取的特征。输出的解码特征表示任务特征向量,并与在每个阶段通过 transformer 编码器提取的特征融合。所有这些特征都被转发到卷积尾以重建干净的图像。
天气查询能学到什么?
天气查询是嵌入,它了解图像中存在哪种类型的退化。这些查询有助于预测相应的任务向量,这有助于注入任务信息以获得更好的预测。
代码中self.task_query = nn.Parameter(torch.randn(1,48,dim))
TransWeather 在一些受强降雨影响的真实世界图像中表现不佳。这可以理解为有时真实的雨水在条纹大小和强度方面有很大差异并且难以建模。此外,如果雨的强度很大,当它打在场景中的物体或人的表面时会产生飞溅效果。消除这种飞溅效果仍然是包括 TransWeather 在内的所有方法的一个限制。