用于相位解包的卷积和空间四向 LSTM 联合网络

news2024/12/23 20:05:51

原文:A Joint Convolutional and Spatial Quad-Directional LSTM Network for Phase Unwrapping
作者:Malsha V. Perera 和 Ashwin De Silva

摘要: 相位展开是一个经典的病态问题,其目标是从包裹相位中恢复真实的相位。本文,我们介绍了一种新颖的卷积神经网络(CNN),它结合了空间四向长短期记忆(SQD-LSTM)用于相位展开,通过将其构建为一个回归问题。结合SQD-LSTM可以克服典型CNNs固有的难以学习全局空间依赖性的困难,而这些依赖性在恢复真实相位时至关重要。此外,我们采用了针对问题特定的复合损失函数来训练这个网络。所提出的网络在严重的噪声条件下表现优于现有方法(信噪比为0 dB时的归一化均方根误差为1.3%),同时显著减少了计算时间(0.054秒)。**该网络在训练期间也不需要大规模数据集,**因此非常适合于需要快速准确相位展开的应用,而这些应用的数据有限。

关键词:相位展开,空间四向LSTM,卷积神经网络

引言:

相位展开是一个经典的病态问题,其目标是从包裹相位中恢复真实的相位。本文,我们介绍了一种新颖的卷积神经网络(CNN),它结合了空间四向长短期记忆(SQD-LSTM)用于相位展开,通过将其构建为一个回归问题。结合SQD-LSTM可以克服典型CNNs固有的难以学习全局空间依赖性的困难,而这些依赖性在恢复真实相位时至关重要。此外,我们采用了针对问题特定的复合损失函数来训练这个网络。提出的网络在严重的噪声条件下表现优于现有方法(信噪比为0 dB时的归一化均方根误差为1.3%),同时显著减少了计算时间(0.054秒)。该网络在训练期间也不需要大规模数据集,因此非常适合于需要快速准确相位展开的应用,而这些应用的数据有限。

相位展开问题在许多应用中非常普遍,例如磁共振成像(MRI)中的定量易感性映射(QSM)[1]、合成孔径雷达(SAR)干涉测量[2]、条纹投影技术(FPT)[3]和数字全息干涉测量[4]。其目标是从观测到的包裹相位信号中恢复真实的相位信号,该信号的范围在(−π, π]内。虽然在理想条件下从包裹相位恢复真实相位可能很方便,但在存在噪声、相位不连续和相位快速变化的情况下,相位展开问题变得具有挑战性。相位展开问题通常通过两种主要方法来解决:路径跟踪方法和最小范数方法。路径跟踪方法,如质量引导相位展开(QGPU)算法[5]和分支切割算法[6],通过沿选定路径集成相位来执行相位展开。尽管路径跟踪算法在计算上相对高效,但它们对噪声不鲁棒。基于最小范数的算法[7]对噪声具有鲁棒性,但它们的计算效率低于路径跟踪方法。

近年来**,深度学习算法在许多计算机视觉任务中取得了流行并实现了最先进的性能。遵循这一趋势,一些最近的研究[8, 9, 10, 11]尝试将深度学习应用于解决相位展开问题。在这些研究中,[8, 9, 10]将相位展开问题重新构建为语义分割任务,训练全卷积网络(FCNs)以预测每个像素的包裹计数。在这些方法中,Spoorthi等人的[8] PhaseNet 2.0,一个由密集块[12]组成的深度编码器-解码器架构**,具有最佳的相位展开性能。据我们所知,只有Wang等人[11]将相位展开视为一个回归问题,使用受U-NET[13]和ResNet[14]启发的FCN直接从包裹相位估计真实相位。这些基于FCN的相位展开方法在不同噪声水平下表现合理,同时与传统方法相比,计算时间显著减少。尽管有这些好处,这些网络需要大规模数据集,从而降低了它们在现实世界应用中的适用性。此外,仅基于FCNs的方法还面临另一个问题。典型CNNs执行的局部卷积和池化操作通常忽略了图像不同区域之间的全局空间关系。由于大多数现实世界相位图像包含某些空间结构,因此在学习从包裹相位到真实相位的映射时,建模这种全局空间关系至关重要。递归神经网络(RNNs)[15]是一种可以对时间序列中的上下文关系进行建模的神经网络类型。然而,不能直接将RNN应用于图像的特征图。ReNet[16]和C-RNN[17]介绍了将RNN应用于特征图的方法,受到它们的启发,Ryu等人[18]尝试使用卷积和递归网络的组合在MRI图像中执行相位展开。然而,这项工作没有提供任何定量结果,也没有考虑噪声对相位展开的影响。尽管传统的RNN可能会取得一些成功,但由于它们在建模时间序列的长期依赖性方面的限制,它们在建模从特征图中派生的长序列的空间关系方面可能不太适合。长短期记忆(LSTM)[19],一种能够建模长期依赖性的RNN,将更适合这种设置。为了解决这些缺点,在本文中,我们提出了一种编码器-解码器CNN架构,该架构结合了空间四向LSTM模块,结合了FCNs和LSTMs的力量,以执行准确和快速的相位展开,而无需在大规模数据集上进行训练。然后我们描述了一个针对问题特定的复合损失函数,由误差的方差和误差的总变化损失组成,用于训练这个网络。最后,我们报告了一项全面研究的发现,该研究比较了所提出的网络与PhaseNet 2.0、Ryu等人的方法和QGPU在不同噪声水平下的性能。这些发现证实,与其他方法相比,所提出的网络在执行相位展开时显示出对严重噪声条件的强大鲁棒性和高计算效率。

  1. 方法论

2.1. 数据生成 本研究中使用的数据库由包含随机形状的合成相位图像及其相应的包裹相位图像组成。这些随机形状是通过添加和减去具有不同形状和位置的几个高斯函数创建的。以这种方式混合高斯函数确保形成了不规则和任意的形状,而不是显式的模式,这反过来又使所提出的网络能够学习适用于任何一般模式的相位连续性。此外,还向这些合成相位图像沿垂直和水平方向随机添加选定的斜率,以纳入坡道相位。合成相位图像φ(x, y)的包裹相位图像ψ(x, y)的计算如下所示。 $\psi(x, y) = \angle \exp \left( j\phi(x, y) \right)$
其中,(x, y)是像素的空间坐标,j是虚数单位。按照此方法,创建了两个数据集,每个数据集包含6000个相位图像(256×256),其值范围从-44到44。其中一个数据集的相位图像在包裹之前随机添加了0、5、10、20和60 dB的高斯噪声水平,以模拟现实世界应用中包裹相位图像中普遍存在的噪声。我们将此数据集称为“噪声”数据集,另一个称为“无噪声”数据集。

2.2. 空间四向LSTM模块

设X = {xij} ∈ Rw×h×c为输入特征图,其中w、h和c分别是X的宽度、高度和特征维度。从X,我们可以推导出四个不同的序列,如下所示:

换句话说,x→、x←、x↓和x↑分别代表当从左到右、从右到左、从上到下和从下到上遍历X时获得的序列,如图1所示。设x是上述四个序列中的任意一个。那么x(s) ∈ Rc,其中s ∈ [1, ..., w × h]是描述原始图像中相应区域的特征向量。为了在这些四个序列内建模空间关系,我们使用LSTM,它们专门用于建模长期依赖性。简单来说,序列x的LSTM层的输入-输出关系可以写成如下形式: $y(s) = \text{LSTM} \left( x(s), y(s-1); W_x, u \right)$ 其中,y(s) ∈ Ru是s处的LSTM输出,Wx是统一的LSTM权重,u是层中的单元数。在我们的SQD-LSTM模块中,x→、x←、x↓和x↑由4个具有统一权重Wx→、Wx←、Wx↓和Wx↑的独立LSTM分别处理。通过重新排列来自4个LSTM的输出序列y→、y←、y↓和y↑,我们分别获得输出特征图Y→、Y←、Y↓和Y↑,每个特征图的大小为Rw×h×u。与水平(Y→、Y←)和垂直(Y↓、Y↑)方向相关的输出特征图如图1所示进行连接,并通过独立的3×3卷积层传递,每个层包含d个滤波器,以便探索从LSTM层获得的空间特征的局部关联。最后,通过两个卷积层的输出形成SQD-LSTM U ∈ Rw×h×2d的输出特征图,通过连接两个卷积层的输出特征图来完成。在本研究中,u和d分别设置为32和64。

3.3. 网络架构 所提出的网络架构如图2所示。总的来说,该架构由一个全卷积编码器-解码器网络组成,编码器的输出在送入解码器之前先通过所提出的SQD-LSTM模块。编码器的输出特征图能够表示输入图像的局部信息。将编码器输出送入SQD-LSTM模块,允许网络学习编码器输出中包含的局部特征之间的空间依赖性。随后,SQD-LSTM模块的输出被送入解码器网络,通过转置卷积操作提高输出的分辨率。此外,为了从解码器层和编码器层结合语义特征和局部特征,我们在图2中展示了添加跳跃连接的方式。以这种方式添加跳跃连接,确保了网络在后层中组装出更精细的输出。网络中的每个卷积块都包含一个3×3的卷积层,后跟一个批量归一化层和一个ReLU激活层。每个编码器卷积块后跟一个步长为2的2×2最大池化层,而每个解码器卷积块前都是一个步长为2的3×3转置卷积层。由于网络执行的是回归任务**,解码器层的最后一个卷积块后跟一个带有线性激活的1×1卷积层。**

3.4. 损失函数 由于我们将相位展开问题构建为一个回归任务,通常选择均方误差(MSE)损失函数。然而,我们的实验表明,当应用于所提出的网络时,MSE损失显示出不足的收敛性,导致相位展开性能差。根据(1),可以得出 ϕ+2πnϕ+2πn 对于所有的 n∈Zn∈Z 会产生相同的包裹相位 ψψ。因此,相位展开问题 ψψ 没有唯一解。由于MSE损失强制网络学习一个唯一解,所以它并不适合相位展开问题的特性。因此,需要一个损失函数,在收敛时允许其他解,同时增加预测相位 ϕ^ϕ^ 和真实相位 ϕϕ 之间的相似性。为了解决这些问题,我们采用了下定义的复合损失函数 LcLc

$\mathcal{L}c=\lambda_1\mathcal{L}{var}+\lambda_2\mathcal{L}_{tv}\quad$

$\mathcal{L}{var}=\mathbb{E}\big[(\hat{\phi}-\phi)^{2}\big]-\big(\mathbb{E}\big[(\hat{\phi}-\phi)\big]\big)^{2}\text{(4)}\\\mathcal{L}{tv}=\mathbb{E}\big[|\hat{\phi}{x}-\phi{x}|+|\hat{\phi}{y}-\phi{y}|\big]\text{(5)}$

λ1 和 λ2λ2 是分配给两个损失的权重,在训练期间经验性地设置为1和0.1。误差的方差损失 LvarLvar 允许在收敛时有其他解,而误差的总变分损失 LtvLtv 通过强制网络匹配它们的梯度来增加 ϕ^ϕ^ 和 ϕϕ 之间的相似性。

请注意,这是对文献方法论部分的直译,可能需要根据具体研究内容进一步调整以确保准确性。

好的,接下来是文献中“3. EXPERIMENTS AND RESULTS”部分的中文翻译:

3. 实验与结果

所提出的网络在Keras中实现,并分别在第2.3节提到的两个数据集上进行训练和测试。在两种情况下,模型都是使用学习率为0.001的ADAM优化器进行训练,并且在大约1.5小时内收敛于10个epoch。同样,Ryu等人的[18]网络、PhaseNet 2.0[8]和QGPU[5]也在两个数据集上实现并进行了测试。其中,Ryu等人的网络和PhaseNet 2.0在噪声和无噪声数据集上都进行了训练。此外,为了评估SQD-LSTM模块和损失函数Lc的重要性,我们训练并测试了两个单独的U-NET(其卷积架构类似于所提出的网络),一个使用MSE作为损失函数,另一个使用Lc,仅在无噪声数据集上进行。所有上述训练和测试都是在NVIDIA Tesla K80 GPU上进行的,每个数据集的固定训练-测试拆分为5000-1000。为了评估和比较这些方法,我们计算了展开相位图像的归一化均方根误差(NRMSE - 由相应真实相位图像的范围归一化)并测量了每种方法的输出平均计算时间。这些结果总结在表1中。图3中展示了每种方法得到的选定无噪声和噪声(10 dB和0 dB)包裹相位图像的展开相位图像,以及NRMSE随噪声水平变化的图表。

表1. 结果

方法无噪声噪声计算时间 (s)
UNET (MSE)14.24%23.40%-
UNET (Lc)2.75%26.20%-
Ryu et al.[18]2.23%3.84%0.687
PhaseNet 2.0 [8]9.41%17.53%0.234
QGPU [5]10−13%5.04%35.42
提出的方法0.84%0.90%0.054

表1显示,QGPU在无噪声图像的展开上几乎达到了完美的性能。然而,在噪声图像上表现不佳,并且与深度学习方法相比,其平均计算时间(35.42秒)非常高。另一方面,提出的方法在无噪声图像上达到了与QGPU相当的性能(NRMSE = 0.84%),在噪声图像上达到了最高性能(NRMSE = 0.9%),并且在比较的方法中平均计算时间最低(0.054秒)。从图3 (b)可以看出,所提出的网络能够准确地(NRMSE = 1.26%)展开高达信噪比SNR = 0 dB的严重噪声水平的包裹相位图像。还观察到,所提出的网络超越了目前持有最先进的基于深度学习的相位展开性能的PhaseNet 2.0。PhaseNet 2.0是一个比较深的网络,由密集块组成,因此其训练过程对数据量要求很高。然而,在本研究中,由于使用了相对较小的(5000个)训练数据集,其相位展开误差有所增加。尽管如此,仅在5000张图像上训练的所提出网络仍然在噪声数据中达到了考虑的方法中最高的相位展开性能,因此非常适合实际应用中数据有限的情况。正如表1所示,使用Lc的U-NET比使用MSE的U-NET有更好的相位展开性能。因此,很明显Lc是这个问题比MSE更适合的损失函数。同样,很明显提出的方法比使用Lc的U-NET表现更好。在实验中,我们还注意到所提出的网络比任何考虑的方法都更快地收敛。这些观察结果使我们得出结论,所提出网络的成功归功于SQD-LSTM模块和Lc损失函数。

图3. (a) 展示了不同方法得到的选定无噪声和噪声(10 dB和0 dB)包裹相位图像的展开相位图像。 (b) 展示了所提出的方法、Ryu等人的方法[18]、QGPU和PhaseNet 2.0相对于不同噪声水平的NRMSE的图表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙(API 12 Beta2版)NDK开发【使用Node-API扩展能力接口】

简介 [扩展能力接口]进一步扩展了Node-API的功能,提供了一些额外的接口,用于在Node-API模块中与ArkTS进行更灵活的交互和定制,这些接口可以用于创建自定义ArkTS对象等场景。 Node-API接口开发流程参考[使用Node-API实现跨语言交互开发流程]…

非负数、0和正整数 限制最大值且保留两位小数在elementpuls表单中正则验证

一、结构 <el-form-item label"单价&#xff1a;" prop"price"><el-inputv-model.trim"formData.price"placeholder"请输入"blur"formMethod.fixTwo"><template #append>(元)</template></el-i…

基础算法:离散化(C++实现)

文章目录 1. 离散化的定义2. 离散化例题2.1 离散化二分2.2 离散化哈希表 1. 离散化的定义 离散化是一种在程序设计和算法优化中常用的技术&#xff0c;其核心思想是将无限空间中有限的个体映射到有限的空间中去&#xff0c;以此提高算法的时空效率。具体来说&#xff0c;离散化…

Docker 安装 GitLab教程

本章教程,主要介绍如何在Docker 中安装GitLab。 GitLab 是一个开源的 DevOps 平台,提供了一整套工具,用于软件开发生命周期的各个阶段,从代码管理到 CI/CD(持续集成和持续交付/部署),再到监控和安全分析。 一、拉取镜像 docker pull gitlab/gitlab-ce:latest二、创建 G…

【React】探讨className的正确使用方式

文章目录 一、className的正确用法二、常见错误解析三、实例解析四、错误分析与解决五、注意事项六、总结 在React开发中&#xff0c;正确使用className属性对组件进行样式设置至关重要。然而&#xff0c;由于JavaScript和JSX的特殊性&#xff0c;开发者常常会犯一些小错误&…

ShardingSphere实战(2)- 水平分表

上篇博客&#xff0c;我们讲了 ShardingSphere实战&#xff08;1&#xff09;- 分库分表基础知识&#xff0c;这篇博客&#xff0c;正式开始实操。 项目环境&#xff1a; JDK11 MySQL 8.0.30 Springboot 2.7.4 Mybatis ShardingSphere HikariCP 连接池 一、Maven 依赖 <…

filebeat发送日志

filebeat: 1.可以在本机收集日志 2.也可以远程收集日志 3.轻量级的日志收集系统&#xff0c;可以在非Java环境运行 logstash是在jvm环境中运行&#xff0c;资源消耗很高&#xff0c;启动一个logstash需要消耗500M左右的内存 filebeat只消耗10M左右的内存 test3是装有logstash的…

C语言的内存布局

根据 C 语言的内存布局规律&#xff0c;通常局部变量和全局变量哪一个的地址更小&#xff1f; 答&#xff1a;如图所示。 下面代码中&#xff0c;为何两个不同的变量可以存放在同一个地址上&#xff1f; #include <stdio.h> void func1(void); void func2(void); voi…

安装 qcloud-python-sts 失败 提示 gbk codecs decode byte 应该如何解决

安装 qcloud-python-sts 失败 提示 gbk codecs decode byte 应该如何解决 解决方案&#xff1a; 将windows 修改为utf-8编码格式 解决步骤如下&#xff1a; 1. 进入控制台 2. 点击区域 4. 点击管理 4.勾选UTF-8 5.重启系统即可

Java零基础之多线程篇:线程间如何通信?

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

计算机技术基础 (bat 批处理)Note6

计算机技术基础 &#xff08;bat 批处理&#xff09;Note6 本节主要讲解FOR命令语句&#xff08;循环&#xff09;在 bat 批处理中的使用 (part 2) 变量延迟 命令语句 在没有开启变量延迟的情况下&#xff0c;批处理命令行中的变量改变&#xff0c;必须到下一条命令才能体现…

C++ STL在算法题中的常用语法

Vector 1.将vector<int>中的元素全部置换为0 fill(vec.begin(), vec.end(), 0); 2.vector容器是可以直接用比较是否值等的&#xff01; Unordered_set 1. unordered_set的删除&#xff08;count的值也会减少&#xff09; 2.unordered_map中的int默认值是0&#xff0c;…

Prometheus-v2.45.0+Grafana+邮件告警

目录 普罗米修斯监控架构介绍 Prometheus 监控架构 1. 数据抓取&#xff08;Scraping&#xff09; 2. 时序数据库&#xff08;TSDB&#xff09; 3. 数据模型 4. PromQL 查询语言 5. 告警&#xff08;Alerting&#xff09; 6. Alertmanager 7. 可视化&#xff08;Visu…

从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架

这一期开始开发header部分&#xff0c;预期实现两个目标&#xff1a; 创建 Flask 项目导入旅游数据后端实现旅游数据的查询 1 python 环境 & 开发环境 python 安装和pycharm安装需要去网上找包&#xff0c;建议python使用3.8 或者3.9版本 2 新建项目 我们新建一个文件…

Kafka详解以及常见kafka基本操作

1、 kafka 是什么,有什么作用 Kafka是一个开源的高吞吐量的分布式消息中间件&#xff0c;对比于缓冲和削峰&#xff1a;上游数据时有突发流量&#xff0c;下游可能扛不住&#xff0c;或者下游没有足够多的机器来保证冗余&#xff0c;kafka在中间可以起到一个缓冲的作用&#x…

Qt项目——文本编辑器(Bug/疑问)

项目地址&#xff1a;GitHub - Outlier9/CatEditor: Cat文本编辑器--Qt 有帮助的话各位点点 star 啦&#xff0c;感谢&#xff01; 如果有需要学习该项目的人&#xff0c;觉得看文档较为困难&#xff0c;可以加我联系方式&#xff0c;给github点个star后可免费提供学习视频&…

红酒与烹饪:美食的灵感之源

在烹饪的广阔天地中&#xff0c;红酒常常作为一道神秘的佐料&#xff0c;为菜肴带来别样的风味与深度。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与烹饪艺术相遇&#xff0c;一场美食的灵感之旅便悄然展开。 一、红酒与烹饪的浪漫邂逅 在烹饪的世界里&…

12月长沙学术会议:EI检索,机器人、自动化与智能控制方向

在春意盎然、生机勃勃的四月&#xff0c;全球科技界的目光聚焦于中国长沙&#xff0c;这里即将迎来一场科技与智慧碰撞的盛宴——第四届机器人、自动化与智能控制国际会议&#xff08;ICRAIC 2024&#xff09;。本次盛会由历史悠久、文化底蕴深厚的湖南第一师范学院荣耀主办&am…

正点原子imx6ull-mini-Linux驱动之platform设备驱动实验(14)

我们在前面几章编写的设备驱动都非常的简单&#xff0c;都是对IO进行最简单的读写操作像I2C、 SPI、LCD 等这些复杂外设的驱动就不能这么去写了&#xff0c;Linux 系统要考虑到驱动的可重用性&#xff0c;因此提出了驱动的分离与分层这样的软件思路&#xff0c;在这个思路下诞生…

QtQuick Text-文本样式

属性 Text项目的style属性可以设置文本的样式。 支持的文本样式有&#xff1a; Text.Normal&#xff08;默认&#xff09;Text.OutlineText.RaisedText.Sunken 示例 import QtQuickRow{spacing: 10padding: 10Text {font.pointSize: 40text: "Normal"}Text {font…