Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.02 KB | None | 0 0
  1. from keras.models import Sequential
  2. from keras.layers import Conv2D, MaxPool2D, UpSampling2D
  3. from keras.preprocessing.image import ImageDataGenerator
  4. from keras.callbacks import ModelCheckpoint, Callback
  5. from keras import backend as K
  6. K.tensorflow_backend._get_available_gpus()
  7. import matplotlib.pyplot as plt
  8. import numpy as np
  9. import cv2
  10.  
  11. BATCH_SIZE = 2
  12. MAX_EPOCH = 1000
  13. IMAGE_SIZE = (512,512)
  14. TRAIN_IM = 200
  15. VALIDATE_IM = 15
  16.  
  17.  
  18. model = Sequential()
  19. model.add(Conv2D(16, 3, activation='relu', padding='same', kernel_initializer='he_normal',
  20. input_shape=(IMAGE_SIZE[0],IMAGE_SIZE[1],3)))
  21. model.add(MaxPool2D(pool_size=(2, 2)))
  22. model.add(Conv2D(32, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  23. model.add(MaxPool2D(pool_size=(2, 2)))
  24. model.add(Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  25. model.add(MaxPool2D(pool_size=(2, 2)))
  26. model.add(Conv2D(128, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  27. model.add(MaxPool2D(pool_size=(2, 2)))
  28. model.add(Conv2D(256, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  29. model.add(Conv2D(256, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  30. model.add(UpSampling2D(size=(2, 2)))
  31. model.add(Conv2D(128, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  32. model.add(UpSampling2D(size=(2, 2)))
  33. model.add(Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  34. model.add(UpSampling2D(size=(2, 2)))
  35. model.add(Conv2D(32, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  36. model.add(UpSampling2D(size=(2, 2)))
  37. model.add(Conv2D(16, 3, activation='relu', padding='same', kernel_initializer='he_normal'))
  38. model.add(Conv2D(1, 3, activation='sigmoid', padding='same', kernel_initializer='he_normal'))
  39.  
  40. print(model.summary())
  41.  
  42.  
  43. def iou(y_true, y_pred):
  44. y_true = K.cast(K.greater(y_true, 0.5), dtype='float32')
  45. y_pred = K.cast(K.greater(y_pred, 0.5), dtype='float32')
  46. inter = K.sum(K.sum(K.squeeze(y_true * y_pred, axis=3), axis=2), axis=1)
  47. union = K.sum(K.sum(K.squeeze(K.clip(y_true + y_pred, 0, 1), axis=3), axis=2), axis=1)
  48. return K.mean((inter + K.epsilon()) / (union + K.epsilon()))
  49.  
  50. model.compile(optimizer= 'adam', loss='binary_crossentropy', metrics=['accuracy',iou])
  51.  
  52. def myGenerator(type):
  53. datagen = ImageDataGenerator(rescale=1./255)
  54.  
  55. input_generator = datagen.flow_from_directory(
  56. 'Dataset/'+type,
  57. classes = ['Input'],
  58. class_mode=None,
  59. color_mode='rgb',
  60. target_size=IMAGE_SIZE,
  61. batch_size=BATCH_SIZE,
  62. shuffle=True,
  63. seed = 1)
  64.  
  65. expected_output_generator = datagen.flow_from_directory(
  66. 'Dataset/'+type,
  67. classes = ['Output'],
  68. class_mode=None,
  69. color_mode='grayscale',
  70. target_size=IMAGE_SIZE,
  71. batch_size=BATCH_SIZE,
  72. shuffle=True,
  73. seed = 1)
  74.  
  75. while True:
  76. in_batch = input_generator.next()
  77. out_batch = expected_output_generator.next()
  78. yield in_batch, out_batch
  79.  
  80. checkpoint = ModelCheckpoint('model4.h5', verbose=1, monitor='val_iou',save_best_only=True, mode='max')
  81.  
  82.  
  83. class ShowPredictSegment(Callback):
  84. def on_epoch_end(self, epoch, logs={}):
  85. testfileloc = ['textlocalize/validation/Input/001.jpg',
  86. 'textlocalize/validation/Input/034.jpg',
  87. 'textlocalize/validation/Input/045.jpg',
  88. 'textlocalize/validation/Input/089.jpg']
  89.  
  90. for k in range(len(testfileloc)):
  91. test_im = cv2.imread(testfileloc[k])
  92. true_size = test_im.shape
  93. if true_size[1] >= true_size[0]:
  94. imshow_size = (300, round(true_size[0] * 300 / true_size[1]))
  95. else:
  96. imshow_size = (round(true_size[1] * 300 / true_size[0]),300)
  97. cv2.imshow('Input'+str(k), cv2.resize(test_im, imshow_size))
  98. cv2.moveWindow('Input'+str(k), 20 + 350 * k,10)
  99.  
  100. test_im = cv2.cvtColor(test_im, cv2.COLOR_BGR2RGB)
  101. test_im = cv2.resize(test_im, (IMAGE_SIZE[1], IMAGE_SIZE[0]))
  102. test_im = test_im / 255.
  103. test_im = np.expand_dims(test_im, axis=0)
  104. segmented = model.predict(test_im)
  105. # segmented = np.around(segmented)
  106. segmented = (segmented[0, :, :, 0] * 255).astype('uint8')
  107. cv2.imshow('Output'+str(k), cv2.resize(segmented, imshow_size))
  108. cv2.moveWindow('Output'+str(k), 20 + 350 * k,400)
  109. cv2.waitKey(100)
  110.  
  111. show_result = ShowPredictSegment()
  112.  
  113. h = model.fit_generator(myGenerator('train'),
  114. steps_per_epoch=TRAIN_IM/BATCH_SIZE,
  115. epochs=MAX_EPOCH,
  116. validation_data=myGenerator('validation'),
  117. validation_steps=VALIDATE_IM/BATCH_SIZE,
  118. callbacks=[checkpoint,show_result])
  119.  
  120. plt.plot(h.history['iou'])
  121. plt.plot(h.history['val_iou'])
  122. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement