Aula 12 – Scikit-Learn – Reconhecimento facial com eigenfaces e SVMs
Aula 12 – Scikit-Learn – Reconhecimento facial com eigenfaces e SVMs
Voltar para página principal do blog
Todas as aulas desse curso
Aula 11 Aula 13
Script dessa aula:
Download do script da aula
Documentação oficial do Sklearn:
https://scikit-learn.org/
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Reconhecimento facial
A tarefa do reconhecimento facial é discriminar os sinais de entrada (imagens) em várias classes (pessoas).
Os sinais de entrada são muito poluídos, esses ruídos são causados por diferentes condições de iluminação, pose, resolução, etc.
As imagens de entrada não são completamente aleatórias e, apesar de suas diferenças, existem padrões que ocorrem em qualquer sinal de entrada.
Cérebro Humano
Faces humanas são as imagens mais impressas no nosso sistema visual durante a vida de qualquer um de nós.
Nesse sentido, não surpreende que a gente possua uma capacidade incrível de reconhecer rostos.
Temos uma região dedicada no cérebro para processar apenas rostos e também reconhecê-los.
Acredita-se que nosso cérebro se lembre de detalhes importantes nas caras das pessoas, como as formas e cores das características cruciais correspondentes aos olhos, nariz, testa, bochechas e boca.
Nosso cérebro tem a fantástica capacidade de poder lidar com variações significativas na iluminação, nas expressões faciais e nos rostos observados de longe.
Computadores
No entanto, ao contrário disso, para um computador, em geral, a variabilidade da aparência de um rosto afeta diretamente sua capacidade de reconhecimento.
Por exemplo, as variações de iluminação, expressão, pose e outras mudanças físicas adicionais, como óculos ou barba, podem ter um enorme impacto nas taxas de reconhecimento.
Hoje, à quantidade abundante de informações que um computador pode lidar e o aumento do poder de processamento de dados, acredita-se que haja áreas em que um algoritmo de aprendizado de máquina, como uma rede neural convolucional (CNN), possa pelo menos igualar ou até mesmo superar o desempenho no reconhecimento facial em relação aos humanos.
A intenção das aulas que se seguem, a partir do estudo do Scikit-Learn, é explorar questões relacionadas a como um computador realiza o reconhecimento de um rosto humano em específico, com informações faciais imperfeitas.
PCA – Principal Component Analysis
O PCA é uma técnica de redução de dimensionalidade não supervisionada.
Através de técnicas matemática estatística, ele ajuda a definir as variáveis, ou seja, componentes, ou ainda, as features que melhor descrevem um conjunto de dados, de forma a reduzir a dimensionabilidade desses dados.
O PCA é usado no exemplo do scikit-learn, para a construção dos Eigenfaces, reduzindo a dimensionalidade dos componentes de 2914 para 150, o modelo levará em conta 150 características de cada imagem, para tentar detectar a face corretamente.
Eigenfaces
A abordagem Eigenface é considerada por muitos como a primeira tecnologia de reconhecimento facial em funcionamento e serviu de base para um dos principais produtos comerciais de tecnologia de reconhecimento facial.
Embora tenha sido usado pela primeira vez em 1991 por Turk e Pentland e tenha limitações em relação à tecnologia de hoje, seus princípios ainda são altamente benéficos para novas práticas.
Eigenfaces refere-se a uma abordagem baseada na aparência para um reconhecimento facial.
Esse método busca capturar a variação em uma coleção de imagens de rosto e usa essas informações para codificar e comparar imagens de rostos individuais de maneira holística, em oposição a uma abordagem baseada em partes ou em recursos(features).
O Eigenface define um rosto como um vetor, como uma matriz:
Esse método ajudará a armazenar mais informações em tamanhos menores, com apenas alguns fundamentos de álgebra linear.
Dessa forma, recuperaremos faces humanas através de algumas formas fantasmas, pelo processo em que a face é decomposta numa série de componentes principais.
São vetores próprios da matriz de covariância, definidos por um conjunto de outras faces de referência.
Cada face pode ser representada como a combinação linear de diversas Eigenfaces.
Dimensionalidade dos dados
Uma determinada imagem facial I(x,y) num espaço bidimensional N×N, pode ser vista como um vector de dimensão N2.
Nesse caso, uma imagem com 256×256 pixeis passa a ser considerada um vetor de dimensão 65,536(256 x 256), ou então, um ponto num espaço com 65,536 dimensões.
Como resultado, um conjunto de imagens pode mapear um grupo de pontos neste espaço gigantesco.
Todos os rostos são semelhantes de uma maneira geral (dois olhos, duas orelhas, nariz, boca, queixo…).
Então, esses componentes semelhantes, não vão ser distribuídos de forma aleatória neste espaço enorme.
Devido a essa similaridade, esses componentes podem ser descritos por um subespaço relativamente pequeno.
O objetivo desse método é encontrar os vetores que melhor representam a distribuição facial estudada em todo o espaço da imagem.
Esses vetores vão definir o subespaço das imagens faciais, designado por espaço facial.
A motivação dos Eigenfaces, ou autofaces, é dupla:
extrair as informações faciais relevantes, que podem ou não estar diretamente relacionadas à intuição humana das características do rosto, como olhos, nariz e lábios. Uma maneira de fazer isso é capturar a variação estatística entre imagens de rosto.
Representar imagens de rosto com eficiência. Para reduzir a complexidade do cálculo e do espaço, cada imagem facial pode ser representada usando um pequeno número de parâmetros.
As autofaces podem ser consideradas como um conjunto de características que captura a variação global entre imagens de rosto.
Em seguida, cada imagem facial é aproximada usando um subconjunto de Eigenfaces, aquelas associadas aos maiores Eigenvalues.
Etapas do Eigenface
Pré-processamento para normalização das imagens faciais, alinhando os olhos, a boca, nariz, orelha, etc. Em seguida, todas são re-amostradas na mesma resolução de pixels.
É aplicado o PCA (Principal Component Analysis) para extração das autofaces, ou seja, Eigenfaces, ele extrai dos dados de imagens, por meio da análise de componentes principais (PCA), as features que mais importam, reduzindo a dimensão dos dados, através da compressão, revelando uma estrutura dimensional eficaz mais reduzida dos padrões faciais.
Projeção da imagem analisada sobre as Eigenfaces , que é um conjunto ortogonal, portanto, para encontrar a projeção de uma imagem sobre esse conjunto ortogonal de Eigenfaces, basta realizar o produto escalar da imagem em análise, sobre cada uma das Eigenfaces.
Fase de comparação e decisão, determina qual imagem do conjunto de treinamento é mais parecida com a imagem testada, a partir das representações obtidas com o Eigenfaces.
Cada imagem facial é representada como a soma do vetor de características das Eigenfaces que estão armazenadas num conjunto 1D.
Uma imagem facial a pesquisar, será então comparada com uma galeria de imagens Eigenfaces, medindo a distância entre os seus respectivos vetores de características.
É isso pessoal, espero que tenha ficado claro todo o assunto abordado nessa aula.
Na próxima aula vamos explorar e entender a base LFW, Labeled Faces in the Wild, que iremos utilizar para a parte prática.