annotate data_generation/transformations/DistorsionGauss.py @ 266:1e4e60ddadb1

Merge. Ah, et dans le dernier commit, j'avais oublié de mentionner que j'ai ajouté du code pour gérer l'isolation de différents clones pour rouler des expériences et modifier le code en même temps.
author fsavard
date Fri, 19 Mar 2010 10:56:16 -0400
parents 1f5937e9e530
children
rev   line source
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
3
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
4 '''
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
5 Ajout d'une composante aleatoire dans chaque pixel de l'image.
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
6 C'est une distorsion gaussienne de moyenne 0 et d'écart type complexity/10
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
7
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
8 Il y a 30% d'effectuer le bruitage
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
9
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
10 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
11
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
12 '''
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
13
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
14 import numpy
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
15 import random
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
16
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
17 class DistorsionGauss():
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
18
150
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
19 def __init__(self,seed=3459):
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20 self.ecart_type=0.1 #L'ecart type de la gaussienne
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
21 self.effectuer=1 #1=on effectue et 0=rien faire
150
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
22 self.seed=seed
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
23
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
24 #Les deux generateurs sont de types differents, avoir la meme seed n'a pas d'influence
155
7640cb31cf1f Enlevé les re-seed constants, interfère avec les autres modules
boulanni <nicolas_boulanger@hotmail.com>
parents: 150
diff changeset
25 #numpy.random.seed(self.seed)
7640cb31cf1f Enlevé les re-seed constants, interfère avec les autres modules
boulanni <nicolas_boulanger@hotmail.com>
parents: 150
diff changeset
26 #random.seed(self.seed)
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
27
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28 def get_settings_names(self):
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
29 return ['effectuer']
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
30
150
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
31 def get_seed(self):
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
32 return self.seed
8008f4d31869 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 117
diff changeset
33
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
34 def get_settings_names_determined_by_complexity(self,complexity):
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
35 return ['ecart_type']
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
36
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
37 def regenerate_parameters(self, complexity):
117
c9d680d9a908 changed again the variance scaling for Distorsion Gauss, come back to the original
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 112
diff changeset
38 self.ecart_type=float(complexity)/10
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
39 self.effectuer =numpy.random.binomial(1,0.3) ##### On a 30% de faire un bruit #####
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
40 return self._get_current_parameters()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
41
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
42 def _get_current_parameters(self):
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
43 return [self.effectuer]
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
44
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
45 def get_parameters_determined_by_complexity(self,complexity):
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
46 return [float(complexity)/10]
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
48 def transform_image(self, image):
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
49 if self.effectuer == 0:
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
50 return image
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
51
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
52 image=image.reshape(1024,1)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
53 aleatoire=numpy.zeros((1024,1)).astype('float32')
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
54 for i in xrange(0,1024):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
55 aleatoire[i]=float(random.gauss(0,self.ecart_type))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
56 image=image+aleatoire
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
57
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
58
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
59 #Ramener tout entre 0 et 1. Ancienne facon de normaliser.
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
60 #Resultats moins interessant je trouve.
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
61 ## if numpy.min(image) < 0:
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
62 ## image-=numpy.min(image)
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
63 ## if numpy.max(image) > 1:
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
64 ## image/=numpy.max(image)
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
65
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
66 for i in xrange(0,1024):
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
67 image[i]=min(1,max(0,image[i]))
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
68
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
69 return image.reshape(32,32)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
70
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
71
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
72 #---TESTS---
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
73
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74 def _load_image():
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
76 d = ft.read(f)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
77 w=numpy.asarray(d[random.randint(0,100)])
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
78 return (w/255.0).astype('float')
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
79
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
80 def _test(complexite):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
81 img=_load_image()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
82 transfo = DistorsionGauss()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
83 pylab.imshow(img.reshape((32,32)))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
84 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
85 print transfo.get_settings_names()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
86 print transfo.regenerate_parameters(complexite)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
87
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
88 img_trans=transfo.transform_image(img)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
89
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
90 pylab.imshow(img_trans.reshape((32,32)))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
91 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
92
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
93
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
94 if __name__ == '__main__':
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
95 from pylearn.io import filetensor as ft
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
96 import pylab
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
97 for i in xrange(0,5):
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
98 _test(0.5)
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
99
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
100