Version 7, last updated by boulanni at June 03, 2010 01:44 UTC
UPDATE 2 juin
- MLP de Xavier Muller entraîné sur P07, avec softmax par contre
- Présentation HTML
- Comparer les 2 classifieurs côte à côte
- Bouton "Resample" pour retirer les éléments de transformation aléatoires (bruit gaussien, bruit poivre et sel, rature, background)
- Images de background. Un subset aléatoire de image_net de 100ko (56 images) a été incrusté dans le SWF
UPDATE 2 mai
- Classifieur SDA 3x1000 h.u entraîné sur P07 (tanh, sigmoïdes en sortie). Il me semble très robuste au contraste, au bruit et aux transformations. Il détecte bien quand le caractère est inclassable. Les non-linéarités des couches ne sont pas tanh mais bien (tanh+1)*2, ce qui fait que j'ai plutôt utilisé des sigmoïdes avec un ajustement des poids (x2) de la couche précédente. Il reste à ajouter un classifieur convolutionnel SDA dont il manque toujours les paramètres!
- Mode asynchrone. Le dessin et les transformations devraient être parfaitement fluides, la prédiction est exécutée dès que possible (environ à 10x par seconde sur ma machine).
- Ajouté un code de normalisation des images, i.e. le centre de masse est centré et le moment d'inertie est fixé à M x 56 pixels² en préservant les proportions. L'image normalisée peut être visualisée à droite. Pour éviter les probèmes dus à la polarité et au contraste, la luminosité effective d'un pixel est prise comme la valeur absolue de son écart avec la médiane des luminosités qu'on suppose la couleur du background. Il y a toujours un problème de scaling quand on ajoute du bruit gaussien ou poivre et sel, inévitable selon moi. La technique générale fonctionne tout de même assez bien.
- Ajouté l'option épaisseur du trait de dessin. TODO ajouter un code permettant de modifier l'épaisseur des traits déjà tracés, comme dans notre pipeline python.
UPDATE 25 avril
- Ajouté les transformations: Bruit poivre et sel, bruit gaussien, ratures, polarité et contraste
- Utilisation des sigmoïdes pour la détection avec MLP
TODO (cours 29 mars)
- Adapter pour la détection plutôt que la reconnaissance, softmax => sigmoides, réentraîner la dernière couche
- Prendre des snapshots à différentes positions/scales OU normaliser et centrer l'image (2e option = plus simple)
- Animations offline
UPDATE 28 mars
- Ajouté classifieur profond SDA de François
UPDATE
- Intégration du meilleur MLP de Xavier entraîné sur NIST pur
- Visualisation des 3 meilleures prédictions avec le degré de confiance
- Option d'assumer une lettre majuscule, minuscule, chiffre ou une combinaison de celles-ci
J'ai écrit un prototype de démo interactive web pour le cours à l'adresse suivante:
http://www-etud.iro.umontreal.ca/~boulanni/Test1.swf
Adobe Flash Player 10 est requis!
L'applet flash permet de dessiner des caractères, d'appliquer des transformations de base et de calculer la prédiction en temps réel, pour l'instant basée sur un vieux MLP avec 500 hu entraîné sur MNIST (seuls les chiffres vont fonctionner, peu robuste aux transformations et décentrage, etc.) ayant une erreur de test de ~2%. Le code de prédiction est écrit en C et compilé vers la machine virtuelle de Flash, et roule rapidement en ~0.03 s par prédiction sur ma machine. On peut voir la prédiction à mesure qu'on dessine et qu'on transforme.
On pourrait éventuellement y ajouter:
- D'autres classifieurs évidemment
- Autres transformations: épaisseur du trait, champs de transfo, background images, noise
- Banque d'images embeddées plutôt que de dessiner le caractère
Côté technique
L'application est un fichier MXML contenant du ActionScript qu'on compile à l'aide de Flex SDK >= 3.2 pour produire l'applet SWF. On doit configurer le Flex SDK pour targetter Flash version 10.
Le fichier C/C++ est compilé par Adobe Alchemy pour produire une librairie mlp.swc liée au reste de l'application Flex. Supprimer les commandes d'optimisations (i.e. -O3 => -O0) qui produisent des erreurs.
Adobe Flex Builder (optionnel) est gratuit sous linux, et la version commerciale sous Windows (design de l'UI) est gratuite aussi avec la preuve de statut étudiant, académique, etc.
L es matrices de paramètres sont des fichiers binaires de float32 qu'on peut embedder puis lire avec des bytearray (little endian) dans AS3, et qu'on passe ensuite aux routines C.
Performance de Alchemy? http://music.ece.drexel.edu/research/MMSP2009