Отключение обучения при реализации суперразрешения для моих изображений ⇐ Python
-
Гость
Отключение обучения при реализации суперразрешения для моих изображений
Я работаю над репозиторием GitHub со сверхвысоким разрешением для улучшения своих спутниковых изображений (см. https://github.com/luissalgueiro/rs-esrgan). Я закончил обучение сети и получил предварительно обученную модель. У него есть файл train_Esrgan_WV.py, который я запустил для завершения обучения и проверки, но мне не удалось найти файл test.py для проверки моих изображений.
Хотя в репозитории нет отдельного файла test.py, файл train_Esrgan_WV.py создает изображения со сверхвысоким разрешением сразу после завершения сеансов обучения и проверки. Я хотел бы создать отдельный файл, чтобы использовать предварительно обученную модель для тестирования изображений. Я пытался отключить сеанс обучения внутри файла train_Esrgan_WV.py, но не смог этого сделать.
Как отключить обучение пропуску поезда в этом скрипте (train_Esrgan_WV.py) и сразу перейти к тестовой части?
импортировать os.path импортировать систему импорт математики импортировать argparse время импорта импортировать случайный импортировать numpy как np из коллекций импорт OrderedDict журнал импорта импортировать matplotlib matplotlib.use("Agg") импортный фонарь импортировать matplotlib.pyplot как plt импортировать options.options как вариант из утилит импортировать утилиту из импорта данных create_dataloader, create_dataset из моделей импортируйте create_model ### Импортирует Луиса импортировать Earthpy как et импортировать геопанды как gpd импортировать Earthpy.plot как EP импортировать cv2 импортировать ОС защита основной(): идентификаторxx= 0 # параметры синтаксический анализатор = argparse.ArgumentParser() parser.add_argument('-opt', type=str, require=True, help='Путь к файлу опции JSON.') opt = option.parse(parser.parse_args().opt, is_train=True) opt = option.dict_to_nonedict(opt) # Преобразовать в NoneDict, который возвращает None в случае отсутствующего ключа. соотношение = opt["масштаб"] print("Элементы НАБОРА ДАННЫХ", opt['datasets'].items) PreUp = opt["наборы данных"]["поезд"]["PreUP"] LR_down = opt["наборы данных"]["поезд"]["LR_down"] станда = opt["наборы данных"]["поезд"]["стенд"] если PreUp == True: соотношение = 5 # тренируйтесь с нуля ИЛИ возобновляйте обучение if opt['path']['resume_state']: # возобновление обучения резюме_state = torch.load(opt['path']['resume_state']) else: # обучение с нуля резюме_состояние = Нет util.mkdir_and_rename(opt['path']['experiments_root']) # переименовываем старую папку, если она существует util.mkdirs((путь для ключа, путь в opt['path'].items(), если не ключ == 'experiments_root' и «pretrain_model» не в ключе и «резюме» не в ключе)) # регистраторы конфигурации. До этого лог работать не будет util.setup_logger(Нет, opt['path']['log'], 'train', level=logging.INFO, screen=True) util.setup_logger('val', opt['path']['log'], 'val', level=logging.INFO) logger = logging.getLogger('base') если резюме_состояние: logger.info('Возобновление обучения с эпохи: {}, iter: {}.'.format( резюме_state['эпоха'], резюме_состояние['iter'])) option.check_resume(opt) # проверка параметров резюме logger.info(option.dict2str(opt)) # тензорный регистратор если opt['use_tb_logger'] и 'debug' отсутствуют в opt['name']: из импорта tensorboardX SummaryWriter tb_logger_train = SummaryWriter(log_dir='/mnt/gpid07/users/luis.salgueiro/git/mnt/BasicSR_2020/tb_logger/' + opt['name'] + "/train") tb_logger_val = SummaryWriter(log_dir='//mnt/gpid07/users/luis.salgueiro/git/mnt/BasicSR_2020/tb_logger/' + opt['name'] + "/val" ) # случайное зерно семя = opt['train']['manual_seed'] если семя отсутствует: семя = 100 #random.randint(1, 10000) logger.info('Случайное начальное число: {}'.format(seed)) util.set_random_seed(семя) torch.backends.cudnn.benckmark = Истина # torch.backends.cudnn.deterministic = Истина # ####################################### # ######## ЗАГРУЗЧИК ДАННЫХ ##################### # ####################################### # создаем загрузчик данных train и val для фазы dataset_opt в opt['datasets'].items(): если фаза == 'поезд': print("Вводный поезд НАБОРА ДАННЫХ......") train_set = create_dataset(dataset_opt) print("CREO DATASET train_set ", train_set) train_size = int(math.ceil(len(train_set) / dataset_opt['batch_size'])) logger.info('Количество изображений поездов: {:,d}, iters: {:,d}'.format( лен(train_set), train_size)) total_iters = int(opt['train']['niter']) total_epochs = int(math.ceil(total_iters/train_size)) logger.info('Всего необходимых эпох: {:d} для итеров {:,d}'.format( total_epochs, total_iters)) train_loader = create_dataloader(train_set, dataset_opt) print("Поездный погрузчик CREO: ", train_loader) фаза элиф == 'val': print("Вступление в фазу VAL....") val_set = create_dataset(dataset_opt) val_loader = create_dataloader(val_set, dataset_opt) logger.info('Количество изображений val в [{:s}]: {:d}'.format(dataset_opt['name'], лен(val_set))) еще: поднять NotImplementedError('Фаза [{:s}] не распознана.'.format(фаза)) утверждать, что train_loader не имеет значения None утверждать, что val_loader не имеет значения None # создать модель модель = create_model (опт) # возобновить обучение если резюме_состояние: print("Состояние ВОЗОБНОВЛЕНИЯ") start_epoch = резюме_состояние['эпоха'] текущий_шаг = резюме_состояние['iter'] model.resume_training(resume_state) # обрабатываем оптимизаторы и планировщики еще: текущий_шаг = 0 начальная_эпоха = 0 print("ПАСО..... В ЭТОМ ") # ####################################### # ######### обучение ################ # ####################################### # ii=0 logger.info('Начать обучение с эпохи: {:d}, iter: {:d}'.format(start_epoch, current_step)) для эпохи в диапазоне (start_epoch, total_epochs): для _, train_data в перечислении (train_loader): текущий_шаг += 1 если текущий_шаг > total_iters: перерыв # обновить скорость обучения model.update_learning_rate() # обучение model.feed_data(train_data) model.optimize_parameters(current_step) # поезд с журналами если current_step % opt['logger']['print_freq'] == 0: журналы = model.get_current_log() message = ' '.format( эпоха, current_step, model.get_current_learning_rate()) для k, v в logs.items(): сообщение += '{:s}: {:.4e} '.format(k, v) # тензорный регистратор если opt['use_tb_logger'] и 'debug' отсутствуют в opt['name']: если «тест» в k: tb_logger_val.add_scalar(k, v, current_step) еще: tb_logger_train.add_scalar(k, v, current_step) logger.info (сообщение) если current_step % opt['train']['val_freq'] == 0: avg_psnr_sr, avg_psnr_lr, avg_psnr_dif = 0,0, 0,0, 0,0 avg_ssim_lr, avg_ssim_sr, avg_ssim_dif = 0,0, 0,0, 0,0 avg_ergas_lr, avg_ergas_sr, avg_ergas_dif = 0,0, 0,0, 0,0 идентификатор = 0 частота прохода = 0,0 если idxx==0: best_psnr, best_ssim, best_ergas = 0.0, 0.0, 0.0 идентификаторxx=1 для _, val_data в перечислении (val_loader): идентификатор += 1 img_name = os.path.splitext(os.path.basename(val_data['LR_path'][0]))[0] img_dir = os.path.join(opt['path']['val_images'], img_name) # print("*****Img nameVaL: ", img_name) model.feed_data(val_data) модель.тест() визуальные эффекты = model.get_current_visuals() частота пропуска = 0 если стандарт == True: # печать("UTIL_STANDA") sr_img = util.tensor2imgStand(visuals['SR'], MeanVal = val_data["LR_mean"], StdVal = val_data["LR_std"]) # uint16 gt_img = util.tensor2imgStand(visuals['HR'], MeanVal = val_data["HR_mean"], StdVal = val_data["HR_std"]) # uint16 lr_img = util.tensor2imgStand(visuals['LR'], MeanVal = val_data["LR_mean"], StdVal = val_data["LR_std"]) # uint16 еще: # print("******UTIL_NORM**********") sr_img = util.tensor2imgNorm(visuals['SR'],out_type=np.uint8, min_max=(0, 1), MinVal=val_data["LR_min"], MaxVal=val_data["LR_max"], freqpass=val_data["lowpass_lr"] ) # uint16 gt_img = util.tensor2imgNorm(visuals['HR'],out_type=np.uint8, min_max=(0, 1), MinVal=val_data["HR_min"], MaxVal=val_data["HR_max"], freqpass=val_data["lowpass_hr"] ) # uint16 lr_img = util.tensor2imgNorm(visuals['LR'], out_type=np.uint8, min_max=(0, 1), MinVal=val_data["LR_min"], MaxVal=val_data["LR_max"], freqpass=val_data["lowpass_lr"]) # uint16 если LR_down==True или PreUp==False: dim2 = (gt_img.shape[1], gt_img.shape[1]) lr_img = cv2.resize(np.transpose(lr_img,(1,2,0)), dim2, интерполяция=cv2.INTER_NEAREST) lr_img = np.transpose(lr_img,(2,0,1)) # Сохраните изображения SR для справки если идентификатор < 10: util.mkdir(img_dir) save_img_path = os.path.join(img_dir, '{:s}_{:d}'.format(img_name, current_step)) # print("СОХРАНЕНИЕ УРОЖАЯ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА", PreUp ) util.save_imgCROP(lr_img,gt_img,sr_img, save_img_path, соотношение, PreUp=PreUp) avg_psnr_sr += util.calculate_psnr2(sr_img, gt_img) avg_psnr_lr += util.calculate_psnr2(lr_img, gt_img) avg_ssim_lr += util.calculate_ssim2(lr_img, gt_img) avg_ssim_sr += util.calculate_ssim2(sr_img, gt_img) avg_ergas_lr += util.calculate_ergas(lr_img, gt_img, pixratio=соотношение) avg_ergas_sr += util.calculate_ergas(sr_img, gt_img, pixratio=соотношение) avg_psnr_sr = avg_psnr_sr/idx avg_psnr_lr = avg_psnr_lr/idx avg_psnr_dif = avg_psnr_lr - avg_psnr_sr avg_ssim_lr = avg_ssim_lr/idx avg_ssim_sr = avg_ssim_sr/idx avg_ssim_dif = avg_ssim_lr - avg_ssim_sr avg_ergas_lr = avg_ergas_lr/idx avg_ergas_sr = avg_ergas_sr/idx avg_ergas_dif = avg_ergas_lr - avg_ergas_sr # войти ПРОВЕРКА logger.info('# Validation # PSNR: {:.4e}'.format(avg_psnr_sr)) logger.info('# Проверка # SSIM: {:.4e}'.format(avg_ssim_sr)) logger.info('# Проверка # ERGAS: {:.4e}'.format(avg_ergas_sr)) logger_val = logging.getLogger('val') # регистратор проверки logger_val.info(' psnr_SR: {:.4e}'.format( эпоха, current_step, avg_psnr_sr)) logger_val.info(' psnr_LR: {:.4e}'.format( эпоха, current_step, avg_psnr_lr)) logger_val.info(' psnr_DIF: {:.4e}'.format( эпоха, current_step, avg_psnr_dif)) logger_val.info(' ssim_LR: {:.4e}'.format( эпоха, current_step, avg_ssim_lr)) logger_val.info(' ssim_SR: {:.4e}'.format( эпоха, current_step, avg_ssim_sr)) logger_val.info(' ssim_DIF: {:.4e}'.format( эпоха, current_step, avg_ssim_dif)) logger_val.info(' ergas_LR: {:.4e}'.format( эпоха, current_step, avg_ergas_lr)) logger_val.info(' ergas_SR: {:.4e}'.format( эпоха, current_step, avg_ergas_sr)) logger_val.info(' ergas_DIF: {:.4e}'.format( эпоха, current_step, avg_ergas_dif)) если current_step % opt['logger']['save_checkpoint_freq'] == 0: logger.info('Сохранение моделей и состояний обучения.') print("Текущий шаг: ", current_step) model.save(current_step) model.save_training_state(эпоха, текущий_шаг) logger.info('Сохранение окончательной модели.') model.save('последний') logger.info('Окончание обучения.') если __name__ == '__main__': основной()
Я работаю над репозиторием GitHub со сверхвысоким разрешением для улучшения своих спутниковых изображений (см. https://github.com/luissalgueiro/rs-esrgan). Я закончил обучение сети и получил предварительно обученную модель. У него есть файл train_Esrgan_WV.py, который я запустил для завершения обучения и проверки, но мне не удалось найти файл test.py для проверки моих изображений.
Хотя в репозитории нет отдельного файла test.py, файл train_Esrgan_WV.py создает изображения со сверхвысоким разрешением сразу после завершения сеансов обучения и проверки. Я хотел бы создать отдельный файл, чтобы использовать предварительно обученную модель для тестирования изображений. Я пытался отключить сеанс обучения внутри файла train_Esrgan_WV.py, но не смог этого сделать.
Как отключить обучение пропуску поезда в этом скрипте (train_Esrgan_WV.py) и сразу перейти к тестовой части?
импортировать os.path импортировать систему импорт математики импортировать argparse время импорта импортировать случайный импортировать numpy как np из коллекций импорт OrderedDict журнал импорта импортировать matplotlib matplotlib.use("Agg") импортный фонарь импортировать matplotlib.pyplot как plt импортировать options.options как вариант из утилит импортировать утилиту из импорта данных create_dataloader, create_dataset из моделей импортируйте create_model ### Импортирует Луиса импортировать Earthpy как et импортировать геопанды как gpd импортировать Earthpy.plot как EP импортировать cv2 импортировать ОС защита основной(): идентификаторxx= 0 # параметры синтаксический анализатор = argparse.ArgumentParser() parser.add_argument('-opt', type=str, require=True, help='Путь к файлу опции JSON.') opt = option.parse(parser.parse_args().opt, is_train=True) opt = option.dict_to_nonedict(opt) # Преобразовать в NoneDict, который возвращает None в случае отсутствующего ключа. соотношение = opt["масштаб"] print("Элементы НАБОРА ДАННЫХ", opt['datasets'].items) PreUp = opt["наборы данных"]["поезд"]["PreUP"] LR_down = opt["наборы данных"]["поезд"]["LR_down"] станда = opt["наборы данных"]["поезд"]["стенд"] если PreUp == True: соотношение = 5 # тренируйтесь с нуля ИЛИ возобновляйте обучение if opt['path']['resume_state']: # возобновление обучения резюме_state = torch.load(opt['path']['resume_state']) else: # обучение с нуля резюме_состояние = Нет util.mkdir_and_rename(opt['path']['experiments_root']) # переименовываем старую папку, если она существует util.mkdirs((путь для ключа, путь в opt['path'].items(), если не ключ == 'experiments_root' и «pretrain_model» не в ключе и «резюме» не в ключе)) # регистраторы конфигурации. До этого лог работать не будет util.setup_logger(Нет, opt['path']['log'], 'train', level=logging.INFO, screen=True) util.setup_logger('val', opt['path']['log'], 'val', level=logging.INFO) logger = logging.getLogger('base') если резюме_состояние: logger.info('Возобновление обучения с эпохи: {}, iter: {}.'.format( резюме_state['эпоха'], резюме_состояние['iter'])) option.check_resume(opt) # проверка параметров резюме logger.info(option.dict2str(opt)) # тензорный регистратор если opt['use_tb_logger'] и 'debug' отсутствуют в opt['name']: из импорта tensorboardX SummaryWriter tb_logger_train = SummaryWriter(log_dir='/mnt/gpid07/users/luis.salgueiro/git/mnt/BasicSR_2020/tb_logger/' + opt['name'] + "/train") tb_logger_val = SummaryWriter(log_dir='//mnt/gpid07/users/luis.salgueiro/git/mnt/BasicSR_2020/tb_logger/' + opt['name'] + "/val" ) # случайное зерно семя = opt['train']['manual_seed'] если семя отсутствует: семя = 100 #random.randint(1, 10000) logger.info('Случайное начальное число: {}'.format(seed)) util.set_random_seed(семя) torch.backends.cudnn.benckmark = Истина # torch.backends.cudnn.deterministic = Истина # ####################################### # ######## ЗАГРУЗЧИК ДАННЫХ ##################### # ####################################### # создаем загрузчик данных train и val для фазы dataset_opt в opt['datasets'].items(): если фаза == 'поезд': print("Вводный поезд НАБОРА ДАННЫХ......") train_set = create_dataset(dataset_opt) print("CREO DATASET train_set ", train_set) train_size = int(math.ceil(len(train_set) / dataset_opt['batch_size'])) logger.info('Количество изображений поездов: {:,d}, iters: {:,d}'.format( лен(train_set), train_size)) total_iters = int(opt['train']['niter']) total_epochs = int(math.ceil(total_iters/train_size)) logger.info('Всего необходимых эпох: {:d} для итеров {:,d}'.format( total_epochs, total_iters)) train_loader = create_dataloader(train_set, dataset_opt) print("Поездный погрузчик CREO: ", train_loader) фаза элиф == 'val': print("Вступление в фазу VAL....") val_set = create_dataset(dataset_opt) val_loader = create_dataloader(val_set, dataset_opt) logger.info('Количество изображений val в [{:s}]: {:d}'.format(dataset_opt['name'], лен(val_set))) еще: поднять NotImplementedError('Фаза [{:s}] не распознана.'.format(фаза)) утверждать, что train_loader не имеет значения None утверждать, что val_loader не имеет значения None # создать модель модель = create_model (опт) # возобновить обучение если резюме_состояние: print("Состояние ВОЗОБНОВЛЕНИЯ") start_epoch = резюме_состояние['эпоха'] текущий_шаг = резюме_состояние['iter'] model.resume_training(resume_state) # обрабатываем оптимизаторы и планировщики еще: текущий_шаг = 0 начальная_эпоха = 0 print("ПАСО..... В ЭТОМ ") # ####################################### # ######### обучение ################ # ####################################### # ii=0 logger.info('Начать обучение с эпохи: {:d}, iter: {:d}'.format(start_epoch, current_step)) для эпохи в диапазоне (start_epoch, total_epochs): для _, train_data в перечислении (train_loader): текущий_шаг += 1 если текущий_шаг > total_iters: перерыв # обновить скорость обучения model.update_learning_rate() # обучение model.feed_data(train_data) model.optimize_parameters(current_step) # поезд с журналами если current_step % opt['logger']['print_freq'] == 0: журналы = model.get_current_log() message = ' '.format( эпоха, current_step, model.get_current_learning_rate()) для k, v в logs.items(): сообщение += '{:s}: {:.4e} '.format(k, v) # тензорный регистратор если opt['use_tb_logger'] и 'debug' отсутствуют в opt['name']: если «тест» в k: tb_logger_val.add_scalar(k, v, current_step) еще: tb_logger_train.add_scalar(k, v, current_step) logger.info (сообщение) если current_step % opt['train']['val_freq'] == 0: avg_psnr_sr, avg_psnr_lr, avg_psnr_dif = 0,0, 0,0, 0,0 avg_ssim_lr, avg_ssim_sr, avg_ssim_dif = 0,0, 0,0, 0,0 avg_ergas_lr, avg_ergas_sr, avg_ergas_dif = 0,0, 0,0, 0,0 идентификатор = 0 частота прохода = 0,0 если idxx==0: best_psnr, best_ssim, best_ergas = 0.0, 0.0, 0.0 идентификаторxx=1 для _, val_data в перечислении (val_loader): идентификатор += 1 img_name = os.path.splitext(os.path.basename(val_data['LR_path'][0]))[0] img_dir = os.path.join(opt['path']['val_images'], img_name) # print("*****Img nameVaL: ", img_name) model.feed_data(val_data) модель.тест() визуальные эффекты = model.get_current_visuals() частота пропуска = 0 если стандарт == True: # печать("UTIL_STANDA") sr_img = util.tensor2imgStand(visuals['SR'], MeanVal = val_data["LR_mean"], StdVal = val_data["LR_std"]) # uint16 gt_img = util.tensor2imgStand(visuals['HR'], MeanVal = val_data["HR_mean"], StdVal = val_data["HR_std"]) # uint16 lr_img = util.tensor2imgStand(visuals['LR'], MeanVal = val_data["LR_mean"], StdVal = val_data["LR_std"]) # uint16 еще: # print("******UTIL_NORM**********") sr_img = util.tensor2imgNorm(visuals['SR'],out_type=np.uint8, min_max=(0, 1), MinVal=val_data["LR_min"], MaxVal=val_data["LR_max"], freqpass=val_data["lowpass_lr"] ) # uint16 gt_img = util.tensor2imgNorm(visuals['HR'],out_type=np.uint8, min_max=(0, 1), MinVal=val_data["HR_min"], MaxVal=val_data["HR_max"], freqpass=val_data["lowpass_hr"] ) # uint16 lr_img = util.tensor2imgNorm(visuals['LR'], out_type=np.uint8, min_max=(0, 1), MinVal=val_data["LR_min"], MaxVal=val_data["LR_max"], freqpass=val_data["lowpass_lr"]) # uint16 если LR_down==True или PreUp==False: dim2 = (gt_img.shape[1], gt_img.shape[1]) lr_img = cv2.resize(np.transpose(lr_img,(1,2,0)), dim2, интерполяция=cv2.INTER_NEAREST) lr_img = np.transpose(lr_img,(2,0,1)) # Сохраните изображения SR для справки если идентификатор < 10: util.mkdir(img_dir) save_img_path = os.path.join(img_dir, '{:s}_{:d}'.format(img_name, current_step)) # print("СОХРАНЕНИЕ УРОЖАЯ ПРЕДВАРИТЕЛЬНАЯ ПОДГОТОВКА", PreUp ) util.save_imgCROP(lr_img,gt_img,sr_img, save_img_path, соотношение, PreUp=PreUp) avg_psnr_sr += util.calculate_psnr2(sr_img, gt_img) avg_psnr_lr += util.calculate_psnr2(lr_img, gt_img) avg_ssim_lr += util.calculate_ssim2(lr_img, gt_img) avg_ssim_sr += util.calculate_ssim2(sr_img, gt_img) avg_ergas_lr += util.calculate_ergas(lr_img, gt_img, pixratio=соотношение) avg_ergas_sr += util.calculate_ergas(sr_img, gt_img, pixratio=соотношение) avg_psnr_sr = avg_psnr_sr/idx avg_psnr_lr = avg_psnr_lr/idx avg_psnr_dif = avg_psnr_lr - avg_psnr_sr avg_ssim_lr = avg_ssim_lr/idx avg_ssim_sr = avg_ssim_sr/idx avg_ssim_dif = avg_ssim_lr - avg_ssim_sr avg_ergas_lr = avg_ergas_lr/idx avg_ergas_sr = avg_ergas_sr/idx avg_ergas_dif = avg_ergas_lr - avg_ergas_sr # войти ПРОВЕРКА logger.info('# Validation # PSNR: {:.4e}'.format(avg_psnr_sr)) logger.info('# Проверка # SSIM: {:.4e}'.format(avg_ssim_sr)) logger.info('# Проверка # ERGAS: {:.4e}'.format(avg_ergas_sr)) logger_val = logging.getLogger('val') # регистратор проверки logger_val.info(' psnr_SR: {:.4e}'.format( эпоха, current_step, avg_psnr_sr)) logger_val.info(' psnr_LR: {:.4e}'.format( эпоха, current_step, avg_psnr_lr)) logger_val.info(' psnr_DIF: {:.4e}'.format( эпоха, current_step, avg_psnr_dif)) logger_val.info(' ssim_LR: {:.4e}'.format( эпоха, current_step, avg_ssim_lr)) logger_val.info(' ssim_SR: {:.4e}'.format( эпоха, current_step, avg_ssim_sr)) logger_val.info(' ssim_DIF: {:.4e}'.format( эпоха, current_step, avg_ssim_dif)) logger_val.info(' ergas_LR: {:.4e}'.format( эпоха, current_step, avg_ergas_lr)) logger_val.info(' ergas_SR: {:.4e}'.format( эпоха, current_step, avg_ergas_sr)) logger_val.info(' ergas_DIF: {:.4e}'.format( эпоха, current_step, avg_ergas_dif)) если current_step % opt['logger']['save_checkpoint_freq'] == 0: logger.info('Сохранение моделей и состояний обучения.') print("Текущий шаг: ", current_step) model.save(current_step) model.save_training_state(эпоха, текущий_шаг) logger.info('Сохранение окончательной модели.') model.save('последний') logger.info('Окончание обучения.') если __name__ == '__main__': основной()