这里主要介绍两篇论文。
Polarimetric SAR Image Classification Using Deep Convolutional Neural Networks
基本信息
- 文章名称:Polarimetric SAR Image Classification Using Deep Convolutional Neural Networks
- 年份:2016
- 期刊:IEEE Geoscience & Remote Sensing Letters
- 标签:PolSAR
- 数据:PolSAR图像数据
创新点
- 将CNN引入到PolSAR图像分类中,将极化协方差矩阵或者极化相干矩阵转换为6维的实数向量。
- 在当时的各个数据集达到了state-of-the-art的性能。
主要过程
将$3 \times 3$的复数相干矩阵$T$采用如下方式映射到6维实数向量:
其中,$SPAN=T_{11}+T_{22}+T_{33}$,除了$A$之外,其余的都在理论上归一化到了$[0,1]$。
网络结构,其中第一个卷积层的padding=2:
实验结果
采用是Flevoland数据集,图像尺寸为$750 \times 1024$,空间分辨率为$6.6 \times 12.1m$。为了保持样本内的连续性,采用了如下选取样本的方式:
- 选择$m \times m$邻域内都为相同类别的样本作为中心像素点。中心像素点数量很多,只保留其中的p部分。
- 在中心点周围选择大小为$n \times n$的划窗作为样本,其类标为中心像素点的类标。
在实验中$m=3,n=8,p=10\%$。当$n$过大时,分类比较粗糙,当$n$过小时,网络参数量过少。另外,这里的$n=8$,不是奇数,因此实际上是中心点左和上分别取了4邻域,而右和下分别取了3邻域。
总样本数为13598,按照4:1的比例划分为训练集和验证集,也就是说有10817个训练样本,2781个验证样本。因为只有部分样本有标记,所以只在有标记的样本上计算准确率,如下所示:
在整张图上进行分类,结果如下所示:
PolSAR Image Classification Using Polarimetric-Feature-Driven Deep Convolutional Neural Network
基本信息
- 文章名称:PolSAR Image Classification Using Polarimetric-Feature-Driven Deep Convolutional Neural Network
- 年份:2018
- 期刊:IEEE Geoscience & Remote Sensing Letters
- 标签:PolSAR
- 数据:PolSAR图像数据
这篇论文其实看的不是很明白,因为其中涉及到了很多PolSAR数据本身的特征。
创新点
- 将PolSAR数据本身的很多特征引入到了CNN的输入中
- 在少量标记样本的情况下达到了state-of-the-art的性能
主要过程
Polarimetric Coherency Matrix and Rotation
PolSAR数据的相干矩阵如下:
为了更好的在rotation domain对目标散射矩阵进行考察,the coherency matrix can be extended to
the rotation domain along the radar line of sight,如下式,其中$R_3(\theta)$是旋转矩阵:
Classical Roll-Invariant Polarimetric Features
total backscattering power SPAN定义为:
相干矩阵$T$可以分解为:
PolSAR数据的三个典型极化特征包含the entropy $H$, mean alpha angle $\overline \alpha$,和 anisotropy $Ani$,定义如下:
其中,$P_n = \lambda_n/(\lambda_1+\lambda_2+\lambda_3)$,$\lambda_1,\lambda_2,\lambda_3$为特征值。
Hidden Polarimetric Features in Rotation Domain
这部分内容就更不知所云了,所以就不写了。
网络结构
输入图像的维度为$15 \times 15 \times m$,其中$m$为特征维度。这里一共有两个模型,第一个模型输入的特征为:roll-invariant polarimetric features of $H/\overline \alpha/Ani/SPAN$,two null angle parameters of $θ_{null_}Re[T_{12}]$,
and $θ_{null_}Im[T_{12}]$,模型记作$SF+CNN$。第二个模型的输入为$T_{11},T_{22},T_{33},Re[T_{12}],Im[T_{12}],Re[T_{13}],Im[T_{13}],Re[T_{23}],Im[T_{23}]$,模型记作$T_3+CNN$。
实验结果
训练样本的比例分别为10%,5%,1%,epoch个数分别为300,300,1500,All the used data sets are speckle filtered by the adaptive SimiTest approach with a 15 × 15 sliding window。各个类别的样本数如下所示:
分类结果如下:
收敛速度如下:
其实这篇论文,就是证明了我代码肯定是有问题的,但是问题出在什么地方,暂时还不清楚。
失败的尝试
除了超参数的调整之外,还尝试了如下一些方法
- 更换数据集,以及数据集比例
- 更换数据预处理方式,从9维实数向量到6维实数向量
- 更换特征提取网络,从一维卷积到二维卷积,加batchnorm、去掉bias、更改激活函数
- 更换划窗方式,从1x1到15x15,使用邻接信息
- 加载分类预训练权重,抽取倒数第二层的损失,然后去做相似性度量
- 度量网络损失计算:支撑集、查询集的所有损失;只计算查询集损失
- 更改度量网络特征嵌入的维度
- 直接使用Wishart距离,反向传播不回去,因为涉及到复数运算,考虑更换TensorFlow框架
以上均失败后,使用了TensorFlow框架复现了论文Polarimetric SAR Image Classification Using Deep Convolutional Neural Networks。发现结果是work的。接着用PyTorch框架复现了这篇论文的代码,一开始也是不work,后来莫名其妙的work了,不知道为什么,详细见表格。然后通过做对比实现,排除掉如下问题:
- 数据加载、划分、划窗、读取没有问题
- 特征提取模块没有问题
- 特征嵌入模块没有问题
所以问题出在了度量特征相似性的方法上。进一步排查错误,发现是自己在计算损失时出了问题,没办法只计算查询集的损失。
然后还复现了supervised Wishart classifier算法,发现也是work的。但是发现师姐的数据T矩阵和我现在用的数据T矩阵不一样,不知道为什么。
下一步计划:
- 深度监督网络,多次使用支撑集信息
- 在其他数据集上预训练一个特征提取器
- 学习TensorFlow2.0,完成Wishart的反向传播