Você está na página 1de 75

UNIVERSIDADE FEDERAL DE SANTA CATARINA

DESENVOLVIMENTO DE SKILL CLASSIFICADORA DE IMAGENS PARA


AMAZON ALEXA

BRUNO HENRIQUE BERTOZZO


THIAGO BREZINSKI

Florianópolis - SC
2021 / 1
UNIVERSIDADE FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
CURSO DE SISTEMAS DE INFORMAÇÃO

DESENVOLVIMENTO DE SKILL CLASSIFICADORA DE IMAGENS PARA


AMAZON ALEXA

BRUNO HENRIQUE BERTOZZO


THIAGO BREZINSKI

Trabalho apresentado à banca examinadora da


Universidade Federal de Santa Catarina, como
requisito para a obtenção do título de bacharel em
Sistemas de Informação

Florianópolis - SC
2021 / 1

2
BRUNO HENRIQUE BERTOZZO
THIAGO BREZINSKI

DESENVOLVIMENTO DE SKILL CLASSIFICADORA DE IMAGENS PARA


AMAZON ALEXA

Trabalho apresentado à banca examinadora da Universidade Federal de Santa Catarina, como


requisito para a obtenção do título de bacharel em Sistemas de Informação

________________________
Prof. Dr. Elder Rizzon Santos
Orientador
Universidade Federal de Santa Catarina

Banca Examinadora:

________________________
Prof. Dr. Frank Siqueira
Avaliador
Universidade Federal de Santa Catarina

________________________
Prof. Dr. Maicon Rafael Zatelli
Avaliador
Universidade Federal de Santa Catarina

3
Este trabalho é dedicado às famílias dos autores, pelo suporte
despendido durante o seu desenvolvimento.

4
AGRADECIMENTOS

Agradecemos ao Prof. Dr. Elder Rizzon Santos, pelas diversas sessões de orientação e
prontidão durante os meses de desenvolvimento, assim como às famílias dos autores, pelo
suporte emocional, para que isto fosse possível.

5
“Você nunca alcança o sucesso verdadeiro a
menos que você goste do que está fazendo.”

— Dale Carnegie

6
RESUMO

Skills, no âmbito dos dispositivos Amazon Alexa, são como aplicativos para smartphones.
Permitem customizar a experiência do usuário com funcionalidades novas, agregando valor a
estes dispositivos sem um esforço direto da empresa que os disponibiliza. Este projeto tem
como objetivo o desenvolvimento de uma skill que permita que usuários requisitem, via
comandos de voz, imagens de um assunto desejado. A skill vai encarregar-se de identificar o
assunto proposto, requisitar imagens do assunto em uma API de imagens, processar e
classificar as imagens através do modelo de machine learning MobileNetV2, e apresentar os
resultados e classificações para o usuário via Telegram.

Palavras-chave: Alexa. Skills. Machine Learning. Imagens. MobileNetV2.

7
ABSTRACT

Skills, in the context of Amazon Alexa, are like apps for smartphones. They allow
customization of the user experience with new features, adding value to these devices without
a direct effort of the company that provides them. This project has the objective of
developing a skill that allows the users to request, via voice commands, images about a
specific subject. The skill will take charge of identifying the subject, requesting images about
it within an image API, process and classify the images through the machine learning model
MobileNetV2, and present the results and classifications to the user via Telegram.

Keywords: Alexa. Skills. Machine Learning. Images. MobileNetV2.

8
LISTA DE FIGURAS

Figura 1 - O perceptron de Rosenblatt


Figura 2 - Aplicação do filtro para gerar o feature map
Figura 3 - Como funciona uma skill Alexa
Figura 4 - Esquema de primeiro uso da skill
Figura 5 - Envio do código único ao bot do Telegram
Figura 6 - Esquema de uso convencional da skill
Figura 7 - Usuário recebe imagens e suas classificações através do Telegram
Figura 8 - Estrutura dos modelos VGG16
Figura 9 - Bloco residual da rede ResNet
Figura 10 - Esquema da EfficientNet
Figura 11 - Comparativo do EfficientNet com outros modelos
Figura 12 - Matriz de confusão para MobileNetV2 e VGG16
Figura 13 - Matriz de confusão para ResNet50 e EfficientNetB0
Figura 14 - Comparação de Acurácia 1
Figura 15 - Comparação de Acurácia 2
Figura 16 - Comparação de Acurácia 3
Figura 17 - Testes com nome de invocação da skill
Figura 18 - Recorte das utterances para ImageSearchIntent
Figura 19 - Usuário solicita imagens através de diferentes enunciados
Figura 20 - Resultado da pesquisa “Buldogue francês” no Telegram
Figura 21 - Resultado da pesquisa “Buldogue francês” no site
Figura 22 - Resultado da pesquisa “French bulldog” no site
Figura 23 - Resultados para “Cabo ethernet”
Figura 24 - Resultados para “Hipopótamo”

9
LISTA DE TABELAS

Tabela 1 - Posicionamento deste estudo


Tabela 2 - Matriz de confusão
Tabela 3 - Redes neurais e suas respectivas acurácias no dataset ImageNet
Tabela 4 - Comparação dos modelos de classificação de imagens
Tabela 5 - Comparação de 5 termos de pesquisa testados na skill desenvolvida

10
LISTA DE ABREVIATURAS E SIGLAS

AWS - Amazon Web Services


API - Application Programming Interface
GPU - Graphics Processing Unit
CNN - Convolutional Neural Network
TP - True Positive
FP - False Positive
TN - True Negative
FN - False Negative
ASR - Automatic Speech Recognition
KNN - K-Nearest Neighbors
RNN - Recurrent Neural Network
NLP - Natural Language Processing
NILM - Non-intrusive load monitoring
VA - Voice Assistant
ILSVRC - ImageNet Large Scale Visual Recognition Challenge

11
SUMÁRIO

1. INTRODUÇÃO 14
1.1. Objetivo Geral 14
1.2. Objetivos Específicos 14
1.3. Metodologia 14
1.4. Justificativa 15
1.5. Organização do texto 16
2. FUNDAMENTAÇÃO TEÓRICA 16
2.1. Machine Learning 16
2.2. Redes Neurais 17
2.2.1. Redes Neurais Recorrentes 18
2.2.2. Redes Neurais Convolucionais 18
2.3. Automatic Speech Recognition 19
3. TRABALHOS RELACIONADOS 20
3.1. Trabalhos com abordagem técnica 20
3.1.1. Accelerating CNN on FPGA 20
3.1.2. TensorFlow Enabled Deep Learning Model Optimization for enhanced
Realtime Person Detection using Raspberry Pi operating at the Edge 20
3.1.3. study on Image Classification based on Deep Learning and Tensorflow 21
3.2. Trabalhos com foco em aplicação 21
3.2.1. Edge computed NILM: a phone-based implementation using MobileNet
compressed by Tensorflow Lite 21
3.2.2. Using Alexa for Flashcard-based Learning 21
3.3. Posicionamento deste estudo 22
4. DESENVOLVIMENTO 24
4.1. Arquitetura / Modelo da skill 24
4.1.1. Fluxo de primeiro uso 26
4.1.2. Fluxo de uso convencional 27
4.2. Implementação da arquitetura 29
4.2.1. Unsplash 29
4.2.2. Telegram 29
4.2.3. Tensorflow e MobileNet 29
4.2.4. AWS Lambda 30
4.2.5. AWS DynamoDB 30
4.3. Experimentos 30
4.3.1. Modelos pré-treinados 31
4.3.1.1. VGG16 31
4.3.1.2. ResNet50 32
4.3.1.3. EfficientNetB0 33

12
4.3.1.4. MobileNetV2 35
4.3.2. Métricas 35
4.3.2.1. Acurácia 35
4.3.2.2. Precisão 36
4.3.2.3. Matriz de confusão entre as classes 36
4.3.3. Comparação dos modelos 37
4.3.4. Análise Qualitativa 41
4.3.4.1. Nome de invocação 41
4.3.4.2. Utterances 41
4.3.4.3. API do Unsplash 43
4.3.4.4. Arquitetura implementada 46
4.3.4.5. Acurácia 46
4.4. Avaliação / Resultados 48
5. CONCLUSÃO 50
6. REFERÊNCIAS 52

7. APÊNDICE A – Código desenvolvido 55


8. APÊNDICE B – Artigo sobre o Trabalho de Conclusão de Curso 65

13
1. INTRODUÇÃO

Este trabalho visa o desenvolvimento de uma skill (complemento) para dispositivos


Amazon Alexa. Skills estão para dispositivos Amazon Alexa tal qual aplicativos estão para
smartphones. Logo, o desenvolvimento deste complemento adicionará uma nova
funcionalidade para tais dispositivos, através de download via loja virtual.
O usuário requisitará, através de comando de voz, uma imagem acerca de algum
assunto e a skill proposta vai encarregar-se de identificar o assunto proposto, requisitar
imagens do assunto no mecanismo de busca definido, processar e classificar as imagens
através de modelos de inteligência artificial e machine learning, e enviar os resultados da
classificação para o usuário através do dispositivo informado.
Durante este estudo, será analisado o estado da arte das áreas da computação de
inteligência artificial e machine learning, procurando realizar testes com a aplicação
desenvolvida nos quesitos de acurácia, precisão e satisfação do usuário.

1.1. Objetivo Geral

Desenvolvimento de uma skill para dispositivos Alexa que aceite, via solicitação por
voz, um assunto e, mediante métodos de reconhecimento de imagens, entregue imagens
acerca do assunto desejado.

1.2. Objetivos Específicos

- Analisar o estado da arte nos temas de Redes Neurais, Deep Learning e


Automatic Speech Recognition (ASR);
- Desenvolver uma skill que busque por imagens do assunto solicitado nas APIs
do serviço de imagens Unsplash, classifique-as utilizando o modelo de
inteligência artificial MobileNetV2 e apresente os resultados para o usuário
em sua conta do serviço de mensageria Telegram;
- Levantar modelos pré-treinados para classificação de imagens alternativos ao
MobileNet, observando pontos positivos e negativos para utilização de cada
um;
- Comparar a acurácia dos diferentes modelos analisados para o mesmo dataset
e ponderar se o MobileNet é realmente a melhor opção.

1.3. Metodologia

Para o desenvolvimento da aplicação, utilizou-se da linguagem de


programação JavaScript no ambiente de execução NodeJS, hospedado pelo serviço de
computação serverless em nuvem AWS Lambda. O código interage com as APIs do
serviço de imagens Unsplash para busca de imagens, e do serviço de mensageria
Telegram para envio das mesmas para o usuário. No meio deste processo, as imagens
são classificadas com machine learning através da plataforma Tensorflow e do

14
modelo de classificação MobileNetV2. Os relacionamentos entre os dados foram
persistidos utilizando o banco de dados na nuvem AWS DynamoDB.
Já para os experimentos, utilizou-se da linguagem de programação Python, na
plataforma Google Colaboratory. O código interage com as bibliotecas do Tensorflow
para predição das classes através dos modelos de classificação, numpy para estruturas
de dados complexas, sklearn para geração das matrizes de confusão, seaborn para
imprimir as matrizes geradas, matplotlib para imprimir outros gráficos, entre outros
utilitários. Compilou-se um dataset de 50 imagens provenientes do serviço de
imagens Unsplash, divididas entre 5 classes pertencentes ao ImageNet (10 imagens
por classe), que foram iteradas buscando a acurácia e precisão média de cada modelo
de classificação.
Por fim, para os resultados, utilizou-se da própria skill desenvolvida para
comparação de 5 termos de pesquisa, cada um utilizando 3 imagens provenientes do
serviço de imagens Unsplash. Construiu-se uma tabela comparando o termo de
pesquisa, se este pertencia ao banco de imagens do ImageNet, a acurácia média,
precisão média, e se o resultado foi satisfatório para o usuário final.

1.4. Justificativa

A motivação para realização deste estudo inicia pela vontade dos autores de
trabalhar com as tecnologias aqui expostas, visto que, com base nas pesquisas
realizadas nos maiores portais acadêmicos, pouco se encontra sobre o
desenvolvimento de skills para Amazon Alexa, ainda menos se relacionado com
classificação de imagens. Embora a busca de imagens já seja possível através de
outras assistentes virtuais, tais são atreladas a sistemas operacionais (Siri, atrelada ao
iOS e Google Assistant atrelada ao Android), o que torna a operação mais fácil, mas
também menos customizável. O fato de a Amazon Alexa ser executada
independentemente de um sistema operacional e ser uma plataforma aberta à skills a
torna altamente customizável, ao custo de possuir menor número de integrações
diretamente da fabricante. Resta à comunidade (assim como este estudo) desenvolver
integrações úteis para a mesma.
Assim, entende-se que o fluxo de busca, classificação e envio de imagens aqui
desenvolvido possa, futuramente, em uma versão evoluída, servir para usos mais
nobres como a garantia de encontrar, de maneira rápida, a imagem correta de uma
ferramenta em uma situação de risco, como um utensílio médico ou uma peça
danificada de um veículo.

15
1.5. Organização do texto

O capítulo 2 trata da fundamentação teórica, abordando os temas de Machine


Learning, Redes Neurais e Automatic Speech Recognition. O capítulo 3 aborda os
trabalhos relacionados e o posicionamento deste estudo. No capítulo 4, é exposto em
detalhes o desenvolvimento da aplicação desenvolvida, como funciona o fluxo de
utilização e os serviços utilizados, além de experimentos quantitativos, análise
qualitativa e resultados. Por fim, no capítulo 5, os autores revelam suas conclusões
acerca dos resultados e sugestões para trabalhos futuros.

2. FUNDAMENTAÇÃO TEÓRICA

O ecossistema das assistentes virtuais, como a Amazon Alexa, é uma rede complexa
de conceitos e tecnologias no seu estado da arte. Abrange desde os conceitos mais técnicos,
da programação e ciência de dados, relacionados à sua implementação, até os conceitos de
mais alto nível, pois precisa interagir com o usuário final, leigo, que espera uma interação
descomplicada e o mais parecida possível com a vida real. Dito isso, neste capítulo serão
abordados conceitos como Machine Learning (bem presente neste estudo), Deep Learning,
Redes Neurais, Automatic Speech Recognition, entre outros.

2.1. Machine Learning

Segundo a gigante de tecnologia IBM (2020), “Machine Learning é um braço da


Inteligência Artificial focado em construir aplicações que aprendem através dos dados e
aprimoram sua acurácia com o tempo, sem ser programadas para fazê-lo”. Exemplos disso já
estão intrínsecos à sociedade em que vivemos de diversas maneiras. Anúncios direcionados
com base nas pesquisas recentes, carros que pilotam sozinhos e assistentes virtuais são todos
exemplos de machine learning. Entretanto, não é mágica. Os resultados da performance do
modelo dependem de como este foi idealizado. É necessário encontrar (ou criar) um dataset
de treino, escolher um algoritmo a ser aplicado neste dataset, treinar o algoritmo — isto é,
comparar resultados e ajustar parâmetros, pesos, vieses — e utilizar e aprimorar o modelo,
com novos dados.
A escolha do algoritmo está diretamente relacionada com o problema que se quer
resolver e ao tipo dos dados sendo utilizados. Para dados rotulados (que acompanham uma
descrição), é comum a utilização de algoritmos de regressão, árvores de decisão e algoritmos
instance-based, como o KNN (K-Nearest Neighbors), explicados a seguir:
- Regressão Linear: explica a correlação entre duas variáveis;
- Regressão Logística: analisa variáveis para classificar objetos em categorias;
- Árvores de decisão: rápidas para realizar previsões; tentam separar o conjunto de
dados em grupos homogêneos;
- KNN (K-Nearest Neighbors): classifica objetos com base nos seus vizinhos mais
próximos.
Já os dados não-rotulados (quando não se conhece o contexto dos dados) são melhor
identificados por algoritmos de agrupamento (clustering), associação e redes neurais:

16
- Clustering: divide os dados em grupos que possuam significado, utilidade ou ambos;
- Associação: encontra associações entre conjuntos de objetos frequentes;
- Redes Neurais: rede de camadas interconectadas que realizam cálculos e tiram
conclusões sobre os dados de entrada, retornando uma probabilidade para cada um —
detalhado na seção 2.2.
Assistentes virtuais, como a Amazon Alexa, ainda se utilizam de Deep Learning, uma
área de estudo do Machine Learning, para funções como encontrar a skill mais relevante para
lidar com o enunciado do usuário, tarefa não-trivial num ecossistema que já possui mais de
40.000 skills registradas, com milhares destas com funcionalidades similares, como a de listar
os ingredientes de uma receita de bolo, por exemplo.

2.2. Redes Neurais

Redes Neurais é um conceito inicialmente idealizado na década de 1940, com


ressurgimento na década de 1970, e atualmente novamente um hot topic. Nesse meio tempo,
pouco se acreditava por demandar de alto poder computacional, gargalo que desaparece aos
poucos com a evolução do Deep Learning, GPUs com capacidade de até 36 teraflops (36
trilhões de operações de ponto flutuante por segundo!) e a computação na nuvem, que
permite que cálculos muito custosos sejam delegados para servidores poderosos e
transmitidos através da rede, ao invés de depender exclusivamente do dispositivo que
requisita a ação. Em suma, as Redes Neurais tentam imitar o funcionamento dos neurônios
humanos, e suas conexões — as sinapses. O modelo considerado o precursor é o Perceptron,
de Rosenblatt (1957). Consiste em três camadas: uma de entrada, uma de função de ativação
— que realiza uma classificação binária dos objetos, e restringe a saída — e uma de saída.

Figura 1 - O perceptron de Rosenblatt

Fonte: Jean-Christophe B. Loiseau, 2019.

Com o tempo surgiram diversas variações deste modelo, duas dessas sendo Redes
Neurais Recorrentes (RNNs, em inglês) e Redes Neurais Convolucionais (CNNs, em inglês),
que serão mais abordadas neste estudo.

17
2.2.1. Redes Neurais Recorrentes

As RNNs são uma variação comumente utilizada quando o contexto do que está
sendo analisado é importante, como na análise de um texto, em que as palavras anteriores
influenciam na análise da palavra atual — onde a sequência é mais importante que os objetos
individuais. São baseadas na estrutura das Redes Neurais Feedforward, que são, em suma,
múltiplas camadas de Perceptrons, citados acima. Desta forma, também é ideal para
utilização em Processamento de Linguagem Natural (NLP, em inglês), sendo largamente
utilizada pela Amazon Alexa e outras assistentes virtuais, visto a necessidade de entender e
reagir à uma entrada de voz do usuário.

2.2.2. Redes Neurais Convolucionais

As Redes Neurais Convolucionais foram concebidas para trabalhar com dados de


imagens bi-dimensionais, embora possam ser usadas também para imagens de uma ou três
dimensões. Uma CNN possui duas grandes partes:
- Feature Extraction: separação e identificação das features — partes importantes, mais
distinguíveis — dos dados de entrada, através da aplicação do mesmo filtro,
repetidamente, aos dados, que resultará no feature map, que indica onde estão os
pontos fortes de uma feature na imagem;
- Classificação: utiliza o resultado da feature extraction para predizer a classe da
imagem.

Figura 2 - Aplicação do filtro para gerar o feature map

Fonte: Paul-Louis Pröve, 2017.

A primeira etapa é composta de diversas camadas de convolução e diversas camadas


de pooling. As camadas de convolução aplicam o filtro — ou kernel — de dimensão MxM

18
nos dados de entrada, deslizando o filtro da esquerda para a direita, de cima para baixo até
percorrer a imagem toda, resultando no feature map, que nos dá informações como a
localização das bordas e pontas da imagem. As camadas de pooling vêm em seguida
reduzindo o tamanho do feature map e, consequentemente, os custos computacionais.
O feature map é então achatado em um vetor unidimensional e encaminhado para a
segunda etapa, de classificação, que possui camadas Fully-connected e de dropout. As
camadas fully-connected dão início à classificação, realizando cálculos com pesos e vieses.
Por fim, a camada de dropout descarta randomicamente uma porcentagem (configurável) de
nodos para redução do tamanho da rede.

2.3. Automatic Speech Recognition

Automatic Speech Recognition, ou Reconhecimento Automático de Fala, é a


tecnologia que permite que assistentes virtuais, como a Alexa, convertam sinais de áudio,
como a fala do usuário, para entradas de texto. Parafraseando a própria Amazon:

"Antes do ASR, nossa fala era simplesmente uma gravação de áudio com
picos e vales na "mente" de um computador. Com ASR, os computadores
podem detectar padrões nas formações de ondas dos áudios, associá-los com
os sons de uma linguagem e identificar as palavras que falamos."
(AMAZON, 2021)

Usualmente, o reconhecimento de fala é precedido de uma etapa de processamento de


sinal, a fim de limpar o sinal de áudio captado, removendo sons ambientes e outros ruídos,
maximizando o sinal da fala em si. No caso da Alexa, o processamento de sinal é seguido
pela detecção da palavra de ativação, palavra que indica à assistente para que comece a ouvir
comandos. Na frase, "Alexa, como está a temperatura hoje?", "Alexa" é a palavra de ativação,
e o que segue é o comando. Então, após a detecção do comando, o sinal de áudio — tratado
— é enviado para os servidores da Amazon que converterá o sinal de áudio em texto.

19
3. TRABALHOS RELACIONADOS

Esta seção visa apresentar alguns trabalhos relacionados ao desenvolvimento de skills


Alexa e classificação de imagens com base em machine learning.
Para os trabalhos relacionados, consideramos duas categorias para classificar esses
textos estudados, tendo em vista que foram artigos mais técnicos e outros mais aplicados.
Na fase de pesquisas, os termos chaves foram: “desenvolvimento de skill alexa”,
“classificação de imagens com base em machine learning”, “reconhecimento de imagens com
inteligência artificial”. Para minimizar o risco de exclusão de trabalhos relevantes foram
também incluídos seus sinônimos e traduções para o inglês.

3.1. Trabalhos com abordagem técnica

Na categoria de trabalhos mais técnicos, são abordados algoritmos de machine


learning, frameworks e metodologias disponíveis para realizar a classificação de imagens.
Abordou-se de forma resumida esses textos a seguir.

3.1.1. Accelerating CNN on FPGA

Para a tese com título Accelerating CNN on FPGA, Redes Neurais Convolucionais
(CNN) é um algoritmo de deep learning que tem revolucionado a área de visão
computacional. Uma de suas aplicações é a classificação de imagens. No entanto, existe o
problema neste algoritmo que envolve um grande número de operações e parâmetros, o que
limita sua possibilidade em aplicações embarcadas com restrição de tempo e recursos.
MobileNet, uma rede neural que usa camadas convolucionais separáveis em vez de camadas
convolucionais padrões, reduz amplamente o consumo computacional em comparação com
os modelos tradicionais de CNN. Com a implementação da MobileNet em FPGA, os
problemas de classificação de imagens podem ser amplamente acelerados. Dessa forma, a
tese implementou uma MobileNet simplificada com aceleração FPGA e a usou para resolver
um problema de classificação de gestos (imagens) realista. O sistema proposto acelerou
amplamente a fase de inferência da MobileNet, operando sobre uma frequência baixa e com
baixo consumo energético.

3.1.2. TensorFlow Enabled Deep Learning Model Optimization for


enhanced Realtime Person Detection using Raspberry Pi operating
at the Edge

O paper aborda a integração de frameworks de deep learning para explorar os vieses


indutivos observados quando aplicando Redes Neurais para otimização ou problemas de
machine learning. Neste artigo, são apresentadas arquiteturas do TensorFlow que permitem o
uso de detecção de pessoas em tempo real no Raspberry Pi. A quantização do modelo é
realizada, o desempenho dos modelos quantizados é analisado e o desempenho do pior caso é
estabelecido para uma série de modelos de detecção de objetos de deep learning que podem
ser implantados no Pi para aplicativos em tempo real. O estudo mostra que o tempo de

20
inferência para uma arquitetura de solução habilitada para TensorFlow adequadamente
otimizada é significativamente menor do que para um modelo não quantizado. O modelo de
rede neural profunda é treinado usando o conjunto de dados de referência de detecção de
pessoas INRIA.

3.1.3. study on Image Classification based on Deep Learning and


Tensorflow

O artigo aborda o estudo sobre a classificação de imagens usando Deep Learning e o


framework TensorFlow. Segundo o artigo, a tarefa fundamental para a classificação de
imagens é garantir que todas elas sejam categorizadas de acordo com seus setores específicos
ou grupos. A Rede Neural Profunda tem sido escolhida como a melhor opção para o processo
de treinamento por apresentar alto percentual de precisão. Para o desenvolvimento do estudo,
os dados de entrada se resumem em categorias de flores. Todas essas imagens de entrada
passam por "treinamento" com a Rede Neural Profunda, treinando todos esses conjuntos de
dados até que sejam reconhecidas cada uma dessas imagens. A classificação ocorre quando
uma das imagens em teste demonstra pertencer a um desses tipos de flores.

3.2. Trabalhos com foco em aplicação

Para os trabalhos com foco em aplicação, como os anteriores, abordam algoritmos de


machine learning, frameworks e metodologias disponíveis para realizar a classificação de
imagens e o desenvolvimento de skills para assistente de voz, mas de forma aplicada, gerando
uma aplicação real. Abordou-se de forma resumida esses textos a seguir.

3.2.1. Edge computed NILM: a phone-based implementation using


MobileNet compressed by Tensorflow Lite

O paper aborda o assunto de Non-intrusive load monitoring (NILM), ou


Monitoramento de carga não-intrusivo, para desagregação do consumo de energia em
residências, que é medido através de um único aparelho para toda a casa. Usualmente, o fluxo
do monitoramento de carga inicia-se com um dispositivo medidor (edge) que envia os dados
à nuvem (cloud) para processamento, que são mostrados em forma gráfica na web ou em um
aplicativo. Esta abordagem possui grandes problemas. A alternativa proposta é a utilização
dos smartphones dos usuários para o processamento dos modelos de machine learning. Os
resultados obtidos foram positivos, com uma diferença satisfatória do modelo de
desagregação computado no smartphone em comparação ao original, podendo-se concluir
que é viável a transferência da computação de monitoramento de carga da cloud para a edge.

3.2.2. Using Alexa for Flashcard-based Learning

Nesse artigo, os autores Lucy Skidmore, Roger K. Moore, enfatizam a consciência do


potencial de dispositivos Alexa como uma ferramenta educacional, porém o escopo ainda é

21
limitado para que as Skills da Alexa acomodem os recursos necessários para o aprendizado
eficaz de idiomas. Descrevem uma investigação sobre a implementação de ‘repetição
espaçada’, um método não trivial de aprendizagem baseado em cartões de memória, através
do desenvolvimento de uma Skill para Alexa chamada ‘Japanese Flashcards’. No texto,
mostram que os recursos de desenvolvimento da Alexa, como a persistência de skills,
permitem a implementação eficaz da repetição espaçada e sugerem uma adaptação heurística
do modelo que é apropriado para uso com assistentes de voz (VAs). No geral, a investigação
mostra que Alexa pode facilitar com sucesso o aprendizado de idiomas baseando-se em
flashcards L2-L1 (segunda língua - língua nativa) e destaca o potencial da Alexa para ser
usado como uma ferramenta sofisticada e eficaz de aprendizagem de idiomas.

3.3. Posicionamento deste estudo

A seguinte tabela de comparação se faz útil visto os objetivos específicos deste


trabalho: comparar acurácia, precisão e satisfação do usuário utilizando o modelo
MobileNetV2 operando através da assistente virtual Amazon Alexa. O MobileNetV2 foi
idealizado para sistemas embarcados, que operam na Edge ou quaisquer outros de
performance restringida. As computações realizadas pela assistente virtual Alexa, ainda que
não seja na Edge ou em um dispositivo embarcado — pois, apesar de possuir processamento
local, faz somente processamento de áudio — são realizadas em um servidor auto-escalável
cobrado sob-demanda, o AWS Lambda. Ou seja, execuções de funções são cobradas, assim
como tempo de execução. Logo, se utilizando de modelos mais leves, idealizados para
processamento limitado, podemos assumir que a rentabilidade neste plano sob demanda será
maximizada, ainda que a um custo de acurácia e precisão.

Tabela 1 - Posicionamento deste estudo


Trabalho Técnico Aplicado Usa Opera na
MobileNet Edge

Accelerating CNN on FPGA X - X -

TensorFlow Enabled Deep Learning X - X X


Model Optimization for enhanced
Realtime Person Detection using
Raspberry Pi operating at the Edge

A study on Image Classification based on X - X -


Deep Learning and Tensorflow

Edge computed NILM: a phone-based - X X X


implementation using MobileNet
compressed by Tensorflow Lite

Using Alexa for Flashcard-based - X - -


Learning
Fonte: Autores

22
Com base nesse levantamento de artigos de classificação de imagens com base em
machine learning e desenvolvimento de skills Alexa, pode-se assim fazer a extração e análise
das informações relevantes sobre os processos e técnicas de classificação de imagens, assim
como o estudo do desenvolvimento de uma skill Alexa, de forma que as informações
extraídas potencializam o desenvolvimento do presente trabalho.
Alguns dos artigos estudados abordam os assuntos de Redes Neurais, Deep Learning
e Automatic Speech Recognition com foco aplicado a computação de borda (Edge
computing). Isso se dá por um dos objetivos ser a rentabilidade, sabendo que isso permitirá
usar hardwares com menor poder de processamento computacional, se terá menor gasto
energético, trazendo menores custos com servidores em nuvem.

23
4. DESENVOLVIMENTO

Durante o desenvolvimento da aplicação, buscou-se adotar o estado da arte no


desenvolvimento de skills para Amazon Alexa. Utilizou-se da linguagem de programação
JavaScript para criar a lógica da skill, que interage com as APIs abertas do serviço de
imagens Unsplash e do serviço de mensageria Telegram. As imagens são classificadas com
machine learning através da plataforma aberta Tensorflow e do modelo de classificação
MobileNetV2. Usufruiu-se da plataforma Amazon Web Services (AWS) para hospedagem e
execução de código serverless sob-demanda (AWS Lambda) e de banco de dados na nuvem
(AWS DynamoDB).

4.1. Arquitetura / Modelo da skill

O fluxo de informações em uma skill Alexa possui três grandes fases: a


detecção do comando do usuário no próprio dispositivo, o processamento do comando
de voz nas APIs da Alexa, e o processamento da lógica da skill requisitada.
A primeira etapa diz respeito somente ao que ocorre no hardware do próprio
dispositivo (como um Echo Dot, por exemplo). O dispositivo tem a capacidade de
escutar a palavra de ativação (geralmente “Alexa”, mas é possível escolher outras),
separar a palavra de ativação do resto do comando, tratar este sinal (redução de
ruídos) e enviá-lo à próxima etapa, para a API de processamento de voz da Alexa na
nuvem.
Na fase seguinte, é onde ocorre o machine learning responsável somente pelo
entendimento do sinal enviado pela primeira etapa: reconhecimento de fala,
entendimento de linguagem natural e transformação de texto em fala. Esses
procedimentos atuam sobre o modelo de interação da skill, que define como a
aplicação reagirá conforme cada caso de uso. Um modelo de interação é composto de
3 componentes:
- Intents (ou Intenções): Representa uma ação que cumpre um comando
do usuário. Na skill aqui desenvolvida criou-se 2 intents, uma para
conectar à conta de Telegram do usuário, e outra para procurar as
imagens solicitadas.
- Utterances (ou Expressões): lista de frases que ativam as intenções.
Quanto mais frases representativas forem mapeadas, maior a chance de
a skill executar a ordem corretamente. Por exemplo, a expressão
“Alexa, procure imagens de cachorro” engatilha a intenção de procura
de imagens.
- Slots: variáveis que serão extraídas das expressões. Na expressão
acima, a palavra “cachorro” ocupa um slot que poderia ser chamado de
“assunto”, como em “Alexa, procure imagens de <assunto>”. A
palavra “cachorro” é extraída para uma variável e reutilizada nas
próximas etapas.

24
Por fim, o modelo de interação da skill redireciona a requisição para o trecho
pertinente da lógica da aplicação (etapa 3). Ativar a intenção de conectar à conta do
Telegram executará somente um trecho de código, enquanto que ativar a intenção de
procurar imagens executará outro. O modelo de funcionamento das skills, descrito
acima, pode ser resumido pela Figura 3. É na terceira etapa que as skills se
diferenciam, com lógica e fluxos próprios, assim como conexões a outros serviços.

Figura 3 - Como funciona uma skill Alexa

Fonte: Amazon

A skill desenvolvida neste estudo foi nomeada “Procure Uma Imagem”, nome
que diz jus à sua funcionalidade primária: resgatar, através da voz, imagens curadas
acerca de um assunto, para um meio de comunicação de fácil acesso. As imagens
serão obtidas através das APIs do Unsplash, classificadas com Tensorflow, e enviadas
para o usuário através do Telegram. Embora a skill só possua um real fluxo de
funcionamento (buscar, classificar e enviar imagens), é necessário um segundo fluxo,
de uso único, para realizar a conexão da skill à conta Telegram do usuário, para que
este possa receber os resultados.

25
4.1.1. Fluxo de primeiro uso

O fluxo de primeiro uso pode ser descrito pela Figura 4. As duas primeiras
etapas são comuns a todas skills Alexa, conforme descrito no item 4.1.

Figura 4 - Esquema de primeiro uso da skill

Fonte: Autores

Neste fluxo, o usuário solicitará por voz “Alexa, conectar Telegram”,


comando que desencadeará 3 ações:
- O identificador único do dispositivo físico será extraído;
- Um código único alfanumérico será gerado e retornado para o usuário;
- Será persistido no banco de dados uma associação entre o identificador e o
código único.

O usuário, de posse do código único que recebeu como resposta falada ao seu
comando, deverá enviá-lo para o bot do Telegram (Figura 5), construído também para
os fins deste estudo, que fará a captura do código para uso no próximo fluxo.

Figura 5 - Envio do código único ao bot do Telegram

Fonte: Autores

26
4.1.2. Fluxo de uso convencional

O fluxo de uso convencional pode ser descrito pela Figura 6. As duas


primeiras etapas são comuns a todas skills Alexa, conforme descrito no item 4.1.

Figura 6 - Esquema de uso convencional da skill

Fonte: Autores

Neste fluxo, o usuário solicitará por voz “Procure imagens de <assunto>”. O


primeiro passo será sempre solicitar às APIs do Telegram as mensagens recebidas.
Assim, têm-se acesso aos códigos únicos dos usuários enviados para o bot. Toda
mensagem enviada para o bot acompanha um identificador único deste usuário no
Telegram. Logo, com as duas tuplas (id telegram, código único) e (id dispositivo
físico, código único), cruzam-se as informações e têm-se a relação entre um
dispositivo físico e um usuário Telegram, tornando possível o envio de mensagens
diretas.

27
Em seguida, extrai-se o assunto do slot para ser encaminhado às APIs de busca
de imagens do Unsplash. Três imagens são retornadas pelo serviço, que servirão de
input para a classificação através do Tensorflow, mais especificamente do modelo de
machine learning MobileNet. O resultado da classificação será então enviado ao
usuário através das APIs do Telegram.
Como resultado, o usuário receberá em sua conversa com o bot as imagens e
suas respectivas classificações, simulando uma conversa. Na Figura 7, exibe-se o
resultado para o comando “Alexa, procure imagens de cachorro”, em que a palavra
destacada é o assunto extraído.

Figura 7 - Usuário recebe imagens e suas classificações através do Telegram

Fonte: Autores

28
4.2. Implementação da arquitetura

4.2.1. Unsplash

Unsplash é uma plataforma dedicada ao compartilhamento de stock photos,


fotografias profissionais, de alta qualidade, geralmente licenciadas para algum uso. A
empresa percorreu um longo caminho desde 2013, quando começou como um blog
dentro da plataforma Tumblr, até hoje, considerada uma das líderes da comunidade
visual, com presença global e parcerias com titãs da indústria como a Apple. Neste
estudo, utilizou-se das APIs abertas do Unsplash para busca de fotografias pela
palavra-chave fornecida pelo usuário, estas que também serão classificadas através do
modelo de machine learning. Essas e outras informações sobre o Unsplash estão
disponíveis em: https://unsplash.com/.

4.2.2. Telegram

Telegram é um software de mensageria instantânea, gratuito e open-source,


com foco em velocidade e segurança. É um dos mensageiros mais utilizados no
mundo, ao lado do WeChat, Facebook Messenger e WhatsApp. Uma de suas grandes
vantagens é a facilidade de customização. Graças às suas APIs abertas, é possível
desenvolver extensões, jogos, bots, entre outros. Neste trabalho, foi desenvolvido um
simples bot que captura códigos enviados para o mesmo. Os códigos capturados são
utilizados pela skill como forma de conexão entre um usuário do Telegram e um
dispositivo Alexa. Essas e outras informações sobre o Telegram estão disponíveis em:
https://telegram.org/.

4.2.3. Tensorflow e MobileNet

Tensorflow é uma das maiores plataformas de machine learning do mundo,


mantida pela Google. Oferece bibliotecas (código) para diversas linguagens, como
JavaScript, Python e Java, exemplos e tutoriais desde os níveis mais básicos, até a
utilização avançada. Possui, ainda, diversos modelos pré-treinados para utilização,
como o MobileNet, um modelo pequeno, de baixa latência e baixo consumo
energético parametrizado para atender diversos casos de uso, com foco em
dispositivos embarcados e móveis, que possuem capacidade de processamento
limitada. Em comparação com modelos renomados da literatura como o ImageNet, o
MobileNet troca tamanho e precisão por latência e velocidade. No presente estudo,
Tensorflow e MobileNet são utilizados para a classificação das imagens buscadas
através da palavra-chave. A classificação resultará na predição de uma classe à que a
imagem pertence, juntamente da probabilidade percentual. As informações citadas
sobre TensorFlow e MobileNet estão disponíveis oficialmente respectivamente em:
https://www.tensorflow.org/ e
https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.m
d.

29
4.2.4. AWS Lambda

O Lambda é um serviço da Amazon Web Services (AWS) para execução de


código serverless, ou seja, sem precisar provisionar ou gerenciar servidores. O serviço
se encarrega de executar o código quando solicitado, e também de auto-escalar
contêineres e novas instâncias de máquinas para prover maior poder computacional
quando necessário. Assim como os demais serviços da AWS, é cobrado por demanda
(quantidade de requisições), mas possui um nível inicial gratuito. Aqui, utilizou-se do
AWS Lambda para hospedagem de toda a lógica da skill desenvolvida. Desta forma,
toda requisição por voz que seja resolvida para a skill, acabará atingindo as funções
Lambda, que executará a lógica em uma nova máquina quando for solicitada, e
desligará a máquina assim que o processo for concluído. Essas e outras informações
sobre AWS Lambda podem ser encontradas oficialmente em:
https://aws.amazon.com/pt/lambda/.

4.2.5. AWS DynamoDB

O DynamoDB é um serviço, também da AWS, de banco de dados na nuvem.


É um banco de dados NoSQL, de chave-valor e documentos, que oferece desempenho
em milissegundos em qualquer escala, segundo o próprio site. É utilizado por gigantes
como Lyft, Airbnb e Samsung, e recomendado para quaisquer aplicativos ou jogos
que necessitem de baixa latência em grande escala. Neste estudo, usufruiu-se também
do nível gratuito do DynamoDB para persistência e relacionamento dos
identificadores únicos dos dispositivos Alexa que farão as requisições, dos códigos
únicos gerados para autenticação e dos identificadores de usuário do Telegram. Essas
e outras informações sobre AWS DynamoDB podem ser encontradas oficialmente
em: https://aws.amazon.com/pt/dynamodb.

4.3. Experimentos

Para o desenvolvimento do projeto, tem-se a necessidade de entender, de


forma quantitativa em um primeiro momento, métodos que classifiquem as imagens
solicitadas pelo usuário da skill. Para isso, abordou-se alguns dos principais modelos
de classificação de imagem, comparando-os sistematicamente utilizando métricas
como acurácia, precisão e matriz de confusão para chegar em uma escolha que mais
se adeque às necessidades da aplicação final.
Em conjunto a isso, de forma qualitativa, visando as funcionalidades da skill e
o resultado para o usuário, buscou-se testar e analisar as limitações, a arquitetura
escolhida, os modelos pré-treinados e a implementação com um todo, com o objetivo
de implementar cada etapa da aplicação de forma mais adequada e que trará o melhor
resultado considerando as limitações existentes.

30
4.3.1. Modelos pré-treinados

Desde que surgiram as redes neurais profundas, principalmente utilizando redes


convolucionais, o Desafio de Reconhecimento Visual de Grande Escala do ImageNet
(ILSVRC, termo abreviado do inglês) desempenhou um papel importante no avanço do
estado da arte. O ILSVRC é uma competição anual organizada pela equipe ImageNet desde
2010, onde as equipes de pesquisa avaliam seus algoritmos de visão computacional e
aprendizado de máquina em várias tarefas de reconhecimento visual, como classificação e
localização de objetos. Os dados de treinamento são um subconjunto do conjunto de dados
ImageNet com 1,2 milhão de imagens pertencentes a 1000 classes. O ImageNet é um projeto
que visa fornecer um grande banco de imagens para fins de pesquisa, e contém mais de 14
milhões de imagens que pertencem a mais de 20.000 classes.
Ao utilizar grandes bancos de dados de imagens, como o ImageNet, é possível treinar
redes neurais profundas mais complexas, que geram excelentes resultados. Porém, para
realizar todo esse processamento, é necessário um maquinário potente e mesmo assim, ainda
gasta-se muito tempo para treinar essas redes. Felizmente, existem desafios como o ILSVRC,
onde muitos grupos de pesquisa compartilham os modelos que foram treinados em um grande
conjunto de dados, por um grande período e utilizando hardwares poderosos. Assim, pode-se
basear nesses modelos pré-treinados, como ponto de partida para o processo de treinamento.
Para os experimentos deste trabalho, serão usados 4 tipos de modelos que possuem
código aberto para a comunidade e que já foram testados em competições como o ILSVRC.
Eles são: MobileNet, VGG16, ResNet50 e EfficientNet. A escolha dentre esses modelos e
suas características serão explicadas nas seções seguintes.

4.3.1.1. VGG16

O VGG-16 é um dos modelos pré-treinados mais populares para classificação de


imagens. Esse modelo de redes neurais convolucionais foi proposto e apresentado na famosa
conferência ILSVRC-2014, onde atingiu bons resultados e até hoje continua sendo o modelo
a ser batido. Desenvolvido no Visual Graphics Group da University of Oxford, o VGG-16
superou o padrão do AlexNet e foi rapidamente adotado por pesquisadores e pela indústria
para suas tarefas de classificação de imagens. O modelo realizou uma melhoria nos modelos
usados anteriormente, ao substituir o tamanho de filtros grandes por múltiplos filtros de
tamanho 3 × 3, um após o outro. De acordo com o artigo Very deep convolutional networks
for large-scale image recognition (2014), esse modelo se generaliza bem para uma ampla
gama de tarefas e conjuntos de dados, e confirma a importância de utilizar redes profundas
em classificações visuais. A arquitetura do modelo pode ser vista na Figura 8, onde está
disposta a estrutura de camadas do VGG-16 e a sequência do fluxo acontece da esquerda para
a direita.

31
Figura 8 - Estrutura do modelo VGG16

Fonte: VGGNet — 1st Runner-Up (Image Classification) (2014).

Além disso, existem variações do modelo VGG16, que são basicamente melhorias
para ele, como o VGG19 (19 camadas). Não abordaremos esse modelo no presente trabalho.

4.3.1.2. ResNet50

A ResNet (Residual Network) é uma rede neural convolucional da Microsoft que


venceu o concurso ILSRVC de 2015 no conjunto de dados ImageNet. O desempenho dessa
rede foi superior ao de seres humanos.
Quando redes mais profundas começam a convergir, o problema de degradação pode
aparecer: com o aumento da profundidade da rede, a precisão fica saturada e, em seguida,
degrada rapidamente. Inesperadamente, tal degradação não é causada pelo overfitting, e
adicionar mais camadas ao modelo profundo ocasionaria maior erro de treinamento. A
ResNet foi construída por blocos residuais, estes blocos tem uma entrada x que passa por uma
série de operações de convolução-relu-convolução. O resultado da operação f(x) é adicionado
à entrada original x. A Figura 9 mostra a arquitetura do bloco. Essas camadas adicionadas são
o mapeamento de identidade e as outras camadas são copiadas do modelo mais raso
aprendido. Esta solução indica que um modelo mais profundo não deve produzir um erro de
treinamento maior do que sua versão da rede mais rasa (HE et al., 2016).
A equação 2 mostra o processamento que o bloco residual faz:

𝐻(𝑥) = 𝑓(𝑥) + 𝑥

Na VGG16, o resultado de processamento H(x) é igual a f(x), ou seja, espaço de saída


é completamente alterado em relação ao espaço de entrada x. Já na ResNet a função f(x) é
apenas uma regularização. Com isso, o espaço de saída é somente uma alteração do espaço de
entrada. Assim, a ResNet mostra que os mapas residuais são mais fáceis de serem otimizados
por meio dessa alteração no espaço de entrada (HE et al., 2016).

32
Figura 9 - Bloco residual da rede ResNet

Fonte: HE et al., 2016

4.3.1.3. EfficientNetB0

O EfficientNet é uma arquitetura de rede neural convolucional e método de


dimensionamento criado para melhorar a precisão e a eficiência das classificações se
comparado com os modelos anteriores a ele. No EfficientNet, os autores propõem um novo
método de Scaling denominado Compound Scaling. Resumindo, é o seguinte: os modelos
anteriores, como o ResNet, seguem a abordagem convencional de dimensionar as dimensões
arbitrariamente e adicionar mais e mais camadas.
No entanto, o artigo propõe que, se escalarmos as dimensões em um valor fixo ao
mesmo tempo e o fizermos de maneira uniforme, obteremos um desempenho muito melhor.
Os coeficientes de escala podem ser de fato decididos pelo usuário.
Embora essa técnica de escalonamento possa ser usada para qualquer modelo baseado
em CNN, os autores começaram com seu próprio modelo de linha de base chamado
EfficientNetB0:

Figura 10 - Esquema da EfficientNet

Fonte: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

33
Na Figura 10, “MBConv” representa “convolução de gargalo invertido móvel”
(semelhante a MobileNetV2). Eles também propõem a fórmula de escalonamento composto
com os seguintes coeficientes de escalonamento:

● Profundidade = 1,20
● Largura = 1,10
● Resolução = 1,15

Esta fórmula é usada para construir novamente uma família de EfficientNets -


EfficientNetB0 a EfficientNetB7. A Figura 11 apresenta um gráfico simples que mostra o
desempenho comparativo desta família em relação a outros modelos populares:

Figura 11 - Comparativo do EfficientNet com outros modelos

Fonte: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

Como pode-se ver, mesmo o modelo B0 de base começa com uma precisão muito
maior, que só aumenta, e isso também com menos parâmetros. Por exemplo, EfficientB0 tem
apenas 5,3 milhões de parâmetros, que é pouco se comparado com outros modelos.

34
4.3.1.4. MobileNetV2

As redes MobileNet, também possuem camadas de convolução em profundidade.


Como explicado anteriormente, essas camadas são usadas para reduzir o tamanho e a
complexidade do modelo. Assim, faz com que essas redes sejam particularmente úteis para
aplicativos e sistemas embarcados. Como pode ser visto na tabela 2, ela é a rede que possui o
menor tamanho e a menor quantidade de parâmetros, mas suas acurácias não estão distantes
dos melhores modelos.
Para obter essas características menores, dois parâmetros são introduzidos para que a
rede MobileNet possa ser facilmente utilizada: o multiplicador de largura (α) e o
multiplicador de resolução (ρ). O multiplicador de largura é usado para controlar a largura de
entrada da camada. Seu valor é entre 0 e 1, e o custo computacional e o número de
parâmetros podem ser reduzidos quadraticamente com o multiplicador de largura
aproximadamente igual a 2. Já o multiplicador de resolução é introduzido para controlar a
resolução da imagem de entrada da rede, diminuindo também o número de parâmetros.
As redes MobileNet provam que é possível obter bons modelos de redes neurais para
que sejam aplicados em sistemas embarcados, que é a tendência tecnológica presente hoje.

4.3.2. Métricas

Nesta subseção são apresentadas as métricas de classificação utilizadas neste trabalho


para fazer o comparativo entre as redes VGG16, ResNet, EfficientNet e MobileNet. As
métricas são importantes para avaliar o desempenho das redes escolhidas. Nas tarefas de
classificação, que é o caso deste trabalho, busca-se prever qual é a categoria a que uma
amostra pertence, como, por exemplo, determinar se uma imagem é de um cachorro ou de um
gato. As fórmulas para calcular as métricas foram obtidas de Hackeling (2014).

4.3.2.1. Acurácia

A Acurácia em problemas de classificação é o número de previsões corretas feitas


pelo modelo sobre todos os tipos de previsões feitas.
Para calcular a acurácia de um algoritmo é utilizado a seguinte fórmula e os
respectivos itens da fórmula. Esses mesmos itens serão válidos para as demais métricas. Com
isso, temos:
● ACC - Acurácia
● TP - True Positive (Verdadeiro Positivo)
● TN - True Negative (Verdadeiro Negativo)
● FP - False Positive (Falso Positivo)
● FN - False Negative (Falso Negativo)

𝑇 𝑃 + 𝑇𝑁
𝐴𝐶𝐶 = 𝑇 𝑃 + 𝑇𝑁 + 𝐹𝑃 + 𝐹𝑁

35
4.3.2.2. Precisão

A precisão é a razão de previsões corretas (TP) para o total de observações positivas


previstas da classe. Ou seja, no exemplo da Tabela 2, quantos cães foram preditos pelo
algoritmo que realmente são cachorros.
Para calcular a precisão (P) do algoritmo com relação uma classe (por exemplo, classe
positiva) é utilizada a seguinte fórmula:

𝑇𝑃
𝑃 = 𝑇 𝑃 + 𝐹𝑃

4.3.2.3. Matriz de confusão entre as classes

Uma matriz de confusão compara as previsões de um modelo com o padrão


verdadeiro. A diagonal principal da matriz representa classes que foram corretamente
previstas (TP), enquanto elementos fora da diagonal representam indivíduos que foram
classificados de forma errada (FP).
A partir da matriz de confusão, é possível calcular as métricas para avaliar se o
algoritmo está ou não conseguindo bons resultados. A Tabela 2 mostra um exemplo de matriz
de confusão que será utilizada nas seções seguintes para fazer os cálculos das métricas.

Tabela 2: Matriz de confusão.

Cão Gato

Classe Cão 5 (TP) 1 (FP)


predita
Gato 2 (FN) 6 (TN)

Classe real
Fonte: Autores

Na Tabela 2 temos na vertical o valor predito que o algoritmo classificou e na


horizontal o valor real da classe. Ela ainda revela que para a classe cão, o algoritmo
classificou 5 instâncias como cão e que realmente eram cães (TP). O algoritmo classificou
uma instância como gato que na verdade era cão (FP). Para a classe gato o algoritmo
classificou 2 instâncias como cão (FN) quando na verdade eram gatos e 6 como gatos que
realmente eram gatos (TN). Os valores utilizados foram apenas para exemplificar.
Considera-se, nesse caso da matriz, que o resultado de classificação da classe cão é positivo e
o da classe gato é negativo.

36
4.3.3. Comparação dos modelos

Essa seção tem como objetivo comparar os 4 modelos citados anteriormente,


utilizando das métricas de avaliação para a escolha do modelo pré-treinado que mais se
encaixa nos requisitos da skill desenvolvida.
Como citado anteriormente, para a realização do trabalho foram escolhidos alguns
modelos pré-treinados disponíveis na biblioteca TensorFlow, com objetivo de escolher um
para ser usado na aplicação final. Os modelos pré-treinados já foram exaustivamente
treinados em grandes conjuntos de dados, obtendo resultados surpreendentes, como mostra a
Tabela 3. Nessa tabela constam as redes escolhidas para essa etapa do trabalho. Essas redes
fazem parte das redes vencedoras de competições como o ILSVRC e a Tabela 3 apresenta
suas respectivas acurácias top-1 e top-5 no dataset de validação do ImageNet. Além disso, é
possível notar a profundidade e a quantidade de parâmetros de cada rede.

Tabela 3: Redes neurais e suas respectivas acurácias no dataset ImageNet.


Model Size Top-1 Accuracy Top-5 Accuracy Parameters Depth

VGG16 528 MB 0.713 0.901 138,357,544 23

ResNet50 98 MB 0.749 0.921 25,636,712 -

MobileNetV2 14 MB 0.713 0.901 3,538,984 88

EfficientNetB0 29 MB - - 5,330,571 -
Fonte: Adaptado de Keras Applications.

Para uma comparação com dados de teste fiéis ao uso real da aplicação, compilou-se
um dataset de 50 imagens provenientes do provedor de imagens Unsplash, distribuídas entre
5 classes pertencentes ao ImageNet (10 imagens por classe).
Como já citado no item 4, o desenvolvimento da skill se deu através da linguagem de
programação JavaScript, utilizando o framework Node.js. Estes permitiram a fácil utilização
do modelo MobileNetV2 através da biblioteca oficial da plataforma Tensorflow. Contudo, os
outros modelos aqui apresentados não estão disponíveis como plugins, então optou-se pela
plataforma Google Colaboratory para comparação dos modelos, que permite escrita e
execução remota de código Python, assim como acesso gratuito a GPUs e compartilhamento
de código. Neste caso, utilizou-se dos modelos disponibilizados através da biblioteca Keras,
da plataforma Tensorflow para Python.

37
Tabela 4 - Comparação dos modelos de classificação de imagens
Modelo pré-treinado Acurácia média (%) Precisão (%)

MobileNetV2 67 62

VGG16 73 62

ResNet50 80 74

EfficientNetB0 75 80
Fonte: Autores

Observando-se a tabela 4, é possível entender brevemente o comportamento de cada


modelo para as imagens de input da aplicação. Diferentemente de imagens de um dataset de
treino, as imagens do uso real da aplicação não são padronizadas, e possuem uma quantidade
de detalhes (informações) muito superior, por se tratarem de imagens de fotografia
profissional, de alta resolução e com edição via software. Percebe-se, então, que ResNet50
teve a maior confiança em seus acertos, enquanto que EfficientNetB0 acertou mais vezes.

Nas figuras 12 e 13, encontram-se as matrizes de confusão para cada modelo, em que
a sua diagonal principal evidencia os True Positives, quando a classe verdadeira coincide com
o que foi predito. Calculando a razão True Positives / Número total de imagens, obtém-se a
precisão para o modelo.

Figura 12 - Matriz de confusão para MobileNetV2 e VGG16

Fonte: Autores

38
Figura 13 - Matriz de confusão para ResNet50 e EfficientNetB0

Fonte: Autores

Exemplos de acurácia por imagens individuais podem ser encontrados nas figuras 14,
15 e 16, separados pelos modelos.

Figura 14 - Comparação de Acurácia 1

Fonte: Autores

39
Figura 15 - Comparação de Acurácia 2

Fonte: Autores

Figura 16 - Comparação de Acurácia 3

Fonte: Autores

Nota-se, então, que o MobileNetV2 perde em acurácia e precisão para os outros


modelos, na maioria das situações. Entretanto, vale notar que seu foco é outro, o de prover a
classificação de imagens para dispositivos embarcados e móveis. Visto que a aplicação aqui
desenvolvida não necessita de grandes valores de acurácia e precisão, mas apenas os utiliza
como complemento para a funcionalidade principal — receber imagens curadas, e de maneira
fácil e rápida — considera-se não grande prejuízo a utilização do MobileNetV2 neste
contexto. Inclusive, o usuário final se beneficiará de um modelo mais enxuto
(aproximadamente 37 vezes menor em memória, e 39 vezes menos parâmetros utilizados que
o VGG16), já que neste fluxo o tempo de espera é uma maior prioridade. Por fim, este
modelo ainda é o único disponível oficialmente como plugin para Tensorflow em Javascript.

40
4.3.4. Análise Qualitativa

A análise qualitativa busca entender, de maneira subjetiva, os pontos fracos e fortes


do estudo realizado, do ponto de vista do usuário final. Serão apresentadas limitações do
reconhecimento de fala, da arquitetura escolhida, do modelo de reconhecimento de imagens
escolhido e da implementação final.
Para fins de apresentação destes testes, utilizou-se do simulador da Alexa, ferramenta
oficial da própria Amazon para interagir com a skill desenvolvida através do console. A
ferramenta utiliza as mesmas APIs da Alexa que todas as outras skills publicadas, limitando
as diferenças ao texto escrito. Para minimizar as diferenças de interpretação que pudessem
surgir do mesmo comando iniciado por voz e por texto, tentou-se comunicar através de texto
da maneira mais próxima possível (e informal) que uma requisição por voz seria, no dia-a-dia
do usuário final.

4.3.4.1. Nome de invocação

Uma limitação da skill “Procure Uma Imagem” é que ainda não está publicada na loja
da Amazon. Isso impede que adicionem-se as chamadas Intent Launch Phrases, ou, em
português, Frases de Invocamento de Intenção. Como explicado no item 4.1, intenções são
fluxos definidos que são executados através de uma frase de invocamento. Neste caso, se a
skill estivesse publicada, seria liberado o acesso ao cadastro de frases como “Alexa, me
manda uma imagem de cachorro” sem que fosse preciso chamar um comando para abrir a
skill em um primeiro momento. Dito isso, para utilização desta skill, no momento é
necessário primeiramente chamar o seu nome de invocação: “Procure Uma Imagem”,
análogo a pressionar o ícone de um aplicativo de smartphone, para depois poder utilizar de
suas funções. Outra limitação é que o nome de invocação deve ser chamado exatamente
como cadastrado, do contrário a API da Alexa não entenderá a requisição. Na Figura 17,
exibe-se alguns testes realizados com o nome de invocação, em que somente o último,
utilizando o nome exato, teve sucesso.

Figura 17 - Testes com nome de invocação da skill

Fonte: Autores

4.3.4.2. Utterances

Conforme abordado no item 4.1, utterances, ou enunciados, são as frases utilizadas


para iniciar uma intenção. Na skill desenvolvida, existem duas intenções: ImageSearchIntent
e LinkTelegramIntent, responsáveis pelos fluxos de procurar, classificar e enviar uma

41
imagem, e conectar a conta do Telegram do usuário, respectivamente. Considera-se um ponto
forte desta skill a presença de diversos enunciados disponíveis para ativação de sua atividade
principal (procurar imagens). A Figura 18 representa um recorte da plataforma interna da
Amazon que gerencia as informações da skill. Percebe-se que existem 15 frases cadastradas,
de diversas maneiras e utilizando diferentes preposições e maneiras comuns (e informais) de
se solicitar imagens na língua portuguesa. Desta forma, espera-se que o usuário final não
tenha problemas em solicitar uma imagem, assim que já tiver aberto (e estiver dentro do
contexto) da skill.

Figura 18 - Recorte das utterances para ImageSearchIntent

Fonte: Autores

Na Figura 19, comprova-se o exposto acima. O diálogo apresentado simula um


usuário solicitando imagens de diversos assuntos através de 3 enunciados diferentes, de
maneira coloquial.

42
Figura 19 - Usuário solicita imagens através de diferentes enunciados

Fonte: Autores

4.3.4.3. API do Unsplash

Apresentada no item 4.2.1, o Unsplash é uma das maiores plataformas provedoras de


imagens da atualidade. As fotos disponibilizadas são curadas e de fotógrafos cadastrados,
mantendo, assim, alta qualidade e excluindo a possibilidade de resultados maliciosos. Estes
resultados são disponibilizados tanto pela interface do site, quanto pela API, utilizada neste
estudo. Entretanto, vale notar que a sua versão em português é recente e pode apresentar
resultados menos satisfatórios que o mesmo termo pesquisado em inglês. A figura 20
apresenta o resultado recebido no Telegram para o termo de pesquisa “Buldogue francês”,
onde observa-se resultados totalmente insatisfatórios, de paisagens praianas. Na figura 21,
analisou-se o mesmo termo de pesquisa mas na interface do site, onde pode-se observar mais
resultados. Percebe-se que as imagens desejadas encontram-se no final da página.

Figura 20 - Resultado da pesquisa “Buldogue francês” no Telegram

Fonte: Autores

43
Figura 21 - Resultado da pesquisa “Buldogue francês” no site

Fonte: Autores

44
Analisando-se os resultados para “French bulldog” (figura 22), nota-se que todos os
resultados apresentados na primeira página poderiam ser considerados satisfatórios,
evidenciando uma limitação da API na sua versão em português.

Figura 22 - Resultado da pesquisa “French bulldog” no site

Fonte: Autores

45
4.3.4.4. Arquitetura implementada

Em relação à arquitetura implementada, em sua primeira versão, considera-se


satisfatória do ponto de vista do usuário. Permite que este obtenha, em questão de poucos
segundos, e com esforço mínimo, imagens acerca do termo de pesquisa em seu próprio
smartphone, de maneira familiar, que é um aplicativo de mensagens instantâneas.
Contudo, existe o perigo inerente, porém pouco provável, de que o aplicativo
Telegram deixe de existir, necessitando de mudança no código para substituí-lo. Outra
limitação é em relação à quantidade de contas conectadas, que a implementação em seu
estado atual permite receber as imagens em somente uma única conta Telegram.
Por fim, ressalta-se que também não é possível escolher a quantidade de imagens que
se deseja receber, valor que está fixo em três.

4.3.4.5. Acurácia

Como visto no item 4.2.3, o modelo de classificação de imagens MobileNetV2 é um


modelo focado em performance para dispositivos de processamento limitado. O modelo é
pré-treinado a partir do banco de imagens ImageNet, que possui atualmente mais de 21 mil
classes indexadas. Entretanto, como é um modelo enxuto, utilizou-se de somente um
subconjunto de 1.000 classes. Assim, nota-se através dos testes, que nos poucos casos não
cobertos pelas classes que o MobileNetV2 foi treinado, sua acurácia cai consideravelmente.
As figuras 23 e 24 estabelecem uma comparação entre dois termos de pesquisa selecionados
especificamente para demonstrar o caso descrito acima. À esquerda, resultados para “
ethernet”, não coberto pelo conjunto de treinamento, e à direita, resultados para
“hipopótamo”, termo genérico, de fácil identificação, coberto pelo conjunto de treinamento.

46
Figura 23 - Resultados para “Cabo ethernet” Figura 24 - Resultados para “Hipopótamo”

Fonte: Autores

Nota-se que o termo não coberto pelas classes com qual o modelo foi treinado possui
predições insatisfatórias, como “gas pump” (inglês para “bomba de gasolina”), que não
condiz com o esperado “ethernet”. Observa-se, também, que os níveis de confiança são
baixos, neste caso, de aproximadamente 20% e 57%.
Por outro lado, ao classificar as imagens do termo “hipopótamo”, observa-se com
facilidade que é uma classe pertencente ao conjunto de treinamento do ImageNet, visto que
todas as predições contemplam o exato termo, e com probabilidades acima de 99%, o que é
altamente satisfatório.

47
4.4. Avaliação / Resultados

Na tabela 5, encontram-se os resultados da comparação de 5 termos de pesquisa


testados na skill desenvolvida. Para cada termo de pesquisa, foram utilizadas 3 imagens
provenientes da API do serviço de imagens, tal qual o usuário final receberá em um uso real.
Registrou-se se o termo de pesquisa é uma classe pertencente ao ImageNet (banco de
imagens utilizado no pré-treinamento do MobileNetV2), a acurácia e precisão médias, assim
como se o resultado obtido foi satisfatório, do ponto de vista do usuário.

Tabela 5 - Comparação de 5 termos de pesquisa testados na skill desenvolvida


Termo de Pertence ao Acurácia média Precisão média Resultado
pesquisa ImageNet (%) (%) satisfatório

Buldogue francês sim 49 0 não

Hipopótamo sim 99 100 sim

Hamster sim 75 100 sim

Ethernet não 34 0 sim

Farol sim 90 67 sim


Fonte: Autores

Para o primeiro termo, “Buldogue francês”, nota-se que mesmo pertencendo ao


conjunto de classes do ImageNet, sua acurácia e precisão são totalmente insatisfatórias,
devido ao já evidenciado no item 4.3.9.3, em que, devido à limitação da API do serviço de
imagens na língua portuguesa, os primeiros resultados retornados são totalmente
incondizentes com o termo de pesquisa. Assim, obteve-se um resultado insatisfatório do
ponto de vista do usuário, que recebeu imagens incondizentes e com baixa acurácia e
precisão.
No segundo termo, “Hipopótamo”, observa-se o caso de teste perfeito. O termo
pertence ao conjunto de classes do ImageNet, a API de imagens entrega bons resultados,
consequentemente mantendo a acurácia e precisão altíssimas e, também, a satisfação do
usuário, que recebeu o solicitado.
Tratando-se do terceiro caso, “Hamster”, percebe-se que, durante o treinamento do
modelo MobileNetV2, provavelmente ocorreu um underfitting especificamente no
treinamento desta classe, pois, embora a API de imagens tenha entregue bons resultados e a
classe pertencer ao conjunto de treinamento, a acurácia média não se manteve próximo da
máxima, por motivos internos do próprio modelo de classificação. Contudo, o resultado
percebido pelo usuário ainda é satisfatório, visto que recebeu o que foi solicitado, com
médias razoáveis.
O quarto teste é curioso, pois é o único termo de pesquisa não pertencente ao conjunto
de treinamento, mas que mesmo assim entregou um resultado satisfatório ao usuário. A
pesquisa por “Ethernet” entregou imagens condizentes, porém, por não existir no índice de

48
classes do ImageNet, o modelo falhou na predição, resultando em classes como “oil pump”
(“bomba de gasolina”, em português), e com uma acurácia média insatisfatória de 34%.
Por último, ao pesquisar por “Farol”, o usuário também recebe resultados
satisfatórios, com todas as imagens correspondentes, porém, o modelo falha na precisão,
predizendo um dos resultados como “quebra-mar” ou “cais” ao invés do exato termo,
resultando em uma precisão média de 67%. Contudo, ainda considera-se bons resultados,
visto que o usuário foi satisfeito e a precisão média de 90%.

49
5. CONCLUSÃO

É notável a evolução das tecnologias de reconhecimento e processamento de voz na


última década. Atualmente, assistentes virtuais como a Amazon Alexa executam muito mais
do que se imagina, como aprofundado neste estudo. O simples processo de captação de um
sinal de áudio, tratamento dos ruídos e processamento da fala em texto, já é merecedor de um
próprio estudo à parte.
Redes Neurais são um conceito que, embora datado da década de 80, ainda tem
extrema relevância, e serve de base para a implementação de aprendizado de máquina e
inteligência artificial. As Redes Neurais Convolucionais permitem filtrar e rastrear os dados
visíveis de uma imagem a fim de encontrar padrões e classificá-los. Naturalmente, novas
implementações e evoluções em cima desta base sempre surgirão, como é exemplo dos
modelos ResNet50 e EfficientNetB0, idealizados no concurso ILSVRC e aqui expostos. Cada
modelo possui seus pontos fortes e fracos, cabendo ao cientista de dados analisá-los e
escolher a melhor opção para a situação.
No contexto da aplicação aqui desenvolvida, tem-se como principal objetivo a
entrega, via solicitação por voz, de imagens curadas, com boa confiança, de maneira rápida e
prática para o usuário. Nesse âmbito, considera-se mais do que suficiente a utilização do
modelo de classificação de imagens MobileNetV2, que, a um pequeno custo de acurácia e
precisão, fornece uma classificação igualmente confiável mas mais rápida, leve e enxuta.
Este estudo buscou tocar a superfície do que se é possível fazer juntando as
tecnologias de reconhecimento e processamento de voz, redes neurais, machine learning e
classificação de imagens. Como resultado, obteve-se uma aplicação de uso simples para o
usuário final, mas de grandes complexidades internas, em sua arquitetura. Os autores
consideram um sucesso (mesmo que em pequena escala) os resultados obtidos e esperam que
o trabalho aqui desenvolvido possa servir de inspiração para mais evoluções no tema.
Considera-se que os objetivos foram alcançados. O programa é capaz de buscar por
imagens de um assunto definido abertamente pelo usuário — via voz — em uma API de
imagens, classificá-las utilizando um modelo de aprendizado de máquina, e apresentar os
resultados para o usuário em um meio de comunicação usual. Entende-se como suas
principais vantagens a rapidez e praticidade para se pesquisar imagens em uma situação
cotidiana, não-acadêmica. Como desvantagens, nota-se a falta de granularidade e
customização, visto que não é possível definir o número de imagens retornadas e o provedor
das imagens, ao menos em sua primeira versão.
Para trabalhos futuros, sugere-se a criação do próprio modelo de classificação de
imagens, otimizado para imagens com cunho de uso diário e informal, como stock images,
através da composição de camadas da rede neural. Para isso, seria necessário a compilação de
um grande banco de imagens deste tipo, que entende-se como um desafio. Porém, caso
alcançado, será possível presenciar um modelo de classificação mais preciso e tão enxuto
quanto o escolhido para utilização neste estudo. Ainda, pode-se melhorar a interação do
usuário com a skill, adicionando mais enunciados (utterances), quantidade de imagens
retornadas (explorar Alexa Conversations), tratamentos de erro e customização do canal de
recebimento por outro meio ou aplicativo. Por fim, sugere-se também avaliar a utilização de
um serviço de tradução (para inglês) do texto enviado para a pesquisa das imagens, a fim de

50
tentar mitigar as limitações da API do Unsplash em português. Todas as implementações
estão públicas no GitHub1 e podem ser utilizadas como estudo para futuras implementações
ou ser adaptadas para outros projetos.

1
https://github.com/thiagobrez/procure-uma-imagem

51
REFERÊNCIAS

AMAZON. Inteligência Artificial Da Alexa . Disponível em:


https://www.amazon.jobs/pt/teams/alexa-ai. Acesso em: 12 nov. 2020.

AMAZON. The Scalable Neural Architecture behind Alexa’s Ability to Select Skills.
Disponível em:
https://www.amazon.science/blog/the-scalable-neural-architecture-behind-alexas-ability-to-se
lect-skills. Acesso em: 12 abr. 2021.

AMAZON. What Is Automatic Speech Recognition?. Disponível em:


https://developer.amazon.com/en-US/alexa/alexa-skills-kit/asr. Acesso em 06 mai. 2021.
AWS. Amazon Web Services. Disponível em: https://aws.amazon.com/pt/. Acesso em 12
nov. 2020.

AWS. Amazon DynamoDB. Disponível em: https://aws.amazon.com/pt/dynamodb/. Acesso


em 16. jun. 2021.
AWS. AWS Lambda. Disponível em: https://aws.amazon.com/pt/lambda/. Acesso em 16
jun. 2021.
GITHUB. MobileNet. Disponível em:
https://github.com/tensorflow/tfjs-models/tree/master/mobilenet. Acesso em 05 nov. 2020.

IBM. What are Neural Networks?. Disponível em:


https://www.ibm.com/cloud/learn/neural-networks. Acesso em: 10 jul. 2021.
IBM. What is machine learning?. Disponível em:
https://www.ibm.com/cloud/learn/machine-learning. Acesso em 08 mar. 2021.

LOISEAU, Jean-Christophe B. Rosenblatt’s perceptron, the first modern neural network.


Towards Data Science. Disponível em:
https://towardsdatascience.com/rosenblatts-perceptron-the-very-first-neural-network-37a3ec0
9038a. Acesso em: 10 jul. 2021.
MIT. Explained: Neural networks. Disponível em:
https://news.mit.edu/2017/explained-neural-networks-deep-learning-0414. Acesso em 10
mar. 2021.

52
PRÖVE, Paul-Louis. Rosenblatt’s perceptron, the first modern neural network. Towards
Data Science. Disponível em:
https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d.
Acesso em: 10 jul. 2021.
Simonyan, Karen & Zisserman, Andrew. (2014). Very Deep Convolutional Networks for
Large-Scale Image Recognition. arXiv 1409.1556.
TENSORFLOW. Tensorflow. Disponível em: https://www.tensorflow.org/. Acesso em: 05
nov. 2020.

TOWARDS DATA SCIENCE. Convolutional Neural Network. Disponível em:


https://towardsdatascience.com/convolutional-neural-network-17fb77e76c05. Acesso em 06
mai. 2021.

TELEGRAM. Perguntas Frequentes. Disponível em: https://telegram.org/faq. Acesso em:


15 jun. 2021.

UNSPLASH. Our story so far. Disponível em: https://unsplash.com/history. Acesso em: 15


jun. 2021.
HACKELING, G. Mastering Machine Learning with scikit-learn. [S.l.]: Packt Publishing
Ltd, 2014.
Keras. Keras applications. https://keras.io/applications/. Acesso em: 14 de Agosto de 2021.
Tan, Mingxing & Le, Quoc. (2019). EfficientNet: Rethinking Model Scaling for
Convolutional Neural Networks.
HE, K.; ZHANG, X.; REN, S.; SUN, J. Deep residual learning for image recognition. In:
Proceedings of the IEEE conference on computer vision and pattern recognition. [S.l.: s.n.],
2016. p. 770–778.
Tsang, Sik-Ho. Review: VGGNet — 1st Runner-Up (Image Classification), Winner
(Localization) in ILSVRC (2014). Acesso em: 14 de Agosto de 2021. Disponivel em:
https://medium.com/coinmonks/paper-review-of-vggnet-1st-runner-up-of-ilsvlc-2014-image-
classification-d02355543a11
Abu, Mohd Azlan & Indra, Nurul Hazirah & Abd Rahman, Abdul & Sapiee, Nor & Ahmad,
Izanoordina. (2019). A study on Image Classification based on Deep Learning and
Tensorflow. 12. 563-569.
SHEN, Yulan. Accelerating CNN on FPGA: an implementation of mobilenet on fpga. 2019.
52 f. Monografia (Especialização) - Curso de Information And Communication Technology,

53
Kth Royal Institute Of Technology School Of Electrical Engineering And Computer Science,
Stockholm, 2019.
AHMED, Shamim; BONS, Marc. Edge computed NILM. In: BUILDSYS '20: THE 7TH
ACM INTERNATIONAL CONFERENCE ON SYSTEMS FOR ENERGY-EFFICIENT
BUILDINGS, CITIES, AND TRANSPORTATION, 20., 2020, New York, Ny, Usa.
Proceedings of the 5th International Workshop on Non-Intrusive Load Monitoring. New
York, Ny, Usa: Acm, 2020. p. 1-5.
Mohandas, R. et al. TensorFlow Enabled Deep Learning Model Optimization for
enhanced Realtime Person Detection using Raspberry Pi operating at the Edge. AICS
(2020).
Skidmore, L. and Moore, R.K. orcid.org/0000-0003-0065-3311 (2019) Using Alexa for
flashcard-based learning. In: Proceedings of Interspeech 2019. Interspeech 2019, 15-19
Sep 2019, Graz, Austria. ISCA , pp. 1846-1850.

54
APÊNDICE A – Código desenvolvido

/* *
* This sample demonstrates handling intents from an Alexa skill
using the Alexa Skills Kit SDK (v2).
* Please visit https://alexa.design/cookbook for additional
examples on implementing slots, dialog management,
* session persistence, api calls, and more.
* */

import * as Alexa from "ask-sdk-core";


import {
ErrorHandler,
HandlerInput,
RequestHandler,
SkillBuilders,
} from "ask-sdk-core";
import { Response, SessionEndedRequest } from "ask-sdk-model";
import * as AWS from "aws-sdk";
import * as Adapter from "ask-sdk-dynamodb-persistence-adapter";
import { createApi, Language } from "unsplash-js";
import fetch from "node-fetch";
import { totp } from "otplib";
import { Predictions } from "types";
const fs = require("fs");
const { pipeline } = require("stream");
const { promisify } = require("util");
const tfnode = require("@tensorflow/tfjs-node");
const mobilenet = require("@tensorflow-models/mobilenet");

const secret = "KVHFQRSPNZQUYMLXOVYDDQKJKTDTSRLA";

async function downloadImage(url: string, name: string) {


const streamPipeline = promisify(pipeline);

const response = await fetch(url);

if (!response.ok)
throw new Error(`unexpected response ${response.statusText}`);

const tmpPath = `./tmp`;


const filePath = `${tmpPath}/${name}-${Date.now()}.jpeg`;

55
try {
if (!fs.existsSync(tmpPath)) {
fs.mkdirSync(tmpPath);
}
} catch (err) {
console.error(err);
}

await streamPipeline(response.body,
fs.createWriteStream(filePath));

return filePath;
}

async function classifyImage(filePath): Promise<Predictions> {


const image = fs.readFileSync(filePath);
const decodedImage = tfnode.node.decodeImage(image, 3);

const model = await mobilenet.load();


return await model.classify(decodedImage);
}

const LaunchRequestHandler = {
canHandle(handlerInput) {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) ===
"LaunchRequest"
);
},
async handle(handlerInput: HandlerInput) {
const speakOutput =
'Bem vindo ao Procure Uma Imagem. Você pode dizer: "Procure
uma imagem do Will Smith", por exemplo.';

return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
},
};

56
const LinkTelegramIntentHandler: RequestHandler = {
canHandle(handlerInput: HandlerInput): boolean {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) ===
"IntentRequest" &&
Alexa.getIntentName(handlerInput.requestEnvelope) ===
"LinkTelegramIntent"
);
},
async handle(handlerInput: HandlerInput): Promise<Response> {
const deviceId =
Alexa.getDeviceId(handlerInput.requestEnvelope);
const token = totp.generate(secret);
const attributesManager = handlerInput.attributesManager;
const attributes = await
attributesManager.getPersistentAttributes();
const telegramTokens = attributes.telegramTokens || {};

attributesManager.setPersistentAttributes({
...attributes,
telegramTokens: {
...telegramTokens,
[deviceId]: token,
},
});
await attributesManager.savePersistentAttributes();

const speakOutput = `Envie este código para o


@ProcureUmaImagemBot no Telegram: ${token}`;
return
handlerInput.responseBuilder.speak(speakOutput).getResponse();
},
};

const ImageSearchIntentHandler: RequestHandler = {


canHandle(handlerInput: HandlerInput): boolean {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) ===
"IntentRequest" &&
Alexa.getIntentName(handlerInput.requestEnvelope) ===
"ImageSearchIntent"
);

57
},
async handle(handlerInput: HandlerInput): Promise<Response> {
const deviceId =
Alexa.getDeviceId(handlerInput.requestEnvelope);
const imagem =
Alexa.getSlotValue(handlerInput.requestEnvelope, "imagem");
let speakOutput = `Certo, te enviei algumas imagens de
${imagem}`;
const attributesManager = handlerInput.attributesManager;
const attributes = await
attributesManager.getPersistentAttributes();
const telegramToken = attributes.telegramTokens?.[deviceId];
let telegramId = attributes.linkedDevices?.[deviceId];
const isDeviceLinked = !!telegramId;

if (!isDeviceLinked) {
if (telegramToken) {
const telegramBotUpdates = await fetch(

"https://api.telegram.org/INSIRA_SEU_BOT_ID_AQUI/getUpdates"
);
const { result: telegramResponse } = await
telegramBotUpdates.json();

for (const result of telegramResponse) {


const { text, chat } = result.message;
telegramId = chat.id;

if (text.trim() === telegramToken) {


attributesManager.setPersistentAttributes({
...attributes,
linkedDevices: {
[deviceId]: telegramId,
},
});
await attributesManager.savePersistentAttributes();
break;
}
}
} else {
speakOutput = `Hmm, não encontrei seu código do Telegram,
tem certeza que digitou correto? O código é: ${telegramToken}`;

58
return
handlerInput.responseBuilder.speak(speakOutput).getResponse();
}
}

// @ts-ignore
const unsplash = createApi({
accessKey: "INSIRA_UNSPLASH_API_KEY",
fetch,
});

const { response: unsplashResponse } = await


unsplash.search.getPhotos({
query: imagem,
page: 1,
perPage: 3,
lang: Language.Portuguese,
});

console.log("unsplashresponse", unsplashResponse);

const downloadPromises = unsplashResponse.results.map((result)


=> {
const url = result.urls.regular;
const name = result.id;
return downloadImage(url, name);
});

const downloaded = await Promise.all(downloadPromises);

const predictionsPromises = downloaded.map((filePath: string)


=>
classifyImage(filePath)
);

const predictions = await Promise.all(predictionsPromises);

console.log('predictions', predictions);

const sendPhotoPromises =
unsplashResponse.results.map((result, index) => {
return fetch(

59
"https://api.telegram.org/INSIRA_SEU_BOT_ID_AQUI/sendPhoto",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chat_id: telegramId,
photo: result.urls.regular,
caption: `Description:
${result.alt_description}\n\nPrediction:
${predictions[index][0].className}\n\nProbability:
${predictions[index][0].probability}`,
}),
}
);
});

await Promise.all(sendPhotoPromises);

return
handlerInput.responseBuilder.speak(speakOutput).getResponse();
},
};

/* *
* FallbackIntent triggers when a customer says something that
doesn't map to any intents in your skill
* It must also be defined in the language model (if the locale
supports it)
* This handler can be safely added but will be ingnored in
locales that do not support it yet
* */
const FallbackIntentHandler = {
canHandle(handlerInput) {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) ===
"IntentRequest" &&
Alexa.getIntentName(handlerInput.requestEnvelope) ===
"AMAZON.FallbackIntent"
);
},
handle(handlerInput) {

60
console.log(handlerInput);

const speakOutput =
'Desculpe, não entendi essa. Tente dizer: "Procure uma
imagem de cachorro';

return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
},
};

/* *
* SessionEndedRequest notifies that a session was ended. This
handler will be triggered when a currently open
* session is closed for one of the following reasons: 1) The user
says "exit" or "quit". 2) The user does not
* respond or says something that does not match an intent defined
in your voice model. 3) An error occurs
* */
const SessionEndedRequestHandler = {
canHandle(handlerInput) {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) ===
"SessionEndedRequest"
);
},
handle(handlerInput) {
console.log(
`~~~~ Session ended:
${JSON.stringify(handlerInput.requestEnvelope)}`
);
// Any cleanup logic goes here.
return handlerInput.responseBuilder.getResponse(); // notice
we send an empty response
},
};

/* *
* The intent reflector is used for interaction model testing and
debugging.

61
* It will simply repeat the intent the user said. You can create
custom handlers for your intents
* by defining them above, then also adding them to the request
handler chain below
* */
const IntentReflectorHandler = {
canHandle(handlerInput) {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) ===
"IntentRequest"
);
},
handle(handlerInput) {
const intentName =
Alexa.getIntentName(handlerInput.requestEnvelope);
const speakOutput = `You just triggered ${intentName} +=+=`;

return (
handlerInput.responseBuilder
.speak(speakOutput)
//.reprompt('add a reprompt if you want to keep the
session open for the user to respond')
.getResponse()
);
},
};

/**
* Generic error handling to capture any syntax or routing errors.
If you receive an error
* stating the request handler chain is not found, you have not
implemented a handler for
* the intent being invoked or included it in the skill builder
below
* */
const ErrorHandler = {
canHandle() {
return true;
},
handle(handlerInput, error) {
const speakOutput =
"Desculpe, tive dificuldades para fazer o que você pediu.

62
Por favor, tente novamente.";
console.log(`~~~~ Error handled: ${JSON.stringify(error)}`);

return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.getResponse();
},
};

const LogRequestInterceptor = {
process(handlerInput) {
// Log Request
// console.log("==== REQUEST ======");
// console.log(JSON.stringify(handlerInput.requestEnvelope,
null, 2));
},
};
/**
* Response Interceptor to log the response made to Alexa
*/
const LogResponseInterceptor = {
process(handlerInput, response) {
// Log Response
// console.log("==== RESPONSE ======");
// console.log(JSON.stringify(response, null, 2));
},
};

/**
* This handler acts as the entry point for your skill, routing
all request and response
* payloads to the handlers above. Make sure any new handlers or
interceptors you've
* defined are included below. The order matters - they're
processed top to bottom
* */
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler,
ImageSearchIntentHandler,
LinkTelegramIntentHandler,

63
FallbackIntentHandler,
SessionEndedRequestHandler,
IntentReflectorHandler
)
.addErrorHandlers(ErrorHandler)
.withCustomUserAgent("sample/hello-world/v1.2")
.withPersistenceAdapter(
new Adapter.DynamoDbPersistenceAdapter({
tableName: "procure-uma-imagem",
createTable: true,
dynamoDBClient: new AWS.DynamoDB({
apiVersion: "latest",
region: "us-east-1",
credentials: {
accessKeyId: "AMAZON_ACCESS_KEY_ID",
secretAccessKey: "AWS_SECRET_ACCESS_KEY",
},
}),
})
)
.addRequestInterceptors(LogRequestInterceptor)
.addResponseInterceptors(LogResponseInterceptor)
.lambda();

64
APÊNDICE B – Artigo sobre o Trabalho de Conclusão de Curso

DESENVOLVIMENTO DE SKILL CLASSIFICADORA DE


IMAGENS PARA AMAZON ALEXA 1*
Bruno Henrique Bertozzo1, Thiago Brezinski1
1
Departamento de Informática e Estatística – Universidade Federal de Santa Catarina
(UFSC).

{bruno.bertozzo, thiago.brezinski}@grad.ufsc.br

Abstract. Skills, in the context of Amazon Alexa, are like apps for smartphones.
They allow customization of the user experience with new features, adding value to
these devices without a direct effort of the company that provides them. This project
has the objective of developing a skill that allows the users to request, via voice
commands, images about a specific subject. The skill will take charge of identifying
the subject, requesting images about it within an image API, process and classify
the images through the machine learning model MobileNetV2, and present the
results and classifications to the user via Telegram.
Resumo. Skills, no âmbito dos dispositivos Amazon Alexa, são como aplicativos
para smartphones. Permitem customizar a experiência do usuário com
funcionalidades novas, agregando valor a estes dispositivos sem um esforço direto
da empresa que os disponibiliza. Este projeto tem como objetivo o desenvolvimento
de uma skill que permita que usuários requisitem, via comandos de voz, imagens de
um assunto desejado. A skill vai encarregar-se de identificar o assunto proposto,
requisitar imagens do assunto em uma API de imagens, processar e classificar as
imagens através do modelo de machine learning MobileNetV2, e apresentar os
resultados e classificações para o usuário via Telegram.

1. Introdução
Este trabalho visa o desenvolvimento de uma skill (complemento) para dispositivos
Amazon Alexa. Skills estão para dispositivos Amazon Alexa tal qual aplicativos estão para
smartphones. Logo, o desenvolvimento deste complemento adicionará uma nova
funcionalidade para tais dispositivos, através de download via loja virtual.
O usuário requisitará, através de comando de voz, uma imagem acerca de algum
assunto e a skill proposta vai encarregar-se de identificar o assunto proposto, requisitar
imagens do assunto no mecanismo de busca definido, processar e classificar as imagens
através de modelos de inteligência artificial e machine learning, e enviar os resultados da
classificação para o usuário através do dispositivo informado.
Durante este estudo, será analisado o estado da arte das áreas da computação de
inteligência artificial e machine learning, procurando realizar testes com a aplicação
desenvolvida nos quesitos de acurácia, precisão e satisfação do usuário.

65
2. Objetivos
2.1. Objetivo Geral

Desenvolvimento de uma skill para dispositivos Alexa que aceite, via solicitação por
voz, um assunto e, mediante métodos de reconhecimento de imagens, entregue imagens
acerca do assunto desejado.

2.2. Objetivos Específicos

- Analisar o estado da arte nos temas de Redes Neurais, Deep Learning e Automatic
Speech Recognition (ASR);
- Desenvolver uma skill que busque por imagens do assunto solicitado nas APIs do
serviço de imagens Unsplash, classifique-as utilizando o modelo de inteligência
artificial MobileNetV2 e apresente os resultados para o usuário em sua conta do
serviço de mensageria Telegram;
- Levantar modelos pré-treinados para classificação de imagens alternativos ao
MobileNet, observando pontos positivos e negativos para utilização de cada um;
- Comparar a acurácia dos diferentes modelos analisados para o mesmo dataset e
ponderar se o MobileNet é realmente a melhor opção.

3. Arquitetura / Modelo da skill


O fluxo de informações em uma skill Alexa possui três grandes fases: a detecção do
comando do usuário no próprio dispositivo, o processamento do comando de voz nas APIs da
Alexa, e o processamento da lógica da skill requisitada.
A primeira etapa diz respeito somente ao que ocorre no hardware do próprio
dispositivo (como um Echo Dot, por exemplo). O dispositivo tem a capacidade de escutar a
palavra de ativação (geralmente “Alexa”, mas é possível escolher outras), separar a palavra
de ativação do resto do comando, tratar este sinal (redução de ruídos) e enviá-lo à próxima
etapa, para a API de processamento de voz da Alexa na nuvem.
Na fase seguinte, é onde ocorre o machine learning responsável somente pelo
entendimento do sinal enviado pela primeira etapa: reconhecimento de fala, entendimento de
linguagem natural e transformação de texto em fala. Esses procedimentos atuam sobre o
modelo de interação da skill, que define como a aplicação reagirá conforme cada caso de uso.
Um modelo de interação é composto de 3 componentes:
- Intents (ou Intenções): Representa uma ação que cumpre um comando do usuário. Na
skill aqui desenvolvida criou-se 2 intents, uma para conectar à conta de Telegram do
usuário, e outra para procurar as imagens solicitadas.
- Utterances (ou Expressões): lista de frases que ativam as intenções. Quanto mais
frases representativas forem mapeadas, maior a chance de a skill executar a ordem
corretamente. Por exemplo, a expressão “Alexa, procure imagens de cachorro”
engatilha a intenção de procura de imagens.
- Slots: variáveis que serão extraídas das expressões. Na expressão acima, a palavra
“cachorro” ocupa um slot que poderia ser chamado de “assunto”, como em “Alexa,
procure imagens de <assunto>”. A palavra “cachorro” é extraída para uma variável e
reutilizada nas próximas etapas.

66
Por fim, o modelo de interação da skill redireciona a requisição para o trecho
pertinente da lógica da aplicação (etapa 3). Ativar a intenção de conectar à conta do Telegram
executará somente um trecho de código, enquanto que ativar a intenção de procurar imagens
executará outro. O modelo de funcionamento das skills, descrito acima, pode ser resumido
pela Figura 1. É na terceira etapa que as skills se diferenciam, com lógica e fluxos próprios,
assim como conexões a outros serviços.

Figura 1. Como funciona uma skill Alexa (Fonte: Amazon)

A skill desenvolvida neste estudo foi nomeada “Procure Uma Imagem”, nome que diz
jus à sua funcionalidade primária: resgatar, através da voz, imagens curadas acerca de um
assunto, para um meio de comunicação de fácil acesso. As imagens serão obtidas através das
APIs do Unsplash, classificadas com Tensorflow, e enviadas para o usuário através do
Telegram. Embora a skill só possua um real fluxo de funcionamento (buscar, classificar e
enviar imagens), é necessário um segundo fluxo, de uso único, para realizar a conexão da
skill à conta Telegram do usuário, para que este possa receber os resultados.

4. Fluxo de primeiro uso


O fluxo de primeiro uso pode ser descrito pela Figura 2. As duas primeiras etapas são
comuns a todas skills Alexa.

Figura 2. Esquema de primeiro uso da skill

67
Neste fluxo, o usuário solicitará por voz “Alexa, conectar Telegram”, comando que
desencadeará 3 ações:
- O identificador único do dispositivo físico será extraído;
- Um código único alfanumérico será gerado e retornado para o usuário;
- Será persistido no banco de dados uma associação entre o identificador e o código
único.

O usuário, de posse do código único que recebeu como resposta falada ao seu
comando, deverá enviá-lo para o bot do Telegram (Figura 3), construído também para os fins
deste estudo, que fará a captura do código para uso no próximo fluxo.

Figura 3. Envio do código único ao bot do Telegram

5. Fluxo de uso convencional

O fluxo de uso convencional pode ser descrito pela Figura 4. As duas primeiras etapas
são comuns a todas skills Alexa.

Figura 4. Esquema de uso convencional da skill

68
Neste fluxo, o usuário solicitará por voz “Procure imagens de <assunto>”. O primeiro
passo será sempre solicitar às APIs do Telegram as mensagens recebidas. Assim, têm-se
acesso aos códigos únicos dos usuários enviados para o bot. Toda mensagem enviada para o
bot acompanha um identificador único deste usuário no Telegram. Logo, com as duas tuplas
(id telegram, código único) e (id dispositivo físico, código único), cruzam-se as informações
e têm-se a relação entre um dispositivo físico e um usuário Telegram, tornando possível o
envio de mensagens diretas.
Em seguida, extrai-se o assunto do slot para ser encaminhado às APIs de busca de
imagens do Unsplash. Três imagens são retornadas pelo serviço, que servirão de input para a
classificação através do Tensorflow, mais especificamente do modelo de machine learning
MobileNet. O resultado da classificação será então enviado ao usuário através das APIs do
Telegram.
Como resultado, o usuário receberá em sua conversa com o bot as imagens e suas
respectivas classificações, simulando uma conversa. Na Figura 5, exibe-se o resultado para o
comando “Alexa, procure imagens de cachorro”, em que a palavra destacada é o assunto
extraído.
Figura 5. Usuário recebe imagens e suas classificações através do Telegram

69
6. Experimentos
Para o desenvolvimento do projeto, tem-se a necessidade de entender, de forma
quantitativa em um primeiro momento, métodos que classifiquem as imagens solicitadas pelo
usuário da skill. Para isso, abordou-se alguns dos principais modelos de classificação de
imagem, comparando-os sistematicamente utilizando métricas como acurácia, precisão e
matriz de confusão para chegar em uma escolha que mais se adeque às necessidades da
aplicação final.
Em conjunto a isso, de forma qualitativa, visando as funcionalidades da skill e o
resultado para o usuário, buscou-se testar e analisar as limitações, a arquitetura escolhida, os
modelos pré-treinados e a implementação com um todo, com o objetivo de implementar cada
etapa da aplicação de forma mais adequada e que trará o melhor resultado considerando as
limitações existentes.

6.1. Modelos pré-treinados


Para os experimentos deste trabalho, serão usados 4 tipos de modelos que possuem
código aberto para a comunidade e que já foram testados em competições como o ILSVRC.
Eles são: MobileNet, VGG16, ResNet50 e EfficientNet.

6.2. Métricas
As métricas são importantes para avaliar o desempenho das redes escolhidas. Nas
tarefas de classificação, que é o caso deste trabalho, busca-se prever qual é a categoria a que
uma amostra pertence, como, por exemplo, determinar se uma imagem é de um cachorro ou
de um gato.
A primeira métrica adotada foi a Acurácia, que em problemas de classificação é o
número de previsões corretas feitas pelo modelo sobre todos os tipos de previsões feitas.
Juntamente com a acurácia, utilizamos a Precisão, que é a razão de previsões corretas para o
total de observações positivas previstas da classe. Também foi utilizada a Matriz de Confusão
entre as classes, podendo comparar as previsões de um modelo com o padrão verdadeiro. A
diagonal principal da matriz representa classes que foram corretamente previstas, enquanto
elementos fora da diagonal representam indivíduos que foram classificados de forma errada.
Dessa forma, é possível calcular as métricas para avaliar se o algoritmo está ou não
conseguindo bons resultados.

6.3. Comparação dos modelos


Os modelos pré-treinados já foram exaustivamente treinados em grandes conjuntos de
dados, obtendo resultados surpreendentes, como mostra a Tabela 1. Nessa tabela constam as
redes escolhidas para essa etapa do trabalho. Essas redes fazem parte das redes vencedoras de
competições como o ILSVRC e a Tabela 1 apresenta suas respectivas acurácias top-1 e top-5
no dataset de validação do ImageNet. Além disso, é possível notar a profundidade e a
quantidade de parâmetros de cada rede.

70
Tabela 1. Redes neurais e suas respectivas acurácias no dataset ImageNet (Fonte: Adaptado de Keras
Applications)

Model Size Top-1 Accuracy Top-5 Accuracy Parameters Depth

VGG16 528 MB 0.713 0.901 138,357,544 23

ResNet50 98 MB 0.749 0.921 25,636,712 -

MobileNetV2 14 MB 0.713 0.901 3,538,984 88

EfficientNetB0 29 MB - - 5,330,571 -

Para uma comparação com dados de teste fiéis ao uso real da aplicação, compilou-se
um dataset de 50 imagens provenientes do provedor de imagens Unsplash, distribuídas entre
5 classes pertencentes ao ImageNet (10 imagens por classe).
Como já citado, o desenvolvimento da skill se deu através da linguagem de
programação JavaScript, utilizando o framework Node.js. Estes permitiram a fácil utilização
do modelo MobileNetV2 através da biblioteca oficial da plataforma Tensorflow. Contudo, os
outros modelos aqui apresentados não estão disponíveis como plugins, então optou-se pela
plataforma Google Colaboratory para comparação dos modelos, que permite escrita e
execução remota de código Python, assim como acesso gratuito a GPUs e compartilhamento
de código. Neste caso, utilizou-se dos modelos disponibilizados através da biblioteca Keras,
da plataforma Tensorflow para Python.

Tabela 2. Comparação dos modelos de classificação de imagens

Modelo pré-treinado Acurácia média (%) Precisão (%)

MobileNetV2 67 62

VGG16 73 62

ResNet50 80 74

EfficientNetB0 75 80

Observando-se a tabela 2, é possível entender brevemente o comportamento de cada


modelo para as imagens de input da aplicação. Diferentemente de imagens de um dataset de
treino, as imagens do uso real da aplicação não são padronizadas, e possuem uma quantidade
de detalhes (informações) muito superior, por se tratarem de imagens de fotografia
profissional, de alta resolução e com edição via software. Percebe-se, então, que ResNet50
teve a maior confiança em seus acertos, enquanto que EfficientNetB0 acertou mais vezes.
Nota-se, então, que o MobileNetV2 perde em acurácia e precisão para os outros
modelos, na maioria das situações. Entretanto, vale notar que seu foco é outro, o de prover a
classificação de imagens para dispositivos embarcados e móveis. Visto que a aplicação aqui
desenvolvida não necessita de grandes valores de acurácia e precisão, mas apenas os utiliza
como complemento para a funcionalidade principal — receber imagens curadas, e de maneira
fácil e rápida — considera-se não grande prejuízo a utilização do MobileNetV2 neste

71
contexto. Inclusive, o usuário final se beneficiará de um modelo mais enxuto
(aproximadamente 37 vezes menor em memória, e 39 vezes menos parâmetros utilizados que
o VGG16), já que neste fluxo o tempo de espera é uma maior prioridade. Por fim, este
modelo ainda é o único disponível oficialmente como plugin para Tensorflow em Javascript.

7. Avaliação / Resultados
Na tabela 3, encontram-se os resultados da comparação de 5 termos de pesquisa
testados na skill desenvolvida. Para cada termo de pesquisa, foram utilizadas 3 imagens
provenientes da API do serviço de imagens, tal qual o usuário final receberá em um uso real.
Registrou-se se o termo de pesquisa é uma classe pertencente ao ImageNet (banco de
imagens utilizado no pré-treinamento do MobileNetV2), a acurácia e precisão médias, assim
como se o resultado obtido foi satisfatório, do ponto de vista do usuário.

Tabela 3. Comparação de 5 termos de pesquisa testados na skill desenvolvida

Termo de Pertence ao Acurácia média Precisão média Resultado


pesquisa ImageNet (%) (%) satisfatório

Buldogue francês sim 49 0 não

Hipopótamo sim 99 100 sim

Hamster sim 75 100 sim

Ethernet não 34 0 sim

Farol sim 90 67 sim

Para o primeiro termo, “Buldogue francês”, nota-se que mesmo pertencendo ao


conjunto de classes do ImageNet, sua acurácia e precisão são totalmente insatisfatórias,
devido ao já evidenciado no item 4.3.9.3, em que, devido à limitação da API do serviço de
imagens na língua portuguesa, os primeiros resultados retornados são totalmente
incondizentes com o termo de pesquisa. Assim, obteve-se um resultado insatisfatório do
ponto de vista do usuário, que recebeu imagens incondizentes e com baixa acurácia e
precisão.
No segundo termo, “Hipopótamo”, observa-se o caso de teste perfeito. O termo
pertence ao conjunto de classes do ImageNet, a API de imagens entrega bons resultados,
consequentemente mantendo a acurácia e precisão altíssimas e, também, a satisfação do
usuário, que recebeu o solicitado.
Tratando-se do terceiro caso, “Hamster”, percebe-se que, durante o treinamento do
modelo MobileNetV2, provavelmente ocorreu um underfitting especificamente no
treinamento desta classe, pois, embora a API de imagens tenha entregue bons resultados e a
classe pertencer ao conjunto de treinamento, a acurácia média não se manteve próximo da
máxima, por motivos internos do próprio modelo de classificação. Contudo, o resultado
percebido pelo usuário ainda é satisfatório, visto que recebeu o que foi solicitado, com
médias razoáveis.
O quarto teste é curioso, pois é o único termo de pesquisa não pertencente ao conjunto
de treinamento, mas que mesmo assim entregou um resultado satisfatório ao usuário. A
pesquisa por “Ethernet” entregou imagens condizentes, porém, por não existir no índice de

72
classes do ImageNet, o modelo falhou na predição, resultando em classes como “oil pump”
(“bomba de gasolina”, em português), e com uma acurácia média insatisfatória de 34%.
Por último, ao pesquisar por “Farol”, o usuário também recebe resultados
satisfatórios, com todas as imagens correspondentes, porém, o modelo falha na precisão,
predizendo um dos resultados como “quebra-mar” ou “cais” ao invés do exato termo,
resultando em uma precisão média de 67%. Contudo, ainda considera-se bons resultados,
visto que o usuário foi satisfeito e a precisão média de 90%.

8. Conclusão
No contexto da aplicação aqui desenvolvida, tem-se como principal objetivo a
entrega, via solicitação por voz, de imagens curadas, com boa confiança, de maneira rápida e
prática para o usuário. Nesse âmbito, considera-se mais do que suficiente a utilização do
modelo de classificação de imagens MobileNetV2, que, a um pequeno custo de acurácia e
precisão, fornece uma classificação igualmente confiável mas mais rápida, leve e enxuta.
Este estudo buscou tocar a superfície do que se é possível fazer juntando as
tecnologias de reconhecimento e processamento de voz, redes neurais, machine learning e
classificação de imagens. Como resultado, obteve-se uma aplicação de uso simples para o
usuário final, mas de grandes complexidades internas, em sua arquitetura. Os autores
consideram um sucesso (mesmo que em pequena escala) os resultados obtidos e esperam que
o trabalho aqui desenvolvido possa servir de inspiração para mais evoluções no tema.
Considera-se que os objetivos foram alcançados. O programa é capaz de buscar por
imagens de um assunto definido abertamente pelo usuário — via voz — em uma API de
imagens, classificá-las utilizando um modelo de aprendizado de máquina, e apresentar os
resultados para o usuário em um meio de comunicação usual. Entende-se como suas
principais vantagens a rapidez e praticidade para se pesquisar imagens em uma situação
cotidiana, não-acadêmica. Como desvantagens, nota-se a falta de granularidade e
customização, visto que não é possível definir o número de imagens retornadas e o provedor
das imagens, ao menos em sua primeira versão.
Para trabalhos futuros, sugere-se a criação do próprio modelo de classificação de
imagens, otimizado para imagens com cunho de uso diário e informal, como stock images,
através da composição de camadas da rede neural. Para isso, seria necessário a compilação de
um grande banco de imagens deste tipo, que entende-se como um desafio. Porém, caso
alcançado, será possível presenciar um modelo de classificação mais preciso e tão enxuto
quanto o escolhido para utilização neste estudo. Ainda, pode-se melhorar a interação do
usuário com a skill, adicionando mais enunciados (utterances), quantidade de imagens
retornadas (explorar Alexa Conversations), tratamentos de erro e customização do canal de
recebimento por outro meio ou aplicativo. Por fim, sugere-se também avaliar a utilização de
um serviço de tradução (para inglês) do texto enviado para a pesquisa das imagens, a fim de
tentar mitigar as limitações da API do Unsplash em português. Todas as implementações
estão públicas no GitHub e podem ser utilizadas como estudo para futuras implementações
ou ser adaptadas para outros projetos.

73
9. Referências

AMAZON. The Scalable Neural Architecture behind Alexa’s Ability to Select Skills.
Disponível em:
https://www.amazon.science/blog/the-scalable-neural-architecture-behind-alexas-ability-to-se
lect-skills. Acesso em: 12 abr. 2021.

Simonyan, Karen & Zisserman, Andrew. (2014). Very Deep Convolutional Networks for
Large-Scale Image Recognition. arXiv 1409.1556.

TOWARDS DATA SCIENCE. Convolutional Neural Network. Disponível em:


https://towardsdatascience.com/convolutional-neural-network-17fb77e76c05. Acesso em 06
mai. 2021.

HACKELING, G. Mastering Machine Learning with scikit-learn. [S.l.]: Packt Publishing


Ltd, 2014.
Keras. Keras applications. https://keras.io/applications/. Acesso em: 14 de Agosto de 2021.
Tan, Mingxing & Le, Quoc. (2019). EfficientNet: Rethinking Model Scaling for
Convolutional Neural Networks.
HE, K.; ZHANG, X.; REN, S.; SUN, J. Deep residual learning for image recognition. In:
Proceedings of the IEEE conference on computer vision and pattern recognition. [S.l.: s.n.],
2016. p. 770–778.
Tsang, Sik-Ho. Review: VGGNet — 1st Runner-Up (Image Classification), Winner
(Localization) in ILSVRC (2014). Acesso em: 14 de Agosto de 2021. Disponivel em:
https://medium.com/coinmonks/paper-review-of-vggnet-1st-runner-up-of-ilsvlc-2014-image-
classification-d02355543a11
Abu, Mohd Azlan & Indra, Nurul Hazirah & Abd Rahman, Abdul & Sapiee, Nor & Ahmad,
Izanoordina. (2019). A study on Image Classification based on Deep Learning and
Tensorflow. 12. 563-569.
SHEN, Yulan. Accelerating CNN on FPGA: an implementation of mobilenet on fpga. 2019.
52 f. Monografia (Especialização) - Curso de Information And Communication Technology,
Kth Royal Institute Of Technology School Of Electrical Engineering And Computer Science,
Stockholm, 2019.
AHMED, Shamim; BONS, Marc. Edge computed NILM. In: BUILDSYS '20: THE 7TH
ACM INTERNATIONAL CONFERENCE ON SYSTEMS FOR ENERGY-EFFICIENT

74
BUILDINGS, CITIES, AND TRANSPORTATION, 20., 2020, New York, Ny, Usa.
Proceedings of the 5th International Workshop on Non-Intrusive Load Monitoring. New
York, Ny, Usa: Acm, 2020. p. 1-5.
Mohandas, R. et al. TensorFlow Enabled Deep Learning Model Optimization for
enhanced Realtime Person Detection using Raspberry Pi operating at the Edge. AICS
(2020).
Skidmore, L. and Moore, R.K. orcid.org/0000-0003-0065-3311 (2019) Using Alexa for
flashcard-based learning. In: Proceedings of Interspeech 2019. Interspeech 2019, 15-19
Sep 2019, Graz, Austria. ISCA , pp. 1846-1850.

75

Você também pode gostar