curso
Uma introdução às redes neurais convolucionais (CNNs)
O que é uma rede neural convolucional (CNN)?
Uma rede neural convolucional (CNN), também conhecida como ConvNet, é um tipo especializado de algoritmo de aprendizagem profunda projetado principalmente para tarefas que exigem reconhecimento de objetos, incluindo classificação, detecção e segmentação de imagens. As CNNs são empregadas em diversos cenários práticos, como veículos autônomos, sistemas de câmeras de segurança e outros.
A importância das CNNs
Há vários motivos pelos quais as CNNs são importantes no mundo moderno, conforme destacado abaixo:
- As CNNs se diferenciam dos algoritmos clássicos de aprendizado de máquina, como SVMs e árvores de decisão, por sua capacidade de extrair recursos de forma autônoma em grande escala, evitando a necessidade de engenharia manual de recursos e, assim, aumentando a eficiência.
- As camadas convolucionais conferem às CNNs suas características invariantes de tradução, capacitando-as a identificar e extrair padrões e recursos dos dados, independentemente das variações de posição, orientação, escala ou tradução.
- Várias arquiteturas de CNN pré-treinadas, incluindo VGG-16, ResNet50, Inceptionv3 e EfficientNet, demonstraram desempenho de alto nível. Esses modelos podem ser adaptados a novas tarefas com relativamente poucos dados por meio de um processo conhecido como ajuste fino.
- Além das tarefas de classificação de imagens, as CNNs são versáteis e podem ser aplicadas a uma série de outros domínios, como processamento de linguagem natural, análise de séries temporais e reconhecimento de fala.
Inspiração por trás da CNN e paralelos com o sistema visual humano
As redes neurais convolucionais foram inspiradas na arquitetura em camadas do córtex visual humano, e abaixo estão algumas semelhanças e diferenças importantes:
Ilustração da correspondência entre as áreas associadas ao córtex visual primário e as camadas em uma rede neural convolucional(fonte)
- Arquitetura hierárquica: Tanto as CNNs quanto o córtex visual têm uma estrutura hierárquica, com recursos simples extraídos nas camadas iniciais e recursos mais complexos construídos em camadas mais profundas. Isso permite representações cada vez mais sofisticadas de entradas visuais.
- Conectividade local: Os neurônios do córtex visual se conectam apenas a uma região local da entrada, não a todo o campo visual. Da mesma forma, os neurônios em uma camada da CNN são conectados somente a uma região local do volume de entrada por meio da operação de convolução. Essa conectividade local permite a eficiência.
- Invariância de tradução: Os neurônios do córtex visual podem detectar características independentemente de sua localização no campo visual. As camadas de pooling em uma CNN fornecem um grau de invariância de tradução ao resumir os recursos locais.
- Vários mapas de recursos: Em cada estágio do processamento visual, há muitos mapas de recursos diferentes extraídos. As CNNs imitam isso por meio de vários mapas de filtros em cada camada de convolução.
- Não linearidade: Os neurônios do córtex visual apresentam propriedades de resposta não lineares. As CNNs alcançam a não linearidade por meio de funções de ativação, como a ReLU, aplicadas após cada convolução.
As CNNs imitam o sistema visual humano, mas são mais simples, sem seus complexos mecanismos de feedback e contando com o aprendizado supervisionado em vez do não supervisionado, o que impulsiona os avanços na visão computacional apesar dessas diferenças.
Principais componentes de uma CNN
A rede neural convolucional é composta de quatro partes principais.
Mas como as CNNs aprendem com essas partes?
Eles ajudam as CNNs a imitar a forma como o cérebro humano opera para reconhecer padrões e recursos em imagens:
- Camadas convolucionais
- Unidade linear retificada (ReLU, na sigla em inglês)
- Camadas de pooling
- Camadas totalmente conectadas
Esta seção se aprofunda na definição de cada um desses componentes por meio do exemplo a seguir de classificação de um dígito manuscrito.
Arquitetura das CNNs aplicadas ao reconhecimento de dígitos(fonte)
Camadas de convolução
Esse é o primeiro bloco de construção de uma CNN. Como o nome sugere, a principal tarefa matemática realizada é chamada de convolução, que é a aplicação de uma função de janela deslizante a uma matriz de pixels que representa uma imagem. A função deslizante aplicada à matriz é chamada de kernel ou filtro, e ambos podem ser usados de forma intercambiável.
Na camada de convolução, vários filtros de tamanho igual são aplicados, e cada filtro é usado para reconhecer um padrão específico da imagem, como a curvatura dos dígitos, as bordas, a forma completa dos dígitos e muito mais.
Simplificando, na camada de convolução, usamos pequenas grades (chamadas de filtros ou kernels) que se movem sobre a imagem. Cada pequena grade é como uma mini lupa que procura padrões específicos na foto, como linhas, curvas ou formas. À medida que se move pela foto, ele cria uma nova grade que destaca onde encontrou esses padrões.
Por exemplo, um filtro pode ser bom em encontrar linhas retas, outro pode encontrar curvas e assim por diante. Ao usar vários filtros diferentes, a CNN pode ter uma boa ideia de todos os diferentes padrões que compõem a imagem.
Vamos considerar esta imagem em escala de cinza 32x32 de um dígito manuscrito. Os valores na matriz são fornecidos para fins ilustrativos.
Ilustração da imagem de entrada e sua representação de pixels
Além disso, vamos considerar o kernel usado para a convolução. É uma matriz com uma dimensão de 3x3. Os pesos de cada elemento do kernel são representados na grade. Os pesos zero são representados nas grades pretas e os pesos um na grade branca.
Temos que encontrar manualmente esses pesos?
Na vida real, os pesos dos núcleos são determinados durante o processo de treinamento da rede neural.
Usando essas duas matrizes, podemos realizar a operação de convolução aplicando o produto escalar e trabalhar da seguinte forma:
- Aplique a matriz de kernel do canto superior esquerdo para o direito.
- Executar a multiplicação por elementos.
- Somar os valores dos produtos.
- O valor resultante corresponde ao primeiro valor (canto superior esquerdo) na matriz convoluta.
- Mova o kernel para baixo com relação ao tamanho da janela deslizante.
- Repita as etapas de 1 a 5 até que a matriz de imagem esteja totalmente coberta.
A dimensão da matriz convoluta depende do tamanho da janela deslizante. Quanto maior a janela deslizante, menor a dimensão.
Aplicação da tarefa de convolução usando um passo de 1 com kernel 3x3
Outro nome associado ao kernel na literatura é detector de recursos porque os pesos podem ser ajustados para detectar recursos específicos na imagem de entrada.
Por exemplo:
- O kernel de média dos pixels vizinhos pode ser usado para desfocar a imagem de entrada.
- A subtração do kernel vizinho é usada para realizar a detecção de bordas.
Quanto mais camadas de convolução a rede tiver, melhor será a camada na detecção de recursos mais abstratos.
Função de ativação
Uma função de ativação ReLU é aplicada após cada operação de convolução. Essa função ajuda a rede a aprender relações não lineares entre os recursos da imagem, o que torna a rede mais robusta para identificar diferentes padrões. Isso também ajuda a atenuar os problemas de gradiente decrescente.
Camada de pooling
O objetivo da camada de agrupamento é extrair os recursos mais significativos da matriz convoluta. Isso é feito por meio da aplicação de algumas operações de agregação, que reduzem a dimensão do mapa de recursos (matriz convoluta) e, portanto, reduzem a memória usada no treinamento da rede. O agrupamento também é relevante para atenuar o ajuste excessivo.
As funções de agregação mais comuns que podem ser aplicadas são:
- Pooling máximo, que é o valor máximo do mapa de recursos
- O pooling de soma corresponde à soma de todos os valores do mapa de recursos
- O pooling médio é a média de todos os valores.
Abaixo está uma ilustração de cada um dos exemplos anteriores:
Aplicação do max pooling com um passo de 2 usando o filtro 2x2
Além disso, a dimensão do mapa de recursos se torna menor à medida que a função de agrupamento é aplicada.
A última camada de agrupamento achata seu mapa de recursos para que ele possa ser processado pela camada totalmente conectada.
Camadas totalmente conectadas
Essas camadas estão na última camada da rede neural convolucional, e suas entradas correspondem à matriz unidimensional achatada gerada pela última camada de agrupamento. As funções de ativação ReLU são aplicadas a eles para obter a não linearidade.
Por fim, uma camada de previsão softmax é usada para gerar valores de probabilidade para cada um dos possíveis rótulos de saída, e o rótulo final previsto é aquele com a maior pontuação de probabilidade.
Sobreajuste e regularização em CNNs
O excesso de ajuste é um desafio comum nos modelos de aprendizado de máquina e nos projetos de aprendizado profundo da CNN. Isso acontece quando o modelo aprende muito bem os dados de treinamento ("aprender de cor"), incluindo o ruído e os valores atípicos. Esse tipo de aprendizado leva a um modelo com bom desempenho nos dados de treinamento, mas com desempenho ruim em dados novos e não vistos.
Isso pode ser observado quando o desempenho nos dados de treinamento é muito baixo em comparação com o desempenho nos dados de validação ou teste, e uma ilustração gráfica é apresentada a seguir:
Subajuste versus ajuste. Ajuste excessivo
Os modelos de aprendizagem profunda, especialmente as redes neurais convolucionais (CNNs), são particularmente suscetíveis ao overfitting devido à sua capacidade de alta complexidade e de aprender padrões detalhados em dados de grande escala.
Várias técnicas de regularização podem ser aplicadas para atenuar o excesso de ajuste em CNNs, e algumas são ilustradas a seguir:
7 estratégias para atenuar o ajuste excessivo em CNNs
- Desistência: Isso consiste em descartar aleatoriamente alguns neurônios durante o processo de treinamento, o que força os neurônios restantes a aprender novos recursos com os dados de entrada.
- Normalização em lote: O excesso de ajuste é reduzido até certo ponto pela normalização da camada de entrada, ajustando e dimensionando as ativações. Essa abordagem também é usada para acelerar e estabilizar o processo de treinamento.
- Camadas de pooling: Isso pode ser usado para reduzir as dimensões espaciais da imagem de entrada para fornecer ao modelo uma forma abstrata de representação, reduzindo, assim, a chance de ajuste excessivo.
- Parada precoce: Isso consiste em monitorar consistentemente o desempenho do modelo nos dados de validação durante o processo de treinamento e interromper o treinamento sempre que o erro de validação não melhorar mais.
- Injeção de ruído: Esse processo consiste em adicionar ruído às entradas ou às saídas das camadas ocultas durante o treinamento para tornar o modelo mais robusto e evitar que ele tenha uma generalização fraca.
- Normalizações L1 e L2: Tanto o L1 quanto o L2 são usados para adicionar uma penalidade à função de perda com base no tamanho dos pesos. Mais especificamente, o L1 incentiva os pesos a serem sobressalentes, levando a uma melhor seleção de recursos. Por outro lado, o L2 (também chamado de decaimento do peso) incentiva os pesos a serem pequenos, evitando que tenham muita influência sobre as previsões.
- Aumento de dados: Esse é o processo de aumentar artificialmente o tamanho e a diversidade do conjunto de dados de treinamento aplicando transformações aleatórias como rotação, dimensionamento, inversão ou corte nas imagens de entrada.
Aplicações práticas de CNNs
As redes neurais convolucionais revolucionaram o campo da visão computacional, levando a avanços significativos em muitas aplicações do mundo real. Abaixo estão alguns exemplos de como eles são aplicados.
Algumas aplicações práticas das CNNs
- Classificação de imagens: As redes neurais convolucionais são usadas para categorização de imagens, em que as imagens são atribuídas a categorias predefinidas. Um uso de tal cenário é a organização automática de fotos em plataformas de mídia social.
- Detecção de objetos: As CNNs são capazes de identificar e localizar vários objetos em uma imagem. Esse recurso é crucial em vários cenários de escaneamento de prateleiras no varejo para identificar itens fora de estoque.
- Reconhecimento facial: esse também é um dos principais setores de aplicação das CNNs. Por exemplo, essa tecnologia pode ser incorporada a sistemas de segurança para controle eficiente de acesso com base em características faciais.
Para uma implementação mais prática, nosso tutorial de redes neurais convolucionais (CNN) com TensorFlow ensina como construir e implementar CNNs em Python com a estrutura 2 do Tensorflow.
Estruturas de aprendizagem profunda para CNNs
O rápido crescimento da aprendizagem profunda se deve principalmente a estruturas avançadas como Tensorflow, Pytorch e Keras, que facilitam o treinamento de redes neurais convolucionais e outros modelos de aprendizagem profunda.
Vamos ter uma breve visão geral de cada estrutura.
Logotipos do Tensorflow, Keras e Pytorch
Tensorflow
O TensorFlow é uma estrutura de aprendizagem profunda de código aberto desenvolvida pelo Google e lançada em 2015. Ele oferece uma variedade de ferramentas para desenvolvimento e implantação de aprendizado de máquina. Nossa Introdução às Redes Neurais Prof undas fornece um guia completo para entender as redes neurais profundas e sua importância no mundo moderno da aprendizagem profunda da inteligência artificial, juntamente com implementações reais no Tensorflow.
Keras
O Keras é uma estrutura de rede neural de alto nível em Python que permite experimentação e desenvolvimento rápidos. Ele é de código aberto e pode ser usado em outras estruturas, como TensorFlow, CNTK e Theano. Nosso curso, Processamento de imagens com Keras em Python, ensina como realizar a análise de imagens usando Keras com Python, construindo, treinando e avaliando redes neurais convolucionais.
Pytorch
Lançado pela divisão de pesquisa de IA do Facebook em 2017, ele foi projetado para aplicações em processamento de linguagem natural e é conhecido por seu gráfico computacional dinâmico e eficiência de memória. Se você estiver interessado em mergulhar no Processamento de Linguagem Natural, nosso NLP with PyTorch: A Comprehensive Guide é um ótimo ponto de partida.
Cada projeto é diferente, portanto, a decisão realmente depende de quais características são mais importantes para um determinado caso de uso. Para ajudar a tomar melhores decisões, a tabela a seguir fornece uma breve comparação dessas estruturas, destacando seus recursos exclusivos.
Tensorflow |
Pytorch |
Keras |
|
Nível de API |
Both (Alto e Baixo) |
Baixa |
Alta |
Arquitetura |
Não é fácil de usar |
Complexo, menos legível |
Simples, conciso, legível |
Conjuntos de dados |
Grandes conjuntos de dados, alto desempenho |
Grandes conjuntos de dados, alto desempenho |
Conjuntos de dados menores |
Depuração |
Difícil de realizar a depuração |
Bons recursos de depuração |
Rede simples, portanto, a depuração não é necessária com frequência |
Modelos pré-treinados? |
Sim |
Sim |
Sim |
Popularidade |
O segundo mais popular dos três |
Terceiro mais popular dos três |
O mais popular dos três |
Velocidade |
Rápido e de alto desempenho |
Rápido e de alto desempenho |
Desempenho lento e baixo |
Escrito em |
C++, CUDA, Python |
Lua |
Python |
Tabela comparativa entre Tensorflow, Pytorch e Keras(fonte)
Conclusão
Este artigo apresentou uma visão geral completa do que é uma CNN na aprendizagem profunda, além de sua função crucial nas tarefas de reconhecimento e classificação de imagens.
Ele começou destacando a inspiração extraída do sistema visual humano para o design das CNNs e, em seguida, explorou os principais componentes que permitem que essas redes aprendam e façam previsões.
A questão do excesso de ajuste foi reconhecida como um desafio significativo para a capacidade de generalização das CNNs. Para atenuar isso, foram delineadas várias estratégias relevantes para atenuar o excesso de ajuste e melhorar o desempenho geral das CNNs.
Por fim, algumas das principais estruturas de CNN de aprendizagem profunda foram mencionadas, juntamente com os recursos exclusivos de cada uma e como elas se comparam entre si.
Deseja se aprofundar no mundo da IA e do aprendizado de máquina? Leve sua experiência para o próximo nível inscrevendo-se no curso Deep Learning with PyTorch hoje mesmo.
Comece sua jornada de aprendizagem profunda hoje mesmo!
curso
Introduction to Deep Learning with PyTorch
curso
Introduction to Deep Learning with Keras
blog
O que são redes neurais?
tutorial
Introdução às redes neurais profundas
tutorial
Dominando a retropropagação: Um guia abrangente para redes neurais
tutorial
Perceptrons multicamadas em aprendizado de máquina: Um guia abrangente
tutorial
Uma introdução abrangente às redes neurais de grafos (GNNs)
tutorial