def test(args): print('[%s] Selected mode: Test' % appName) # Local Variables numSamples = None # ----------------------------------------- # Network Testing Model - Importing Graph # ----------------------------------------- # Loads the dataset and restores a specified trained model. data = Dataloader(args) # Searches dataset images filenames if TEST_EVALUATE_SUBSET == 0: _, _, _, _, numSamples = data.getTestData() elif TEST_EVALUATE_SUBSET == 1: data.test_image_filenames, data.test_depth_filenames, tf_test_image_filenames, tf_test_depth_filenames, numSamples = data.getTrainData( ) model = Test(args, data) with tf.Session() as sess: print('\n[network/Testing] Loading the model...') # Use to load from *.ckpt file saver = tf.train.Saver() saver.restore(sess, args.model_path) # Use to load from npy file # net.load(model_data_path, sess) # ============== # Testing Loop # ============== if args.show_test_results: test_plotObj = Plot(args.mode, title='Test Predictions') timer = -time.time() pred_list, gt_list = [], [] for i in range(numSamples): # for i in range(5): # Only for testing! timer2 = -time.time() # Evalute the network for the given image # data.test_depth_filenames = [] # Only for testing the following condition!!! # FIXME: Atualmente, o código não dá suporte para esta situação if data.test_depth_filenames: # It's not empty feed_test = { model.tf_image_key: data.test_image_filenames[i], model.tf_depth_key: data.test_depth_filenames[i] } _, depth, depth_resized = sess.run(model.depth_op, feed_test) else: feed_test = {model.tf_image_key: data.test_image_filenames[i]} _, image, image_resized = sess.run(model.image_op, feed_test) pred, pred_up = sess.run(model.pred_op, feed_test) # Clips Predictions at 50, 80 meters try: pred_50, pred_80 = sess.run( [model.tf_pred_50, model.tf_pred_80], feed_test) except AttributeError: pred_50 = np.zeros((model.batch_size, ) + model.output_size.getSize()) pred_80 = np.zeros((model.batch_size, ) + model.output_size.getSize()) # Fill arrays for later on metrics evaluation pred_list.append(pred_up[0, :, :, 0]) gt_list.append(depth[:, :, 0]) # Saves the Test Predictions as uint16 PNG Images if SAVE_TEST_DISPARITIES: # Convert the Predictions Images from float32 to uint16 pred_up_uint16 = exposure.rescale_intensity(pred_up[0], out_range='float') pred_up_uint16 = img_as_uint(pred_up_uint16) depth_uint16 = exposure.rescale_intensity(depth, out_range='float') depth_uint16 = img_as_uint(depth_uint16) # Save PNG Images imageio.imsave("output/tmp/pred/pred" + str(i) + ".png", pred_up_uint16) imageio.imsave("output/tmp/gt/gt" + str(i) + ".png", depth_uint16) # Prints Testing Progress timer2 += time.time() print('step: %d/%d | t: %f | size(pred_list+gt_list): %d' % (i + 1, numSamples, timer2, total_size(pred_list) + total_size(gt_list))) # break # Test # Show Results if args.show_test_results: test_plotObj.showTestResults(image=image, depth=depth[:, :, 0], image_resized=image_resized, depth_resized=depth_resized[:, :, 0], pred=pred[0, :, :, 0], pred_up=pred_up[0, :, :, 0], pred_50=pred_50[0, :, :, 0], pred_80=pred_80[0, :, :, 0], i=i + 1) # input("Continue...") # Testing Finished. timer += time.time() print("\n[Network/Testing] Testing FINISHED! Time elapsed: %f s" % timer) # ========= # Results # ========= # Calculate Metrics if data.test_depth_filenames: print( "[Network/Testing] Calculating Metrics based on Testing Predictions..." ) pred_array = np.array(pred_list) gt_array = np.array(gt_list) # LainaMetrics.evaluate(pred_array, gt_array) # FIXME: # myMetrics.evaluate(pred_array, gt_array) # FIXME: MonodepthMetrics.evaluate(pred_array, gt_array) else: print( "[Network/Testing] It's not possible to calculate Metrics. There are no corresponding labels for Testing Predictions!" )