基于CNN的PolSAR图像分类

这里主要介绍两篇论文。

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图像数据

创新点

  1. 将CNN引入到PolSAR图像分类中,将极化协方差矩阵或者极化相干矩阵转换为6维的实数向量。
  2. 在当时的各个数据集达到了state-of-the-art的性能。

主要过程

将$3 \times 3$的复数相干矩阵$T$采用如下方式映射到6维实数向量:

image-20200530224502386

其中,$SPAN=T_{11}+T_{22}+T_{33}$,除了$A$之外,其余的都在理论上归一化到了$[0,1]$。

网络结构,其中第一个卷积层的padding=2:

image-20200530224645581

实验结果

采用是Flevoland数据集,图像尺寸为$750 \times 1024$,空间分辨率为$6.6 \times 12.1m$。为了保持样本内的连续性,采用了如下选取样本的方式:

  1. 选择$m \times m$邻域内都为相同类别的样本作为中心像素点。中心像素点数量很多,只保留其中的p部分。
  2. 在中心点周围选择大小为$n \times n$的划窗作为样本,其类标为中心像素点的类标。

在实验中$m=3,n=8,p=10\%$。当$n$过大时,分类比较粗糙,当$n$过小时,网络参数量过少。另外,这里的$n=8$,不是奇数,因此实际上是中心点左和上分别取了4邻域,而右和下分别取了3邻域。

总样本数为13598,按照4:1的比例划分为训练集和验证集,也就是说有10817个训练样本,2781个验证样本。因为只有部分样本有标记,所以只在有标记的样本上计算准确率,如下所示:

image-20200530225805261

在整张图上进行分类,结果如下所示:

image-20200530225835131

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数据本身的特征。

创新点

  1. 将PolSAR数据本身的很多特征引入到了CNN的输入中
  2. 在少量标记样本的情况下达到了state-of-the-art的性能

主要过程

Polarimetric Coherency Matrix and Rotation

PolSAR数据的相干矩阵如下:

image-20200530231355209

为了更好的在rotation domain对目标散射矩阵进行考察,the coherency matrix can be extended to
the rotation domain along the radar line of sight,如下式,其中$R_3(\theta)$是旋转矩阵:

image-20200530231553257

Classical Roll-Invariant Polarimetric Features

total backscattering power SPAN定义为:

image-20200530231721422

相干矩阵$T$可以分解为:

image-20200530231753949

PolSAR数据的三个典型极化特征包含the entropy $H$, mean alpha angle $\overline \alpha$,和 anisotropy $Ani$,定义如下:

image-20200530231933295

其中,$P_n = \lambda_n/(\lambda_1+\lambda_2+\lambda_3)$,$\lambda_1,\lambda_2,\lambda_3$为特征值。

Hidden Polarimetric Features in Rotation Domain

这部分内容就更不知所云了,所以就不写了。

网络结构

image-20200530232331182

输入图像的维度为$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。各个类别的样本数如下所示:

image-20200530233252205

分类结果如下:

image-20200530233617662

收敛速度如下:

image-20200530233642681

其实这篇论文,就是证明了我代码肯定是有问题的,但是问题出在什么地方,暂时还不清楚。

失败的尝试

除了超参数的调整之外,还尝试了如下一些方法

  • 更换数据集,以及数据集比例
  • 更换数据预处理方式,从9维实数向量到6维实数向量
  • 更换特征提取网络,从一维卷积到二维卷积,加batchnorm、去掉bias、更改激活函数
  • 更换划窗方式,从1x1到15x15,使用邻接信息
  • 加载分类预训练权重,抽取倒数第二层的损失,然后去做相似性度量
  • 度量网络损失计算:支撑集、查询集的所有损失;只计算查询集损失
  • 更改度量网络特征嵌入的维度
  • 直接使用Wishart距离,反向传播不回去,因为涉及到复数运算,考虑更换TensorFlow框架

以上均失败后,使用了TensorFlow框架复现了论文Polarimetric SAR Image Classification Using Deep Convolutional Neural Networks。发现结果是work的。接着用PyTorch框架复现了这篇论文的代码,一开始也是不work,后来莫名其妙的work了,不知道为什么,详细见表格。然后通过做对比实现,排除掉如下问题:

  1. 数据加载、划分、划窗、读取没有问题
  2. 特征提取模块没有问题
  3. 特征嵌入模块没有问题

所以问题出在了度量特征相似性的方法上。进一步排查错误,发现是自己在计算损失时出了问题,没办法只计算查询集的损失。

然后还复现了supervised Wishart classifier算法,发现也是work的。但是发现师姐的数据T矩阵和我现在用的数据T矩阵不一样,不知道为什么。

下一步计划:

  1. 深度监督网络,多次使用支撑集信息
  2. 在其他数据集上预训练一个特征提取器
  3. 学习TensorFlow2.0,完成Wishart的反向传播
------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道