Bonjour,
Dans le cadre d'un script d'entraînement d'un CNN, je souhaiteras appliquer une fonction de prétraitement personnalisée en utilisant la classe ImageDataGenerator de Keras.
Après avoir créé 2 instances de type ImageDataGenerator dans lesquelles je fais appel à cette fonction de prétraitement personnalisée appelée "N4" via un paramètre à passer lors de l'instanciation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 # data Augmentation train_datagen = ImageDataGenerator( #preprocessing_function=preprocess_input, preprocessing_function=N4, # CLAHE_fct # preprocess_input, width_shift_range=0.4, shear_range=0.2,# dans train-ai.py shear_range=0.4, zoom_range=0.1,# dans train-ai.py zoom_range=0.4 #rotation_range=random.randrange(-25, 25, 2),# dans train-ai.py pas de rotation_range horizontal_flip=True, vertical_flip=True )la fonction de prétraitement personnalisée est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 # data Augmentation valid_datagen = ImageDataGenerator( #preprocessing_function=preprocess_input, preprocessing_function=N4, #CLAHE_fct # preprocess_input, width_shift_range=0.4, shear_range=0.2,# dans train-ai.py shear_range=0.4, zoom_range=0.1,# dans train-ai.py zoom_range=0.4 #rotation_range=random.randrange(-25, 25, 2),# dans train-ai.py pas de rotation_range horizontal_flip=True, vertical_flip=True )
Et voici le message d'erreur retourné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 def N4(img): print("N4 bias correction runs.") inputImage = img print("Affectation & affichage du type de img au sortir de ImageDataGenerator et en entrée de la fonction N4 : ") imgType = img.dtype print("img est de Type : ") print(imgType) my_inputImage_float32 = img my_inputImage_unint8 = tf.cast(my_inputImage_float32, dtype=tf.uint8) print("Affectation & affichage du type de my_inputImage_unint8 avant d_etre traitee par la fonction N4 : ") my_inputImage_unint8Type = my_inputImage_unint8.dtype print("my_inputImage_unint8 est de Type : ") print(my_inputImage_unint8Type) maskImage = sitk.OtsuThreshold(my_inputImage_unint8, 0, 1, 200) """sitk.WriteImage(maskImage, "20160129-pt-3f9fed2f1c-std-cdf25fa63a-seq-1-ang-p31.4-p15.3-f-00084_mask3_N4_bias_corrected.png")""" my_inputImage_unint8 = sitk.Cast(inputImage, sitk.sitkFloat32) # Float32 car sinon fct n'accepte pas corrector = sitk.N4BiasFieldCorrectionImageFilter() N4_output = corrector.Execute(my_inputImage_unint8, maskImage) N4_output = sitk.Cast(N4_output, sitk.sitkUInt8) # ajoute pour sauver en .PNG N4_output_float32 = np.float32(output) # Convert image from unsigned 8 bit to 32 bit float print("Affectation & affichage du type de N4_output_float32 avant d_etre retourne par la fonction CLAHE et de rentrer dans ImageDataGenerator : ") N4_output_float32Type = N4_output_float32.dtype print("N4_output_float est de Type : ") print(N4_output_floatType) return N4_output_float32 print("Finished N4 Bias Field Correction.....")
Malgré avoir effectué les conversions des types de données dans la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 File "C:\Users\QTR7701\AppData\Roaming\Python\Python37\site-packages\SimpleITK\SimpleITK.py", line 54421, in OtsuThreshold return _SimpleITK.OtsuThreshold(*args) NotImplementedError: Wrong number or type of arguments for overloaded function 'OtsuThreshold'. Possible C/C++ prototypes are: itk::simple::OtsuThreshold(itk::simple::Image const &,itk::simple::Image const &,uint8_t,uint8_t,uint32_t,bool,uint8_t) itk::simple::OtsuThreshold(itk::simple::Image const &,uint8_t,uint8_t,uint32_t,bool,uint8_t)
Fonction type d'image traitée type de l'image passée à la function de prétraitement personnalisée
N4 8 bits Unsigned Integer float32
je ne parviens pas à trouver une solution à ce message d'erreur. Est-ce que quelqu'un peut m'aider ?
Partager