Como preparar um conjunto de dados de legenda de fotos para treinar um modelo de aprendizado profundo

Como preparar um conjunto de dados de legenda de fotos para treinar um modelo de aprendizado profundo

A legenda automática de fotos é um problema em que um modelo deve gerar uma descrição textual legível a partir de uma fotografia.

É um problema desafiador em inteligência artificial que requer tanto a compreensão de imagens do campo da visão computacional quanto a geração de linguagem do campo do processamento de linguagem natural.

Agora é possível desenvolver seus próprios modelos de legenda de imagem usando aprendizado profundo e conjuntos de dados de fotos disponíveis gratuitamente e suas descrições.

Neste tutorial, você descobrirá como preparar fotos e descrições textuais prontas para desenvolver um modelo de geração automática de legenda de fotos de aprendizado profundo.

Depois de concluir este tutorial, você saberá:

  • Sobre o conjunto de dados do Flickr8K composto por mais de 8.000 fotos e até 5 legendas para cada foto.
  • Como geralmente carregar e preparar dados de foto e texto para modelagem com aprendizado profundo.
  • Como codificar dados especificamente para dois tipos diferentes de modelos de aprendizado profundo no Keras.

Comece seu projeto com meu novo livro Deep Learning for Natural Language Processing, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

  • Atualização novembro / 2017: Corrigidos pequenos erros de digitação no código na seção “Modelo de sequência de descrição completa" seção. Obrigado Moustapha Cheikh e Matthew.
  • Atualização Fev / 2019: Forneceu links diretos para o conjunto de dados Flickr8k_Dataset, uma vez que o site oficial foi retirado.
Como preparar um conjunto de dados de legenda de fotos para treinar um modelo de aprendizado profundo

Como preparar um conjunto de dados de legenda de fotos para treinar um modelo de aprendizado profundo
Foto de beverlyislike, alguns direitos reservados.

Visão geral do tutorial

Este tutorial é dividido em 9 partes; eles estão:

  1. Baixe o conjunto de dados Flickr8K
  2. Como Carregar Fotografias
  3. Pré-calcular recursos de fotos
  4. Como carregar descrições
  5. Prepare o texto da descrição
  6. Modelo de sequência de descrição completa
  7. Modelo palavra por palavra
  8. Carregamento progressivo
  9. Pré-calcular recursos de fotos

Ambiente Python

Este tutorial presume que você tenha um ambiente Python 3 SciPy instalado. Você pode usar Python 2, mas pode precisar alterar alguns dos exemplos.

Você deve ter o Keras (2.0 ou superior) instalado com o back-end TensorFlow ou Theano.

O tutorial também presume que você tenha o scikit-learn, Pandas, NumPy e Matplotlib instalados.

Se precisar de ajuda com seu ambiente, veja esta postagem:

Precisa de ajuda com Deep Learning for Text Data?

Faça meu curso intensivo de e-mail gratuito de 7 dias agora (com código).

Clique para se inscrever e também obter uma versão gratuita do Ebook em PDF do curso.

Comece Seu Crash-Course GRÁTIS Agora

Baixe o conjunto de dados Flickr8K

Um bom conjunto de dados para usar ao iniciar a legendagem de imagens é o conjunto de dados Flickr8K.

A razão é que ele é realista e relativamente pequeno, de modo que você pode baixá-lo e construir modelos em sua estação de trabalho usando uma CPU.

A descrição definitiva do conjunto de dados está no artigo “Framing Image Description as a Ranking Task: Data, Models and Evaluation Metrics” de 2013.

Os autores descrevem o conjunto de dados da seguinte forma:

Apresentamos uma nova coleção de referência para a descrição e pesquisa de imagens com base em frases, consistindo em 8.000 imagens que são combinadas com cinco legendas diferentes que fornecem descrições claras das entidades e eventos salientes.

As imagens foram escolhidas em seis grupos diferentes do Flickr e tendem a não conter pessoas ou locais conhecidos, mas foram selecionadas manualmente para representar uma variedade de cenas e situações.

- Enquadrar a descrição da imagem como uma tarefa de classificação: dados, modelos e métricas de avaliação, 2013.

O conjunto de dados está disponível gratuitamente. Você deve preencher um formulário de solicitação e os links para o conjunto de dados serão enviados a você por e-mail. Eu adoraria criar um link para eles para você, mas o endereço de e-mail solicita expressamente: “Não redistribua o conjunto de dados“.

Você pode usar o link abaixo para solicitar o conjunto de dados:

Dentro de pouco tempo, você receberá um e-mail que contém links para dois arquivos:

  • Flickr8k_Dataset.zip (1 Gigabyte) Um arquivo de todas as fotografias.
  • Flickr8k_text.zip (2,2 Megabytes) Um arquivo de todas as descrições de texto para fotografias.

ATUALIZAÇÃO (fevereiro / 2019): O site oficial parece ter sido retirado (embora o formulário ainda funcione). Aqui estão alguns links diretos para download do meu repositório GitHub de conjuntos de dados:

Baixe os conjuntos de dados e descompacte-os em seu diretório de trabalho atual. Você terá dois diretórios:

  • Flicker8k_Dataset: Contém 8092 fotografias em formato jpeg.
  • Flickr8k_text: Contém vários arquivos contendo diferentes fontes de descrições para as fotografias.

A seguir, vamos ver como carregar as imagens.

Como Carregar Fotografias

Nesta seção, desenvolveremos algum código para carregar as fotos para uso com a biblioteca de aprendizado profundo Keras em Python.

Os nomes dos arquivos de imagem são identificadores de imagem exclusivos. Por exemplo, aqui está um exemplo de nomes de arquivo de imagem:

Keras fornece o load_img () função que pode ser usada para carregar os arquivos de imagem diretamente como uma matriz de pixels.

Os dados de pixel precisam ser convertidos em uma matriz NumPy para uso no Keras.

Podemos usar o img_to_array () keras funcionam para converter os dados carregados.

Podemos querer usar um modelo de extração de recursos predefinido, como uma rede de classificação de imagem profunda de última geração treinada na rede de imagens. O modelo Oxford Visual Geometry Group (VGG) é popular para esse propósito e está disponível em Keras.

O modelo Oxford Visual Geometry Group (VGG) é popular para esse propósito e está disponível em Keras.

Se decidirmos usar este modelo pré-treinado como um extrator de recursos em nosso modelo, podemos pré-processar os dados de pixel para o modelo usando o preprocess_input () função em Keras, por exemplo:

Também podemos querer forçar o carregamento da foto para que tenha as mesmas dimensões em pixels do modelo VGG, que são 224 x 224 pixels. Podemos fazer isso na chamada para load_img (), por exemplo:

Podemos querer extrair o identificador de imagem exclusivo do nome do arquivo de imagem. Podemos fazer isso dividindo a string do nome do arquivo por '.' (ponto) caractere e recuperando o primeiro elemento da matriz resultante:

Podemos amarrar tudo isso e desenvolver uma função que, dado o nome do diretório que contém as fotos, carregue e pré-processe todas as fotos para o modelo VGG e as retorne em um dicionário com seus identificadores de imagem exclusivos.

A execução deste exemplo imprime o número de imagens carregadas. Leva alguns minutos para ser executado.

Se você não tiver a RAM para armazenar todas as imagens (cerca de 5 GB pela minha estimativa), então você pode adicionar uma instrução if para interromper o loop logo após o carregamento de 100 imagens, por exemplo:

Pré-calcular recursos de fotos

É possível usar um modelo pré-treinado para extrair os recursos das fotos no conjunto de dados e armazenar os recursos em arquivo.

Esta é uma eficiência que significa que a parte da linguagem do modelo que transforma recursos extraídos da foto em descrições textuais pode ser treinada independentemente do modelo de extração de recursos. A vantagem é que os modelos pré-treinados muito grandes não precisam ser carregados, mantidos na memória e usados ​​para processar cada foto durante o treinamento do modelo de idioma.

Mais tarde, o modelo de extração de recursos e o modelo de linguagem podem ser reunidos para fazer previsões em novas fotos.

Nesta seção, estenderemos o comportamento de carregamento de fotos desenvolvido na seção anterior para carregar todas as fotos, extrair seus recursos usando um modelo VGG pré-treinado e armazenar os recursos extraídos em um novo arquivo que pode ser carregado e usado para treinar o modelo de linguagem.

A primeira etapa é carregar o modelo VGG. Este modelo é fornecido diretamente no Keras e pode ser carregado da seguinte maneira. Observe que isso fará o download dos pesos do modelo de 500 megabytes para o seu computador, o que pode levar alguns minutos.

Você também pode estar interessado em