A reconstrução de imagens em super-resolução é um problema pesquisado de forma constante na área de processamento de imagens e visão computacional. O processo consiste em reconstruir uma imagem de maior resolução a partir de uma versão reduzida. Ao contrário do que a TV quer nos fazer acreditar, esta reconstrução não é possível a partir de uma imagem apenas em baixa resolução, pois parte de sua estrutura está irrevogavelmente perdida.
Ao contrário, os algoritmos muitas vezes trabalham usando dicionários de pares de trechos de imagens de alta resolução e suas versões em baixa resolução com a finalidade de preencher pedaços perdidos de informação.
Redes neurais, em particular redes neurais convolucionais profundas, são uma classe de algoritmos de aprendizagem de máquina capazes de aprender com eficácia o mapeamento entre pares de pedaços de imagem, e generalizar a predição além do conjunto de exemplos de fornecidos.
As redes neurais foram inventadas em 1940 como um modelo matemático para aprendizagem baseado no funcionamento do cérebro. Entretanto, apenas os avanços das ultimas duas décadas no campo das tecnologias da informação possibilitaram simular de forma eficaz redes com milhões de neurônios.
Uma rede neural consiste de um número de camadas interconectadas que gradualmente transformam um número de variáveis de entrada em uma saída. Ajustando os pesos entre os neurônios, um grande número de possíveis mapeamentos podem ser computado.
Redes neurais convolucionais contém adicionalmente camadas que são bancos de filtro de imagem que podem ser configurados livremente, que podem formar detectores de arestas, por exemplo, se o problema de aprendizagem assim necessitar.
Em seu artigo, o engenheiro do Flipboard Norman Tasfi relata a aplicação desta tecnologia na empresa. Ela é usada para ampliar imagens em baixa resolução com o intuito de obter imagens visualmente atraentes. Essas imagens são usadas, por exemplo, como imagens de fundo ou de cabeçalho nas apresentações de artigos em seus produto.
O Flipboard usou redes neurais com oito camadas, três delas eram camadas convolucionais. As redes foram treinadas na nuvem da Amazon usando aceleração por GPU através da biblioteca NVIDIA's cuDNN, usando gradiente descendente, que é um procedimento que enxerga o erro de predição de cada entrada-saída de exemplo e então calcula uma atualização nos pesos da rede neural para diminuir o erro baseado nas informações do gradiente descendente.
As informações de atualização foram agrupadas em mais de 250 exemplos, chamados mini-lotes, antes de serem suavizadas.
O treinamento de um modelo levou cerca de 19 horas. Ao todo, cerca de 500 redes de configurações diferentes foram testadas, resultando em um tempo total de treinamento de aproximadamente 4 semanas.
O artigo não traz números de desempenho, mas ilustra em alguns exemplos de imagens que as reconstruções são de fato de alta qualidade. Comparado com algoritmos de escalonamento simples, os detalhes são especialmente construídos
de forma melhor.
Norman também relata que eles ficaram surpresos em descobrir que aspectos como a inicialização dos pesos é ponto chave para se obter um bom desempenho.
Este exemplo ilustra como redes neurais profundas estão sendo usadas além de casos puramente acadêmicos.