segunda-feira, 30 de novembro de 2009

Detecção de faces - Survey

Não sei se já falei por aqui mas pretendo fazer upload dos meus trabalhos do mestrado e na cadeira de processamento de imagens, em especial as apresentações/aulas que venho fazendo.
Segue link para uma apresentação geral sobre detecção de faces que fiz para a disciplina de Biometria ano passado (2008).
Trata-se de um survey para quem está começando na área:

http://www.slideshare.net/jaulomag/face-detection

Espero que seja útil... Flw!

terça-feira, 17 de novembro de 2009

Explore images with Google Image Swirl, now in Labs

Mais uma ferramenta do Google muito bem pensada e que deve modificar o nosso modo de buscar por imagens:

http://googleblog.blogspot.com/2009/11/explore-images-with-google-image-swirl.html

Try t here: http://image-swirl.googlelabs.com/

Feature Selection By AdaBoost For SVM-Based Face Detection


Acabei de ler o artigo acima, aqui!
Faz parte dos meus estudos do mestrado. Quero unir AdaBoost e SVM de alguma forma.
Infelizmente é a mesma idéia que tive hoje com meu orientador, uma cascata unindo AdaBoost seguido de SVM, ver imagem abaixo:
Felizmente (eu achei que) foi uma técnica muito mal modelada e trabalhada, tanto que não foi publicada em nenhum grande periódico ou conferência.
Ele se propõe a melhorar a velocidade e taxas mas não consegue melhores resultados quanto as taxas e não compara a velocidade (o que ele ressalta em todo o texto ser melhor, sem provar).
Ou seja, é um artigo que valeu a pena ler pois ele já mostra por onde não devo ir e continuo achando a união de AdaBoost com SVM com um bom potencial.

Também encontrei um tutorial de SVM para reconhecimento de padrões que parece interessante. Para quem se interessar, aqui! Espero fazer um resumo e postar aqui no blog.

domingo, 15 de março de 2009

Lembrando alguns conceitos úteis de Probabilidades


0.1 Apresentação


Este modesto texto é um resumo de várias notas de estudo sobre Teoria das Probabilidades, orientado para o estudo de Reconhecimento de Padrões. Como sabemos, existe uma família de classificadores baseados em métodos estatísticos, cuja compreensão requer uma base considerável de conhecimentos sobre Probabilidade, particularmente Probabilidade Bayesiana. A intenção deste trabalho é reunir, deforma resumida, as definições e conceitos relativos a essa base, fornecendo uma referência para consulta rápida. A idéia é que seja um material que permita relembrar muito rapidamente os conceitos,e havendo necessidade (ou desejo) de aprofundá-los, a pessoa certamente buscará melhores fontes. A sequência em que os assuntos estão dispostos reflete bem o caráter utilitário do texto. Por exemplo,começamos diretamente de Variáveis Aleatórias Discretas, considerando que conhecimentos prévios já estão sob nosso domínio.

0.2 Variáveis Aleatórias Discretas


Muitas vezes o resultado de um experimento não é numérico. Por exemplo, o experimento `Retire uma lâmpada de um lote e teste-a' tem como resultados possíveis `Defeituosa' ou `Não-defeituosa'. Por outro lado, um dado experimento pode ser traduzido numericamente de várias formas diferentes, e pode ser útil e necessário escolher uma delas. Assim, dado um experimento x e seu espaço amostral associado, S, uma variável aleatória X é uma função que associa a cada elemento s do espaço amostral, s Î S, um número real X(s).
Uma variável aleatória discreta é uma variável aleatória cujo contradomínio é um conjunto finito, ou infinito-enumerável.
Dado um experimento x, seja X uma variável aleatória discreta sobre o espaço amostral S associado a x. Isto é, X assume os valores X(S) = {x1, x2, ...}. Chamemos de XR o contradomínio de X. Para cada resultado possível xi, i = 1, 2, ..., podemos associar um número denominado probabilidade de xi: p(xi) = P(X = xi) satisfazendo as condições:

  1. p(xi) ³ 0, " i = 1, 2, ...

  2. å¥i = 1p(xi) = 1


Sendo assim, p é chamada função de probabilidade da variável aleatória X. A coleção de pares [xi, p(xi)] é chamada de distribuição de probabilidade de X.
Seja B um subconjunto no contradomínio RX da variável aleatória X, e A o conjunto formado por todos os eventos t tais que X(t) Î B. Então A e B são eventos equivalentes.
Seja X uma variável aleatória discreta definida sobre um espaço amostral S, com contradomínio finito. Se para cada xi Î X(S), definimos a probabilidade de xi como P(X = xi), obtemos um espaço de probabilidade. Chamemos de f a esta função, com domínio X(S) e contradomínio no intervalo [0, 1], definida como f(xi) = P(X = xi). f é denominada distribuição de probabilidade, função de distribuição ou distribuição de probabilidade de X.Dado que X(S) = {x1, x2, ..., xn}, a distribuição f satisfaz:

  1. f(xi) ³ 0, i = 1, 2, ..., n

  2. åni = 1f(xi) = 1

Lembremos que P(X = a) = P({s Î S : X(s) = a}).
Uma vez definidas as variáveis aleatórias, definimos alguns elementos que caracterizam uma variável aleatória:

  1. Esperança ou Média
    Seja X uma variável aleatória discreta finita. Em geral podemos definir a média de uma variável aleatória X como E(X) = x1f(x1) + x2f(x2) + ... + xnf(xn) = åni = 1xif(xi). Isto é, a esperança é a média ponderada dos possíveis valores de X, ponderados por suas probabilidades. A média é também denotada como mX ou m.

  2. Variância
    A variância mede o espalhamento ou dispersão dos valores assumidos por X, em relação à sua média. O que, em muitas aplicações, é uma informação mais útil do que a média em si. A variância é dada por var(X) = åni = 1(xi - m)2f(xi) = E((X - m)2), onde m é a média de X.

  3. Desvio-padrão
    O desvio-padrão de X, sX = Ö{var(X)}, é a raiz quadrada da variância de X.





File translated fromTEXby TTH,version 3.85.
On 09 Apr 2009, 19:06.






terça-feira, 10 de fevereiro de 2009

Nota acerca de Espaço de Características

Nestes últimos dias um problema tem me rondado da seguinte forma: dois amigos me indagaram (quase no mesmo dia) sobre problemas relacionados a representação do espaço de características e as consequências de uma má representação nos dados de treinamento.
Pensei cá comigo um exemplo bem simples de uma só dimensão*, vamos lá:
Suponha que desejamos fazer um classificador para prever, com base apenas em uma pesagem, se o animal pesado trata-se ou não de um elefante.
Agora imagine que, no dia do levantamento da base de dados para treinamento (na verdade seriam precisas duas bases de dados, uma para treinamento e outra para validação, mas isto é 'pano' para outro post) só levam, dos exemplos negativos (chamados assim por corresponderem a exemplos para os quais o classificador deve gerar um NAO como saída),  animais de pequeno porte, como pequenos macacos, gatos, cachorros...
Poderiamos escrever nossa base como (em Kg)**:
Positiva = {3750, 4500, 6000, 3000, 5300, 4200, 5000, 1501}
Negativa = {22, 15, 17, 30, 50, 55, 10, 5, 23, 37, 45, 51}
Fácil ver que este é um problema bem fácil de ser resolvido. Para o problema, independente do método, suponhamos que temos um threshold (limiar) no classificador e que seu valor deve ser encontrado através de um algoritmo de aprendizado qualquer. Aplicando o problema a base de treinamento, digamos que o algoritmo de aprendizado gere como limiar o valor 723 (escolhi este valor por ser a mediana entre o maior valor da base negativa, 55,  e o menor da base positiva, 1501)***. Com uma função simples de classificação do tipo "se valor maior que limiar, SIM (é um elefante); caso contrário, NAO" podemos observar que na base de treinamento o classificador teria 100% de acerto facilmente.
Não sei se está dando para perceber aonde quero chegar mas imagine se colocam um sistema na portaria de recepção de um zoológico separando os elefantes dos outros animais com base neste classificador. Assim que chegarem rinocerontes, búfalos e até algumas zebras ou mesmo felinos avantajados o sistema erraria feio.
Pode-se ainda argumentar: ao menos ele separou os animais mais pesados dos mais leves. Contra isto observe que o algoritmo de aprendizado poderia ter gerado como saída o limiar 56 que continuaria dando 100% na base positiva e agora sim tornando-se um sistema catastrófico.
Aonde quero chegar? Uma má representação da realidade pode gerar grandes problemas durante a utilização do sistema em ambientes reais. Levando para o campo dos sistemas 'não-inteligentes', seria como se fizéssemos apenas os testes que passam em um sistema, deixando de fora os mais problemáticos.
Por isso, tome extremo cuidado na hora de representar o problema, treine com a maior quantidade de dados (válidos) possível e, assim que adquirir, use e abuse da sua experiência!
Observações finais:
  1. Você pode sugerir aumentar o número de dimensões para resolver o problema, mas isto pode apenas maquiá-lo;
  2. Este problema é dificílimo de ser visualizado em dimensões maiores, imaginem como observar isto em um sistema de processamento de áudio, de imagens ou ainda pior, com 10, 100, 1000 dimensões;
  3. Nada melhor que um intenso e qualitativo estudo do problema em questão para evitar estas armadilhas;
  4. Existem ferramentas estatísticas de tratamento de dados que podem ajudar numa possível análise de dados ainda no pré-processamento, mas nenhuma delas resolve o problemas 100%.
Abraço e até a próxima!

* dimensão em problemas de reconhecimento de padrões é cada uma das caracteríticas que você utiliza para 'representar' o seu indivíduo. Ou seja, se você representa uma pessoa por seu peso e altura, este é um problema de dimensão 2, ou ainda bi-dimensional, 2D... Facilmente, o espaço pode ser pensado como um plano cartesiano e o espaço de características como um sub-plano desse espaço (altura entre zero e 10 metros e peso entre zero e 500 Kgs? Inclusive estes valores limitantes podem gerar vários problemas quando mal escolhidos, mas falarei disto em outro post).
** segundo o Wikipedia elefantes podem nascer com 90 Kg e ter ate 12 toneladas.
*** Este valor pode ser questionado mas muitos dos bons algoritmos de hoje chegariam a este valor como ótimo dentro da base apresentada.

sexta-feira, 6 de fevereiro de 2009

Resumos - RBC

Como parte das atividades do grupo, segue o primeiro pequeno resumo. A intenção é ter resumos introdutórios sobre diversos temas relacionados à area e, com o tempo, ir aprofundando o conhecimento nestes temas.
Para o primeiro desses resumos, escolhi como tema o RBC, abreviação de Raciocínio Baseado em Casos, um paradigma de Inteligência Artificial que utiliza experiências passadas para solucionar  problemas correntes. A mais conhecida técnica deste paradigma é o K-NN ou K Vizinhos mais Próximos, técnica simples, elegante e que pode solucionar uma grande quantidade de problemas além de poder ser facilmente utilizado na construção de uma solução mais complexa através de hibridação.

quinta-feira, 5 de fevereiro de 2009

Recognize, World!

Hello World!!!
Este blog/grupo foi criado com a intenção de reunir conhecimentos diversos nas áreas de Reconhecimento de Padrões, Aprendizagem de Máquinas, Redes Neurais, Sistemas Híbridos, Algoritmos/Modelos Genéticos ou baseados na natureza e outros métodos (estatísticos ou não). Enfim, toda a ciência, engenharia e matemática envolvidas neste facinante campo da inteligência artificial relacionado à capacitação de máquinas a fim de que, cada vez mais, elas se aproximem (ou ultrapassem) a capacidade humana em determinadas funções as quais os humanos (ainda) têm o domínio. Bem, não é intuito deste post inicial dar uma definição formal, isto poderá e deverá ser feito mais tarde. A intenção aqui é mais incentivar a participação de todos.
Pretendemos aqui criar um ambiente para a livre circulação de informação, compartilhando conhecimento através da divulgação de resumos, tutorias, notícias da área, discussões, códigos, etc.
O grupo é inicialmente formado por três membros mas este número pode crescer a medida que sentirmos a vontade e efetiva participação de outros membros. Os membros 'fundadores' são: eu mesmo :D (Joao Paulo Magalhães), Tiago Figuerêdo e Marcos Artur. Não somos super especialistas em nada, por isto a participação de todos é importante, inclusive na correção das informações colocadas aqui ou no envio de textos diversos para publicação.
Enjoy us!!!