SETIT2009
Où NbrI : Le nombre d’image à traiter
NbrE : Le nombre d’étage
NbrM : Le nombre de masque
Donc
Le nombre d’opérations = (nombre d’addition +
Nbr_test) x NbrI x NbrE x NbrM
On peut conclure que l’algorithme de détection a
une complexité exponentielle.
1ère Conclusion
Après l’étude des deux phases de l’algorithme on
peut conclure que :
• La vitesse du détecteur est directement liée
au nombre de motifs
• Pour augmenter la vitesse de traitement on
peut ajuster deux paramètres de
l’algorithme, le nombre de Motif et le
nombre d’étapes de l’algorithme de
détection mais dans ce cas on peut
influencer le taux de détection, pour cela on
s’est orienté vers l’optimisation de
l’implémentation de l’algorithme de
détection.
5. Optimisations globales
Nous avons optimisé le code de l’algorithme de
détection en utilisant les techniques suivantes:
• Réécriture du code et des bibliothèques
associées.
• Réduction de la taille des données
• Changement des structures de données :
L’utilisation des listes chaînée donne une
complexité en O(1). Toutefois, en pratique,
il est plus efficace d’utiliser des tableaux
générés dynamiquement avec calloc() ou
new(). La complexité théorique reste la
même mais on alloue toute la mémoire
nécessaire en une fois. De plus, il y a moins
d’informations supplémentaires à stocker
comme les pointeurs vers le maillon suivant
et on s’assure de la compacité des données
en mémoire. Comme on lit les données de
manière linéaire, le processeur peut charger
à l’avance les données suivantes.
Grâce au profileur, nous avons vu que 91% du
temps de calcul est passé dans la fonction Motif, qui
applique un motif sur l’image. C’est donc la fonction
à optimiser en priorité.
Pour optimiser l’algorithme on applique les
points cités en 6. (Réécriture du code, réduction de la
taille des données, changement des structures de
données)
Le tableau 2 donne l’optimisation du temps passé
dans les 3 fonctions les plus coûteuses du
programme.
Tableau 2 : optimisation du temps d’exécution
Nom d la fonction Temps en
milliseconde
Motif 230
Etape 132
Détect 2
Les résultats obtenus sont nettement meilleurs, à
comparer avec les calculs du temps d’exécution
donné par le tableau 1. Nous avons obtenu un temps
d’exécution total des fonctions les plus coûteuses de
l’algorithme de l’ordre de 364 millisecondes, au lieu
de 987 millisecondes mésuser avant l’optimisation.
Touts les tests sont effectués sur un processeur
Pentium IV cadencé à 2.0 GHz et équipé de 2.00
Gigaoctet de RAM, avec des images de tailles
320x240 pixels, nous atteignons des vitesses de
l’ordre de 20 à 24 images par seconde.
6. Conclusion
En exploitant pleinement les possibilités du
processeur et en modifiant légèrement les
algorithmes utilisés, nous avons réussi à multiplier
les performances globale de l’algorithme par trois, et
ce, sans changer les performances en termes de
qualité de détection. Ce gain est exceptionnel pour
une optimisation qui ne dégrade pas la qualité. De
plus la majorité de ces optimisations sont adaptables
à toutes les architectures de processeurs.
A l’aide d’une caméra basse résolution associée à
un processeur d’entrée de gamme, en atteignant des
vitesses de 20 à 24 image/seconde, il est désormais
possible de détecter instantanément tous les visages
des personnes qui passent devant la caméra.
7. Travail futur et perspectives
Avec le Pentium Pro, d’Intel qui a introduit la
possibilité d’exécuter des instructions dans le
désordre (Out Of Order), nous espérons atteindre une
cadence de 25 à 30 images/secondes
Références
[ABD 97] H. Abdi, D. Valentin and A. O'Toole, A
generalized auto-associator model for face semantic
process, In Optimization and neural network, edité par
D.Levine (Erlbaum, Hillsdale), 1997.
[DEN 06] François DENIS et Rémi GILLERON,
Technique de boosting en apprentissage automatique,
équipe Grappa, http://www.univ-lille3.fr, LIFL,
Universités Lille 1 & 3, 2006
[DUM 05] Emilie Dumont, Liva Ralaivola, Adaboost
régularisé et tolérance aux bruit , Laboratoire