Quelle est la meilleure approche pour reconnaître les modèles dans les données et quel est le meilleur moyen d'en apprendre davantage sur le sujet?

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

Question

Un développeur avec lequel je travaille développe actuellement un programme qui analyse les images de la chaussée afin de détecter les fissures dans la chaussée. Chaque fois que son programme trouve une fissure, il génère une entrée dans un fichier qui me dit quels pixels composent cette fissure. Son logiciel pose cependant deux problèmes:

1) Il produit plusieurs faux positifs

2) S'il trouve une fissure, il n'en trouve que de petites parties et les désigne comme des fissures séparées.

Mon travail consiste à écrire un logiciel qui lira ces données, les analysera et fera la différence entre les faux positifs et les fissures réelles. Je dois également déterminer comment regrouper toutes les petites sections d’une fissure.

J’ai essayé différentes méthodes de filtrage des données pour éliminer les faux positifs et j’ai utilisé les réseaux de neurones avec un degré de succès limité pour regrouper les fissures. Je comprends qu’il y aura des erreurs, mais à partir de maintenant, il ya trop d’erreurs. Est-ce que quelqu'un a une idée pour un expert non-spécialiste de l'IA quant à la meilleure façon d'accomplir ma tâche ou d'en apprendre plus à ce sujet? Quels types de livres devrais-je lire ou quels types de cours devrais-je prendre?

MODIFIER Ma question porte davantage sur la manière de détecter les tendances dans les données de mon collègue et de les identifier comme de véritables fissures. C’est la logique de haut niveau qui m’intéresse, pas tant la logique de bas niveau.

MODIFIER En réalité, il faudrait AU MOINS 20 échantillons d'images pour donner une représentation précise des données sur lesquelles je travaille. Ça varie beaucoup. Mais j’ai un exemple de ici , ici et ici . Ces images ont déjà été traitées par mon collègue. Ce que je dois classer, ce sont les données rouge, bleue et verte (le rouge représente une fissure sombre, le bleu une fissure légère et le vert une fissure large / scellée).

Était-ce utile?

La solution

En plus des commentaires utiles sur le traitement des images, il semble que vous ayez affaire à un clustering. problème .

Les algorithmes de clustering proviennent de la documentation sur l'apprentissage automatique , en particulier apprentissage non supervisé . Comme son nom l'indique, l'idée de base est d'essayer d'identifier les clusters naturels de points de données dans un vaste ensemble de données.

Par exemple, l’illustration ci-dessous montre comment un algorithme de classification peut regrouper un ensemble de points en 7 groupes (indiqués par des cercles et des couleurs):

 k-signifie
(source: natekohl.net )

Dans votre cas, un algorithme de classification tenterait de fusionner de manière répétée de petites fissures pour former des fissures plus grandes, jusqu’à ce que certains critères d’arrêt soient remplis. Le résultat final serait un ensemble plus petit de fissures jointes. Bien entendu, les fissures diffèrent un peu des points bidimensionnels. Une partie de l’astuce pour faire fonctionner un algorithme de groupement consiste à définir une métrique de distance utile entre deux fissures.

Les algorithmes de clustering les plus populaires incluent le la mise en cluster de k-means ( démo ) et clustering hiérarchique . Ce second lien explique également, étape par étape, comment fonctionne k-means.

MODIFIER : ce document rédigé par certains ingénieurs de Phillips est pertinent par rapport à ce que vous essayez de faire:

  • Chenn-Jung Huang, Chua-Chin Wang, Chi-Feng Wu, " Techniques de traitement des images pour l'identification de grappes de défauts de plaquettes" , " Conception et test des ordinateurs IEEE, vol. 19, non. 2, pp. 44-48, mars / avril 2002.

Ils procèdent à une inspection visuelle des défauts des plaquettes de silicium et utilisent un filtre médian pour supprimer le bruit avant d'utiliser un algorithme de clustering du plus proche voisin pour détecter les défauts.

Voici quelques articles / livres connexes cités qui pourraient être utiles:

  • M. Taubenlatt et J. Batchelder, & # 8220; Inspection de tranches de motifs à l'aide du filtrage spatial pour un environnement de cluster , & # 8221; Applied Optics, vol. 31, non. 17 juin 1992, p. 3354-3362.
  • F.-L. Chen et S.-F. Liu, Une approche de réseau de neurones pour reconnaître le motif spatial des défauts dans la fabrication de semi-conducteurs. & # 8221; IEEE Trans. Fabrication de semi-conducteurs, vol. 13, non. 3, août 2000, pages 366 à 373.
  • G. Earl, R. Johnsonbaugh et S. Jost, Reconnaissance de modèles et analyse d'images , Prentice Hall, Upper Saddle River, New Jersey, 1996.

Autres conseils

Votre problème relève du très vaste domaine de la classification des images. Ces types de problèmes peuvent être notoirement difficiles et, en fin de compte, les résoudre est un art. Vous devez exploiter toutes les connaissances dont vous disposez sur le domaine problématique pour le rendre accessible.

Un problème fondamental est la normalisation. Vous souhaitez que les objets classés de la même manière soient aussi semblables que possible dans leur représentation des données. Par exemple, si vous avez une image des fissures, toutes les images ont-elles la même orientation? Sinon, la rotation de l'image peut vous aider dans votre classification. De même, mise à l'échelle et traduction (voir this )

Vous souhaitez également supprimer autant de données non pertinentes que possible de vos ensembles d'entraînement. Plutôt que de travailler directement sur l'image, vous pourriez peut-être utiliser la extraction de bord (par exemple, détection de bord Canny ). Cela supprimera tout le "bruit" de l'image, ne laissant que les bords. L’exercice est ensuite réduit à l’identification des bords des fissures et des chaussées naturelles.

Si vous souhaitez trouver rapidement une solution, je vous suggère de tenter votre chance avec un Convolutional Neural Net , qui peut effectuer une très bonne classification des images avec un minimum de prétraitement et de noramlisation. Il est très bien connu dans la reconnaissance de l'écriture manuscrite et pourrait bien convenir à ce que vous faites.

Je suis un peu déconcerté par la façon dont vous avez choisi de résoudre le problème. Si votre collègue n'identifie pas les fissures complètes, et que c'est la spécification, alors c'est votre problème. Mais si vous parvenez à casser toutes les mailles du filet et à éviter ses faux positifs, n’avez-vous pas fait son travail?

Cela dit, je pense qu'il s'agit d'un problème de détection d'arête plutôt que d'un problème de classification. Si le détecteur de bord est bon, vos problèmes disparaissent.

Si vous êtes toujours sur la classification, vous aurez besoin d’un ensemble d’entraînement avec des réponses connues, car vous avez besoin d’un moyen de quantifier ce qui différencie un faux positif d’une réelle fissure. Cependant, je pense toujours qu'il est peu probable que votre classificateur puisse connecter les fissures, car celles-ci sont spécifiques à chaque dalle de pavage.

Je suis d’accord avec ire_and_curses, une fois que vous vous êtes plongé dans le domaine de la détection de bord pour patcher la détection de crack de vos co-développeurs et pour supprimer ses faux positifs, il semble que vous feriez son travail. Si vous pouvez corriger ce que son logiciel n'a pas détecté et supprimer ses faux positifs autour de ce qu'il vous a donné. Il semble que vous puissiez le faire pour l’image complète.

Si la spécification lui permet de détecter les fissures et de les classer, il lui incombe de détecter les contours et d'éliminer les faux positifs. Et votre travail consiste à prendre ce qu’il vous a donné et à classer de quel type de fissure il s’agit. Si vous devez effectuer une détection des contours pour le faire, il semblerait que vous n’êtes pas loin de mettre votre co-développeur au chômage.

Il y a de très bonnes réponses ici. Mais si vous êtes incapable de résoudre le problème, vous pouvez envisager Mechanical Turk. Dans certains cas, cela peut être très rentable pour les problèmes persistants. Je connais des gens qui l'utilisent pour toutes sortes de choses comme celle-ci (vérification qu'un humain peut faire facilement, mais s'avère difficile à coder).

https://www.mturk.com/mturk/welcome

Je ne suis en aucun cas un expert, mais essayez de regarder Haar Cascades . Vous voudrez peut-être aussi expérimenter avec la boîte à outils OpenCV. Ces deux éléments réunis font face à la détection et à d’autres tâches de détection d’objets.

Vous devrez peut-être suivre une "formation". développer une cascade de Haar pour les fissures dans les chaussées.

  

Quelle est la meilleure approche pour reconnaître les modèles dans les données et quel est le meilleur moyen d’en apprendre davantage sur le sujet?

La meilleure approche consiste à étudier la reconnaissance des modèles et l’apprentissage automatique. Je commencerais par la classification de modèles de Duda et utiliserais le Reconnaissance des formes et apprentissage automatique comme référence. Il faudrait un bon bout de temps avant que le matériau ne soit absorbé, mais une bonne compréhension de la reconnaissance des formes et des approches majeures du problème de classification devrait vous donner la direction. Je peux rester ici et faire quelques hypothèses sur vos données, mais honnêtement, vous avez probablement la meilleure idée de l'ensemble de données puisque vous en avez traité plus que quiconque. Certaines des techniques utiles, par exemple, pourraient être machine à vecteurs de support et boosting .

Modifier : la détection des visages en temps réel est une application intéressante de la stimulation. Voir la détection d'objet rapide à l'aide d'une cascade simplifiée de Viola / Jones Caractéristiques (pdf). De plus, en regardant les exemples d'images, je dirais que vous devriez essayer d'améliorer un peu la détection des contours. Peut-être que le lissage de l’image avec la gaussienne et la détection plus agressive des contours peuvent accroître la détection des fissures plus petites.

Je vous suggère de prendre n'importe quel manuel de traitement d'images et de lire sur le sujet. Morphologique Opérations comme Dilatation et Erosion , qui complète le travail d'un détecteur de bord . Beaucoup de matériel sur le net ...

Ceci est un problème de traitement d'image. Il existe de nombreux livres sur le sujet, et une grande partie de leur contenu ira au-delà d’un problème de détection de ligne comme celui-ci. Voici l’esquisse d’une technique qui conviendrait au problème.

  1. Lorsque vous trouvez une fissure, vous trouvez des pixels qui la composent. Des filtres de détection des contours ou d’autres méthodes de détection des contours peuvent être utilisés à cet effet.

  2. Commencez avec un (n'importe lequel) pixel dans une fissure, puis "suivez" créer une ligne multipoint à partir de la fissure - enregistrez les points qui composent la ligne. Vous pouvez supprimer certains points intermédiaires s’ils se trouvent près d’une ligne droite. Faites cela avec tous les pixels de la fissure. Si vous avez une fissure en forme d'étoile, ne vous en faites pas. Suivez simplement les pixels dans une (ou deux) directions pour former une ligne, puis supprimez ces pixels de l’ensemble des pixels de la fissure. Les autres branches de l'étoile seront reconnues comme des lignes séparées (pour l'instant).

  3. Vous pourriez peut-être éclaircir les pixels de la fissure avant l'étape 1. En d'autres termes, vérifiez les voisins des pixels et, s'ils sont trop nombreux, ignorez ce pixel. (Ceci est une simplification - vous pouvez trouver plusieurs algorithmes pour cela.) Une autre étape du prétraitement pourrait être de supprimer toutes les lignes trop minces ou deux plus pâles. Cela pourrait aider avec les faux positifs.

  4. Vous avez maintenant beaucoup de lignes courtes et multipoints. Pour les extrémités de chaque ligne, recherchez la ligne la plus proche. Si les lignes se situent dans les limites d'une tolérance, cliquez sur "Connecter". the lines - liez-les ou ajoutez-les à la même structure ou au même tableau. De cette façon, vous pouvez connecter les fissures proches, qui seraient probablement la même fissure dans le béton.

Il semble que peu importe l’algorithme, certains réglages de paramètres seront nécessaires pour obtenir de bonnes performances. Ecrivez-le pour qu'il soit facile d'apporter des modifications mineures à des éléments tels que les seuils d'intensité, l'épaisseur minimale et maximale, etc.

En fonction de l'environnement d'utilisation, vous pouvez autoriser les utilisateurs à déterminer les cas douteux et / ou autoriser un utilisateur à examiner toutes les fissures et à cliquer pour combiner, scinder ou supprimer les fissures détectées.

Vous avez une très bonne réponse, esp. @ Nate's, et tous les liens et livres suggérés en valent la peine. Cependant, je suis surpris que personne n'ait suggéré le livre qui aurait été mon premier choix - O'Reilly Programmation de l'intelligence collective . Le titre peut sembler incompréhensible à votre question, mais, croyez-moi, le contenu est : une des couvertures les plus pratiques, axée sur les programmeurs, de l'exploration de données et de "l'apprentissage automatique". Que j'ai jamais vu. Faites un tour! -)

Cela ressemble un peu à un problème qui existe dans la Mécanique des roches, où il existe des joints dans une masse rocheuse et ces joints doivent être regroupés en "ensembles" par orientation, longueur et autres propriétés. Dans ce cas, une méthode qui fonctionne bien est la classification, bien que K-means classique semble poser quelques problèmes que j'ai abordés dans le passé en utilisant un algorithme génétique pour exécuter la solution interactive.

Dans ce cas, je pense que cela pourrait ne pas fonctionner de la même manière. Dans ce cas, je soupçonne que vous devez créer vos groupes pour commencer, par exemple longitudinaux, transversaux, etc. et définir exactement ce qu’est la représentation de chaque groupe, c’est-à-dire qu’une seule branche de fissure longitudinale peut se dérouler tout au long de sa longueur. qui font à sa classification.

Une fois que vous avez cela, puis pour chaque fissure, je générerais une fissure aléatoire ou un motif de fissures basé sur la classification que vous avez créée. Vous pouvez alors utiliser quelque chose comme une approche des moindres carrés pour voir à quel point la fissure que vous vérifiez se confondre avec les fissures aléatoires que vous avez générées. Vous pouvez répéter cette analyse plusieurs fois à la manière d’une analyse de Monte-Carlo pour identifier celle des fissures générées aléatoirement qui convient le mieux à celle que vous vérifiez.

Pour traiter ensuite les faux positifs, vous devez créer un motif pour chacun des différents types de faux positifs, c’est-à-dire que le bord d’une bordure est une ligne droite. Vous pourrez ensuite exécuter l'analyse en sélectionnant le groupe le plus probable pour chaque fissure analysée.

Enfin, vous devrez "peaufiner" la définition des différents types de fissures pour obtenir un meilleur résultat. Je suppose que cela pourrait utiliser une approche automatisée ou une approche manuelle en fonction de la manière dont vous définissez vos différents types de fissures.

Une autre modification qui aide parfois lorsque je fais des problèmes comme celui-ci est de créer un groupe aléatoire. En ajustant la sensibilité d’un groupe aléatoire, c’est-à-dire la probabilité qu’une fissure soit incluse dans le groupe aléatoire, vous pouvez parfois ajuster la sensibilité du modèle à des schémas complexes qui ne s’intègrent pas vraiment ailleurs.

Bonne chance, il me semble que vous avez un véritable défi.

Vous devriez en savoir plus sur l'exploration de données , spécialement l'exploration de modèles .

  

L'extraction de données est le processus d'extraction de modèles à partir de données. Au fur et à mesure de la collecte de données, la quantité de données doublant tous les trois ans, elle devient un outil de plus en plus important pour transformer ces données en information. Il est couramment utilisé dans un large éventail de pratiques de profilage, telles que le marketing, la surveillance, la détection des fraudes et les découvertes scientifiques.

Un bon livre sur le sujet est Exploration de données: outils et techniques d'apprentissage automatique pratiques

 L'exploration de données peut être achetée sur Amazon. >
(source: waikato.ac.nz ) ] ( http://www.amazon.com/Data-Mining -Ian-H-Witten / dp / 3446215336 "ISBN 0-12-088407-0")

En gros, vous devez appliquer des outils et des méthodologies statistiques à vos jeux de données. Les méthodes de comparaison les plus utilisées sont le t-test et le test du Chi carré de Student, pour voir si deux variables non liées sont liées avec une certaine confiance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top