Pytorch 卷积自动编码器输出模糊。如何改善?

问题描述 投票:0回答:1

我使用 Pytorch 创建了卷积自动编码器,并且正在尝试改进它。

对于编码层,我使用来自

ResNet 18 model
的预训练
torchvision.models.resnet
的前 4 层。

我的中间层只有一个

Convolutional layer
,输入和输出通道大小为 512。对于解码层,我使用
Convolutional layers
,后跟
BatchNorm
ReLU
激活函数。

解码层减少每层的通道:

512 -> 256 -> 128 -> 64 -> 32 -> 16 -> 3
,并通过插值增加图像的分辨率,以匹配编码部分相应层的维度。对于最后一层,我使用
sigmoid
而不是
ReLu

所有

Convolutional layer
是:

self.up = nn.Sequential(
                nn.Conv2d(input_channels, output_channels, 
                    kernel_size=5, stride=1,
                    padding=2, bias=False),
                nn.BatchNorm2d(output_channels),
                nn.ReLU()
            )

输入图像缩放至

[0, 1]
范围并具有形状
224x224x3
。样本输出是(第一个来自训练集,第二个来自测试集):

First image

First image output

Second image

Second image output

有什么想法为什么输出模糊吗?提供的模型已使用

160 epochs
优化器和
~16000
围绕
Adam
lr=0.00005
图像进行训练。我正在考虑在上面给出的
Convolutional
中再添加一层
self.up
层。这会增加模型的复杂性,但我不确定这是否是改进模型的正确方法。

deep-learning conv-neural-network pytorch autoencoder
1个回答
0
投票

您可能在像素值上使用 L2 或 MSE 损失。截至 2016 年,SOTA 将使用感知损失 - 一种使用 CNN 特征提取器的奇特方式(只需删除最终分类头)并使用特征的 L2/MSE 误差。

https://arxiv.org/abs/1603.08155

© www.soinside.com 2019 - 2024. All rights reserved.