Advertisement
Guest User

Untitled

a guest
Jan 17th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.28 KB | None | 0 0
  1. import keras
  2. from keras import layers
  3. ## VGG encodeur, cette partie ne change pas
  4. vgg = VGG16(weights='imagenet', include_top=False, input_shape=(height,width,3))
  5.  
  6. #### Premier block d'upsampling avec skip-connections #####
  7. vgg_output = vgg.get_layer('block5_conv3').output
  8. # un upsampling comme dans l'exercice précédent
  9. up1 = UpSampling2D(size=(2, 2))(vgg_output)
  10. # Récupération des couches de l'encodeur dont la taille correspond à up1.
  11. block4_conv1 = vgg.get_layer('block4_conv1').output
  12. block4_conv2 = vgg.get_layer('block4_conv2').output
  13. block4_conv3 = vgg.get_layer('block4_conv3').output
  14.  
  15. # Concaténation des différentes couches
  16. merge1 = layers.concatenate([up1, block4_conv1, block4_conv2, block4_conv3])
  17.  
  18. # Une couche de convolution dont le rôle est d'apprendre à fusionner ces couches
  19. conv1 = Conv2D(filters=128, kernel_size=(5, 5), padding='same', activation='relu')(merge1)
  20.  
  21. ##### Suite du décodeur ####
  22.  
  23. """
  24. for i in range(4, 0, -1) :
  25. for j in range(1, 4) :
  26. try :
  27. vgl = vgg.get_layer('block'+str(i+1)+'_conv'+str(j)).output
  28. break
  29. except :
  30. pass
  31. # un upsampling comme dans l'exercice précédent
  32. up = UpSampling2D(size=(2, 2))(vgl)
  33. # Récupération des couches de l'encodeur dont la taille correspond à up.
  34. #blockConv = [vgg.get_layer('block'+str(i)+'_conv'+str(j)).output for j in range(1, 4)]
  35. blaockConv = [up]
  36. for j in range(1, 4) :
  37. try :
  38. tmp = vgg.get_layer('block'+str(i)+'_conv'+str(j)).output
  39. blockConv.append(tmp)
  40. except :
  41. pass
  42.  
  43. # Concaténation des différentes couches
  44. merge = keras.layers.concatenate(blockConv)
  45.  
  46. # Une couche de convolution dont le rôle est d'apprendre à fusionner ces couches
  47. convs.append(Conv2D(filters=128, kernel_size=(5, 5), padding='same', activation='relu')(merge))
  48.  
  49. """
  50.  
  51. #### Deuxième block d'upsampling avec skip-connections #####
  52. #vgg_output = conv1#vgg.get_layer('block4_conv3').output
  53. # un upsampling comme dans l'exercice précédent
  54. up2 = UpSampling2D(size=(2, 2))(conv1)
  55. # Récupération des couches de l'encodeur dont la taille correspond à up1.
  56. block3_conv1 = vgg.get_layer('block3_conv1').output
  57. block3_conv2 = vgg.get_layer('block3_conv2').output
  58. block3_conv3 = vgg.get_layer('block3_conv3').output
  59.  
  60. # Concaténation des différentes couches
  61. merge2 = layers.concatenate([up2, block3_conv1, block3_conv2, block3_conv3])
  62.  
  63. # Une couche de convolution dont le rôle est d'apprendre à fusionner ces couches
  64. conv2 = Conv2D(filters=128, kernel_size=(5, 5), padding='same', activation='relu')(merge2)
  65.  
  66.  
  67. #### Troisième block d'upsampling avec skip-connections #####
  68. #vgg_output = conv2#vgg.get_layer('block3_conv2').output
  69. # un upsampling comme dans l'exercice précédent
  70. up3 = UpSampling2D(size=(2, 2))(conv2)
  71. # Récupération des couches de l'encodeur dont la taille correspond à up1.
  72. block2_conv1 = vgg.get_layer('block2_conv1').output
  73. block2_conv2 = vgg.get_layer('block2_conv2').output
  74.  
  75. # Concaténation des différentes couches
  76. merge3 = layers.concatenate([up3, block2_conv1, block2_conv2])
  77.  
  78. # Une couche de convolution dont le rôle est d'apprendre à fusionner ces couches
  79. conv3 = Conv2D(filters=128, kernel_size=(5, 5), padding='same', activation='relu')(merge3)
  80.  
  81.  
  82. #### Quatrième block d'upsampling avec skip-connections #####
  83. #vgg_output = conv2#vgg.get_layer('block1_conv2').output
  84. # un upsampling comme dans l'exercice précédent
  85. up4 = UpSampling2D(size=(2, 2))(conv3)
  86. # Récupération des couches de l'encodeur dont la taille correspond à up1.
  87. block1_conv1 = vgg.get_layer('block1_conv1').output
  88. block1_conv2 = vgg.get_layer('block1_conv2').output
  89.  
  90. # Concaténation des différentes couches
  91. merge4 = layers.concatenate([up4, block1_conv1, block1_conv2])
  92.  
  93. # Une couche de convolution dont le rôle est d'apprendre à fusionner ces couches
  94. conv4 = Conv2D(filters=128, kernel_size=(5, 5), padding='same', activation='relu')(merge4)
  95. #x = conv4
  96. ## Couches finales de classification
  97.  
  98. fcn_output = SoftmaxMap()(conv4)
  99. model = models.Model(vgg.input,
  100. outputs = fcn_output,
  101. name="encodeur-décodeur")
  102. model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.00001), loss=crossentropy_for_img_segmentation)
  103. model.summary()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement