如何制作具有3x3 px输入和2x2 px输出的“卷积”内核?

时间:2018-04-11 19:32:52

标签: tensorflow deep-learning keras convolutional-neural-network

我正在研究一个玩具问题,试图用keras模型将图像的分辨率提高2倍。使用keras实现此目的的基本操作是Conv2DTranspose。使用功能模型API,我将每个像素分成四个:

upconv = Conv2DTranspose(kernel_size=(2, 2), strides=2, filters=3)(previous)

得到的转置卷积是一个(1 * 1 * 3)*(2 * 2 * 3)= 36参数操作,它给出了我想要的输出分辨率。

我想要做的是在卷积内核中包含输入图像中的相邻像素。对于输入上的每个像素,我想要包括每个相邻像素,或3x3像素;输出将是相同的(2x2像素,步幅为2)。该内核将具有(3 * 3 * 3)*(2 * 2 * 3)= 324个参数。

我无法找到有关如何执行此操作的任何信息。有什么想法吗?

目前我正在使用两层解决方法:

  1. 具有3个过滤器的3x3内核和步幅1(以及零填充以节省像素数)的Conv2D层;

  2. 我将之前的Conv2DTranspose图层应用于输出。

  3. 这会捕获所需的信息,并且其想法是它沿着过滤器维度对位置信息进行编码,并且总参数计数为351,因此它应具有足够的自由度来近似相同的效果。

    我也可以尝试在中间层使用27个滤镜,这有点像将3x3x3像素信息“展平”为一个“像素”。唯一的缺点是这导致总共1,053个参数;方式比以前更多。好处是它让我有机会在这个编码步骤中引入非线性;也许模型可以从这些额外的参数中受益。

0 个答案:

没有答案