
NOTÍCIAS / CIÊNCIA DE DADOS
Imagine que o senhor é o diretor de uma nova empresa iniciante de alta tecnologia, que pretende vender um produto totalmente novo (digamos, um novo dispositivo de IoT) para o mercado. O senhor participou de muitas conferências, exposições e demonstrações para comunicar antecipadamente sobre o seu produto e aumentar a conscientização. O impacto direto que o senhor espera é que as vendas do seu produto, uma vez lançado, possam ser altas o suficiente para atender aos seus objetivos.
Imagine que o senhor é o diretor de uma nova empresa iniciante de alta tecnologia, que pretende vender um produto totalmente novo (digamos, um novo dispositivo de IoT) para o mercado. O senhor participou de muitas conferências, exposições e demonstrações para comunicar antecipadamente sobre o seu produto e aumentar a conscientização. O impacto direto que o senhor espera é que as vendas do seu produto, uma vez lançado, possam ser altas o suficiente para atender aos seus objetivos.
Aqui está um problema: o senhor não tem nenhum meio de prever e estimar a demanda pelo seu produto.
Um fato simples que o senhor pode verificar é o quanto as pessoas estão falando sobre o seu produto na Internet. O senhor poderia dar uma olhada nas principais redes sociais (Facebook, Twitter, Instagram...) e quantificar quantas publicações mencionam seu produto. Isso lhe daria uma ideia da magnitude das vendas que o senhor poderia esperar.
O senhor tem duas opções para reconhecer um produto em uma publicação social. O senhor pode analisar o texto executando a mineração de texto ou pode executar o reconhecimento de imagem na imagem da publicação. Mas há um problema com a análise do texto: quando um produto é lançado, há poucas chances de que todos saibam seu nome e o mencionem imediatamente após a data de lançamento. Portanto, o reconhecimento de imagens é a solução preferida. Para reconhecer um produto em imagens (se o senhor tiver vários produtos para reconhecer), será necessário executar Detecção de objetos E é aí que entra o Tensorflow.
O que é o Tensorflow?
O Tensorflow é um código aberto biblioteca matemática que fornece APIs Python e C estáveis, usadas para várias tarefas de manipulação de data. Ela é altamente conhecida e usada para aplicativos de aprendizagem automática e aprendizagem profunda, como redes neurais. Os casos de uso pelos quais o Tensorflow é mais conhecido são o reconhecimento de imagens, o processamento de linguagem natural e a análise de fala para texto.
Nosso caso de uso específico é Detecção de objetos. O senhor pode usar o Tensorflow em diferentes níveis:
- Nível 1: Use um modelo pré-treinado disponível no mercado e aplique-o diretamente ao seu data para reconhecer os produtos. Esse método é o menos complexo e mais rápido, pois o senhor não precisa criar ou treinar um modelo.
- Nível 2: Treine um modelo em seu próprio data, para que o modelo possa aprender e conhecer a gama de seus produtos com precisão. Esse nível requer o treinamento de um modelo no data que o senhor etiquetou previamente. Isso leva mais tempo, mas traz resultados mais relevantes, pois o modelo reconhecerá as referências exatas do produto.
- Nível 3: Crie seu próprio modelo do zero. Nesse nível, o senhor não apenas treina um modelo, mas o constrói desde o início. Pode ser o ajuste de parâmetros em um modelo existente, bem como o desenvolvimento de uma nova arquitetura de rede neural. É mais dedicado a fins de pesquisa, pois é uma abordagem que consome muito tempo.
A seguir, descreveremos cada nível de uso do Tensorflow em mais detalhes.
Nível 1 - Usar um modelo pré-treinado
O primeiro uso básico é usar um modelo que já tenha sido treinado em um conjunto de data rotulado. Essa opção deve ser escolhida sempre que o data ao qual o senhor deseja aplicar o modelo for muito semelhante ao data de treinamento. Por exemplo, quando o senhor deseja reconhecer objetos genéricos como sapatos, smartphones, bolsas e assim por diante. Portanto, essa abordagem não será adequada se o senhor espera reconhecer uma marca e um modelo preciso de sua linha de produtos.
Normalmente, esses modelos são treinados em conjuntos padrão data, como o Coco dataset (link do github aqui) ou ImageNet dataset (link aqui). Esses datasets são compostos por enormes coleções de imagens que já estão rotuladas e prontas para serem usadas no treinamento de modelos. Ele é amplamente usado para treinar modelos de classificação de imagens e detecção de objetos, que podem ser usados como modelos pré-treinados para reconhecimento genérico de produtos.
Agora que sabemos mais sobre o data, vamos ter uma visão geral rápida do modelo pré-treinado que o senhor poderia usar. Um dos recursos mais comuns para encontrar modelos pré-treinados é o Keras. Ele tem um módulo no qual o senhor pode encontrar vários tipos de modelos de classificação de imagens (VGG16, ResNet50, IncetopnV3...), que foram treinados em conjuntos padrão data. ImageNet para esses casos. O fluxo de trabalho é simples: o senhor carrega o modelo e o aplica diretamente às suas imagens para extrair os recursos. Por exemplo, o senhor pode classificar diretamente quais das suas imagens contêm relógios, fones de ouvido, fones de ouvido... Há outro exemplo mais específico para o caso de uso de detecção de objetos e foi desenvolvido pela equipe do Tensorflow do Google. Eles criaram uma série de modelos pré-treinados (um deles é baseado no Coco dataset), para ser usado diretamente em novas imagens para detecção de objetos (link do github aqui). Esses modelos também podem ser usados como modelos para treinar novamente o seu próprio data, com o qual lidaremos no nível 2.
Nível 2 - Treinar um modelo por conta própria data
Quando o senhor trabalha com um dataset bastante diferente do dataset original usado para treinar o modelo, simplesmente aplicá-lo não funcionará. O senhor precisará criar seu próprio dataset de treinamento e treinar novamente o modelo com ele.
A maioria dos problemas de reconhecimento de imagens exige o uso de redes neurais convolucionais (CNN). As primeiras camadas (camadas convolucionais) extraem padrões e recursos da imagem. Esses recursos são então passados para as últimas camadas (camadas totalmente conectadas) para previsão. Há duas abordagens para treinar novamente um modelo em seu próprio data: Aprendizagem por transferência e Ajuste fino.
Aprendizagem por transferência consiste em usar as camadas convolucionais pré-treinadas do modelo original e treinar as camadas totalmente conectadas nos recursos extraídos do nosso conjunto de imagens. A ideia aqui é usar o conhecimento adquirido durante o treinamento do modelo no dataset original e usá-lo em nosso problema. Essa técnica é eficiente nos casos em que os dois datasets são semelhantes, por exemplo, um modelo treinado para reconhecer carros pode ser treinado novamente para reconhecer caminhões. A razão para isso é que as imagens de carros são semelhantes às imagens de caminhões e os padrões extraídos pelas camadas convolucionais dessas imagens provavelmente serão semelhantes. A figura abaixo ilustra o processo:
Se o seu dataset for muito diferente do dataset original, o senhor precisará executar Ajuste fino. Diferentemente do Transfer Learning, aqui toda a rede (ou pelo menos a maioria das camadas convolucionais) é treinada novamente. Assim, as camadas convolucionais são treinadas em suas imagens e podem extrair recursos totalmente adaptados às suas imagens. A vantagem do ajuste fino é que o modelo é totalmente treinado no dataset e provavelmente terá melhor desempenho, mas também consome mais tempo e é mais caro do ponto de vista computacional. A figura abaixo ilustra o processo:
Para criar um dataset para detecção de objetos, o senhor precisa coletar muitas imagens de treinamento, mas "Quantas exatamente?", alguém pode perguntar. Alguns dizem que são centenas, outros dizem que são milhares ou até mesmo centenas de milhares, mas não existe uma verdade básica. No entanto, é recomendável ter mais de cem imagens para cada classe que o senhor deseja que o modelo reconheça.
Depois de coletar as imagens, o senhor precisa rotulá-las. O processo de rotulagem consiste na criação de arquivos JSON contendo as coordenadas e a classe do objeto que o modelo deve detectar e reconhecer em cada imagem. Essa parte geralmente é feita manualmente, mas pode ser semi-automatizada por código. Várias ferramentas de código aberto foram desenvolvidas para agilizar a rotulagem manual, e uma delas é o Ferramenta de etiquetas BBox no Github. A ferramenta consiste em uma interface de usuário, carregando todas as imagens e permitindo que o usuário rotule uma imagem com dois cliques:
O usuário só precisa clicar no canto superior esquerdo e no canto inferior direito do objeto e, em seguida, a ferramenta desenha um retângulo ao redor da imagem e salva as coordenadas em um arquivo. Isso reduz o tempo de rotulagem (além de adicionar a classe do objeto) para 3 segundos. O arquivo JSON final, depois de adicionar a classe do objeto, deve ter a seguinte aparência:
A etapa final é converter os arquivos em um único arquivo, especialmente formatado para o Tensorflow. Um tutorial simples é fornecido aqui.
Depois de criar seu dataset, o senhor pode começar a treinar seu modelo, mas primeiro precisa encontrar um modelo pré-treinado! Pesquisas recentes em aprendizagem profunda levaram ao desenvolvimento de vários modelos baseados em redes neurais para detecção de objetos. Uma arquitetura famosa é a Faster R-CNN baseada em redes de proposta de região (RPN). A Faster R-CNN tem duas redes: uma RPN para gerar propostas de regiões e uma rede que usa essas propostas para detectar objetos. A equipe do Tensorflow no Google desenvolveu uma série de modelos de aprendizagem profunda para serem facilmente utilizados pelos cientistas do data e um deles é um modelo de detecção de objetos baseado no Faster R-CNN. O modelo é fornecido no site do Tensorflow Github com um tutorial. O tutorial mostra as etapas para treinar novamente o modelo (com Transfer Learning) e implantá-lo no Google ML Engine.
Nível 3 - Criar seu próprio modelo a partir do zero
Se o senhor tiver alma de pesquisador ou se tiver um problema muito específico de visão computacional, poderá criar seu próprio modelo do zero. Nesse caso, o senhor tem três opções:
- Criar um modelo de classificação de imagens com CNNs
A solução mais simples para o reconhecimento de produtos é a classificação de imagens com a arquitetura de rede neural convolucional. Esses modelos recebem uma imagem como entrada e emitem um rótulo indicando o objeto. Portanto, eles só devem ser usados quando as imagens contiverem apenas um objeto que o senhor deseja detectar. No entanto, o uso de um modelo de classificação de imagem para a detecção de objetos provavelmente terá um desempenho ruim simplesmente por causa do ruído ao redor do objeto na imagem. Os modelos de classificação de imagens são projetados para extrair recursos de toda a imagem e classificá-la como um todo. O problema aqui é que duas imagens diferentes, por exemplo, uma imagem de um cômodo e uma imagem de uma rua, ambas contendo o objeto desejado, podem ter o mesmo rótulo. Isso dificulta a tarefa de classificação. Veja a seguir dois tutoriais sobre como criar CNNs do zero.
- Criar um modelo de detecção de objetos
Como dito anteriormente, os modelos de detecção de objetos surgiram recentemente com a pesquisa em aprendizagem profunda. A arquitetura Faster R-CNN foi introduzida no final de 2015 como uma iteração da arquitetura mais antiga Fast R-CNN. Ela produz :
a) uma lista de caixas delimitadoras
b) um rótulo atribuído a cada caixa delimitadora
c) uma probabilidade para cada rótulo e caixa delimitadora
Primeiro, uma CNN pré-treinada é aplicada à imagem, criando um mapa de recursos. Esses recursos são então passados para um RPN para encontrar regiões candidatas (caixas delimitadoras) que contenham objetos relevantes. A última etapa consiste em usar os recursos computados pela CNN e as caixas delimitadoras para classificar o conteúdo das caixas delimitadoras e ajustar suas coordenadas (para que se ajustem melhor ao objeto). Isso é feito por meio do módulo RCNN. A figura abaixo ilustra a arquitetura:
Mais detalhes são fornecidos neste tutorial, O trabalho de código aberto sobre o tópico está disponível aqui.
- Crie um modelo híbrido usando arquiteturas de detecção de objetos e CNNs
Se quiser melhorar seu desempenho, o senhor pode considerar a abordagem híbrida. É possível que uma abordagem de detecção de objetos resulte em classificação ruim (o objeto é bem detectado, mas o rótulo errado é previsto). Nesse caso, o senhor pode primeiro treinar um modelo de detecção de objetos no dataset, com apenas um rótulo ("objeto", por exemplo) e, em seguida, cortar as imagens com base nas coordenadas das caixas delimitadoras. Isso criará um conjunto de imagens contendo apenas o objeto relevante detectado nas imagens originais. O senhor pode então usar esse conjunto como um conjunto de treinamento para a classificação de imagens CNN.
Extensão - Aprendizado automático de máquina
Atualmente, podemos observar o desenvolvimento de novas iniciativas com o objetivo de tornar o processo de criação e personalização de seu próprio modelo disponível para qualquer pessoa, mesmo para pessoas sem formação técnica. O objetivo é que, em vez de usar modelos prontos para aplicar (como o nível 1), o senhor possa treinar seu próprio modelo sem precisar ter o conhecimento subjacente.
Como isso funciona?
A solução envolve a automatização da criação do modelo de classificação de imagens ou do modelo de detecção de objetos. O senhor só precisaria fornecer um conjunto de data rotulado com suas imagens e, em seguida, enviá-las para a solução. Esse data será ingerido para treinar um modelo de visão computacional nele (como nível 2 ou nível 3). Ele produzirá um modelo treinado, às vezes até uma API, que o senhor pode usar para prever os rótulos e localizar objetos em novas imagens. O modelo se otimiza sozinho, portanto, o senhor não precisa saber como implementá-lo e como parametrizá-lo.
Quais são as soluções?
Dois atores principais estão surgindo nessa área e lançaram ferramentas que ainda estão em versão beta no momento.
- Em primeiro lugar, temos o Google e seu componente Google Cloud AutoML de seu conjunto de plataformas em nuvem (link aqui). O Cloud AutoML não foi projetado apenas para problemas de visão computacional, mas também pode ser útil para qualquer aplicativo de aprendizado de máquina, bem como para processamento e tradução de idioma natural.
- Em segundo lugar, temos a iniciativa de código aberto AutoKeras (link aqui). Ele é baseado no Keras e se baseia na pesquisa automática de arquitetura e hiperparâmetros de modelos de aprendizagem profunda.
Artigo escrito em conjunto por Matthieu Montaigu e Kasra Mansouri, cientistas do Data no Artefact.
O senhor está interessado em saber mais sobre previsão de vendas graças a modelos de reconhecimento de produtos feitos sob medida? Nossos especialistas estão à sua disposição para responder a quaisquer perguntas que o senhor possa ter!

BLOG









