diff --git a/contrib/HumanSeg/models/humanseg.py b/contrib/HumanSeg/models/humanseg.py index 413be8925e62cce21c55fbbf209573e8e0be16f8..1790e31e363197ebc337e57cac3d418ed0e40d2f 100644 --- a/contrib/HumanSeg/models/humanseg.py +++ b/contrib/HumanSeg/models/humanseg.py @@ -27,6 +27,7 @@ import cv2 import yaml import shutil import paddleslim as slim +import paddle import utils import utils.logging as logging @@ -37,6 +38,15 @@ from nets import DeepLabv3p, ShuffleSeg, HRNet import transforms as T +def save_infer_program(test_program, ckpt_dir): + _test_program = test_program.clone() + _test_program.desc.flush() + _test_program.desc._set_version() + paddle.fluid.core.save_op_compatible_info(_test_program.desc) + with open(os.path.join(ckpt_dir, 'model') + ".pdmodel", "wb") as f: + f.write(_test_program.desc.serialize_to_string()) + + def dict2str(dict_input): out = '' for k, v in dict_input.items(): @@ -244,6 +254,7 @@ class SegModel(object): if self.status == 'Normal': fluid.save(self.train_prog, osp.join(save_dir, 'model')) + save_infer_program(self.test_prog, save_dir) model_info['status'] = 'Normal' elif self.status == 'Quant': fluid.save(self.test_prog, osp.join(save_dir, 'model')) diff --git a/contrib/RemoteSensing/__init__.py b/contrib/RemoteSensing/__init__.py index 8e5bc0b3793094246da001295ae154941bc803b0..162b167ce30996549469b819a2d5a2c0bb8c4435 100644 --- a/contrib/RemoteSensing/__init__.py +++ b/contrib/RemoteSensing/__init__.py @@ -21,5 +21,3 @@ import readers from utils.utils import get_environ_info env_info = get_environ_info() - -log_level = 2 diff --git a/contrib/RemoteSensing/models/base.py b/contrib/RemoteSensing/models/base.py index 06a6bc6df5ea5a7147e1071109f7a978e88c3541..bbbc3bb9ac65a7d7327bb838ba5ea37419aef6d5 100644 --- a/contrib/RemoteSensing/models/base.py +++ b/contrib/RemoteSensing/models/base.py @@ -30,6 +30,16 @@ from utils.utils import seconds_to_hms, get_environ_info from utils.metrics import ConfusionMatrix import transforms.transforms as T import utils +import paddle + + +def save_infer_program(test_program, ckpt_dir): + _test_program = test_program.clone() + _test_program.desc.flush() + _test_program.desc._set_version() + paddle.fluid.core.save_op_compatible_info(_test_program.desc) + with open(os.path.join(ckpt_dir, 'model') + ".pdmodel", "wb") as f: + f.write(_test_program.desc.serialize_to_string()) def dict2str(dict_input): @@ -238,6 +248,7 @@ class BaseModel(object): if self.status == 'Normal': fluid.save(self.train_prog, osp.join(save_dir, 'model')) + save_infer_program(self.test_prog, save_dir) model_info['status'] = self.status with open( diff --git a/contrib/RemoteSensing/utils/logging.py b/contrib/RemoteSensing/utils/logging.py index 8c850f618faedcfe97d370941e5d2ec84da1f437..1008765a4c64e808dbfd8252c702ee3bfda68439 100644 --- a/contrib/RemoteSensing/utils/logging.py +++ b/contrib/RemoteSensing/utils/logging.py @@ -16,7 +16,6 @@ import time import os import sys -import __init__ levels = {0: 'ERROR', 1: 'WARNING', 2: 'INFO', 3: 'DEBUG'} @@ -25,10 +24,9 @@ def log(level=2, message=""): current_time = time.time() time_array = time.localtime(current_time) current_time = time.strftime("%Y-%m-%d %H:%M:%S", time_array) - if __init__.log_level >= level: - print("{} [{}]\t{}".format(current_time, levels[level], - message).encode("utf-8").decode("latin1")) - sys.stdout.flush() + print("{} [{}]\t{}".format(current_time, levels[level], + message).encode("utf-8").decode("latin1")) + sys.stdout.flush() def debug(message=""): diff --git a/pdseg/train.py b/pdseg/train.py index 7021ed9d6ae137c204e05e00d5a165f9859b056e..aa29de92ded7c79acd4ca41fa74ee6eaeb8993c2 100644 --- a/pdseg/train.py +++ b/pdseg/train.py @@ -27,6 +27,7 @@ import pprint import random import shutil +import paddle import numpy as np import paddle.fluid as fluid from paddle.fluid import profiler @@ -158,6 +159,15 @@ def load_checkpoint(exe, program): return begin_epoch +def save_infer_program(test_program, ckpt_dir): + _test_program = test_program.clone() + _test_program.desc.flush() + _test_program.desc._set_version() + paddle.fluid.core.save_op_compatible_info(_test_program.desc) + with open(os.path.join(ckpt_dir, 'model') + ".pdmodel", "wb") as f: + f.write(_test_program.desc.serialize_to_string()) + + def update_best_model(ckpt_dir): best_model_dir = os.path.join(cfg.TRAIN.MODEL_SAVE_DIR, 'best_model') if os.path.exists(best_model_dir): @@ -173,6 +183,7 @@ def print_info(*msg): def train(cfg): startup_prog = fluid.Program() train_prog = fluid.Program() + test_prog = fluid.Program() if args.enable_ce: startup_prog.random_seed = 1000 train_prog.random_seed = 1000 @@ -224,6 +235,7 @@ def train(cfg): data_loader, avg_loss, lr, pred, grts, masks = build_model( train_prog, startup_prog, phase=ModelPhase.TRAIN) + build_model(test_prog, fluid.Program(), phase=ModelPhase.EVAL) data_loader.set_sample_generator( data_generator, batch_size=batch_size_per_dev, drop_last=drop_last) @@ -387,6 +399,7 @@ def train(cfg): if (epoch % cfg.TRAIN.SNAPSHOT_EPOCH == 0 or epoch == cfg.SOLVER.NUM_EPOCHS) and cfg.TRAINER_ID == 0: ckpt_dir = save_checkpoint(train_prog, epoch) + save_infer_program(test_prog, ckpt_dir) if args.do_eval: print("Evaluation start") @@ -419,7 +432,8 @@ def train(cfg): # save final model if cfg.TRAINER_ID == 0: - save_checkpoint(train_prog, 'final') + ckpt_dir = save_checkpoint(train_prog, 'final') + save_infer_program(test_prog, ckpt_dir) def main(args):