一句话理解tf.keras.layers.UpSampling2D

2023-05-16

UpSampling2D

UpSampling2D就是对图片数据在高与宽的方向进行数据插值倍增

参数说明
tf.keras.layers.UpSampling2D(
    size=(2, 2), data_format=None, interpolation='nearest', **kwargs
)

参数:
	size: int或者tuple,行与列的采样数,一个int表示两个值都相同。
    data_format: 数据格式。str, 默认"channels_last",还有"channels_first", 表示输入图片格式的通道是在前还是在后。
        一般我们输入的图片格式是[B,H,W,C]通道C是最后面的,因为比如openCV或者plt都是识别通道最后的。
        如果你输入的图片格式是[B,C,H,W]则需要选择"channels_first"
        
    interpolation: 差值方式,str,"nearest"最近采样方式 或者"bilinear" 双直线采样方式,默认"nearest"
        
计算公式

[B,H,W,C] -> size(a,b) = [B,H*a,W*b,C]

案例
import tensorflow as tf	

img = tf.random.normal([5,28,28,3])  # 模拟5张图片输入,每张图片宽高都为28,通道为3
img.shape
#TensorShape([5, 28, 28, 3])

up_img = tf.keras.layers.UpSampling2D(size=(1,2))(img) # 实现行方向(图片高H方向)上采样一次,列方向(图片宽W方向)上采样2次
up_img.shape
#TensorShape([5, 28, 56, 3])


up_img2 = tf.keras.layers.UpSampling2D(size=(2,1))(img) # 实现行方向(图片高H方向)上采样2次,列方向(图片宽W方向)上采样1次
up_img2.shape
#TensorShape([5, 56, 28, 3])
关于interpolation插值方式的简单说明

nearest:最近邻插值(也称为近端插值,或者在某些情况下称为点采样)是一种简单的一维或多维多元插值方法。插值是当给定某空间中非给定点的函数值时,在该点周围(邻近)的点上逼近该函数值的问题 。

bilinear: 在数学中,双线性插值是线性插值的扩展,用于在直线2D网格上插值两个变量(例如xand)的函数。双线性插值首先在一个方向上使用线性插值来执行,然后在另一个方向上再次使用。虽然每个步骤在采样值和位置上都是线性的,但插值作为一个整体在采样位置不是线性的,而是二次的。

注意

Tensorflow把插值的选择方式限定死了,只能选择这nearest和bilinear这两种模式。
其实它本身底层调用函数还支持 Gaussian,Bicubic,Lanczos。不过需要改动源码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一句话理解tf.keras.layers.UpSampling2D 的相关文章

随机推荐