我正在研究一个玩具问题,试图用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个参数。
我无法找到有关如何执行此操作的任何信息。有什么想法吗?
目前我正在使用两层解决方法:
具有3个过滤器的3x3内核和步幅1(以及零填充以节省像素数)的Conv2D层;
我将之前的Conv2DTranspose图层应用于输出。
这会捕获所需的信息,并且其想法是它沿着过滤器维度对位置信息进行编码,并且总参数计数为351,因此它应具有足够的自由度来近似相同的效果。
我也可以尝试在中间层使用27个滤镜,这有点像将3x3x3像素信息“展平”为一个“像素”。唯一的缺点是这导致总共1,053个参数;方式比以前更多。好处是它让我有机会在这个编码步骤中引入非线性;也许模型可以从这些额外的参数中受益。