创建计算 2D DCT 的 Keras/Tensorflow 层
Create Keras / Tensorflow layer that computes 2D DCT
我想在我的 CNN 中添加一个计算 de DCT 的层。我看到tensorflow只有一维DCT。
我如何创建一个层,在网络中间对一批图像执行 DCT。
转换看起来像这样,您可以将它放在模型中的任何位置,它会自动转换为操作层。或者,如果您愿意,可以将其包装在 Lambda 层中
def dct_2d(
feature_map,
norm=None # can also be 'ortho'
):
X1 = tf.signal.dct(feature_map, type=2, norm=norm)
X1_t = tf.transpose(X1, perm=[0, 1, 3, 2])
X2 = tf.signal.dct(X1_t, type=2, norm=norm)
X2_t = tf.transpose(X2, perm=[0, 1, 3, 2])
return X2_t
请记住,在 tensorflow 中,DCT 始终应用于第 -1 轴。所以如果你有一个 batch, H, W, channels 的特征图,你想转换成 batch, channels, H, W。只有这样,上面的转置才会正确。
我想在我的 CNN 中添加一个计算 de DCT 的层。我看到tensorflow只有一维DCT。
我如何创建一个层,在网络中间对一批图像执行 DCT。
转换看起来像这样,您可以将它放在模型中的任何位置,它会自动转换为操作层。或者,如果您愿意,可以将其包装在 Lambda 层中
def dct_2d(
feature_map,
norm=None # can also be 'ortho'
):
X1 = tf.signal.dct(feature_map, type=2, norm=norm)
X1_t = tf.transpose(X1, perm=[0, 1, 3, 2])
X2 = tf.signal.dct(X1_t, type=2, norm=norm)
X2_t = tf.transpose(X2, perm=[0, 1, 3, 2])
return X2_t
请记住,在 tensorflow 中,DCT 始终应用于第 -1 轴。所以如果你有一个 batch, H, W, channels 的特征图,你想转换成 batch, channels, H, W。只有这样,上面的转置才会正确。