Eigenfaces: Recuperando Humanos de Fantasmas

>

Figura #1: Casper o Fantasma Amigável (fonte: https://vignette.wikia.nocookie.net/christmasspecials/images/e/e8/Casper.jpg/revision/latest?cb=20121014033319)

>

Salvando mais por ter menos… Fácil! Este método de aprendizagem da máquina irá ajudá-lo a armazenar mais informações em tamanhos menores com apenas alguns fundamentos de álgebra linear. Com isso, vamos recuperar faces humanas de algumas messes em forma de fantasma.

Você deve ter sido avisado, vetores independentes criam espaços de forma abstrata. Agora, imagine para valer. Todos os espaços são formados pelos vetores e assim são as coisas dentro desses espaços. Alguns desses vetores contribuem mais para algumas das coisas do que para outras. Os outros podem ser insignificantes além deles e talvez não precisemos saber sobre eles porque basicamente não nos importamos e não queremos carregar os problemas deles conosco. Isto é exactamente o que vos mostrarei sobre eigenfaces neste post.

Figure #2: não este espaço mas também este espaço (fonte: https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5Ny85NTcvb3JpZ2luYWwvc3BhY2UuanBn)

O nosso tópico principal é PCA. É um algoritmo amplamente utilizado na variedade de assuntos. A sua utilização em caras torna-o mais humano e interpretável, pelo que é uma das aplicações mais populares. Eigenfaces é um método que é útil para reconhecimento e detecção de rostos, determinando a variância de rostos em uma coleção de imagens de rostos e usar essas variâncias para codificar e decodificar um rosto em uma máquina de aprendizagem sem a informação completa reduzindo a computação e a complexidade do espaço. Embora tenha sido usada pela primeira vez em 1991 por Turk e Pentland e tenha limitações em comparação com a tecnologia atual, suas noções básicas ainda são altamente benéficas para novas práticas.

Figure #3: LFW (fonte: http://vis-www.cs.umass.edu/lfw/Six_Face_Panels_sm.jpg)

Antes de passar à implementação, gostaria de dar uma pequena introdução sobre os conceitos básicos mencionados. Também, você pode encontrar script completo e conjunto de dados (uma pequena fração de LFW_cropped) que eu usei aqui.

Eigenvectors and Eigenvalues

Todos nós sabemos como eigenvectors e eigenvalues funcionam exatamente. Talvez não exactamente, mas já ouvimos falar deles, tipo, muitas vezes. Aqui está uma explicação para a minoria como eu, que continua esquecendo.

Deixemos ter uma matriz quadrada A. Quase todos os vetores mudam de direção quando são multiplicados por A, como esperamos. Entretanto, existem certos vetores x que têm exatamente a mesma direção que Ax. Soo… Adivinhe? Esses são os nossos vectores próprios. Mesmo que estejam na mesma direcção, Eixo e x ainda podem ser dois vectores diferentes pela sua magnitudes. Aqui está uma igualdade familiar. Ax=λx. O que torna esses dois iguais é λ, o nosso equalizador de magnitude escalar, valor próprio. Isto nos dirá como nosso eigenvector mudou após a multiplicação

De cima, você pode dizer porque eles são úteis na prática. Para uma compreensão mais profunda e provavelmente apreciação vá para Eigenvalues e Eigenvectors do MIT Capítulo.

Principal Component Analysis (PCA)

O objetivo principal do PCA é a redução da dimensionalidade. Ele tem muitas aplicações na visualização, extração de características, compressão de dados, etc. A idéia por trás dele é projetar linearmente dados originais em um subespaço dimensional inferior oferecendo os componentes principais (vetores próprios) máxima variância dos dados projetados e/ou mínimo erro de distorção da projeção. Eventualmente, ambos levam ao mesmo resultado que é a melhor fórmula de reconstrução. Como nota lateral, este subespaço é chamado subespaço principal.

Para cálculos de máxima variância e minimização de erro de distorção, você pode ir para as notas de palestra da ANU sobre PCA. Também, outro vídeo no youtube chamado Análise de Componentes Principais -Georgia Tech-Machine Learning me ajudou a entender os conceitos muito melhor.

Implementação

Ok! Todos prontos para a implementação. Primeiro, vamos importar as bibliotecas necessárias. Presumo que todos vocês saibam para que servem. Vou focar na parte da explicação dos algoritmos. Se você tiver qualquer outra pergunta sobre o código, deixe uma resposta abaixo.

Então, precisamos de uma função para visualizar as imagens do nosso conjunto de dados de uma forma bem parecida. Aqui está.

Vamos colocá-lo no nosso conjunto de dados lfwcrop_grey.zip. Aqui, eu só pego os primeiros 1000 rostos por causa da complexidade computacional, mas isso realmente não importa. Se você quer ir full house, então vá em frente. Eu também transformei imagens em um array numérico (em forma de 1000, 64, 64) para processamento.

Leave a Reply