Detecção de pontos em Imagens

G4: Edinaldo de Alencar / Igor Freire / Ramon Araújo / Ricardo Ribeiro

18 de dezembro de 2014

Agenda

  1. Problemática
  2. Objetivos
  3. Fluxo de Trabalho
  4. Pré-processamento e transformações
  5. Algoritmos
  6. Resultados

Problemática: Detecção de Objetos em Imagens

Desafio disponível no kaggle.com: “Facial Keypoints Detection’’

Base de Imagens Faciais

Dados fornecidos pelo Dr. Yoshua Bengio, da University of Montreal

Objetivos

Identificar e localizar a boca em uma face humana

Dados disponíveis na base:

Métrica de Avaliação

Fluxo de Trabalho

Fluxo de Trabalho

Pré-processamento

Exemplo Outlier

Separação de Dados

Extração de Features e Patches

Patches:

Features:

Baseline estatístico: Correlação

Patch médio de todas as bocas na base de dados:

Lábio superior (mouth_center_top_lip)

Definir coordenada:

coord      <- "mouth_center_top_lip" 

Definir dimensão do patch:

patch_size <- 15  # e.x. 10 significaria um quadrado de 21x21 pixels (10+1+10).  

Calcular patch médio:

mean.patch <- meanPatch(coord, patch_size, TRUE) 

plot of chunk unnamed-chunk-5

Lábio inferior (mouth_center_bottom_lip)

plot of chunk unnamed-chunk-6

Canto esquerdo (mouth_left_corner)

Observar enantiomorfismo: plot of chunk unnamed-chunk-7

Canto direito (mouth_right_corner)

plot of chunk unnamed-chunk-8

Método Correlação - Predição

Ver (Petterson 2014)

Busca de Patch

source('predictWithCorrelation.R')

Definir intervalo de busca:

search_size <- 20 # e.g. would give a 5x5 (2+1+2) 

Lábio superior (mouth_center_top_lip)

iImg = 4 # Escolher imagem
# Estimar coordenadas usando correlacao e plotar em vermelho:
estimated_p <- predictWithCorrelation(coord, search_size, mean.patch, iImg, TRUE) 
## Warning: executing %dopar% sequentially: no parallel backend registered
# Plotar coordenadas reais em verde:
points(96 - d.test[iImg, coord_x], 96 - d.test[iImg, coord_y], col="green")

plot of chunk unnamed-chunk-12

# RMSE:
real_p <- c(d.test$mouth_center_top_lip_x[iImg], d.test$mouth_center_top_lip_y[iImg])
err <- estimated_p - real_p
sqrt(mean(err^2))
## [1] 0.1078

Lábio inferior (mouth_center_bottom_lip)

plot of chunk unnamed-chunk-16

RMSE:

## [1] 4.791

Canto esquerdo (mouth_left_corner)

plot of chunk unnamed-chunk-20

RMSE:

## [1] 0.6544

Canto direito (mouth_right_corner)

plot of chunk unnamed-chunk-24

RMSE:

## [1] 0.6883

Retângulo com detecção:

im  <- matrix(data=rev(im.test[iImg,]), nrow=96, ncol=96)
image(1:96, 1:96, im, col=gray((0:255)/255))
xleft <- 96 - d_mouth_left_corner[1]
ybottom <- 96 - d_mouth_center_bottom_lip_x[2]
xright <- 96 - d_mouth_right_corner[1]
ytop <- 96 - d_mouth_center_top_lip[2]

rect(xleft, ybottom, xright, ytop, lwd=2, border="green" );

plot of chunk unnamed-chunk-27

Método Correlação - Observações

Sensibilidade do Método de Correlação

Parâmetros do método de correlação

Curvas ROC \((1-SPEC)\times(SENS)\)

Sensibilidade do Método de Correlação

Curvas ROC \((1-SPEC)\times(SENS)\)

Pesquisa em janelas de pixels de \(5\times 5\), \(7\times 7\) e \(9\times 9\) centradas na média dos pontos-chave das imagens de treino.

Fixando a pesquisa em janelas de pixels de \(7\times 7\) e variando o tamanho do patch, vem:

Fixando o tamanho do patch em janelas de \(11\times 11\) pixels e variando a janela de pesquisa, vem:

Método de Viola-Jones

Ver (P. Viola 2001) (Jones and Viola 2001)

  1. Representação Integral e extração de features retangulares
  2. Construção de classificadores através da seleção de Features com AdaBoost
  3. Cascateamento de classificadores

Features retangulares

Haar Features

Tipos

Representação Imagem Integral

imagem_integral

Número de referências para cada Feature

Nota: custo computacional para calcular um feature é baixo, mas o número de features possíveis em uma imagem é extremamente elevado

* Uma imagem 24 x 24 possui mais de 160 mil features!    

Construção de classificadores

Strong Classifiers em cascata

Treinando um Classificador

cascadeTraining

Relações de compromisso:

Práticas

Viola-Jones: Detectores no MATLAB

  1. Classificador da toolbox Computer Vision do MATLAB
  2. Classificador treinado com 5 estágios, \(FAR=0.2\), \(TPR=0.995\) e FeatureType = Haar
  3. Classificador treinado com 7 estágios, \(FAR=0.2\), \(TPR=0.995\) e FeatureType = Haar

Viola-Jones: Detecção de bocas no MATLAB

Reconhecimento com Viola-Jones

localizacao_pontos_base_viola_jones

Viola-Jones: Resultados

Matrizes de Confusão

confusion matrices

False Positive

Acurácia - Viola-Jones x Correlação

RMSEs

Referências

Jones, Michael J, and Paul Viola. 2001. “Robust Real-Time Object Detection.” In Workshop on Statistical and Computational Theories of Vision. Vol. 266.

P. Viola, M. Jones. 2001. “Rapid Object Detection Using a Boosted Cascade of Simple Features.” Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society Conference on 1: I–511–I–518.

Petterson, James. 2014. “Getting Started with R.” https://www.kaggle.com/c/facial-keypoints-detection/details/getting-started-with-r.