Pourquoi utiliser des NN convolutionnels pour une tâche d'inspection visuelle par rapport à la correspondance de modèle de CV classique?

9

J'ai eu une discussion intéressante sur la base d'un projet sur lequel nous travaillions: pourquoi utiliser un système d'inspection visuelle CNN sur un algorithme de correspondance de modèles?

Contexte: j'avais montré une démonstration d'un simple système de vision CNN (webcam + ordinateur portable) qui détectait si un type particulier d'objet était "cassé" / défectueux ou non - dans ce cas, une carte de circuit imprimé PCB. Mon modèle CNN a montré des exemples de circuits imprimés appropriés et cassés (environ 100 images de chacun) sur un fond statique. Notre modèle a utilisé les premières couches conv / maxpool de VGG16 pré-formé (sur imagenet), puis nous avons ajouté quelques convs / pools plus entraînables, avec quelques densités, conduisant à une sortie vectorielle codée à chaud dim-3 one pour la classification : (is_empty, has_good_product, has_defective_product).

Le modèle s'est entraîné assez facilement et a atteint 99% de validation sans problème; nous nous sommes également entraînés à diverses augmentations de données, car nous savons que notre ensemble de données était petit. En pratique, cela a fonctionné environ 9 fois sur 10, mais quelques traductions / rotations aléatoires de la même carte de circuit imprimé le mettaient parfois dans la classe opposée. Une augmentation plus agressive des données aurait peut-être aidé. Quoi qu'il en soit, pour un projet de concept prototype, nous étions heureux.

Maintenant, nous présentions à un autre ingénieur et à son collègue, et il a soulevé l'argument selon lequel les NN sont exagérés pour cela, devrait simplement utiliser la correspondance de modèles, pourquoi voudrait-on faire des CNN?

Nous n'avions pas une bonne réponse pour expliquer pourquoi notre approche pourrait être meilleure dans certaines applications (par exemple, d'autres pièces à inspecter). Quelques points que nous avons soulevés:

1) Plus robuste aux invariances (grâce, par exemple, à l'augmentation des données)

2) Peut faire un apprentissage en ligne pour améliorer le système (par exemple, l'homme peut dire au logiciel quels exemples il s'est trompé)

3) Pas besoin de fixer des seuils comme dans les algorithmes classiques de vision par ordinateur Que pensez-vous, y a-t-il plus d'avantages pour un système CNN pour ce type de tâche d'inspection? Dans quels cas serait-ce mieux que la correspondance de modèles?

Quelques idées plus aléatoires pour savoir quand les NN profonds pourraient être la technologie pour le travail: pour les systèmes qui nécessitent une détection de profondeur 3D dans le cadre de l'entrée, ou tout type d'objet qui peut être déformé / étiré / écrasé mais toujours "bon" et pas défectueux (par exemple un animal en peluche, des fils, etc.). Curieux d'entendre vos pensées :)

JDS
la source
J'aime les approches d'apprentissage en profondeur et je sais que c'est l'avenir. Cependant, lorsque vous avez besoin de résultats de haute précision, disons rotation exacte et échelle exacte, la correspondance du modèle donne toujours de meilleurs résultats. Je parle d'une erreur de 0,1 degré / facteur d'échelle ou moins. Le Deep Learning continue de vous donner une "probabilité" de ce qui est probablement le "meilleur" résultat, donc ce n'est pas suffisant quand une grande précision est requise. J'adorerais trouver un moyen d'obtenir une telle précision en utilisant le Deep Learning correspondance de modèles de haute précision à l'aide de l'apprentissage en profondeur. Je suis ouvert à toute opinion / suggestion ou
Pablo Gonzalez

Réponses:

3

L'ingénieur en question qui a proposé des méthodes CV traditionnelles pour votre application l'a simplement fait par habitude. L'utilisation de la mise en correspondance de modèles est extrêmement obsolète et s'est révélée très médiocre. Cependant, je pense qu'un CNN est exagéré en fonction de la taille de votre ensemble de données.

Comment fonctionne la correspondance des modèles?

La correspondance du modèle fait glisser une fenêtre sur votre image qui fournira une correspondance en pourcentage avec le modèle. Si le pourcentage de correspondance est supérieur à un certain seuil prédéfini, il est supposé qu'il s'agit d'une correspondance. Par exemple, si vous avez une image d'un chien et que vous souhaitez déterminer s'il y a un chien dans l'image, vous feriez glisser un modèle de chien sur toute la zone de l'image et voyez s'il existe un pourcentage de correspondance suffisamment important. Cela se traduira probablement par de très mauvaises performances car il nécessite que le modèle chevauche l'image de manière identique . Quelle est la probabilité de cela dans la pratique? Pas très élevé.

La seule correspondance de modèle de temps est une technique suffisante si vous savez exactement ce que vous recherchez et vous êtes sûr qu'il apparaîtra presque de manière identique dans chaque exemple d'une classe donnée.

Pourquoi utiliser l'apprentissage automatique à la place?

Les techniques d'apprentissage automatique ne sont pas rigides. Contrairement à ce que stmax a dit, les CNN peuvent très bien généraliser un ensemble de données . C'est pourquoi ils sont si puissants. En utilisant l'exemple du chien, le CNN n'a pas besoin de voir une photo de chaque chien existant pour comprendre ce qui constitue un chien. Vous pouvez lui montrer peut-être 1000 images à partir d'une recherche Google, puis l'algorithme pourra détecter que votre chien est en fait un chien. Le fait que les algorithmes d'apprentissage automatique se généralisent très bien est la raison pour laquelle ils ont remplacé toutes les anciennes techniques de CV. Maintenant, le problème est la quantité de données dont vous avez besoin pour former un CNN. Ils sont extrêmement gourmands en données .

Je ne pense pas que 100 points de données soient suffisants pour former un CNN robuste. En raison de la grande complexité du modèle afin de limiter le biais dont vous avez besoin pour augmenter votre nombre d'exemples. Je suggère généralement 100 exemples pour chaque fonctionnalité pour les modèles profonds et 10 exemples pour chaque fonctionnalité pour les modèles peu profonds. Tout dépend vraiment de votre espace de fonctionnalités.

Ce que je propose.

Ce que vous faites vraiment, c'est la détection des anomalies . Vous avez beaucoup d'exemples qui seront présentés de PCB qui sont par ailleurs en bon état. Vous voulez détecter ceux qui sont cassés. Ainsi, j'essaierais plutôt quelques méthodes de détection d'anomalies. Ils sont beaucoup plus simples à mettre en œuvre et vous pouvez obtenir de bons résultats en utilisant des modèles peu profonds, en particulier dans les ensembles de données asymétriques (1 classe est surreprésentée).

JahKnows
la source
Merci pour votre commentaire complet! Pouvez-vous fournir des exemples de projets ou d'articles qui expliquent (et éventuellement une démonstration) la détection d'anomalies? A bientôt
JDS
1
Voici une revue de la littérature sur la détection des anomalies V. Chandola, A. Banerjee et V. Kumar, «Anomaly detection: a survey», ACM Computing Surveys, vol. 41, non. 3, p. 15, 2009.
JahKnows
5

La réponse dépend de la tâche. La correspondance de modèles peut fonctionner pour certaines tâches mais pas pour toutes. Les CNN ont potentiellement la possibilité de généraliser à des entrées invisibles qui ne correspondent à aucun de vos modèles, donc peuvent potentiellement mieux se généraliser.

Mais si les CNN battront la correspondance des modèles, cela dépendra de la tâche spécifique et de ce que vous essayez d'atteindre. Il s'agit d'une science empirique; en fin de compte, la façon de découvrir ce qui fonctionne le mieux est de les essayer tous les deux - ou d'apprendre des autres qui les ont essayés (par exemple, en lisant la littérature). Je ne pense pas que vous allez trouver une théorie ou une taxonomie qui va remplacer une évaluation empirique sur des données réelles.

DW
la source
5

Un problème que vous pourriez rencontrer avec un NN (et d'autres méthodes de classification) est que, puisque vous ne lui avez montré que certains défauts, il pourrait ne pas savoir comment réagir à des défauts complètement nouveaux / encore invisibles qui pourraient apparaître à l'avenir.

Vous voulez que le NN apprenne "tout ce qui ne ressemble pas à un PCB non défectueux est un PCB défectueux". Mais que faire s'il a appris que "tout ce qui ne ressemble pas à un PCB défectueux est un PCB non défectueux"?

Vous pouvez essayer de modifier certaines images de PCB non défectueux en leur ajoutant un petit point blanc (ou une autre petite perturbation) à des emplacements aléatoires et demander au réseau de neurones de classer ces images modifiées. Cela devrait définitivement les classer comme défectueux, non? Mais il en manquera probablement certains (ou beaucoup) car il n'a jamais vu de tels défauts auparavant.

Pour détecter des défauts complètement nouveaux, les méthodes de détection d'anomalies / les classificateurs d'une classe peuvent être plus .. trustworty, car ils devraient ramasser tout ce qui n'a jamais été vu auparavant.

Comme l'a dit DW, vous allez juste devoir essayer les deux méthodes et trouver celle qui fonctionne le mieux. Assurez-vous simplement d'avoir un très bon ensemble de tests qui contient également des défauts complètement nouveaux!

stmax
la source