Я создал Convolutional Autoencoder, используя Pytorch, и пытаюсь улучшить его.
Для слоя кодирования я использую первые 4 предварительно подготовленных слоя ResNet 18 model
из torchvision.models.resnet
.
У меня есть средний слой только с одним Convolutional layer
с размерами входного и выходного каналов. из 512. Для слоя декодирования я использую Convolutional layers
с последующей функцией активации BatchNorm
и ReLU
.
Уровень декодирования уменьшает канал каждого уровня: 512 -> 256 -> 128 -> 64 -> 32 -> 16 -> 3
и увеличивает разрешение изображения синтерполяция для соответствия размеру соответствующего уровня в части кодирования. Для последнего слоя я использую sigmoid
вместо ReLu
.
Все Convolutional layer
s:
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
. Примеры выходных данных (первый из обучающего набора, второй из тестового набора):
первое изображение
первое изображение вывода
Второе изображение
Вывод второго изображения
Есть идеи, почему вывод получается размытым? Предоставленная модель прошла обучение на 160 epochs
с ~16000
изображениями с использованием Adam
оптимизатора с lr=0.00005
. Я подумываю добавить еще один слой Convolutional
в self.up
, указанный выше. Это увеличит сложность модели, но я не уверен, что это правильный способ улучшить модель.