• Nenhum resultado encontrado

Reconhecimento Facial Utilizando VIPLFaceNet e FaceNet

3.5 TÉCNICAS DE RECONHECIMENTO DE FACES

4.1.1 Reconhecimento Facial Utilizando VIPLFaceNet e FaceNet

Os primeiros métodos desenvolvidos nessa pesquisa para o propósito de aumento facial 3D se utilizaram de técnicas de reconhecimento facial. Como citado no início deste capí- tulo, as técnicas selecionadas para este trabalho foram VIPLFaceNet (LIU et al., 2017) e

FaceNet (SCHROFF; KALENICHENKO; PHILBIN, 2015), visto que ambas possuem alto nível

de acurácia para a tarefa de identificação de faces.

O SeetaFace SDK1 é um arcabouço implementado em C++ que fornece as etapas de

detecção (SeetaFace Detection), alinhamento (SeetaFace Alignment) e identificação de faces (SeetaFace Identification). Ele consiste em uma implementação da VIPLFaceNet, uma rede neural que possui 7 camadas convolucionais e 3 camadas totalmente conectadas, com entradas de dimensão 256×256×3. Ela é uma adaptação da AlexNet (KRIZHEVSKY; SUTSKEVER; HINTON, 2012) para reconhecimento rápido e preciso de faces em cenários

reais com base nas descobertas de ponta em pesquisas de aprendizagem profunda. A arquitetura da VIPLFaceNet (Figura 18) possui seis principais aspectos: • A primeira camada tem dimensão 9 × 9, para reduzir o custo computacional; • Despreza o uso de uma camada de normalização local;

• A segunda camada convolucional contém camadas de dimensão 3 × 3, inspirada por (HE; SUN, 2015);

• As estruturas de grupo da AlexNet são removidas para tornar mais eficiente o trei- namento em paralelo;

• Introdução de um número reduzido de mapas de características em cada camada, além de conter mais uma camada convolucional;

• 2048 nós na camada totalmente conectada (FC2), inspirado por (CHATFIELD et al.,

2014).

São cinco as principais etapas do SeetaFace (Figura 19):

• Detecção facial: nessa etapa a informação de localização de todas as faces em uma imagem (ou seja, as coordenadas das regiões retangulares das faces) são retornadas pelo método de (WU et al., 2017);

• Detecção de pontos de referência da face: a Coarse-to-Fine Auto-encoder Network (CFAN) (ZHANG et al., 2014) é aplicada para detecção de pontos característicos da

face, os quais são os centros dos olhos esquerdo e direito, a ponta do nariz, e os cantos esquerdo e direito da boca (5 pontos);

• Normalização da face: utilizando os pontos encontrados previamente como base, a região facial é recortada, gerando uma imagem de dimensão 256 × 256;

• Representação da face: as características da face normalizada são extraídas usando a VIPLFaceNet. A rede gera um vetor com 2048 características faciais;

• Verificação da face: nessa última etapa se calcula a similaridade entre vetores de ca- racterísticas de faces potencialmente semelhantes, usando a distância cosseno (Equa- ção 4.1):

similaridade= cos 𝜃 = u · v ||u||2||v||2

(4.1)

Figura 18 – Esquema da arquitetura da rede VIPLFaceNet.

Fonte: Adaptado de (LIU et al., 2017).

Para realizar uma análise do arcabouço com o intuito de validar o método, foram feitos testes utilizando modelos pré-treinados providos pelos autores, visto que o código de treinamento não foi disponibilizado. Os modelos de classificação foram gerados a partir de um treinamento com uma base de dados contendo 1.400.000 imagens de faces de 16.000 classes, incluindo tanto mongóis quanto caucasianos.

Figura 19 – Etapas de reconhecimento facial de ambos SeetaFace SDK e FaceNet.

Fonte: Elaborado pelo autor, 2019.

A validação foi realizada na base de dados LFW (HUANG et al., 2008) View 2, sob

o protocolo de verificação, cujas imagens incluem faces em cenários inconstantes, com variações de pose, expressões, idade e outras deformações faciais, além de imagens com borramento, oclusão, variações de tons de pele, acessórios e pelos faciais, entre outros. Os testes foram executados com 13.233 imagens de 5.749 pessoas, as quais 1.680 pessoas contém duas ou mais imagens. Para realizar a validação apenas a primeira face detectada em cada imagem era selecionada. Adicionalmente, algumas imagens continham mais de uma face. Sendo assim, em certos casos a primeira face localizada nem sempre consistia na região facial correta a ser adicionada na validação, afetando assim a acurácia final.

Para solucionar este problema, foi implementada uma etapa para calcular a distância euclidiana (Equação 4.2) do ponto central de todas as regiões de faces detectadas para o ponto central da imagem (Figura 20). A região de face com a menor distância era selecionada para as próximas etapas (alinhamento, normalização e identificação). Para a detecção de faces foram utilizados os parâmetros padrão:

• minimum_size = 40, representando o tamanho mínimo da região facial a ser detec- tada;

• score_threshold = 2, representando um limiar para definir o que é face e não-face; • scale_factor = 0.8, representando o fator de escala entre os diferentes níveis da

• window_step = 4, representando a quantidade de pixels que a janela desliza na imagem.

E(P,Q)=√︁(𝑝𝑥− 𝑞𝑥)2+ (𝑝𝑦 − 𝑞𝑦)2 (4.2)

Com base nos experimentos, o melhor limiar para medir o grau de similaridade na etapa de verificação foi 0,443. Logo, ao comparar duas faces de imagens distintas, sendo o valor da similaridade acima do limiar, assume-se que ambas as faces são da mesma pessoa. Figura 20 – Ilustração de casos com detecção de faces incorretas (regiões vermelhas) e as mesmas imagens com a detecção das faces corretas usando a distância para o centro da imagem (regiões azuis).

Fonte: Elaborado pelo autor, 2017.

O hardware utilizado para avaliação do algoritmo foi um notebook com processador Intel Core i5-5200 @ 2.20GHz e memória RAM de 4 GB. Na Tabela 1 é possível visualizar os resultados da etapa de identificação facial usando o SeetaFace Identification na base LFW. Com o ajuste implementado na etapa de detecção facial, a acurácia do algoritmo foi incrementada em 1,7 pontos percentuais, reduzindo o número de falsos negativos em pouco mais de 38%.

A segunda abordagem empregada para a tarefa de reconhecer faces foi o FaceNet, uma CNN treinada com o SGD, usando a retropropagação de erro (backpropagation) padrão (LECUN et al., 1989) (RUMELHART et al., 1988) e o otimizador AdaGrad (DUCHI; HAZAN; SINGER, 2011). A rede pode ser treinada com três arquiteturas: Zeiler&Fergus (ZEILER; FERGUS, 2014), GoogLeNet (SZEGEDY et al., 2015) ou Inception-ResNet (SZEGEDY et al.,

2017). A saída do classificador gera um vetor de características da face de dimensão 128, usando uma função triplet loss baseado no vizinho mais próximo de margem larga (Large

Tabela 1 – Resultado dos experimentos de reconhecimento facial usando o SeetaFace SDK na base de dados LFW. Método Acurácia (%) Falsos positivos Falsos negativos Tempo médio de execução (segundos) SeetaFace Identification (sem pré-processamento) 96,2 55 173 0,2 SeetaFace Identification (usando a distância para

o centro da imagem) 97,9 55 66 0,2

Margin Nearest Neighbor - LMNN (WEINBERGER; SAUL, 2009). Contudo, a implemen-

tação usada nos experimentos para este trabalho foi o FaceNet baseada na biblioteca Tensorflow (ABADI et al., 2016), a qual foi modificada para usar uma característica dis-

criminativa no treinamento, chamada center loss (WEN et al., 2016), e os métodos de

treinamento e avaliação de modelos de redes convolucionais para reconhecimento facial descritos em (PARKHI et al., 2015). Tal escolha foi feita devido a disponibilidade de código.

As etapas para o reconhecimento facial usando FaceNet são as mesmas exemplificadas na Figura 19. Para as etapas de detecção e alinhamento de faces foram utilizados os mesmos métodos do SeetaFace. As últimas três etapas são descritas a seguir:

• Normalização da face: a face é recortada usando o SeetaFace Alignment. Porém, a mesma é redimensionada de 256 × 256 para 160 × 160 pixels, a qual representa a dimensão correta de entrada para o modelo da rede do FaceNet;

• Representação da face: as características da face normalizada são extraídas usando o FaceNet. Originalmente, o vetor possui 128 características. Entretanto, foi feito um redimensionamento visando melhorar o desempenho da rede;

• Verificação da face: nessa última etapa se calcula a similaridade entre vetores de características de faces potencialmente semelhantes, usando a função euclidiana: A versão disponível do FaceNet2 encontra-se implementada em Python usando o Ten-

sorflow. De forma complementar para esta pesquisa, foi implementado um código do FaceNet3 com o Tensorflow em C++. Foram utilizados dois modelos pré-treinados para

a tarefa de identificação facial, usando a arquitetura Inception-ResNet-v1 (Figura 21): o primeiro treinado na base de dados CASIA-WebFace (YI et al., 2014), que consiste de

453.453 imagens de 10.575 faces distintas, para gerar um vetor de características de di- mensão 128; e o segundo treinado na base de dados MS-Celeb-1M (GUO et al., 2016), o 2 https://github.com/davidsandberg/facenet

qual consiste de cerca de 10.000.000 de imagens de 100.000 pessoas diferentes, com sua saída foi modificada para extrair um vetor de 1792 características da face.

Figura 21 – Esquema da arquitetura da rede Inception-ResNet-v1

Fonte: (SZEGEDY et al., 2017).

O FaceNet foi avaliado em um notebook com processador Intel Core i7-5500U @ 2.40GHz e memória RAM de 16 GB. A base de dados para a avaliação foi a mesmo utilizada com o SeetaFace (LFW). Com o incremento do fator dimensional na camada de saída do terceiro modelo, o grau de confiança é devidamente melhorado, fazendo com que este modelo obtenha melhor acurácia (Tabela 2). Em relação ao tempo médio de extração de características foi assumido que ambos os modelos possuem o mesmo tempo de processamento, mesmo mostrando uma pequena diferença na Tabela 2. O tempo de processamento varia devido ao número de processos em execução na máquina. O melhor limiar de decisão para faces e não-faces foi 0,585.

A Figura 22 apresenta a curva ROC da pontuação discreta do FaceNet e SeetaFace na base de dados LFW, mostrando a superioridade do primeiro método, muito por conta do design meticuloso da CNN e pela simplificação usando a arquitetura Inception-ResNet, o que reduz o custo computacional com uma leve degradação no desempenho, comparado ao trabalho original.

Tabela 2 – Resultado dos experimentos de reconhecimento facial usando o FaceNet na base de dados LFW. Modelo Acurácia (%) Falsos positivos Falsos negativos Tempo médio de execução (segundos) Inception-ResNet de dimensão 128 99,28 18 25 0,277 Inception-ResNet de dimensão 1792 99,57 7 19 0,263

Figura 22 – Curva ROC baseada na pontuação discreta.

Fonte: Elaborado pelo autor, 2017.

Nas próximas subseções serão descritas as primeiras abordagens implementadas para esta pesquisa, baseadas em reconhecimento facial, com o propósito de construir algoritmos e arcabouços de rastreamento 3D de faces para Realidade Aumentada facial, por meio de tentativas de gerar um novo método capaz de superar alguns problemas que persistem em ocorrer em diversos cenários, como faces oclusas por pelos, acessórios e maquiagem, variações de expressões faciais, orientação da cabeça e tons de pele, sem a necessidade de utilização de recursos computacionais elevados para desempenho em tempo real.