Esempio n. 1
0
    def run(self, session):

        self.model.setup_testing(session)
        if self.args.use_dataset:
            test_data= data_parser(self.args)
            n_data = len(test_data[1])
        else:
            test_data=get_single_image(self.args)
            n_data = len(test_data)
        print_info('Writing PNGs at {}'.format(self.args.base_dir_results))

        if self.args.batch_size_test==1 and self.args.use_dataset:
            for i in range(n_data):
                im, em, file_name = get_testing_batch(self.args,
                                    [test_data[0][test_data[1][i]], test_data[1][i]], use_batch=False)
                self.img_info = file_name
                edgemap = session.run(self.model.predictions, feed_dict={self.model.images: [im]})

                self.save_egdemaps(edgemap, single_image=True)
                print_info('Done testing {}, {}'.format(self.img_info[0], self.img_info[1]))

        # for individual images
        elif self.args.batch_size_test==1 and not self.args.use_dataset:
            for i in range(n_data):
                im, file_name = get_single_image(self.args,file_path=test_data[i])
                self.img_info  = file_name
                edgemap = session.run(self.model.predictions, feed_dict={self.model.images: [im]})
                self.save_egdemaps(edgemap, single_image=True)
                print_info('Done testing {}, {}'.format(self.img_info[0], self.img_info[1]))
Esempio n. 2
0
    def run(self, session):

        self.model.setup_testing(session)
        if self.args.use_dataset:
            test_data= data_parser(self.args)
            n_data = len(test_data[1])
        else:
            test_data=get_single_image(self.args)
            n_data = len(test_data)
        print_info('Writing PNGs at {}'.format(self.args.base_dir_results))

        if self.args.batch_size_test==1 and self.args.use_dataset:
            for i in range(n_data):
                im, em, file_name = get_testing_batch(self.args,
                                    [test_data[0][test_data[1][i]], test_data[1][i]], use_batch=False)
                self.img_info = file_name
                
                #Dexi Start Time
                startDexi = time.time()
                
                #Edge map creation from the pretrained model
                edgemap = session.run(self.model.predictions, feed_dict={self.model.images: [im]})
                
                #Dexi End Time
                endDexi = time.time()
                secondsDexi = endDexi - startDexi
                print_info('Time taken for DexiNED: {} seconds'.format(secondsDexi))
               
                self.save_egdemaps(edgemap, single_image=True)
                print_info('Done testing {}, {}'.format(self.img_info[0], self.img_info[1]))

        # for individual images
        elif self.args.batch_size_test==1 and not self.args.use_dataset:
            for i in range(n_data):
                im, file_name = get_single_image(self.args,file_path=test_data[i])
                self.img_info  = file_name
                
                #Dexi Start Time
                startDexi = time.time()
                
                edgemap = session.run(self.model.predictions, feed_dict={self.model.images: [im]})
                
                #Dexi End Time
                endDexi = time.time()
                secondsDexi = endDexi - startDexi
                print_info('Time taken for DexiNED: {} seconds'.format(secondsDexi))
                
                self.save_egdemaps(edgemap, single_image=True)
                print_info('Done testing {}, {}'.format(self.img_info[0], self.img_info[1]))
    def run(self, sess):
        if not self.init:
            return
        #This will return the Files Path, Number of Files, Train Indices, Validation Indices using cache_info
        train_data = data_parser(self.args)

        self.model.setup_training(sess)
        if self.args.lr_scheduler is not None:
            global_step = tf.Variable(0, trainable=False, dtype=tf.int64)
        if self.args.lr_scheduler is None:
            learning_rate = tf.constant(self.args.learning_rate,
                                        dtype=tf.float16)
        else:
            raise NotImplementedError(
                'Learning rate scheduler type [%s] is not implemented',
                self.args.lr_scheduler)
        opt = tf.train.AdamOptimizer(learning_rate)
        trainG = opt.minimize(self.model.loss)  # like hed
        saver = tf.train.Saver(max_to_keep=7)

        sess.run(tf.global_variables_initializer())
        # here to recovery previous training
        if self.args.use_previous_trained:
            if self.args.dataset_name.lower(
            ) != 'biped':  # using biped pretrained to use in other dataset
                model_path = os.path.join(
                    'checkpoints',
                    self.args.model_name + '_' + self.args.train_dataset,
                    'train')
            else:
                model_path = os.path.join(
                    self.args.checkpoint_dir,
                    self.args.model_name + '_' + self.args.train_dataset)
                model_path = os.path.join(model_path, 'train')
            if not os.path.exists(model_path) or len(
                    os.listdir(model_path)) == 0:  # :
                ini = 0
                maxi = self.args.max_iterations + 1
                print_warning(
                    'There is not previous trained data for the current model... and'
                )
                print_warning(
                    '*** The training process is starting from scratch ***')
            else:
                # restoring using the last checkpoint
                assert (
                    len(os.listdir(model_path)) != 0
                ), 'There is not previous trained data for the current model...'
                last_ckpt = tf.train.latest_checkpoint(model_path)
                saver.restore(sess, last_ckpt)
                ini = self.args.max_iterations
                maxi = ini + self.args.max_iterations + 1  # check
                print_info(
                    '--> Previous model restored successfully: {}'.format(
                        last_ckpt))
        else:
            print_warning(
                '*** The training process is starting from scratch ***')
            ini = 0
            maxi = ini + self.args.max_iterations
        prev_loss = 1000.
        prev_val = None

        #Checkpoint Directory for CDIBD will be /checkpoints/DXN_CDIBD/train
        checkpoint_dir = os.path.join(
            self.args.checkpoint_dir,
            self.args.model_name + '_' + self.args.train_dataset,
            self.args.model_state)
        if not os.path.exists(checkpoint_dir):
            os.makedirs(checkpoint_dir)

        fig = plt.figure()
        for idx in range(ini, maxi):

            x_batch, y_batch, _ = get_training_batch(self.args, train_data)
            run_metadata = tf.RunMetadata()

            _, summary, loss, pred_maps = sess.run([
                trainG, self.model.merged_summary, self.model.loss,
                self.model.predictions
            ],
                                                   feed_dict={
                                                       self.model.images:
                                                       x_batch,
                                                       self.model.edgemaps:
                                                       y_batch
                                                   })
            if idx % 5 == 0:
                self.model.train_writer.add_run_metadata(
                    run_metadata, 'step{:06}'.format(idx))
                self.model.train_writer.add_summary(summary, idx)
                print(time.ctime(), '[{}/{}]'.format(idx, maxi),
                      ' TRAINING loss: %.5f' % loss,
                      'prev_loss: %.5f' % prev_loss)

            # saving trained parameters
            save_inter = ini + self.args.save_interval
            if prev_loss > loss:
                saver.save(sess,
                           os.path.join(checkpoint_dir, self.args.model_name),
                           global_step=idx)
                prev_loss = loss
                print("Weights saved in the lowest loss", idx, " Current Loss",
                      prev_loss)

            if idx % self.args.save_interval == 0:
                saver.save(sess,
                           os.path.join(checkpoint_dir, self.args.model_name),
                           global_step=idx)
                prev_loss = loss
                print("Weights saved in the interval", idx, " Current Loss",
                      prev_loss)

            # ********* for validation **********
            if (idx + 1) % self.args.val_interval == 0:
                pause_show = 0.01
                imgs_list = []
                img = x_batch[2][:, :, 0:3]
                gt_mp = y_batch[2]
                imgs_list.append(img)
                imgs_list.append(gt_mp)
                for i in range(len(pred_maps)):
                    tmp = pred_maps[i][2, ...]
                    imgs_list.append(tmp)
                vis_imgs = visualize_result(imgs_list, self.args)
                fig.suptitle("Iterac:" + str(idx + 1) + " Loss:" +
                             '%.5f' % loss + " training")
                fig.add_subplot(1, 1, 1)
                plt.imshow(np.uint8(vis_imgs))

                print("Evaluation in progress...")
                plt.draw()
                plt.pause(pause_show)

                im, em, _ = get_validation_batch(self.args, train_data)
                summary, error, pred_val = sess.run([
                    self.model.merged_summary, self.model.error,
                    self.model.fuse_output
                ],
                                                    feed_dict={
                                                        self.model.images: im,
                                                        self.model.edgemaps: em
                                                    })
                if error <= 0.08:
                    saver.save(sess,
                               os.path.join(checkpoint_dir,
                                            self.args.model_name),
                               global_step=idx)
                    prev_loss = loss
                    print(
                        "Parameters saved in the validation stage when its error is <=0.08::",
                        error)

                self.model.val_writer.add_summary(summary, idx)
                print_info(('[{}/{}]'.format(idx, self.args.max_iterations),
                            'VALIDATION error: %0.5f' % error,
                            'pError: %.5f' % prev_loss))
                if (idx + 1) % (self.args.val_interval * 150) == 0:
                    print('updating visualisation')
                    plt.close()
                    fig = plt.figure()

        saver.save(sess,
                   os.path.join(checkpoint_dir, self.args.model_name),
                   global_step=idx)
        print("Final Weights saved", idx, " Current Loss", loss)
        self.model.train_writer.close()