Verificação Facial com ResNet

Original article was published by Lucas Kido on Deep Learning on Medium


Verificação Facial com ResNet

Introdução

Verificação facial e reconhecimento facial são tecnologias que veem sendo utilizados em diferentes locais, primeiramente é preciso explicar a diferença elas:

  • Verificação facial: é um problema de 1:1, que tem com o objetivo de responder a pergunta “essa é a pessoa que diz ser?”, e.g. o desbloqueio de celular, onde compara a pessoa segurando o celular e a foto que registrou como base para o desbloqueio.
  • Reconhecimento facial: é um problema de 1:K, que tem como pergunta “quem é essa pessoa?”, e.g. tenta prever quem é a pessoa na foto de acordo com as fotos que eu tenho no banco de dados.

Com isso esclarecido, chegamos ao ponto do título como fazer verificação facial usando ResNet, neste caso usaremos o biblioteca face-recognition. Porém para não deixar esse modelo como uma caixa-preta farei uma breve explicação sobre a ResNet.

ResNet

Residual Neural Network ou ResNet é uma rede que foi proposta no artigo “Deep Residual Learning for Image Recognition” e que possibilitou o aumento de camadas em rede neurais sem a degradação da performance.

O paper compara a VGG-19 com uma CNN com 34 camadas, porém o contraintuitivo é que a performance da VGG é melhor e olhando para o erro nos dados de treino e teste podemos ver que não é overfit e sim uma degradação da acurácia sendo saturada.

Com isso surge a hipótese que guiará o artigo, que se há duas redes, uma mais profunda e outra mais rasa, e ambas conseguem achar uma solução então as camadas a mais da rede mais profunda estão aprendendo apenas a matriz identidade. A partir disto é proposto o framework deep residual learning, sendo o resíduo a diferença entre a entrada e saída.

F(x) = H(x) - x

Onde H(x) é a função que queremos que a rede aprenda e x a entrada. Reformulando, temos:

H(x) = F(x) + x

Esperando que seria mais fácil de optimizar a função residual que a função original conseguimos criar o residual block, onde há as shortcut connections, como demonstra a figura abaixo.

Residual block

A biblioteca utiliza a arquitetura da rede do paper que foi usada como comparação, a ResNet-34, que é basicamente um agrupado de residuals blocks, como é possível ver a arquitetura na imagem abaixo.

Arquitetura da ResNet-34

Verificação Facial

Para fazer a verificação facial tem um ponto importante, a codificação das faces, que nada mais é que a um vetor que o modelo retorna contendo 128 valores.

Mas por que a codificação é importante?
Porque assim podemos comparar a codificação entre duas imagens e se ambas foram a mesma pessoa a distância euclidiana entre os vetores deve ser pequena, já se for outra pessoa deve afastar, desta forma conseguimos medir quão diferente uma pessoa é da outra.

Imagem do curso Deep Learning da deeplearning.ai

Na imagem acima do curso Deep Learning da deeplearning.ai podemos ver a ideia de como funciona, apesar dela propor a Inception model, pois foi de onde veio essa abordagem de comparação.

Se quiser alguns exemplos onde eu testei o modelo na base 5 Celebrity Faces Dataset, segue o link do github.

Referências

He, K., Zhang, X., Ren, S., Sun, J. (2015). Deep Residual Learning for Image Recognition

Schroff, F., Kalenichenko, D., Philbin, J. (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering.

Biblioteca face-recognition

[Classic] Deep Residual Learning for Image Recognition (Paper Explained) do canal Yannic Kilcher