GoogLeNet, posteriormente renomeado Inception v1, é uma rede neural convolucional (CNN) para visão computacional introduzida por pesquisadores do Google em 2014. Ele venceu o ImageNet Large-Scale Visual Recognition Challenge 2014 (ILSVRC14), reduzindo significativamente a taxa de erro na classificação de imagens. A arquitetura foi historicamente importante como uma CNN inicial que separa o stem (ingestão de dados), o corpo (processamento de dados) e a cabeça (predição), um design que persiste na maioria das arquiteturas modernas de CNN.
O nome "GoogLeNet" foi uma homenagem ao LeNet, a CNN de 1998 criada por Yann LeCun, já que ambos são CNNs. A equipe também o chamou de "Inception" em referência a um meme da internet "we need to go deeper", uma frase do filme Inception de 2010. Como versões posteriores foram lançadas, a arquitetura original foi renomeada para "Inception v1". Os modelos e o código foram disponibilizados sob a licença Apache 2.0 no GitHub.
Arquitetura e Inovações Principais
O Inception v1 é uma CNN profunda composta por 22 camadas, a maioria das quais são "módulos Inception". O artigo original descreveu os módulos Inception como uma "culminação lógica" da abordagem Network in Network e do trabalho de Arora et al. (2014). Cada módulo Inception aplica múltiplos filtros convolucionais de diferentes tamanhos (1x1, 3x3, 5x5) e pooling em paralelo, e então concatena suas saídas, permitindo que a rede capture características em várias escalas.
Devido à sua profundidade, o Inception v1 sofria do problema do gradiente vanishing. A equipe resolveu isso inserindo dois "classificadores auxiliares" a um terço e dois terços da profundidade da rede. A função de perda era uma soma ponderada dos três classificadores: L = 0,3 L_aux1 + 0,3 L_aux2 + L_real. Esses classificadores auxiliares foram removidos após o término do treinamento. Esse problema foi posteriormente resolvido de forma mais fundamental pela arquitetura ResNet.
A arquitetura consiste em três partes empilhadas umas sobre as outras:
- O stem (ingestão de dados): As primeiras camadas convolucionais realizam o pré-processamento dos dados para reduzir as imagens a um tamanho menor.
- O corpo (processamento de dados): Os muitos módulos Inception seguintes realizam a maior parte do processamento de dados.
- A cabeça (predição): A camada final totalmente conectada e o softmax produzem uma distribuição de probabilidade para a classificação de imagens.
Inception v2
O Inception v2 foi lançado em 2015, em um artigo mais famoso por propor a normalização em lote. Ele tinha 13,6 milhões de parâmetros. Melhorou o Inception v1 adicionando normalização em lote e removendo dropout e normalização de resposta local, que os pesquisadores descobriram se tornarem desnecessárias quando a normalização em lote era usada.
Inception v3
O Inception v3 foi lançado em 2016. Ele melhorou o Inception v2 usando convoluções fatoradas. Por exemplo, uma única convolução 5x5 pode ser fatorada em duas convoluções 3x3 empilhadas, ambas com um campo receptivo de tamanho 5x5. O kernel 5x5 tem 25 parâmetros em comparação com 18 na versão fatorada, tornando a versão fatorada mais eficiente em parâmetros. A equipe descobriu empiricamente que convoluções fatoradas ajudavam no desempenho.
Ele também introduziu uma forma de redução de dimensionalidade concatenando a saída de uma camada convolucional e uma camada de pooling. Por exemplo, um tensor de tamanho 35x35x320 pode ser reduzido por uma convolução com stride 2 para 17x17x320, e por maxpooling com tamanho de pool 2x2 para 17x17x320, que são então concatenados para 17x17x640.
O Inception v3 também removeu o classificador auxiliar mais baixo durante o treinamento, descobrindo que a cabeça auxiliar funcionava como uma forma de regularização. Além disso, propôs a regularização por suavização de rótulos: para uma imagem com rótulo c, em vez de prever a distribuição one-hot δ_c, o modelo prevê uma distribuição suavizada (1 - ε)δ_c + ε/K, onde K é o número total de classes.
Inception v4 e Inception ResNet
Em 2017, a equipe lançou o Inception v4, o Inception ResNet v1 e o Inception ResNet v2. O Inception v4 foi uma atualização incremental com ainda mais convoluções fatoradas e outras complicações empiricamente encontradas para melhorar os benchmarks. O Inception ResNet v1 e o v2 são ambas modificações do Inception v4, onde conexões residuais são adicionadas a cada módulo Inception, inspiradas pela arquitetura ResNet.
Xception
O Xception ("Extreme Inception") foi publicado em 2017. É uma pilha linear de camadas de convolução separáveis por profundidade com conexões residuais. O design foi proposto com base na hipótese de que, em uma CNN, as correlações entre canais e as correlações espaciais nos mapas de características podem ser totalmente desacopladas. O treinamento de cada rede Xception levou 3 dias em 60 GPUs K80, ou aproximadamente 0,5 petaFLOP-dias.
A família Inception tem sido altamente influente no desenvolvimento do deep learning para visão computacional, e seus princípios arquitetônicos continuam a informar o design moderno de CNNs.