""" DexiNed main script This code is based on DexiNed (Dense Extreme Inception Network for Edge Detection), Please pay attention in the function config_model() to set any parameter before training or testing the model. """ __author__ = "Xavier Soria Poma, CVC-UAB" __email__ = "xsoria@cvc.uab.es / xavysp@gmail.com" __homepage__="www.cvc.uab.cat/people/xsoria" __credits__=['DexiNed'] __copyright__ = "MIT License [see LICENSE for details]"#"Copyright 2019, CIMI" import sys import argparse import tensorflow as tf import utls.dataset_manager as dm from train import m_trainer from test import m_tester import platform def config_model(): in_linux = True if platform.system() == "Linux" else False base_dir = "/opt/dataset/" if in_linux else "../../dataset/" parser = argparse.ArgumentParser(description='Basic details to run HED') # dataset config parser.add_argument('--train_dataset', default='BIPED', choices=['BIPED','BSDS']) parser.add_argument('--test_dataset', default='CLASSIC', choices=['BIPED', 'BSDS','MULTICUE','NYUD','PASCAL','CID','DCD']) parser.add_argument('--dataset_dir',default=base_dir,type=str) # default:'/opt/dataset/' parser.add_argument('--dataset_augmented', default=True,type=bool) parser.add_argument('--train_list',default='train_rgb.lst', type=str) # BSDS train_pair.lst, SSMIHD train_rgb_pair.lst/train_rgbn_pair.lst parser.add_argument('--test_list', default='test_rgb.lst',type=str) # for NYUD&BSDS:test_pair.lst, biped msi_test.lst/test_rgb.lst parser.add_argument('--trained_model_dir', default='train',type=str) # 'trainV2_RN' # SSMIHD_RGBN msi_valid_list.txt and msi_test_list.txt is for unified test parser.add_argument('--use_nir', default=False, type=bool) parser.add_argument('--use_dataset', default=False, type=bool) # test: dataset=True single image=FALSE # model config parser.add_argument('--model_state', default='train', choices=['train','test','None']) # always in None parser.add_argument('--model_name', default='DXN',choices=['DXN','XCP','None']) parser.add_argument('--use_v1', default=False,type=bool) parser.add_argument('--model_purpose', default='edges',choices=['edges','restoration','None']) parser.add_argument('--batch_size_train',default=8,type=int) parser.add_argument('--batch_size_val',default=8, type=int) parser.add_argument('--batch_size_test',default=1,type=int) parser.add_argument('--checkpoint_dir', default='checkpoints',type=str) parser.add_argument('--logs_dir', default='logs',type=str) parser.add_argument('--learning_rate',default=1e-4, type=float) # 1e-4=0.0001 parser.add_argument('--lr_scheduler',default=None,choices=[None,'asce','desc']) # check here parser.add_argument('--learning_rate_decay', default=0.1,type=float) parser.add_argument('--weight_decay', default=0.0002, type=float) parser.add_argument('--model_weights_path', default='vgg16_.npy') parser.add_argument('--train_split', default=0.9, type=float) # default 0.8 parser.add_argument('--max_iterations', default=180000, type=int) # 100000 parser.add_argument('--learning_decay_interval',default=25000, type=int) # 25000 parser.add_argument('--loss_weights', default=1.0, type=float) parser.add_argument('--save_interval', default=20000, type=int) # 50000 parser.add_argument('--val_interval', default=30, type=int) parser.add_argument('--use_subpixel', default=None, type=bool) # None=upsampling with transp conv parser.add_argument('--deep_supervision', default=True, type= bool) parser.add_argument('--target_regression',default=True, type=bool) # true parser.add_argument('--mean_pixel_values', default=[103.939,116.779,123.68, 137.86], type=float)# [103.939,116.779,123.68] # for Nir pixels mean [103.939,116.779,123.68, 137.86] parser.add_argument('--channel_swap', default=[2,1,0], type=int) parser.add_argument('--gpu-limit',default=1.0, type= float, ) parser.add_argument('--use_trained_model', default=True, type=bool) # for vvg16 parser.add_argument('--use_previous_trained', default=False, type=bool) # for training # image configuration parser.add_argument('--image_width', default=512, type=int) # 480 NYUD=560 BIPED=1280 default 400 other 448 parser.add_argument('--image_height', default=512, type=int) # 480 for NYUD 425 BIPED=720 default 400 parser.add_argument('--n_channels', default=3, type=int) # last ssmihd_xcp trained in 512 # test config parser.add_argument('--test_snapshot', default=149999, type=int) # BIPED: 149736 BSDS:101179 #DexiNedv1=149736,DexiNedv2=149999 parser.add_argument('--testing_threshold', default=0.0, type=float) parser.add_argument('--base_dir_results',default='results/edges',type=str) # default: '/opt/results/edges' # single image default=None args = parser.parse_args() return args def get_session(gpu_fraction): num_threads = False gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=gpu_fraction) if num_threads: return tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(gpu_options=gpu_options, intra_op_parallelism_threads=num_threads)) else: return tf.compat.v1.Session(config=tf.compat.v1.ConfigProto()) def main(args): if not args.dataset_augmented: # Only for BIPED dataset # dm.augment_data(args) print("Please visit the webpage of BIPED in:") print("https://xavysp.github.io/MBIPED/") print("and run the code") sys.exit() if args.model_state =='train' or args.model_state=='test': sess = get_session(args.gpu_limit) # sess =tf.Session() else: print("The model state is None, so it will exit...") sys.exit() if args.model_state=='train': trainer = m_trainer(args) trainer.setup() trainer.run(sess) sess.close() if args.model_state=='test': if args.test_dataset=="BIPED": if args.image_width >700: pass else: print(' image size is not set in non augmented data') sys.exit() tester = m_tester(args) tester.setup(sess) tester.run(sess) sess.close() if args.model_state=="None": print("Sorry the model state is {}".format(args.model_state)) sys.exit() if __name__=='__main__': args = config_model() main(args=args)