Tensorflow por Brasileiros — Deep Learning para classificação de imagens

Source: Deep Learning on Medium

Tensorflow por Brasileiros — Deep Learning para classificação de imagens

Salve, salve pessoal tudo bem ? Estava meio sumido por conta do trabalho é do doutorado, mas estou de volta é graças a minha pesquisa venho aqui compartilhar dessa vez com vocês como construir uma Deep Learning para classificação de imagens, algo que de cara parece ser super complexo, mas hoje iremos quebrar todos esses paradigmas …. vamos lá.

Classificação de Imagens

Classificar imagens como o próprio nome diz é rotular imagens em um grande volume de dados com alguma dadas classes de treinamento, por exemplo, um classificador capaz de classificar imagens como sendo de cachorro ou gato.

Para que essa classificação seja precisa é necessário um volume considerável de imagens de treinamento (200+), não existe um número chave, esse valor vai depender da complexidade das imagens e do respectivo número de classes, logo, mais classes significa mais imagens para o seu conjunto de treinamento.

Deep Learning

Uma maneira rápida e inteligente de se construir um classificador é usando Deep Learning, se você ainda não esta familiarizado com o termo e a tecnologia em si eu recomendo a leitura do seguinte post (Introdução Deep Learning). De maneira resumida a nossa rede ira receber como parâmetro de entrada as imagens (pixels) e por meio do treinamento acontece a transferência do conhecimento através das camadas da rede. Quando uma nova imagem é inserida para a predição a rede recupera e retorna os modelos mais similares treinados.

Montando a Base de Imagens

A CNN que iremos montar hoje será capaz de classificar três classes de imagens (Darth Vader, Maul, Spider Man). Para começarmos nossa base de treinamento iremos baixar uma extensão do Google Chrome que possibilita baixar múltiplas imagens de uma só vez. O nome da extensão é Fatkun batch download image. Uma vez com a extensão instalada faça uma busca no Google Images por “ Darth Vader” e em seguida download all como a seguir.

Repita o mesmo procedimento para as demais classes que iremos treinar e estruture seus diretórios da seguinte maneira.

  • Images
  • -Darth Vader
  • Maul
  • Spider Man

Treinando a CNN

Para esse problema usaremos o modelo de rede Inception v3. O Inception v3 é um modelo de reconhecimento de imagem amplamente usado com uma precisão superior a 78,1% no conjunto de dados ImageNet. Esse modelo é o auge de muitas ideias desenvolvidas por vários pesquisadores ao longo dos anos. Ele é baseado no documento original “Rethinking the Inception Architecture for Computer Vision”, de Szegedy e outros autores.

O modelo em si é composto de componentes simétricos e assimétricos, incluindo convoluções, agrupamentos médios, agrupamentos máximos, concatenações, desistências e camadas totalmente conectadas. A normalização em lote é usada extensivamente em todo o modelo e aplicada às entradas de ativação. A perda é calculada por meio da função softmax.

Veja abaixo um diagrama geral do modelo:

Para treinar nossa rede iremos utilizar o algoritmo disponibilizado pelo Tensorflow, disponibilizei o mesmo no meu repositório (retain.py). Com ele baixado execute o comando a seguir para iniciar o treinamento.

Vamos entender como funciona cada um dos parâmetros utilizados:

  • –bottleneck_dir= diretório para salvar as imagens convertidas em pixels;
  • –how_many_training_steps Número de interações de treinamento;
  • –model_dir=Salvar a arquitetura da rede;
  • –output_graph=Diretório para salvar a visualização do Tensorboard;
  • –output_labels=Salvar as categorias das imagens;
  • –image_dir Diretório com as imagens para treinamento.

Passando alguns minutos você terá seu modelo treinado com aproximadamente 85 ~ 95% de acurácia.

Realizando predições /classificação

Agora que já treinamos nosso modelo podemos realizar predições/classificações a partir do nosso modelo. para isso construi um algoritmo para a realização do mesmo a seguir.

Vamos executar um exemplo com a seguinte imagem que não esta presente no nosso conjunto de treinamento e iremos analisar o resultado.

Espero que tenham gostado da nossa postagem, todo fonte utilizado nesse projeto e demais se encontra no meu Github.

Abraços e até a próxima pessoal…..