Como lidar com redimensionamento de imagens em Deep Learning

The english version of this article is available in https://medium.com/infosimples/how-to-deal-with-image-resizing-in-deep-learning-e5177fad7d89

Este artigo é uma continuação do artigo publicado pela Infosimples no dia 19/11/2018: https://medium.com/infosimples-br/a-cnn-aprende-entradas-modificadas-e3d946349bcc

SE VOCÊ NÃO QUISER LER TUDO: A melhor maneira de lidar com imagens de tamanhos diferentes é diminuir todas para o menor tamanho disponível.

Se você leu nosso artigo anterior, sabe que CNNs são capazes de capturar informações de imagens mesmo se seus canais estiverem invertidos, porém com um custo na acurácia do modelo.

Este artigo explora um problema análogo: suponha que cada canal de cor de uma imagem tenha tamanho diferente. Quais serão os melhores métodos para treinar um modelo de classificação de imagens nessas circunstâncias?

Primeiro, vamos criar um modelo simples que serve de referência para todas as técnicas que serão empregadas neste artigo:

Layer                        Output Shape              Param #   
=================================================================
InputLayer (None, 100, 100, 3) 0
_________________________________________________________________
Conv2D (None, 100, 100, 32) 896
_________________________________________________________________
MaxPooling2D (None, 50, 50, 32) 0
_________________________________________________________________
Dropout (None, 50, 50, 32) 0
_________________________________________________________________
Conv2D (None, 50, 50, 64) 18496
_________________________________________________________________
MaxPooling2D (None, 25, 25, 64) 0
_________________________________________________________________
Dropout (None, 25, 25, 64) 0
_________________________________________________________________
Flatten (None, 40000) 0
_________________________________________________________________
Dense (None, 128) 5120128
_________________________________________________________________
Dropout (None, 128) 0
_________________________________________________________________
Dense (None, 2) 258
=================================================================

É um modelo simples, capaz de diferenciar imagens com cachorros de imagens que não tem cachorros, com apenas duas convoluções. Após treiná-lo por 10 eras com imagens completas (3 canais, 100x100 pixels), os seguintes resultados foram obtidos:

O valor máximo de 77.58% obtido na acurácia de validação será usado como referência para os experimentos deste artigo.

Técnicas de scaling

Todos sabemos que uma imagem perde qualidade quando se aplica zoom nela. Ao tentar colocar uma pequena quantidade de pixels numa tela com resolução bem maior, é necessário "criar" novos pixels para ocupar os buracos que apareceriam. Existem diversas técnicas para fazer isso:

Imagem original (160x160) — Nearest-neighbor interpolation — Bilinear interpolation
Bicubic interpolation — Fourier-based interpolation — Edge-directed interpolation algorithms

Cada uma dessas imagens foi encolhida para 40x40 e depois redimensionada para 160x160 usando cada um dos algoritmos de upscaling citados. Apesar da brutal perda de qualidade, continuamos entendendo que a imagem é de uma concha, mesmo com 1/16 da informação original.

E para treinar redes neurais? É melhor usar qual algoritmo de upscaling? Ou será que é melhor encolher as imagens? Vamos descobrir.

A seguir temos recortes de camadas e combinações das mesmas usando diferentes algoritmos de upscaling:

Também testaremos a seguinte arquitetura de rede, que diminui as imagens durante o treinamento, através de convoluções:

Chamaremos essa arquitetura de "Multiresolution CNN"

A rede acima foi desenvolvida com a ideia de que as convoluções que reduzem a dimensão dos canais de cor extrairiam as features mais significantes ao fazer o downscaling. Você pode conferir o código aqui:


Após treinar rede neural simples mostrada no começo do artigo com diversas variações de técnicas de upscaling, obtemos as seguintes taxas de acurácia:

Resultados pós-treinamento

Se considerarmos apenas o resultado do dataset de validação, chegamos a conclusão que qualquer técnica de upscaling é inferior ao downscaling das imagens. O melhor a se fazer, em casos desse tipo, é simplesmente normalizar com base no menor tamanho.