将复值图像输入神经网络

问题描述 投票:0回答:2

我正在尝试“学习”一组大约 10 k 的复值输入图像(幅度/相位;实数/图像)和具有 48 个条目的实值输出向量之间的关系。该输出向量不是一组标签,而是一组数字,代表优化给定复值图像的视觉印象的最佳参数。这些参数是由算法生成的。数据中可能存在一些噪声(来自图像和生成参数向量的算法) 这些参数或多或少取决于输入图像的 FFT(快速傅里叶变换)。因此,我正在考虑用 FFT(complexImage) 的 1D 重塑版本为网络(5 个隐藏层,但架构现在不重要)提供数据 - 一些伪代码:

// discretize spectrum obj_ft = fftshift(fft2(object)); obj_real_2d = real(obj_ft); obj_imag_2d = imag(obj_ft); // convert 2D in 1D rows obj_real_1d = reshape(obj_real_2d, 1, []); obj_imag_1d = reshape(obj_imag_2d, 1, []); // create complex variable for 1d object and concat obj_complx_1d(index, :) = [obj_real_1d obj_imag_1d]; opt_param_1D(index, :) = get_opt_param(object);

我想知道是否有更好的方法将复杂值图像输入深度网络。我想避免使用复杂的渐变,因为它并不是真的必要?!我“只是”尝试找到一个“黑匣子”,它在插入新图像后输出优化的参数。

Tensorflow 获取输入:

obj_complx_1d

和输出向量 opt_param_1D 进行训练。

tensorflow machine-learning neural-network computer-vision
2个回答
1
投票

使用变换将它们变成“图像”。短时傅里叶变换用于制作二维频谱图。 x 轴是时间,y 轴是频率。如果您有复杂的输入数据,您可以选择简单地查看变换数据的幅度谱或功率谱密度。

我在实践中看到的其他内容是将同相和正交(实部/虚部)通道在网络的早期层中分开处理,并在较高层中跨这两个通道进行操作。在早期层中,您的网络将学习每个通道的特征,在较高层中它将学习 I/Q 通道之间的关系。

这些人对复杂信号和神经网络做了很多工作。特别是查看“卷积无线电调制识别网络”

https://radioml.com/research/


0
投票

幅度/角度分量
  1. 实部/虚部
  2. 我将使用幅度/角度分量来展示这个想法。假设你有一个 2d numpy 数组,表示带有
shape = (WIDTH, HEIGHT)

 的图像

import numpy as np kSpace = np.fft.ifftshift(np.fft.fft2(img))

这将为您提供一个二维复杂数组。然后您可以将数组转换为 

data = np.dstack((np.abs(kSpace), np.angle(kSpace)))

这个数组将是一个带有 
shape = (WIDTH, HEIGHT, 2)

的 numpy 数组。该数组代表一幅复值图像。对于一组图像,请确保将它们连接在一起以获得形状数组 =

(NUM_IMAGES, WIDTH, HEIGHT, 2)

我做了一个使用张量流通过简单的神经网络学习傅里叶变换的简单示例。您可以在

https://github.com/michaelmendoza/learning-tensorflow

找到此示例

© www.soinside.com 2019 - 2024. All rights reserved.