赞
踩
- pic_name_list
- cuted_img_list = []
- save_img_path = os.path.join(wd, 'output')
- if not os.path.exists(save_img_path):
- os.makedirs(save_img_path)
-
- for pic_id in range(len(pic_name_list)):
- pic_name = str(pic_id) + '.png'
- temp = os.path.join(pic_root_path, pic_name)
- img = cv.imread(temp)
-
- print("This is the "+pic_name+":")
- print(img.shape)
- # (y, x)
- cuted_img = img[633:725, 510:665]
- #cv.imwrite(os.path.join(save_img_path, pic_name),cuted_img)
- cuted_img_list.append(cuted_img)
- plt.imshow(cuted_img)
- plt.show()
- def viewColor(pic, color):
- #pic = Image.copy()
- for i, nar in enumerate(pic):
- for j, n in enumerate(nar):
- if list(n) == list(color): # 南宁附近的三八线不需要的
- pic[i][j] = np.array([255,255,255])
-
- def get_usedColor(img):
- from collections import defaultdict
- colorMap = defaultdict(int)
- usedColor = []
-
- for i, nar in enumerate(img):
- for j, n in enumerate(nar):
- if str(n) not in colorMap:
- usedColor.append(list(n))
- colorMap[str(n)] += 1
- return usedColor
-
- def Image_Preprocessing(img):
- use_color = []
- use_color.append([178, 178, 178])
- use_color.append([247, 221, 136])
- use_color.append([104, 104, 104])
- use_color.append([182, 255, 255])
- use_color.append([0, 0, 102])
- use_color.append([219, 144, 58])
- use_color.append([58, 144, 219])
- use_color.append([102, 0, 0])
- use_color.append([255, 255, 182])
- use_color.append([219, 255, 255])
- use_color.append([219, 182, 182])
- use_color.append([219, 144, 144])
- use_color.append([219, 219, 219])
- use_color.append([0, 58, 144])
- use_color.append([182, 182, 182])
- use_color.append([0, 0, 0])
- use_color.append([58, 0, 0])
- use_color.append([255, 219, 144])
- for c in use_color:
- viewColor(img, c)
- return img
-
- def pltShow(img):
- plt.imshow(img)
- plt.show()
-
- def cvShow(img):
- cv.imshow("mat", img)
- cv.waitKey(0)
-
- imgGray_list = []
- for id, cuted_img in enumerate(cuted_img_list):
- img = Image_Preprocessing(cuted_img)
- imgGray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
- pltShow(img)
- temp = os.path.join(save_img_path, str(id)+'.png')
- if os.path.exists(temp):
- os.remove(temp)
- cv.imwrite(temp, imgGray)
- imgGray_list.append(imgGray)
- print(str(id)+'.png is preprocesed, Wait next!')
- print("Everything is OK!")
- ## NEW NETWORK ##
- def mainmodel():
- # Inputs
- dtype='float32'
-
- nk = 128 # number of kernels for conv layers #48
- fs = (3,3) # filter size for convolutional kernels
-
- contentInput = Input(shape=(None, WIDTH, HEIGHT, 1), name='content_input', dtype=dtype)
-
- # Encoding Network
- x1 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer1')(contentInput)
- x2 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer2')(x1)
-
- # Forecasting Network
- x3 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer3')(x1)
- add1 = Add()([x3, x2])
- x4 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer4')(add1)
-
- # Prediction Network
- conc = Concatenate()([x4, x3])
- predictions = Conv3D(1, (5,5,5), activation='sigmoid', padding='same', name='prediction')(conc) #sigmoid original
-
- model = Model(inputs=contentInput, outputs=predictions)
-
- return model
- ## NEW NETWORK ##
- def mainmodel():
- # Inputs
- dtype='float32'
-
- nk = 128 # number of kernels for conv layers #48
- fs = (3,3) # filter size for convolutional kernels
-
- contentInput = Input(shape=(None, WIDTH, HEIGHT, 1), name='content_input', dtype=dtype)
-
- # Encoding Network
- x1 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer1')(contentInput)
- x2 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer2')(x1)
-
- # Forecasting Network
- x3 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer3')(x1)
- add1 = Add()([x3, x2])
- x4 = ConvLSTM2D(nk, (5,5), padding='same', return_sequences=True, kernel_initializer ='he_normal', name='layer4')(add1)
-
- # Prediction Network
- conc = Concatenate()([x4, x3])
- predictions = Conv3D(1, (5,5,5), activation='sigmoid', padding='same', name='prediction')(conc) #sigmoid original
-
- model = Model(inputs=contentInput, outputs=predictions)
-
- return model
-
- # Train model
- def train(main_model=True, batchsize=5, epochs=50, save=False):
-
- smooth=1e-9
- #Additional metrics: SSIM, PSNR, POD, FAR
- def ssim(x, y, max_val=1.0):
- return tf.image.ssim(x, y, max_val)
-
- def psnr(x, y, max_val=1.0):
- return tf.image.psnr(x, y, max_val)
-
- #recall
- def POD(x, y):
- y_pos = K.clip(x, 0, 1)
- y_pred_pos = K.clip(y, 0, 1)
- y_pred_neg = 1 - y_pred_pos
- tp = K.sum(y_pos * y_pred_pos)
- fn = K.sum(y_pos * y_pred_neg)
- return (tp+smooth)/(tp+fn+smooth)
-
- def FAR(x, y):
- y_pred_pos = K.clip(y, 0, 1)
- y_pos = K.clip(x, 0, 1)
- y_neg = 1 - y_pos
- tp = K.sum(y_pos * y_pred_pos)
- fp = K.sum(y_neg * y_pred_pos)
- return (fp)/(tp+fp+smooth)
-
- metrics = ['accuracy', ssim, psnr, POD, FAR]
-
- global history, model
-
- if main_model:
- model=mainmodel()
- print("[INFO] Compiling Main Model...")
- optim = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
- model.compile(loss='logcosh', optimizer=optim, metrics=metrics) #logcosh gives better results than crossentropy or mse
- print("[INFO] Compiling Main Model: DONE")
- print("[INFO] Training Main Model...")
- history = model.fit(INPUT_SEQUENCE[:40], NEXT_SEQUENCE[:40], batch_size=batchsize, epochs=epochs, validation_split=0.1, verbose=1, use_multiprocessing=True)
- print("[INFO] Training of Main Model: DONE")
- #Save trained model
- if save:
- print("[INFO] Saving Model...")
- #model.save('models/model1_ConvLSTM/mainmodel_1.h5')
- # serialize model to JSON
- model_json = model.to_json()
- with open("models/model1_ConvLSTM/mainmodel_1.json", "w") as json_file:
- json_file.write(model_json)
- # serialize weights to HDF5
- model.save_weights("models/model1_ConvLSTM/mainmodel_1.h5")
- print("[INFO] Model Saved")
- else: print("[INFO] Model not saved")
- else:
- model=test_model()
- print("[INFO] Compiling Test Model...")
- model.compile(loss='logcosh', optimizer='adam', metrics=metrics)
- print("[INFO] Compiling Test Model: DONE")
- print("[INFO] Training Test Model...:")
- #history = model.fit(INPUT_SEQUENCE[:40], NEXT_SEQUENCE[:40], batch_size=5, epochs=180, validation_split=0.05, verbose=1, use_multiprocessing=True)
- history = model.fit(INPUT_SEQUENCE[:60], NEXT_SEQUENCE[:60], batch_size=batchsize, epochs=epochs, validation_split=0.05, verbose=1, use_multiprocessing=True)
- print("[INFO] Training of Test Model: DONE")
- #Save trained model
- if save:
- print("[INFO] Saving Test Model...")
- model.save('models/model1_ConvLSTM/trained_test_model_samples.h5')
- print("[INFO] Model Saved")
- else: print("[INFO] Model not saved")
-
-
- ### PLOT LOSS vs EPOCHS ###
-
- def performance():
- # Plot training & validation accuracy values
- plt.plot(history.history['acc'])
- plt.plot(history.history['val_acc'])
- plt.title('Model accuracy')
- plt.ylabel('Accuracy')
- plt.xlabel('Epoch')
- plt.legend(['Train', 'Test'], loc='upper left')
- plt.show()
- # Plot training & validation loss values
- plt.plot(history.history['loss'])
- plt.plot(history.history['val_loss'])
- plt.title('Model loss')
- plt.ylabel('Loss')
- plt.xlabel('Epoch')
- plt.legend(['Train', 'Test'], loc='upper left')
- plt.show()
- # Plot POD/FAR plot
- plt.plot(history.history['POD'])
- plt.plot(history.history['FAR'])
- plt.title('POD, FAR plot')
- plt.ylabel('POD / FAR')
- plt.xlabel('Epoch')
- plt.legend(['POD', 'FAR'], loc='upper left')
- plt.show()
-
-
- #Train Model
-
- #main_model = True trains main_model
- #main_model = False trains test_model
-
- train(main_model=True, batchsize=4, epochs=8, save=True)
(待补)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。