7
votes

OpenCV TrainCascade pour la formation LBP

J'essaie de créer un détecteur de tête à l'aide de fonctionnalités LBP dans OpenCV, à l'aide de l'utilitaire TrainCascade. J'espère que le détecteur de tête, j'espère que quelque chose de similaire à la profil de l'OpenCV créé par Vladim Pivarevsky. Je veux recréer le modèle car le modèle actuel ne gère que la face latérale frontale et gauche.

Je suis Tutoriel de SEO Naotoshi et utilisez un jeu de données de site Web Irshad Ali . Malheureusement, le modèle résultant fonctionne lentement avec beaucoup de fausse détection.

Le trainCascade est exécuté comme suit: xxx

J'ai essayé d'utiliser un autre jeu de données, maintenant la face frontale de http://fei.edu.br/~cet/facedatabase.html Mais le résultat est toujours identique : Détection lente et beaucoup de faux positifs.

Quelqu'un a-t-il des connaissances ou une expérience dans la création de modèles Cascade Haar / LBP? S'il vous plaît donner une suggestion afin que je puisse améliorer la précision du modèle. J'ai essayé d'utiliser le modèle intégré OpenCV et le résultat est bon (lbpfrontalface.xml). Merci beaucoup!


0 commentaires

4 Réponses :


1
votes

Il sera lent, relativement tel qu'il commence à 20x20 et recherchera l'image entière, il devient légèrement plus gros, cherche à nouveau, etc. - essayez d'augmenter votre taille d'échantillon pour réduire le temps nécessaire à l'exécution.

J'ai également remarqué que vous n'avez pas n'importe où près de nombreuses images BG que positives. Essayez d'augmenter qu'au moins de la même chose que votre positif et que cela devrait aider.

Je suggère également de craquer les fonctionnalités de Haar et de voir si cela vous donne des résultats.

Tout le reste semble bien sans regarder vos données d'entrée


0 commentaires

3
votes

Le meilleur moyen est "Essai et erreur" ... Vous avez vraiment besoin de visages différents, et la plus grande différence est meilleure. Vous pouvez prendre un visage et via des éemples de cadeaux font de nombreux visages. Mais de cette façon, vous n'avez jamais de bonne cascade. Vous devriez avoir de nombreux visages différents et, s'ils ne suffiront pas, vous pouvez les augmenter à travers des éemples. Par exemple, vous disposez de 500 visages différents en créatifs que vous pouvez faire avec eux 5000, puis Cascade vous satisfera.

À propos de commencer la formation: beaucoup positif :) ou trop peu négatif. Vous avez besoin d'exemple 5000 POS et 2500 NEG (POS = 2 * NEG). Au moins dans mon cas, c'était le meilleur choix.


7 commentaires

J'ai essayé votre suggestion, 12000 positifs et 5000 négatifs. Les positifs créés à partir de 2000 face, en utilisant des échantillons pour le faire à 12 000. Mais toujours, trop de faux positifs. Pouvez-vous me donner l'exemple de votre paramètre de traincascade de travail? Mon paramètre est la suivante: opencv_traincascade -data "Data" -vec "Samples.vec" -bg "Out_negatives.dat" -numpos 10000 -Numneg 5600 -Numstages 16 -EuTureType LBP -W 20 -H 20 -Minhitrate 0.995 -MAXFAleAmarmrate 0.5 -Leighttrimrate 0.95 -MaxDepth 1 -MaxWeakCount 100 -MaxCatcount 256 -Effeetsize 1


Si vous avez des "visages" fausses et true aussi, je peux vous recommander d'essayer d'augmenter les numéros. Sinon quelque chose qui ne va pas dans votre positif. Mes paramètres sont "-Data h_data -vec Vecs / Vec -BG BG / Négative.txt -Numpos 5000 -numneg 2500 -Numstages 14 -EuTureType Haar -Minhitrate 0.999 -MAXFAserAmrate 0,3 -w 14 -H 24" Mais je forme cascade pour bouteilles (J'ai aussi formé LBP mais Haar était meilleur). Aussi, vous devriez lire Ceci . C'est la bonne réponse que j'ai vue.


Merci! Maintenant, les faux positifs ont diminué à ---> 0, je change le 0MaxfaleAlarMrate à 0,1 et MakweakCount 300. Un problème cependant, reste la vitesse. Maintenant, je vais essayer @gppk réponse sur l'augmentation de la taille de l'échantillon. Bien que, parce que j'utilise .mergevecteur de Sonots pour un vecteur positif, je semble être incapable d'utiliser une autre taille THA 20x20. Qu'est-ce que vous utilisez pour créer le vecteur positif?


J'utilise des créneauxemples. Il peut créer VEC comme "-num 5456 -bg bg / négatif.txt -Vec Vecs / Vec -Info échantillons / info.txt -MaxXangle 0,1 -MaxyBille 0,1 -MAXZangle 0.1 -MAxidev 30 -BGColor 255 -BGTHESH 0 -W 14 - h 24 ". Mais dans les visages 20x20 est normal, le visage est carré plutôt qu'un rectangle (bouteilles dans mon cas). Bonne chance. Lorsque vous aurez le résultat, partagez votre expérience :)


@Mcbodik, avez-vous le XML? Pourriez-vous partager cela avec nous?


@MCBODIK Comment formez-vous votre cascade? Je veux créer une cascade pour une bouteille, alors j'ai besoin de beaucoup d'image positive? Parce que la forme de la bouteille ne change pas.


@dcorbatta j'ai été formé XML pour la marque de bouteilles. Mes tentatives pour former Cascade pour les bouteilles n'avaient pas si de succès, mais d'une manière ou d'une autre. Mais c'était il y a trop longtemps, alors je ne peux pas le trouver :(



2
votes

En bref, il est normal d'obtenir beaucoup de faux positifs après l'étape 1 de la modélisation. Vous devez prendre ces faux positifs et les ajouter à l'ensemble de données négatifs et répéter la modélisation (étape 2). Ceci est appelé minier négatif dur. C'est essentiel. Vous pouvez multiplier les faux négatifs en les faisant pivoter progressivement à 360 degrés.

Trois autres points importants: 1) OpenCV_Creatsemples est mauvais pour les visages; 2) utiliser des négatifs qui sont difficiles (appropriés); 3) LBP est deuxième taux dans de nombreux contextes.

  1. Visages sont assez symétriques et ne présentez jamais un trapèze comme une distorsion dans une fois photographiée. Utilisez de très petits angles si vous le devez, comme 0,02 radians. En outre, vous trouverez lorsque vous examinez les images du fichier .vec que le plan d'arrière-plan remplir autour des bords déformés a l'air assez non naturel.

  2. Non seulement le nombre de négatifs est important, mais la qualité des négatifs est importante. Les visages sont lisses comparées à de nombreuses images négatives (arbres, montagnes rocheuses, etc.), il est donc relativement facile de distinguer une face d'un pin à distance. Cependant, vous obtiendrez beaucoup de faux positifs de surfaces lisses comme des murs. Il est préférable d'inclure des images difficiles dans l'ensemble de données négatifs. J'ai constaté que les meilleures images étaient des images de murs de plâtre peints en douceur. Prenez une vidéo tandis que vous marchez sur des murs, utilisez FFMPEG pour la couper dans un tas d'images. Encore une fois, vous pouvez multiplier ces négatifs en les faisant pivoter progressivement à 360 degrés, puis retournez et tournez à nouveau.

  3. soyez patient, utilisez haar pas LBP.

    AI est toute la rage maintenant, il suffit de diviser 100 000 images non cruches dans des dossiers pour les classes correspondantes et commencez à former votre modèle. Cependant, vous trouverez peut-être que cette approche ne reçoit que 98-99% du taux de classification correct. Beaucoup trop de faux positifs. Vous obtiendrez de meilleurs résultats avec beaucoup moins de données faisant ce que j'ai dit ci-dessus (en utilisant des cascades Haar ou des filets neurones). Il s'agit du travail scientifique de données réel: Sélection astucieuse des jeux de données négatifs et positifs et du travail fastidieux dans la définition des boîtiers de limites.


0 commentaires

0
votes

Pour quelqu'un de lytillage avec des positifs fluides. Jetez un coup d'œil au fichier TrainCascade / Imagestorage.cpp , en classe CVCASCADEIMAGEREADER :: NEGREADER ET MÉTHODES GET ET NEXTIMG

Je dois réécrire la logique de prendre des échantillons négatifs. Lorsque des négatifs mous sont générés, ils sont coupés avec la mise à l'échelle de l'image de fond à l'étape de la mode de la mode dans la mise en œuvre d'origine. Dans mon cas, les échantillons de fond doivent être uniquement aléatoirement coupés de crevènes à l'aide de la taille de la fenêtre / de la taille du train.

Dans mon cas, on dirait à cause de la mise à l'échelle de plus grandes portions d'échantillons souples dans une petite fenêtre, une formation a été arrêtée tôt car elle a toujours briller des échantillons négatifs et une loi passée contrairement aux véritables images détectées avec Cascade plus tard


1 commentaires

D'ailleurs. La réclamation sur les aléatoires des échantillons de négation en lien ci-dessous est faussive. Il n'y a pas de pick-up aléatoire, une rabattation déterministe complète d'un ensemble. "3.Le numneg [..] Ils sont choisis de manière aléatoire (recadré et à l'échelle des images négatives)" réponses.opencv.org/Question/22964/...