P某的备忘录

HSI-SR by BA through GAN 文章评析

HSI-SR by BA through GAN 文章评析

封面图片 credit: From Jiaojiao Li et al.
如题,本P在众多巨坑中又要开一个新坑辣,这个新坑将专门用来讲学科动态的文章。和之前的「用几分钟就能了解的神经网络」一样,是打算长期维护的一个项目。由于本P才疏学浅,难免会作出不准确的判断,所以一些感想什么的……参考参考就好了。

0x00 背景

背景:由于硬件的限制,如数据量、信噪比(SNR)和相机成本等,高空间分辨率的高光谱图片(HSI)不能直接获取,因此,所获得的HSI总是具有相对较低的空间分辨率,这限制了其实际应用。

创新:
(1)利用了基于超分辨率(SR)的对抗性学习方式训练生成高分辨率的HSI图像。输入参数仅需对应HSI图像的低分辨率(LR)版本。这是第一篇将对抗性学习方式运用在HSI的SR问题上的文章。
(2)考虑到光谱失真问题,提出了一种新型的光谱注意力机制,可以有效探索光谱频段之间的相关性,有利于最终结果的光谱一致性。
(3)提出了一系列新颖的空间-光谱约束或损失函数,如余弦损失、适应的三维全变分损失(我字面意思直译的,没懂)(TV, total variation loss)和对抗性损失。这些损失施加在训练阶段,可以有效指导网络训练。

0x01 新的技术原理

**GAN:**咱是做超分辨的,之前对GAN一窍不通,那这玩意是个啥呢?本P觉得就是抄作业和查作业的区别。这玩意有两个子网络,一个是生成网络(Generator Network, GN),另一个是判别网络(Discriminator Network, DN)。生成网络顾名思义就是专门用来生成东西的玩意,这个例子就是学渣拿学霸的作业抄;判别网络也顾名思义就是专门检查东西的玩意,这个例子中就是老师的角色。

一开始固定DN,训练GN。在这个例子中就是:学渣一开始只会硬抄学霸作业,老师固定只会一种辨认方式。一开始,老师一认就认出来了,于是立刻把学渣揪出来罚抄一百遍,后面学渣努力学习造假技术学会了不但抄学霸答案还会对照书本参考答案,并且能和标准答案相似度非常近似,结果老师就认不出来了(

第二部分是固定GN,训练DN。也就是上个步骤的调换攻守互换。在已经学会比较好的造假技术后,固定抄作业这一方的造假能力,训练老师的辨认能力,比如不但从答案本身,还去辨认字迹等等……结果到了最后老师炼成了火眼金睛,学渣比较好的造假能力都没用了(

用大白话讲,这个玩意就是一个猫抓老鼠游戏。双方不断切磋不断提升。

注意力机制:神经网络的注意力机制咱听了很多了但一直没去深挖,借这篇文章看看,大概讲的是在多光谱图像中,每个波段的训练通过人 为构造了一种注意力机制(说白了就是加权又加权),这样训练的结果才更加比实际结果好。

……至于这个人 为,那就见仁见智了……比如这个图里面这篇文章(不是今天评析的文章)作者用了一个高通然后各种卷积得到了每个波段(band)的特征信息(说白了就是训练权重的权重),然后再和原来的输入相乘。(那么后面会怎样呢?贵读者rich的话可以实施 无 限 套 娃……

0x02 主要网络部分



如上就是如假包换的文章网络部分,乍一看就是普通的卷积加上之前说过的新玩意,结果本P 定 睛 一 看:

事 3 D 卷 积,w s l

顾名思义,就是把2D卷积核升了一个维度,卷积对象也变成3D了。具体是这么个过程:

不熟悉请去结合2D卷积看(

DN网络没啥好说,就是普通卷积,变成了3D(这也是本文的创新点)。

……至于GN嘛……那个注意力是重点之重点

把常规3D卷积略去后,我们看看那个 Band Attention Residual Block 部分。

前面卷了两下,后面的……首先做了平均池化……等等:

又 事 3 D 啊

嘛,池化之后,作者把每个波段组成的向量拆开分别1维卷积,然后过这激活函数那激活函数,最后直接点乘……吗?

什么鬼……广播机制?(直译)于是本P只好查资料

Broadcasting
In numpy the dimension requirements for elementwise operations are relaxed via a mechanism called broadcasting. Two matrices are compatible if the corresponding dimensions in each matrix (rows vs rows, columns vs columns) meet the following requirements:

  • The dimensions are equal, or
  • One dimension is of size 1

简单来说,本P觉得这玩意就是由于实际生产中点乘的两个矩阵维度不一致,强行拉出来的点乘方法,但必须满足被乘的两个矩阵有一个矩阵维度是1

举例:

a = np.array([
 [1],
 [2]
])
b = np.array([
 [3,4],
 [5,6]
])
c = np.array([
 [1,2]
])

# Same no. of rows
# Different no. of columns
# but a has one column so this works
a * b
[[ 3, 4],
 [10, 12]]

# Same no. of columns
# Different no. of rows
# but c has one row so this works
b * c
[[ 3, 8],
 [5, 12]]

总之,不够维度的直接照抄去凑啦( 震 撼 本 P

最后,是loss function问题。这家伙直接定义了一个新函数,我整个人都不好了(

0x03 数据集

数据集里面,拿了一个真实卫星传感器数据和一个合成数据然后放在网络里面各种跑。作者从卫星数据找了两组,合成数据找了一种。这里让本P感觉到模糊的是作者「selected a 144 ×\times 144 subregion」作为训练/测试区域而没有详细阐明到底是哪块位置是被选出来的。要知道,原图的空间分辨率一个是 610 ×\times 340,另一个是 1064 ×\times 715,第三个是 512 ×\times 512。我咋知道选哪里呢(

0x04 结果

和大多数论文一样,结果通过做了这个实验,那个实验,最后得出「我们的方法效果最好」。作者主要做了通常的QI实验,谱响应实验这种日常项目这里不再详述,本P觉得这个「fine tuning」验证实验还是可以一提的。从上一节可以知道,从卫星传感器获取的是两组数据,既然都是来自同一个摄像头传感器参数生成的一个数据,那么为什么不可以把两个数据集训练模型交叉使用呢?这里作者把第一组训练数据的0,60%,80%,100%模型用来给第二组模型作训练,同理把第二组训练数据的0,60%,80%,100%模型用来给第一组模型作训练。然后模型的效果(起码在数值上)得到了进一步提升。说着很容易,但理论上涉及把不同空间分辨率的图像处理,怎么做的呢?文章没提(

0x05 程序

没办法复现(
文章里面卷积核的关键参数&数据参数没给。

0x06 后话

文章读下去查了很多篇文档,也感谢@mbkotori帮助下,初入科研圈子的本P学到了很多目前领域外的东西。感叹一句隔行如隔山啊(

但,个人觉得,这种跨行文章一些初级专业名词不解释是因为该领域内的人都看得懂,外行人要查资料 也能看懂这个可以理解。但文里面不给代码关键步骤,这让文章的可信度打了一个大大的问号。(当然,本P可能太菜了完全不知道一些圈子里面约定俗成的东西(

Powered by Gridea. CopyRight 2018-2020 MrPeterJin's Media Dept.