Os Transformers são melhores que os CNNs para reconhecimento de imagem?

Link para o artigo —  https://arxiv.org/pdf/2010.11929.pdf

1. Descrição

        Hoje, em tarefas de processamento de linguagem natural (NLP), os transformadores se tornaram arquiteturas goto (por exemplo, BERT, GPT-3, etc.). Por outro lado, o uso de transformadores em tarefas de visão computacional ainda é muito limitado. A maioria dos pesquisadores usa camadas convolucionais diretamente ou adiciona certos blocos de atenção junto com blocos convolucionais em aplicativos de visão computacional (como Xception, ResNet, EfficientNet, DenseNet, Inception, etc.). O artigo sobre Vision Transformer (ViT) implementa um modelo de transformador puro em sequências de imagens sem blocos convolucionais para classificar imagens. Este artigo mostra como o ViT alcança melhores resultados do que a maioria das redes CNN de última geração em vários conjuntos de dados de reconhecimento de imagem, enquanto usa menos recursos computacionais.

2. Transformador Visual (ViT)

        Transformadores são redes que operam em sequências de dados, como um conjunto de palavras. Esses conjuntos de palavras são primeiro tokenizados e depois alimentados no transformador. Transformer adiciona Atenção (operação quadrática — calcula o produto interno pareado entre cada par de palavras tokenizadas. À medida que o número de palavras aumenta, também aumenta o número de operações).

        Portanto, as imagens são mais difíceis de treinar em Transformers. As imagens são compostas de pixels e cada imagem pode conter de milhares a milhões de pixels. Portanto, no conversor, cada pixel será emparelhado com todos os outros pixels da imagem. Em uma imagem de tamanho 500*500 pixels, ou seja, 500^2, então o mecanismo de atenção levará (500^2)^2 operações. Esta é uma tarefa difícil, mesmo com várias GPUs. Portanto, para imagens, os pesquisadores geralmente usam alguma forma de atenção local (agrupamento de pixels) em vez de atenção global.

        Os autores do ViT abordam esse problema usando a atenção global, mas não em toda a imagem, mas em vários fragmentos de imagem. Portanto, primeiro divida a imagem grande em vários blocos pequenos (por exemplo, 16*16 pixels). Conforme mostrado na Figura 1.

Figura 1. Imagem dividida em patches (fonte: imagem do artigo original)

        Esses patches de imagem são então expandidos em uma série de imagens, conforme mostrado na Figura 2. Essas sequências de imagens têm incorporações posicionais.

Figura 2. Patches de imagem desenrolados em uma sequência de imagens (fonte: imagens do artigo original)

Inicialmente, o transformador não sabe qual patch deve ir para onde. Portanto, as incorporações posicionais ajudam o Transformer a entender onde cada patch deve se encaixar. No artigo, os autores usaram números simples 1, 2, 3...n para especificar a localização dos patches, conforme mostrado na Figura 3. Estes não são apenas números, mas vetores que podem ser aprendidos. Ou seja, o número 1 não é usado diretamente, mas existe uma tabela de consulta contendo um vetor para cada número que representa a posição do patch. Portanto, para o primeiro patch, pegue o primeiro vetor da tabela e coloque-o no transformador junto com o patch. Da mesma forma, para o segundo patch, pegue o segundo vetor da mesa e coloque-o no transformador com o segundo patch, e assim por diante. como mostra a foto 2.

Figura 3. Patches com incorporações posicionais (fonte: imagem do artigo original)

Figura 4. Embeddings posicionais como representações vetoriais (Fonte: Imagem criada pelo autor)

Patches de imagem são imagens pequenas (16*16 pixels). Isso de alguma forma precisa ser alimentado de forma que o transformador entenda. Uma maneira é expandir a imagem em um vetor dimensional 16*16 = 256. No entanto, os autores do artigo usaram uma projeção linear. Isso significa que existe uma matriz, denotada "E" (incorporação). Um único patch é obtido e desdobrado em um vetor linear primeiro. Este vetor é então multiplicado com a matriz de imersão E. O resultado final é então alimentado ao transformador junto com as incorporações posicionais.

Todos os patches (projeções lineares) e suas incorporações de posição individuais são então alimentados no Transformer Encoder. O transformador é uma arquitetura de transformador padrão (você só precisa prestar atenção - papel).

Há uma incorporação adicional que pode ser aprendida, denominada posição zero, conforme mostrado na Figura 5. A saída dessa incorporação é usada para finalmente classificar toda a imagem.

Figura 5. Arquitetura completa do ViT com incorporações adicionais que podem ser aprendidas - marcadas em vermelho, incorporação mais à esquerda (fonte: imagem do artigo original)

3. Resultados

        A Tabela 1 mostra a comparação de resultados do ViT com arquiteturas CNN de última geração em vários conjuntos de dados. O ViT é pré-treinado no conjunto de dados JFT-300. Os resultados abaixo mostram que o ViT supera as arquiteturas baseadas em ResNet e as arquiteturas EfficentNet-L2 (pré-treinadas em pesos de alunos ruidosos) em todos os conjuntos de dados. Ambos os modelos são arquiteturas CNN de última geração. Na Tabela 1, ViT-H refere-se a ViT-Huge (32 camadas) e ViT-L refere-se a ViT-Large (24 camadas). Os números 14 e 16 após ViT-H/L indicam o tamanho do patch (14*14 ou 16*16) criado a partir de cada imagem.

A tabela também mostra que o ViT requer muito menos recursos computacionais em comparação com os outros 2 modelos de CNN.

Tabela 1. Comparação dos resultados do ViT com outras arquiteturas CNN em vários conjuntos de dados de imagem (fonte: tabela no artigo original)

A Figura 6 mostra a atenção que o Transformer dá ao classificar várias imagens.

Figura 6: Mecanismo de atenção dos tokens de saída para o espaço de entrada (fonte: imagem original do artigo)

4. Conclusão

4.1 Os Vision Transformers substituirão as CNNs em tarefas de visão computacional?

        As CNNs dominaram as tarefas de visão computacional até agora. As imagens são baseadas na ideia de que um pixel depende de seus vizinhos e o próximo pixel depende de seus vizinhos (cor, brilho, contraste, etc.). As CNNs trabalham com essa ideia e usam filtros em trechos de uma imagem para extrair recursos e arestas importantes. Isso ajuda o modelo a aprender apenas os recursos importantes necessários da imagem, em vez dos detalhes de cada pixel da imagem.

        No entanto, as chances de o modelo ter um desempenho melhor são maiores se todos os dados da imagem forem inseridos no modelo, não apenas as partes que o filtro pode extrair (ou as partes que ele considera importantes). Isso é exatamente o que está acontecendo dentro do conversor visual. Esta pode ser uma das razões pelas quais o Vision Transformer funciona melhor do que a maioria dos modelos CNN neste caso.

4.2 Mas isso significa que os Transformers substituirão as CNNs em tarefas de visão computacional no futuro?

        Bem, a resposta é, não tão rápido. Há poucos dias, foi lançado o modelo EfficientNet V2, com desempenho ainda melhor que os Vision Transformers. Significa apenas que agora podemos esperar novas arquiteturas de ambos os gêneros (CNNs e Transformers) para introduzir modelos novos, melhores e mais eficientes em um futuro próximo.

おすすめ

転載: blog.csdn.net/gongdiwudu/article/details/132248111