haar training L’assertion OpenCV a échoué

J’essaie de former un classifieur semblable à un haar pour les piétons en OpenCV en utilisant 3340 images positives et 1224 images négatives. (Dans un fichier .txt, je conserve les noms d’image négatifs, c’est-à-dire négatifs (1) .bmp, et dans un fichier txt, je conserve les positifs, c’est-à-dire picture (1) .bmp 1 0 0 64 128. Les exemples positifs sont déjà des images recadrées les piétons, je n’ai donc besoin que de spécifier un échantillon positif par image).

Au cours du processus de formation, il s’arrête et indique:

“Erreur d’openv: l’assertion a échoué (éléments_read == 1) dans une fonction inconnue, fichier c: \ chemin \ cvhaartraining.cpp, ligne 1858”

Des idées quant à ce qui cause ceci?

Ce problème a été résolu par le créateur de l’utilitaire sur le site OpenCV DevZone en juin 2012.

Pour citer Maria:

Le problème est que votre fichier vec a exactement le même nombre d’échantillons que celui que vous avez passé dans la ligne de commande -numPos 979. L’application de formation utilisait tous les échantillons du fichier vec pour entraîner 0-stage et ne pouvait pas obtenir de nouveaux échantillons positifs pour la prochaine Stage de formation car vec-file est terminé. Le problème de traincascade est qu’il avait assert () dans de tels cas, mais il doit émettre une exception avec un message d’erreur pour un utilisateur. Il a été corrigé dans r8913. -numPose est un nombre d’échantillons utilisé pour entraîner chaque étape. Certains échantillons déjà utilisés peuvent être filtrés par chaque étape précédente (c’est-à-dire reconnus comme arrière-plan), mais pas plus de (1 – minHitRate) * numPose sur chaque étape. Ainsi, vec-file doit contenir> = (numPose + (numStages-1) * (1 – minHitRate) * numPose) + S, où S est le nombre d’échantillons de vec-file pouvant être reconnus immédiatement en arrière-plan. J’espère que cela pourra vous aider à créer un fichier vec de taille correcte et à choisir la bonne valeur numPos.

Cela a fonctionné pour moi. J’ai également eu le même problème, je suivais le célèbre tutoriel sur la formation HAAR, mais je voulais essayer le nouvel utilitaire de formation avec -npos 7000 -nneg 2973.

donc j’ai fait les calculs suivants:

Le fichier vec doit contenir> = (numPos + (numStages-1) * (1 – minHitRate) * numPos) + S

7000> = (numPos + (20-1) * (1 – 0,999) * numPos) + 2973

(7000 – 2973) / (1 + 19 * 0.001)> = numPos

numPos <= 4027 / 1.019

numPos <= 3951 ~~ 3950

et utilisé:

-npos 3950 -nneg 2973

Ça marche. J’ai aussi remarqué que d’autres avaient également réussi à réduire le nombre de numPos: ici