Deep Learning, premier essai

25 mars 2018

Ouch… dernier post en 2014… Pas sûr que je reprenne l’écriture sur ce blog de façon continue pour autant.

Entre-temps, beaucoup de choses se sont produites. A titre perso, mais ça tout le monde s’en moque (oui, maintenant je peux dire que je connais un peu mieux les métiers du bâtiment). Dans le vaste monde, mais d’autres en parlent mieux que moi. Les choses du vaste monde qui m’affectent vous affectent aussi peut-être, alors parlons-en.

Je me suis mis au deep learning. Deux lectures:

- 1 le “Bengio”, particulièrement aride, parfait pour un étudiant ou un chercheur. Violent pour mes petits neurones (biologiques, ceux-là) et qui réveille des vieux souvenirs de prépa.

bengio_dl

- 2 Le “Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems” (titre un peu long). Orienté ingéniérie et pratique avec TensorFlow.

ml-tensor

Donc, après 3 mois de lutte acharnée avec le premier (auto-formation le matin de 7h à 8h) , et gobage du second en 3 mois, je me suis lancé à faire un projet perso. Objectif simple pour commencer: détecter et lire des étiquettes de supermarché sur une photo de rayon.

En 2 parties:

1/ détection de la position des étiquettes, avec une heatmap.
2/ lecture des étiquettes.

Aujourd’hui, j’estime que la partie dure de la première partie est finie.

Pour ça:
- Séance photo dans le E.Leclerc du coin, en mitraillant avec le téléphone planqué sous le manteau. (2h)
- Prise en main de tensorflow en python, heureusement que j’avais déjà des notions. (2 mois), apprentissage sur MNIST.
- Ecriture d’un modèle à l’arrache (1 semaine)
- Annotation des images (4h). Gasp, j’aurais peut-être pu utiliser un auto-encodeur. Trop tard…
- Résolution des problèmes, dans le sens des plus triviaux qui n’ont parfois rien à voir (tag exif d’orientation dans le JPEG, virgule oubliée à la fin d’une ligne python,…), aux plus complexes (bug de tensorflow sur tf.squeeze(axis)), 1 semaine
- Laisser la machine faire son travail, superviser l’apprentissage (2j)
- Prendre du plaisir devant le résultat (ça n’a pas de prix)

Le résultat:


deep_learning

De gauche à droite:

- imagette de la photo, l’original est en 800×600, là on distingue à peine les étiquettes
- cible annotée, en 80×60. C’est le résultat vers lequel la machine doit converger.
- heatmap, en probablité. Plus c’est blanc, plus le pixel a de chances d’appartenir à une étiquette. C’est donc le passage d’une image réelle après passage au travers de mon réseau de neurones profonds, une fois l’apprentissage effectué.
- Résultat précédent seuillé à 65%. Idéalement ca devrait être 50%, mais il y a encore trop de faux-positifs. Cette imagette doit ressembler à la version annotée, là ça me semble correct.

Morale de l’histoire pour le moment:
- Ce n’est pas si compliqué qu’il y parait, à mitiger aussi parce que j’étais à fond.
- Il y a beaucoup de fantasmes autour de ces techniques. NON, on n’a pas encore construit Skynet.
- On en est encore à faire de l’artisanat pour trouver les couches et les paramétrages.
- La puissance machine compte beaucoup. Le passage sur GPU ne vaut pas le coup avec une carte de milieu de gamme: j’obtiens le même temps entre mon core i5 et une GeForce 610. Vu que les GeForce 1070ti ou 1080 sont hors de prix et comptent le rester à cause des crypto-monnaies, je vais opter pour un CPU gonflé aux stéroïdes (et avec beaucoup, beaucoup, vraiment beaucoup plus de RAM…)
- Il faut faire preuve de créativité pour deboguer le bouzin.
- Les étiquettes de supermarché sont formatées n’importe comment. Sur ce seul magasin, 3 formats différents. Et c’est sans compter les étiquettes erronées (prix négatif) ou arrachées, etc… Quand on n’y fait pas attention, on ne s’en aperçoit pas, mais en regardant de plus près, je me dis que ca ressemble à une grande foire !

Ce qu’il faudrait améliorer:
- utiliser les outils de debug (tfdbg) et suivi de convergence de tensorflow (tensorboard)
- avoir une échantillon de validation (OMG ! Grosse erreur de nOOb de valider visuellement avec l’échantillon d’apprentissage !!!)
- Faire la seconde étape, lecture du contenu de l’étiquette…

Les Visiteurs, version française de Retour vers le Futur

21 juin 2014

Petite réflexion personnelle du moment. “Les Visiteurs” et “Retour vers le Futur” sont en fait les versions françaises et américaines du même scénario.

Vous me direz: “bah oui, ça parle de voyage dans le temps !”. Et pourtant non, les deux films ne parlent pas de voyage dans le temps, et c’est même ce qui en fait tout l’intérêt :le voyage dans le temps n’est qu’un moyen, pas une fin.

Les deux films sont en réalité des histoires de familles dans leur temps.  Coté français, l’histoire d’un chevalier et d’un gueux qui croisent leurs descendants devenus respectivement aristocrates déchus et arriviste arrogant. Finalement, le moyen-age parle bien à l’imaginaire des français. Et on voit également que la France n’a jamais vraiment réussi à enterrer son aristocratie.

Côté américain, difficile de remonter avant le 15ième siècle. Les années 60s, vues comme une époque bénie, au début de la création des états-unis modernes.

Dans les deux cas, l’histoire de personnage projetés par erreur dans une époque qui n’est pas la leur, qui croisent des personnages issues de la même lignée (dans le passé ou le futur), qui partagent les mêmes valeurs, les mêmes personnalités, les mêmes défauts.

Finalement, la famille est un sujet toujours efficace dans un scénario !

GWT 2.5 et les enums

9 novembre 2013

GWT 2.5 a du modifier sa manière de sérialiser les enums, ce qui provoque des erreurs incompréhensibles du type:

An IncompatibleRemoteServiceException was thrown while processing this call.

Après avoir passé des soirées à chercher une solution, je peux dire que tout ça ne fonctionne pas:

  1. Nettoyer le cache du browser
  2. Clean du code dans eclipse
  3. Créer un construction vide public de l’enum
  4. Lui rajouter IsSerializable
  5. … Serializable
  6. Effacer les répertoires war/bla
  7. Effacer les répertoire unitCacheblablab

Le seul post intéressant que j’ai trouvé:

http://code.google.com/p/google-web-toolkit/issues/detail?id=7836

Workaround: hériter de

com.google.gwt.user.RemoteServiceObfuscateTypeNames

Autant faire la pub de cette “solution”, vu le nombre de propositions qui trainent sur le web.

pensée du jour

6 août 2012

“Quand un agent immobilier dit ‘bonjour’, il ment déjà”

pensée du jour

5 août 2012

“Ce qui est bien avec le temporaire, c’est qu’il s’installe facilement et dure longtemps”

pensée du jour

29 juillet 2012

“Tu réalises que tu déménages quand y’a plus de magazine dans les toilettes”

L’heure du bilan

12 avril 2012

L’ère de la frituration est terminée pour 3 bonnes raisons:

  1. Manon
  2. Charlotte
  3. Ma Laguna 2.2TD “Limited Moules-Frites Edition” a mouru

(dans cet ordre d’apparition :o) )

J’arrête donc de mettre des fleurs dans mon réservoir, et je dresse le bilan de ces 4 années de roulage exotique.

Le côté écologique

Avant même de parler d’autre chose, mettons les points sur les “i”. Rouler à l’huile de friture est peut-être écologique, mais ce n’était pas la raison première pour laquelle j’ai tenté l’expérience. N’en déplaise aux bobos qui par ailleurs partent 3 fois par an en vacances 1 semaine à l’autre bout du monde, je m’en tamponne d’émettre moins de CO².

Le bilan carbone est bon, cependant. De plus je ne rentrais pas en concurrence avec la production de nourriture. Donc c’est moralement positif, ce qui est le plus important à mon avis.

Par-contre, l’émission de particules nocives, telle que le CO (monoxyde de carbone) est réelle, du coup je relativise mon impact positif. J’aurais pû faire recaler mon injection pour régler ce problème, mais je ne l’ai pas fait, simlement parce que je voulais pouvoir revenir au gasoil à n’importe quel moment.

Emmener jusqu’à la casse un véhicule qui a déjà bien servi est aussi une grande satisfaction personnelle (message personnel aux mêmes bobos qui changent de voitures tous les 3 ans).

Par-contre, la Laguna 1 est une abomination écologique: ce truc consomme 1L de plus sur autoroute que ma R19 qui avait 8 ans de plus, et énormément plus sur les petits trajets.

Le côté financier

Voilà la première raison qui m’a fait passer à la frite. Là, c’est déjà moins gagné. Je pense que sur le long terme (au moins 1 an), on sort gagnant. En-dessous, c’est moins sûr. Et si j’intègre dans l’équation le temps que j’y ai passé, je suis clairement perdant. Ca dépend de la valeur qu’on accorde au temps passé à bricoler sa voiture.

Parmi les dépenses:

  1. Toutes les pièces utilisées pour réaliser le montage: 2 réchauffeurs, 2 électro-vannes, différents composants électriques dont des relais et un relais temporisé, 1 réservoir fabrication maison, …
  2. Des bidons de récupération, des entonnoirs
  3. Une pompe à huile manuelle (!!!)
  4. 1 abri de jardin d’occasion
  5. Des poubelles 1er prix, matériel de filtration de piscine, raccords …
  6. Une Estafette :-))

Ca commence à chiffrer sévère, même si toutes ces dépenses n’étaient pas nécessaires, loin de là.

Parmi les points positifs, celui de rouler avec une voiture d’occasion assez ancienne, ce qui permet de limiter le cout à l’achat du véihcule. Mais si c’est contre-balancé par le fait qu’elle tombe plus souvent en panne, … ca reste discutable !
Le côté bricolo

Là, c’est déjà plus sympa. J’ai jamais autant appris la mécanique qu’en mettant “les mains dans le cambouis”. Et il m’est arrivé de faire des comparaisons surprenantes avec l’informatique:par exemple, une pompe à injection supporte mal le refactoring. Quand c’est cassé, c’est vraiment cassé, pas moyen de faire CTRL-Z…=:-) Et finalement, les informaticients font parfois des choses plus propres et plus simples que dans d’autres corps d’ingénièrie.

Le côté “punk

Je ne vais pas m’en cacher: j’ai aimé l’idée de rouler de façon complètement différente de ce que fait le quidam moyen, et de répandre une odeur de frites là ou ca sent bon le bien-pensant renfermé.

Aller chez un pisciniste (haut-lieu de bobofication) pour demander un filtre à piscine de 1 um et répondre “Mais j’ai pas de piscine !” à la question “vous avez quoi comme type de piscine ?”, c’est particulièrement jouissif.

Voir le regard surpris (… c’est peu dire) d’un gardien d’immeuble Monnet-Decroix à qui on dit qu’on stocke des bidons d’huile de friture et qui demande si on mange autant de frites que ça, on ne s’en est pas remis avec Aurélie.

Mettre un bon gros coup d’accèlérateur en passant à côté des douanes, c’est à la limite du vice, et c’est bon.

Très bon…

22 février 2012

kitesurfer-what-i-think-i-do.jpg

Ubuntu Unity

9 février 2012

Ha ! La nouvelle version d’Ubuntu est sublime, avec transparence, menus intelligents, et j’en passe. On dirait presque un Windows 7 !

….

….

Bon, si comme moi, cette interface vous hérisse les poils sur la nuque, il y a moyen de la dégager vite-fait. Pour cela, installer Gnome Classic, et virer le paquetage unity. A la connexion, choisir Gnome Classic. Au passage, virer Ubuntu One: être prisonnier d’un cloud, non merci.

Seconde astuce du jour: pour virer un lanceur d’application dans le menu du haut, faire alt+click droit sur l’icône de l’application. Un menu apparaît qui propose de supprimer le raccourci. C’est loin d’être intuitif.

Sauvegarde pas cher

5 février 2012

Vous avez:

  • Des données personnelles à sauvegarder ?
  • Un Linux ?
  • Une freebox ?
#!/bin/bash
val=`mount | grep SAVE`
if [ "$val" = "" ]

then

mkdir /SAVE

mount -t cifs "//mafreebox.freebox.fr/Disque dur" /SAVE -o guest,iocharset=utf8,file_mode=0777,dir_mode=0777

result=$?

if [ "$result" != "0" ]

then

echo "Can't mount"

exit 1

fi

fi

mkdir /SAVE/rsync

rsync -rltgoDv --del --ignore-errors --force /home/ /SAVE/rsync/

Reste à rajouter ça quelque part en crontab et la sauvegarde est faite.

Les (le ?) sysadmins qui liront cette entrée de blog apprécieront particulièrement le style cracra du script, les tests d’erreurs et autres.

Mais mieux vaut une sauvegarde, même limitée, que rien du tout, non ?

Quelques remarques:

  • Le nom d’hôte “mafreebox.freebox.fr” est générique et pointe vers la bonne freebox.
  • Les attributs de fichiers ne sont pas sauvegardés, ce qui bien souvent n’est pas un problème; en général, on est déjà content de retrouver tous ses fichiers.