我使用Pytorch创建了卷积自动编码器,并试图改进它。
对于编码层,我使用来自torchvision.models.resnet
的预训练ResNet 18 model
的前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
知道为什么输出模糊吗?所提供的模型已经使用lr=0.00005
的Adam
优化器围绕160 epochs
和~16000
图像进行了训练。我正在考虑在上面给出的self.up
中再添加一个Convolutional
层。这将增加模型的复杂性,但我不确定这是否是改进模型的正确方法。
1条答案
按热度按时间fnatzsnv1#
您可能对像素值使用了L2或MSE损失。截至2016年,SOTA将使用感知损失-一种使用CNN特征提取器的奇特方式(只需删除最终分类头)并使用特征的L2/MSE错误。
https://arxiv.org/abs/1603.08155