Вывод сверточного автоэнкодера Pytorch размыт. Как это улучшить? - PullRequest
0 голосов
/ 11 ноября 2019

Я создал 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, указанный выше. Это увеличит сложность модели, но я не уверен, что это правильный способ улучшить модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...