我是深度学习的tensorflow的新手,并且对tensorflow中的反卷积(卷积转置)操作感兴趣.我需要看看操作反卷积的源代码.函数是我猜nn_ops.py中的conv2d_transpose().
但是,在函数中它调用另一个函数调用gen_nn_ops.conv2d_backprop_input().我需要看看这个函数里面有什么,但我无法在存储库中找到它.任何帮助,将不胜感激.
是否有TensorFlow原生函数可以解卷积网络解开?
我已经在普通的python中写了这个,但是当它想要将它翻译成TensorFlow时变得越来越复杂,因为它的对象目前甚至不支持项目分配,我认为这对TF来说非常不方便.
我注意到在很多地方人们使用这样的东西,通常是在完全卷积网络,自动编码器和类似的东西:
model.add(UpSampling2D(size=(2,2)))
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(1,1))
Run Code Online (Sandbox Code Playgroud)
我想知道它之间的区别是什么?
model.add(Conv2DTranspose(kernel_size=k, padding='same', strides=(2,2))
Run Code Online (Sandbox Code Playgroud)
我们欢迎任何解释这种差异的论文链接.
convolution deep-learning conv-neural-network keras deconvolution
我想了解一下scipy.signal.deconvolve.
从数学的角度来看,卷积只是傅立叶空间中的乘法,所以我希望它有两个函数f和g:
Deconvolve(Convolve(f,g) , g) == f
在numpy/scipy中,要么不是这种情况,要么我错过了一个重要的观点.虽然有一些与SO解卷积相关的问题(如此处和此处)但是它们没有解决这一问题,其他问题仍然不清楚(这个)或未答复(这里).SignalProcessing SE还有两个问题(这个和这个),其答案对于理解scipy的解卷积函数是如何工作没有帮助的.
问题是:
f假设你知道卷积函数g,你如何从一个回旋信号重建原始信号?Deconvolve(Convolve(f,g) , g) == f转化为numpy/scipy?编辑:请注意,这个问题不是针对防止数字不准确(尽管这也是一个悬而未决的问题),而是要了解如何在scipy中协作/解卷积.
以下代码尝试使用Heaviside函数和高斯滤波器.从图像中可以看出,卷积的反卷积的结果根本不是原始的Heaviside函数.如果有人能够对这个问题有所了解,我会很高兴.
import numpy as np
import scipy.signal
import matplotlib.pyplot as plt
# Define heaviside function
H = lambda x: 0.5 * (np.sign(x) + 1.)
#define gaussian
gauss = lambda x, sig: np.exp(-( x/float(sig))**2 )
X = np.linspace(-5, 30, …Run Code Online (Sandbox Code Playgroud) 在这里,在这个代码UpSampling2D并且Conv2DTranspose似乎可以互换使用。我想知道为什么会这样。
# u-net model with up-convolution or up-sampling and weighted binary-crossentropy as loss func
from keras.models import Model
from keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenate, Conv2DTranspose, BatchNormalization, Dropout
from keras.optimizers import Adam
from keras.utils import plot_model
from keras import backend as K
def unet_model(n_classes=5, im_sz=160, n_channels=8, n_filters_start=32, growth_factor=2, upconv=True,
class_weights=[0.2, 0.3, 0.1, 0.1, 0.3]):
droprate=0.25
n_filters = n_filters_start
inputs = Input((im_sz, im_sz, n_channels))
#inputs = BatchNormalization()(inputs)
conv1 = Conv2D(n_filters, (3, 3), activation='relu', padding='same')(inputs)
conv1 = …Run Code Online (Sandbox Code Playgroud) machine-learning convolution computer-vision conv-neural-network deconvolution
Conv2dTranspose 中 Output_padding 的作用是什么?请帮助我理解这一点?
Conv2dTranspose(1024, 512, kernel_size=3, stride=2, padding=1, output_padding=1)
Run Code Online (Sandbox Code Playgroud) 我创建了一个深度卷积神经网络来对图像中的各个像素进行分类.我的训练数据总是相同的大小(32x32x7),但我的测试数据可以是任何大小.
目前,我的模型只适用于相同大小的图像.我已经广泛使用了tensorflow mnist 教程来帮助我构建我的模型.在本教程中,我们仅使用28x28图像.如何更改以下mnist模型以接受任何大小的图像?
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
x_image = tf.reshape(x, [-1, 28, 28, 1])
Run Code Online (Sandbox Code Playgroud)
为了使事情变得更复杂,我的模型已经转置了需要指定输出形状的卷积.如何调整以下代码行,以便转置卷积将输出与输入大小相同的形状.
DeConnv1 = tf.nn.conv3d_transpose(layer1, filter = w, output_shape = [1,32,32,7,1], strides = [1,2,2,2,1], padding = 'SAME')
Run Code Online (Sandbox Code Playgroud) python deep-learning conv-neural-network tensorflow deconvolution
我正在尝试创建一个可以对图像中的每个像素进行分类的深度CNN.我复制从图像架构下面取自这个文件.在论文中提到使用去卷积使得任何大小的输入都是可能的.这可以在下图中看到.
目前,我已经硬编码我的模型接受大小为32x32x7的图像,但我想接受任何大小的输入.我需要对我的代码进行哪些更改以接受可变大小的输入?
x = tf.placeholder(tf.float32, shape=[None, 32*32*7])
y_ = tf.placeholder(tf.float32, shape=[None, 32*32*7, 3])
...
DeConnv1 = tf.nn.conv3d_transpose(layer1, filter = w, output_shape = [1,32,32,7,1], strides = [1,2,2,2,1], padding = 'SAME')
...
final = tf.reshape(final, [1, 32*32*7])
W_final = weight_variable([32*32*7,32*32*7,3])
b_final = bias_variable([32*32*7,3])
final_conv = tf.tensordot(final, W_final, axes=[[1], [1]]) + b_final
Run Code Online (Sandbox Code Playgroud) python deep-learning conv-neural-network tensorflow deconvolution
我正在尝试开发一个反卷积层(或准确的转置卷积层).
在前向传递中,我做了一个完整的卷积(零填充卷积)在后向传递中,我做了一个有效的卷积(没有填充的卷积)将错误传递给前一层
偏差的梯度很容易计算,只需要在多余尺寸上求平均值.
问题是我不知道如何更新卷积滤波器的权重.什么是渐变?我确定这是一个卷积操作,但我不知道如何.我尝试了输入的有效卷积和错误但无济于事.
我试图在Python中对图像进行去模糊,但遇到了一些问题.这是我尝试过的,但请记住,我不是这个主题的专家.根据我的理解,如果你知道点扩散函数,你应该能够通过执行反卷积来简单地对图像进行去模糊.然而,这似乎不起作用,我不知道我是在做一些愚蠢的事情,还是我不理解事情.在Mark Newman的计算物理学书籍(使用Python)中,他在问题7.9中触及了这个主题.在这个问题中,他提供了一个他使用高斯点扩散函数(psf)故意模糊的图像,问题的目的是使用高斯对图像进行去模糊.这是通过将模糊图像的2D FFT除以psf的2D FFT然后进行逆变换来实现的.这工作得相当好.
为了解决这个问题,我想对使用故意失焦的相机拍摄的真实图像进行去模糊.所以我设置了一个相机并拍了两组照片.第一组照片是焦点.第一个是在一个完全黑暗的房间里的一个非常小的LED灯,第二个是一张纸上有文字(使用闪光灯).然后,在不改变任何距离或任何东西的情况下,我改变了相机上的焦点设置,使文本非常失焦.然后,我使用闪光灯拍摄了文本照片,然后拍摄了第二张LED照片(没有闪光灯).这是模糊的图像.
现在,根据我的理解,模糊点光源的图像应该是点扩散函数,因此我应该能够用它来去模糊我的图像.问题在于,当我这样做时,我得到一个看起来像噪音的图像.经过一些研究后,使用反卷积技术时噪声似乎是个大问题.然而,鉴于我已经测量了我认为确切的点扩散函数,我很惊讶噪声在这里是一个问题.
我尝试过的一件事就是用1或者epsilon替换psf变换中的小值(小于epsilon),我尝试使用epsilon的大范围值.这产生的图像不仅仅是噪点,而且也不是图像的模糊版本; 它看起来像原始(非模糊)图像的奇怪,模糊版本.这是我的程序中的图像(您可以忽略sigma的值,该程序中未使用该值).
我相信我正在处理一个噪音问题,但我不知道为什么,我不知道该怎么办.任何建议都会非常感激(请记住,我不是这方面的专家).
请注意,我故意不发布代码,因为我认为这在某种程度上是无关紧要的.但如果有人认为有用,我会很高兴这样做.我不认为这是一个编程问题,因为我使用了相同的技术,并且当我具有已知的点扩散函数时(例如当我通过FFT的out-of划分原始对焦图像的FFT时)它工作正常 - 聚焦图像然后逆变换).我只是不明白为什么我似乎无法使用我的实验测量点扩散函数.
deconvolution ×10
python ×5
convolution ×4
tensorflow ×4
keras ×1
numpy ×1
pytorch ×1
scipy ×1
signals ×1