Qual é a melhor abordagem para reconhecer padrões em dados, e qual é a melhor maneira de aprender mais sobre o tema?

StackOverflow https://stackoverflow.com/questions/1441319

Pergunta

Um desenvolvedor Eu estou trabalhando com está desenvolvendo um programa que analisa as imagens de pavimento para encontrar rachaduras na calçada. Para cada rachar seus achados programa, ela produz uma entrada em um arquivo que me diz que pixels fazem-se que o crack particular. Há dois problemas com seu software que:

1) Produz vários falsos positivos

2) Se ele encontra uma fresta, ele só encontra pequenas seções de ele e denota aquelas seções como sendo rachaduras separadas.

O meu trabalho é escrever software que irá ler esses dados, analisá-lo e dizer a diferença entre falso-positivos e rachaduras reais. Eu também preciso determinar como agrupar todas as pequenas seções de uma rachadura como um.

Eu tentei várias maneiras de filtrar os dados para eliminar falsos positivos, e têm vindo a utilizar redes neurais para um grau limitado de sucesso a rachaduras agrupar. Eu entendo que haverá erro, mas a partir de agora, há muito pouco erro. Alguém tem alguma idéia para um especialista em não-AI quanto à melhor maneira de realizar minha tarefa ou aprender mais sobre ele? Que tipos de livros que eu deveria ler, ou que tipo de aulas devo tomar?

Editar A minha pergunta é mais sobre como padrões de avisos em dados do meu colega de trabalho e identificar os padrões como rachaduras reais. É a lógica de alto nível que eu estou preocupado com, não tanto a lógica de baixo nível.

Editar Em toda a realidade, levaria pelo menos 20 amostras de imagens para dar uma representação precisa dos dados que eu estou trabalhando. Isso varia muito. Mas eu tenho uma amostra aqui , aqui , e aqui . Estas imagens já foram processados ??pelo processo do meu colega de trabalho. Os dados vermelho, azul e verde é o que eu tenho para classificar (vermelho representa rachadura escuro, azul representa rachadura luz e arquibancadas verde para uma ampla / crack selada).

Foi útil?

Solução

Além dos comentários úteis sobre processamento de imagem, ele também soa como você está lidando com um agrupamento problema .

Algoritmos de agrupamento vêm do aprendizagem de máquina literatura , especificamente aprendizagem não supervisionada . Como o nome indica, a idéia básica é tentar identificar agrupamentos naturais de pontos de dados dentro de algum grande conjunto de dados.

Por exemplo, o quadro seguinte mostra como um agrupamento algoritmo grupo poder um grupo de pontos em 7 grupos (indicado por círculos e cor):

k-médias
(fonte: natekohl.net )

No seu caso, um algoritmo de agrupamento tentaria fundir repetidamente pequenas fissuras para formar rachaduras maiores, até que alguns critérios de parada for atendida. O resultado final seria um conjunto menor de rachaduras unidas. Claro, as rachaduras são um pouco diferentes do que pontos bidimensionais -. Parte do truque na obtenção de um algoritmo de agrupamento para o trabalho aqui será a definição de uma distância métrica útil entre duas rachaduras

algoritmos de agrupamento populares incluem K-means ( demonstração ) e hierárquica de agrupamento . Que segundo link também tem uma boa explicação passo-a-passo de como funciona k-meios.

Editar : Este trabalho por alguns engenheiros da Phillips parece relevante para o que você está tentando fazer:

  • Chenn-Jung Huang, Chua-Chin Wang, Chi-Feng Wu, " Técnicas de Processamento de Imagem para Wafer Defeito Cluster Identificação ," IEEE Projeto e Teste de Computadores, vol. 19, n. 2, pp. 44-48, março / abril de 2002.

Eles estão fazendo uma inspeção visual por defeitos em wafers de silício, e usar um filtro mediana para remover o ruído antes de usar um algoritmo de agrupamento de vizinho mais próximo para detectar os defeitos.

Aqui estão alguns papéis relacionados / livros que eles citam que pode ser útil:

  • M. Taubenlatt e J. Batchelder, “ Patterned Wafer Inspection Usando espacial Filtering para ambiente de cluster ,” Óptica Aplicada, vol. 31, n. 17, junho de 1992, pp. 3354-3362.
  • F.-L. Chen e S.-F. Liu, “ Abordagem A Neural-rede para Reconhecer Padrão Defeito espacial na fabricação de semicondutores. IEEE Trans. Semiconductor Manufacturing, vol. 13, n °. 3, agosto de 2000, pp. 366-373.
  • G. Earl, R. Johnsonbaugh e S. Jost, Reconhecimento de Padrões e Análise de Imagem , Prentice Hall, Upper Saddle River, NJ de 1996.

Outras dicas

Seu problema cai no campo muito amplo de classificação de imagens. Esses tipos de problemas pode ser notoriamente difícil, e no final do dia, resolvê-los é uma arte. Você deve explorar cada pedaço de conhecimento que você tem sobre o domínio do problema para torná-lo tratável.

Uma questão fundamental é a normalização. Você quer ter objetos semelhante classificados para ser o mais semelhante possível em sua representação de dados. Por exemplo, se você tem uma imagem das fissuras, fazer todas as imagens têm a mesma orientação? Se não, então girar a imagem pode ajudar na sua classificação. Da mesma forma, o dimensionamento e tradução (consulte a este )

Você também deseja remover tantos dados irrelevantes quanto possível de seus conjuntos de treinamento. Em vez de trabalhar diretamente sobre a imagem, talvez você poderia usar borda extração (por exemplo, detecção de bordas Canny ). Isto irá remover todo o 'ruído' da imagem, deixando apenas as bordas. O exercício é então reduzido a identificar quais bordas são as rachaduras e que são o pavimento natural.

Se você quiser via rápida para uma solução, então eu sugiro que você tente primeiro a sua sorte com um convolucional Neural Net , que pode realizar muito boa classificação de imagens com um mínimo de pré-processamento e noramlization. Sua muito bem conhecido no reconhecimento de escrita, e pode ser o ideal para o que você está fazendo.

Estou um pouco confuso com a maneira que você escolheu para quebrar o problema. Se o seu colega de trabalho não é identificar fissuras completas, e isso é a especificação, então isso torna o seu problema. Mas se você conseguir costurar todas as rachaduras juntos, e evitar seus falsos positivos, então não tem você acabou de fazer o seu trabalho?

Quanto ao resto, penso que este é um href="http://en.wikipedia.org/wiki/Edge_detection" rel="nofollow noreferrer"> problema de detecção borda

Se você ainda está definido em classificação, então você vai precisar de um conjunto de treinamento com respostas conhecidas, já que você precisa encontrar uma maneira de quantificar o que diferencia um falso positivo de uma rachadura real. No entanto, eu ainda acho que é improvável que o classificador será capaz de conectar as rachaduras, uma vez que estes são específicos para cada laje de pavimentação individual.

Eu tenho que concordar com ire_and_curses, uma vez que você mergulhar no reino da detecção de bordas para corrigir seus co-desenvolvedores rachar detecção, e remover seus falsos positivos, parece que você estaria fazendo o seu trabalho. Se você pode corrigir o que seu software não detectar e remover seus falsos positivos em torno do que ele lhe deu. Parece que você seria capaz de fazer isso para a imagem completa.

Se a especificação é para ele para detectar as rachaduras, e você classificá-los, então é seu trabalho para fazer a detecção de bordas e remover falsos positivos. E seu trabalho para tirar o que ele lhe deu e classificar o tipo de rachadura é. Se você tem que fazer a detecção de bordas para fazer isso, então parece que você não está longe de colocar o seu co-desenvolvedor de fora do trabalho.

Não sou especialista, por qualquer meio, mas tentar olhar em Haar Cascades . Você também pode querer experimentar com o kit de ferramentas OpenCV. Essas duas coisas juntas fazem a detecção de rosto e outras tarefas de detecção de objeto.

Você pode ter que fazer "treinamento" para desenvolver um Haar Cascade para rachaduras na calçada.

Qual é a melhor abordagem para reconhecer padrões em dados, e qual é a melhor maneira de aprender mais sobre o tema?

A melhor abordagem é estudar reconhecimento de padrões e aprendizagem automática. Gostaria de começar com o Duda de Padrões e usar de Bishop Reconhecimento de Padrões e Machine Learning como referência. Levaria um bom tempo para o material a afundar, mas recebendo sentido básico de reconhecimento de padrões e abordagens principais de problema de classificação deve dar-lhe a direção. Posso sentar aqui e fazer algumas suposições sobre seus dados, mas honestamente, você provavelmente tem a melhor idéia sobre o conjunto de dados desde que você se lidar com ele mais do que ninguém. Alguns da técnica útil, por exemplo, poderia ser apoio máquina vector e impulsionar .

Editar : Uma aplicação interessante de aumentar é a detecção de rosto em tempo real. Consulte rápida Detecção de Objeto de Viola / Jones usando uma Cascade Impulsionado do Simple Características (pdf). Além disso, olhar para as imagens de exemplo, eu diria que você deve tentar melhorar a borda detecção um pouco. Talvez suavização da imagem com Gaussian e funcionando detecção de bordas mais agressivo pode aumentar a detecção de fissuras menores.

Eu sugiro que você pegar qualquer livro de processamento de imagem e ler sobre o assunto. Particularmente, você pode estar interessado em morfológicas Operações como Dilatação e Erosão, que complementa o trabalho de um detector borda . A abundância de materiais na net ...

Este é um problema de processamento de imagem. Há muitos livros escritos sobre o assunto, e muito do material nesses livros vão além de um problema de detecção de linha como esta. Aqui está o esboço de uma técnica que iria trabalhar para o problema.

  1. Quando você encontrar uma rachadura, você encontrar alguns pixels que compõem o crack. filtros de detecção de borda ou outros métodos de detecção de borda pode ser utilizado para este.

  2. Comece com um (qualquer) pixel em uma fenda, em seguida, "seguir"-lo para fazer uma linha multiponto fora da rachadura - salvar os pontos que compõem a linha. Você pode remover alguns pontos intermediários se encontram perto de uma linha reta. Faça isso com todos os pixels de crack. Se você tem uma rachadura em forma de estrela, não se preocupe com isso. Basta seguir os pixels em um (ou dois) direções para tornar-se uma linha, em seguida, remover esses pixels do conjunto de crack pixels. As outras pernas da estrela vai reconhecida como linhas separadas (por agora).

  3. Você pode executar algumas desbaste nos pixels de crack antes do passo 1. Em outras palavras, verificar os vizinhos dos pixels, e se há muitos, em seguida, ignorar que pixel. (Esta é uma simplificação - você pode encontrar vários algoritmos para isso.) Outro passo de pré-processamento pode ser remover todas as linhas que são muito finas ou dois desmaiar. Esta ajuda poder com os falsos positivos.

  4. Agora você tem um monte de linhas curtas, multiponto. Para os pontos finais de cada linha, encontrar a linha mais próxima. Se as linhas estão dentro da tolerância, então "ligar" as linhas - ligá-los ou adicioná-los à mesma estrutura ou matriz. Dessa forma, você pode conectar as fendas estreitas, que provavelmente seria a mesma rachadura no concreto.

Parece que não importa o algoritmo, será necessário para o bom desempenho de algum ajuste de parâmetros. Escrevê-lo por isso é fácil de fazer pequenas alterações em coisas como limiares de intensidade, mínima e espessura máxima, etc.

Dependendo do ambiente de utilização, você pode querer permitir que o julgamento usuário fazer determinar os casos questionáveis, e / ou permitir que um usuário para rever as todas as rachaduras e clique para combinar, dividir ou remover rachaduras detectadas.

Você tem alguma resposta muito boa, esp. @ Nate, e todos os links e livros sugeridos valem a pena. No entanto, estou surpreso que ninguém sugeriu um livro que teria sido minha top pick - de O'Reilly Programming Collective Intelligence . O título pode não parecer pertinente à sua pergunta, mas, acredite em mim, o conteúdo são : um dos mais cobertura prática, orientada para o programador de mineração de dados e "aprendizagem de máquina" que eu já vi. Dê um giro -!)

Parece um pouco como um problema há em Mecânica das Rochas, onde existem articulações em um maciço rochoso e estas articulações têm de ser agrupados em 'conjuntos' de orientação, comprimento e outras propriedades. Neste exemplo, um método que funciona bem é clustering, embora clássicos K-means parece ter alguns problemas que tenho abordadas no passado usando um algoritmo genético para executar a solução interativa.

Neste caso eu suspeito que pode não funcionar da mesma maneira. Neste caso, eu suspeito que você precisa para criar seus grupos para começar com isto é longitudinal, transversal etc e definir exatamente o que o behviour de cada grupo é isto possível uma peça única maneira de crack ramo longitudinal ao longo dela de comprimento, e se ele faz o que faz que fazer para a sua classificação.

Uma vez que você tem que, em seguida, para cada tipo de crack, que geraria uma fenda aleatório ou padrão de rachaduras com base na classificação que você criou. então você pode usar algo como mínimos quadrados aproximar para ver quão de perto o crack você está verificando se encaixa contra o crack aleatória / rachaduras que você gerou. Você pode repetir essa análise muitas vezes na forma de uma análise de Monte-Carlo para identificar qual dos gerados aleatoriamente de crack / rachaduras melhores se encaixa o que você está verificando.

Para então lidar com os falsos positivos que você vai precisar para criar um padrão para cada um dos diferentes tipos de falsos positivos ou seja, à beira de uma calçada é uma linha reta. Você então será capaz de executar a análise escolhendo que é o grupo mais provável para cada rachadura você analisar.

Finalmente, você vai precisar para 'ajuste' a definição de diferentes tipos de crack para tentar obter um melhor resultado. Eu acho que isso poderia tanto usar uma abordagem automatizada ou uma abordagem manual dependendo de como você definir seus tipos de crack diferentes.

Uma outra modificação que às vezes ajuda quando eu estou fazendo problemas como este é ter um grupo aleatório. Ao ajustar a sensibilidade de um grupo aleatório ou seja, como mais ou menos provável uma rachadura deve ser incluído no grupo aleatório, às vezes você pode ajustar o sensitivty do modelo para padrões complexos que realmente não se encaixam em qualquer lugar.

Boa sorte, parece-me que você tem um verdadeiro desafio.

Você deve ler sobre mineração de dados , especialmente mineração de padrões .

Data mining é o processo de extrair padrões de dados. À medida que mais dados são recolhidos, com a quantidade de dados duplicando a cada três anos, a mineração de dados está se tornando uma ferramenta cada vez mais importante para transformar esses dados em em formação. É comumente usado em uma ampla gama de práticas de criação de perfil, tais como marketing, vigilância, detecção de fraude e descoberta científica.

Um bom livro sobre o assunto é Data Mining: práticas ferramentas e técnicas de aprendizagem de máquina

Data Mining pode ser comprado na Amazon.
(fonte: waikato.ac.nz ) ] ( http://www.amazon.com/Data-Mining -Ian-H-Witten / dp / 3446215336 "ISBN 0-12-088407-0")

Basicamente o que você tem a fazer é aplicar ferramentas estatísticas e metodologias para seus conjuntos de dados. As metodologias de comparação mais utilizados são de Student t-test e o teste Chi quadrado , para ver se duas variáveis ??independentes estão relacionados com alguma confiança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top