TLDR;您想查看Deconv networks(卷积转置),它有助于使用卷积运算重新生成图像。您想构建一个编码器-解码器卷积架构,该架构使用卷积将图像压缩为潜在表示,然后从该压缩表示中解码图像。对于图像分割,一个流行的架构是U-net。
注意:我无法回答 pytorch,所以我将分享 Tensorflow 等价物。请忽略代码,但由于您正在寻找概念,我可以帮助您解决此问题。
您正在尝试生成图像作为网络的输出。
一系列卷积运算有助于Downsample 一张图片。由于您需要输出 2D 矩阵(灰度图像),因此您也需要 Upsample。这样的网络称为 Deconv 网络。
第一系列层对输入进行卷积,将它们“展平”为通道向量。下一组层使用2D Conv Transpose 或Deconv 操作将通道改回二维矩阵(灰度图像)
参考这张图片-
这是一个示例代码,向您展示如何使用反卷积网络将 (10,3,1) 图像转换为 (12,10,1) 图像。
您可以在 pytorch here 中找到 conv2dtranspose 层实现。
from tensorflow.keras import layers, Model, utils
inp = layers.Input((128,128,1)) ##
x = layers.Conv2D(2, (3,3))(inp) ## Convolution part
x = layers.Conv2D(4, (3,3))(x) ##
x = layers.Conv2D(6, (3,3))(x) ##
##########
x = layers.Conv2DTranspose(6, (3,3))(x)
x = layers.Conv2DTranspose(4, (3,3))(x) ## ## Deconvolution part
out = layers.Conv2DTranspose(1, (3,3))(x) ##
model = Model(inp, out)
utils.plot_model(model, show_shapes=True, show_layer_names=False)
另外,如果您正在寻找该领域中久经考验的架构,请查看U-net; U-Net: Convolutional Networks for Biomedical Image Segmentation。这是一个encoder-decoder (conv2d, conv2d-transpose) 架构,它使用称为skip connections 的概念来避免信息丢失并生成更好的图像分割掩码。