深度学习AIR-PolSAR-Seg图像数据预处理

文章目录

深度学习sar图像数据预处理

一.图片预处理操作

用于sar图像语义分割的图片为512x512x1的图片,有HH,HV,VH,VV四种极化方式

我们拿到的HH极化方式下的原始sar图像数据分布如下:

将该形式下的图像归一化到0~255后展示出的灰度图像是这样的:

肉眼可见这样的sar图像是一片漆黑,对于网络来说也较难识别,更加细节地展示图片0:

1.log(1+x)处理

为了让网络更好区分sar图像进行语义分割,我们可以采用对其取log(1+x)的方式进行处理

python 复制代码
img = np.log(1+img)

然后再在log变换后的图像上计算均值和方差将图像normalize到均值为0,方差为1(这一步不是非常重要)

对图像进行log变换再归一化后的数据分布变为:

进一步将处理后的图像值域缩放到0~255展示成灰度图:

可以看出此时的图像明显用肉眼已经可以略微辨别一二了,可区别度比原来有了较大提升,网络训练和区分起来也应当相对容易。展示图片0的更多细节:

图片具体处理细节如下:

python 复制代码
 img = io.imread(img_path)
 img = np.asarray(img, dtype=float)
 img = np.log(1 + img)
 img = (img - mean) / std
 c = np.min(img)
 d = 0 - c
 img += d
 c = np.max(img)
 img /= c
 img *= 255

从数据集中采样三张图片对比起处理前后的数据分布情况:

处理前:

处理后:

明显可以看出处理后的数据更接近于正态分布。

2.sqrt平方化处理


二.原网络训练效果展示

将未进行处理的图片和经过处理的图片分别放入卷积神经网络进行训练

采用的语义分割网络模型为MPresnet

MPresnet论文地址:https://arxiv.org/abs/2011.05088

训练参数如下:

python 复制代码
args = {
    'lr': 0.01,
    'gpu': True,
    'epochs': 400,
    'momentum': 0.9,
    'print_freq': 4,
    'predict_step': 10,
    'val_batch_size': 2,
    'train_batch_size': 4,
    'weight_decay': 5e-4,
    'lr_decay_power': 0.5,
    'train_crop_size': False,
    'pred_dir': os.path.join(working_path, 'results', DATA_NAME),
    'chkpt_dir': os.path.join(working_path, 'checkpoints', DATA_NAME),
    'log_dir': os.path.join(working_path, 'logs', DATA_NAME, NET_NAME),
    'data_process': 'log_normalize', 
    'weight_loss': 'weight_loss' # 采用加权交叉熵损失函数
}

原始数据训练效果展示:

python 复制代码
Total time: 38598.2s Best rec: Train acc 98.30, Val acc 77.37 fwiou 66.94, Val_loss 1.3840

训练最好结果在验证集上的性能表现:

python 复制代码
Acc 77.37, fwIoU 66.94
class acc:[80.57  63.75  85.61  1.48  83.76  61.94]
            #黄色   蓝色   青色   红色  绿色   白色
           #住宅区 工业区  河流   裸地  植被   其他
Avg F1 63.03

验证集第100张:

决策边界的差异:

三.对比实验

本数据集中作者使用不同网络在多地形分类任务上获得的结果:

1.采用原始数据

最好结果: Best rec: Train acc 95.53, Val acc 79.67 fwiou 69.38, Val_loss 1.3569

验证集具体推理结果:

python 复制代码
Acc 79.62, fwIoU 69.32
class acc:[82.88, 67.63, 87.27, 2.49, 85.89, 71.66]
Avg F1 65.23

2.采用取log(1+x)后的数据

最好结果:Best rec: Train acc 95.94, Val acc 79.30 fwiou 68.82, Val_loss 1.2038

验证集具体推理结果:

python 复制代码
Acc 79.30, fwIoU 68.82
class acc:[82.40, 66.12, 87.20, 6.94, 85.36, 77.08]
Avg F1 65.61

3.采用取平方后归一化处理:

最好结果:Best rec: Train acc 95.70, Val acc 81.05 fwiou 70.43, Val_loss 1.4677

验证集具体推理结果:

python 复制代码
Acc 81.05, fwIoU 70.43 # 采用亮度,对比度,饱和度随机0.25变换
Acc 80.68, fwIoU 70.05 # 未采用上述变换
class acc:[83.99, 67.32, 88.26, 2.28, 86.71, 78.38]
Avg F1 65.71

改用focal loss后:

python 复制代码
Acc 79.94, fwIoU 69.37
[83.55, 66.66, 87.43, 4.72, 86.63, 65.97]
Avg F1 65.80

4.采用取平方后归一化处理未使用加权损失函数:

python 复制代码
Acc 81.32, fwIoU 70.89
class acc:[84.13, 69.09, 88.60, 0.88, 87.41, 73.05]
Avg F1 66.02

log变换和平方变换的效果图对比:

四.总结:

数据处理 数据增强 损失函数 OA fwiou 不平衡类别精度
原数据 随机水平翻转 加权交叉熵 77.37 66.94 1.48
原数据 随机水平,垂直翻转;随机旋转;亮度,饱和度,对比度随机±0.25变换 加权交叉熵 79.62 69.32 2.49
log变换 随机水平,垂直翻转;随机旋转;亮度,饱和度,对比度随机±0.25变换 加权交叉熵 79.30 68.82 6.94
平方变换 随机水平,垂直翻转;随机旋转;亮度,饱和度,对比度随机±0.25变换 加权交叉熵 81.05 70.43
平方变换 随机水平,垂直翻转;随机旋转; 加权交叉熵 80.68 70.05 2.28
平方变换 随机水平,垂直翻转;随机旋转; 交叉熵 81.32 70.89 0.88
平方变换 随机水平,垂直翻转;随机旋转; focal loss 79.94 69.37 4.72

数据处理和数据增强使用前后预测效果对比:

五.思考

可能引起网络在该数据集上不足的原因:
1.可能是MPresnet实验中所使用的数据集分辨率与AIR-polar-sar数据集分辨率及场景复杂度不同

  • MPresnet中的数据集描述为:分辨率1~3m,所以包含的细粒度特征更多,且场景复杂度较低
  • AIR-polar-sar数据集描述为分辨率8m,且AIR-ploar-sar与高分竞赛训练集的数据尺寸相同数量相近,这意味着所训练的场景是其大小的4倍左右,同时包含更大的场景复杂性。
    原论文中对AIR-polar-sar数据集场景复杂度的描述如下:

    下图可视化地展示了其场景复杂度:
相关推荐
逝去的紫枫30 分钟前
Python PIL:探索图像处理的无限可能
图像处理·人工智能·python
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-05
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
小火炉Q1 小时前
02 python基础 python解释器安装
人工智能·python·神经网络·机器学习·网络安全·自然语言处理
钰见梵星1 小时前
深度学习优化算法
人工智能·深度学习·算法
算法给的安全感1 小时前
siamFC算法复现及使用自己的数据集进行测试
深度学习·siamfc
难念的码1 小时前
Skill 语言语法基础
人工智能·后端
是Winky啊1 小时前
【论文阅读】WGSR
论文阅读·深度学习·计算机视觉·超分辨率重建
dundunmm1 小时前
论文阅读:SIMBA: single-cell embedding along with features
论文阅读·人工智能·数据挖掘·embedding·生物信息·多组学细胞数据·单组学
xhyu612 小时前
【论文笔记】LLaVA-KD: A Framework of Distilling Multimodal Large Language Models
论文阅读·人工智能·语言模型
数据岛2 小时前
sklearn中常用数据集简介
人工智能·python·sklearn