创建计算 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。只有这样,上面的转置才会正确。