Version 3, last updated by fsavard at February 10, 2010 17:20 UTC
Déformations élastiques locales
La session dernière j'avais implémenté l'idée de "elastic distortions" dont il est question dans cette publication:
- Patrice Simard, David Steinkraus, John C. Platt: Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis. ICDAR 2003: 958-962
Voici des exemples avec complexité croissante:
http://www-etud.iro.umontreal.ca/~savardf/ift6266/complexity_tests/complexity.html
Maintenant la complexité détermine les paramètres alpha et sigma, donc pour une complexité donnée, alpha et sigma sont complètement déterminés (pas besoin de sauvegarder). Les champs sont aléatoires, par contre (voir plus bas, dans Performance).
Le code est dans le repository sous "transformations/local_elastic_distortions.py".
Performance
Côté performance, j'avais implémenté le tout avec des opérations d'indice matricielles pour accélérer la chose. Sur mon (vieux) laptop je peux déformer ~450 images/sec. Par contre ça réutilise des structures qu'on doit regénérer une fois de temps en temps pour rendre les déformations aléatoires (dit autrement, je réutilise un même "champ de déformation" plusieurs fois, pour accélérer).
La façon dont ça fonctionne, maintenant, c'est que comme la complexité ne change pas souvent, je génère une 50aine de champs quand la complexité change, ensuite je les réutilise aléatoirement (jusqu'à ce que la complexité change à nouveau). Ainsi la transformation est assez aléatoire malgré tout.
Vieux problème avec distortions (fixed)
Le downside c'est que ça génère pas de "belles" images nettes: les contours sont fuzzy, peu importe les settings que j'ai essayé. Ça peut être vu comme positif pour l'entraînement, un peu comme du "bruit de contour". Pour avoir des images bien nettes, les CAPTCHAs semblent plutôt utiliser du "warping" pour les déformations.
Ce problème est maintenant règlé. J'avais un bug assez important dans la façon dont j'avais implémenté ça avec des matrices. Les anciennes images d'exemples pour alpha/sigma ne sont plus valides, soit dit en passant.
-- François