Deconvolution and Checkerboard Artifacts

探讨神经网络生成图像过程中,反卷积层导致的checkerboard pattern问题,及如何通过替代方法如最近邻插值、resize+conv解决重叠和边界效应等artifacts。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在读这篇文章时候的感悟,这篇文章主要讲了出现如下情况( checkerboard pattern )产生的原因

 

在让神经网络生成图像的时候,通常做法都是从低分辨率开始,因为低分辨率拥有高的语义特征( high-level descriptions)。 然后神经网络可以先大略描述这张图片,然后再随后的层中填充细节。

反卷积的作用:Roughly, deconvolution layers allow the model to use every point in the small image to “paint” a square in the larger one。这句话意思主要是,低分辨率中的一个小点对应高分辨率中的一个小块。但是反卷积会造成重叠uneven overlap,

stride/size是整数,那么就没有重叠,反之,有重叠。

可以先用最近邻插值来upsampling再卷积来替代deconv,为了最好的效果,再卷积之前需要tf.pad(),以防边界效应(boundary artifacts.)

使用resize+conv可以避免artifacts

最大池化也会引起artifacts,出处:We believe these to be caused by max pooling. Max pooling was previously linked to high-frequency artifacts

 

在使用TensorFlow进行深度学习模型构建时,上采样(upsampling)是一个常见的需求,尤其是在图像分割、生成对抗网络(GANs)等任务中。传统的上采样方法之一是转置卷积(transposed convolution),也称为反卷积(deconvolution),但是这种操作可能会导致棋盘效应(checkerboard artifacts)等问题。双线性插值(bilinear interpolation)是另一种常用的上采样技术,它通过计算输入图像中相邻像素点的线性组合来计算输出图像的新像素值,可以有效地缓解棋盘效应。 双线性插值的原理是在输出图像的每个像素位置上,根据该位置在输入图像中的映射坐标,找到输入图像中最接近的四个像素点,然后根据这四个点的位置和像素值,通过线性插值计算出输出像素的值。这种方法不涉及权重参数的学习,因而计算简单,速度快,并且可以产生相对平滑的输出图像。 在TensorFlow中,你可以使用`tf.image.resize`函数来实现双线性插值。以下是一个使用该函数进行上采样的简单示例: ```python import tensorflow as tf # 假设input_tensor是一个已经存在的Tensor对象,其尺寸需要被上采样 input_tensor = ... # 使用双线性插值进行上采样 upsampled_tensor = tf.image.resize(input_tensor, [new_height, new_width], method=tf.image.ResizeMethod.BILINEAR) # 接下来可以将upsampled_tensor用于后续的网络层或任务中 ``` 在这个例子中,`new_height`和`new_width`表示你希望输出张量的高和宽,`method=tf.image.ResizeMethod.BILINEAR`参数指定了使用双线性插值作为上采样的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值