From e8f33934023750bd3fb01a08698db6cceb6c9236 Mon Sep 17 00:00:00 2001 From: LielinJiang Date: Mon, 12 Oct 2020 03:59:58 +0000 Subject: [PATCH] rm some noused codes --- applications/DAIN/my_args.py | 92 ------------ applications/DAIN/predict.py | 278 ----------------------------------- applications/DAIN/util.py | 46 ------ 3 files changed, 416 deletions(-) delete mode 100644 applications/DAIN/my_args.py delete mode 100644 applications/DAIN/predict.py delete mode 100644 applications/DAIN/util.py diff --git a/applications/DAIN/my_args.py b/applications/DAIN/my_args.py deleted file mode 100644 index 8cbf551..0000000 --- a/applications/DAIN/my_args.py +++ /dev/null @@ -1,92 +0,0 @@ -import os -import datetime -import argparse -import numpy -import networks - -modelnames = networks.__all__ -# import datasets -datasetNames = ('Vimeo_90K_interp') #datasets.__all__ - -parser = argparse.ArgumentParser(description='DAIN') - -parser.add_argument('--debug', action='store_true', help='Enable debug mode') -parser.add_argument('--netName', - type=str, - default='DAIN', - choices=modelnames, - help='model architecture: ' + ' | '.join(modelnames) + - ' (default: DAIN)') - -parser.add_argument('--datasetName', - default='Vimeo_90K_interp', - choices=datasetNames, - nargs='+', - help='dataset type : ' + ' | '.join(datasetNames) + - ' (default: Vimeo_90K_interp)') -parser.add_argument('--video_path', - default='', - help='the path of selected videos') -parser.add_argument('--output_path', default='', help='the output root path') - -parser.add_argument('--seed', - type=int, - default=1, - help='random seed (default: 1)') - -parser.add_argument('--batch_size', - '-b', - type=int, - default=1, - help='batch size (default:1)') -parser.add_argument('--channels', - '-c', - type=int, - default=3, - choices=[1, 3], - help='channels of images (default:3)') -parser.add_argument('--filter_size', - '-f', - type=int, - default=4, - help='the size of filters used (default: 4)', - choices=[2, 4, 6, 5, 51]) - -parser.add_argument('--time_step', - type=float, - default=0.5, - help='choose the time steps') -parser.add_argument( - '--alpha', - type=float, - nargs='+', - default=[0.0, 1.0], - help= - 'the ration of loss for interpolated and rectified result (default: [0.0, 1.0])' -) -parser.add_argument('--frame_rate', - type=int, - default=None, - help='frame rate of the input video') - -parser.add_argument('--patience', - type=int, - default=5, - help='the patience of reduce on plateou') -parser.add_argument('--factor', - type=float, - default=0.2, - help='the factor of reduce on plateou') - -parser.add_argument('--saved_model', - type=str, - default='', - help='path to the model weights') -parser.add_argument('--no-date', - action='store_true', - help='don\'t append date timestamp to folder') -parser.add_argument('--use_cuda', - default=True, - type=bool, - help='use cuda or not') -parser.add_argument('--use_cudnn', default=1, type=int, help='use cudnn or not') diff --git a/applications/DAIN/predict.py b/applications/DAIN/predict.py deleted file mode 100644 index 5a69b41..0000000 --- a/applications/DAIN/predict.py +++ /dev/null @@ -1,278 +0,0 @@ -import os -import sys - -cur_path = os.path.abspath(os.path.dirname(__file__)) -sys.path.append(cur_path) - -import time -import glob -import numpy as np -from imageio import imread, imsave -from tqdm import tqdm -import cv2 - -import paddle.fluid as fluid -from paddle.utils.download import get_path_from_url -from ppgan.utils.video import video2frames, frames2video - -from util import * -from my_args import parser - -DAIN_WEIGHT_URL = 'https://paddlegan.bj.bcebos.com/applications/DAIN_weight.tar' - - -def infer_engine(model_dir, - run_mode='fluid', - batch_size=1, - use_gpu=False, - min_subgraph_size=3): - if not use_gpu and not run_mode == 'fluid': - raise ValueError( - "Predict by TensorRT mode: {}, expect use_gpu==True, but use_gpu == {}" - .format(run_mode, use_gpu)) - precision_map = { - 'trt_fp32': fluid.core.AnalysisConfig.Precision.Float32, - 'trt_fp16': fluid.core.AnalysisConfig.Precision.Half - } - config = fluid.core.AnalysisConfig(os.path.join(model_dir, 'model'), - os.path.join(model_dir, 'params')) - if use_gpu: - # initial GPU memory(M), device ID - config.enable_use_gpu(100, 0) - # optimize graph and fuse op - config.switch_ir_optim(True) - else: - config.disable_gpu() - - if run_mode in precision_map.keys(): - config.enable_tensorrt_engine(workspace_size=1 << 10, - max_batch_size=batch_size, - min_subgraph_size=min_subgraph_size, - precision_mode=precision_map[run_mode], - use_static=False, - use_calib_mode=False) - - # disable print log when predict - config.disable_glog_info() - # enable shared memory - config.enable_memory_optim() - # disable feed, fetch OP, needed by zero_copy_run - config.switch_use_feed_fetch_ops(False) - predictor = fluid.core.create_paddle_predictor(config) - return predictor - - -def executor(model_dir, use_gpu=False): - place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace() - exe = fluid.Executor(place) - program, feed_names, fetch_targets = fluid.io.load_inference_model( - dirname=model_dir, - executor=exe, - model_filename='model', - params_filename='params') - return exe, program, fetch_targets - - -class VideoFrameInterp(object): - def __init__(self, - time_step, - model_path, - video_path, - use_gpu=True, - key_frame_thread=0., - output_path='output'): - self.video_path = video_path - self.output_path = os.path.join(output_path, 'DAIN') - if model_path is None: - model_path = get_path_from_url(DAIN_WEIGHT_URL, cur_path) - - self.model_path = model_path - self.time_step = time_step - self.key_frame_thread = key_frame_thread - - self.exe, self.program, self.fetch_targets = executor(model_path, - use_gpu=use_gpu) - - def run(self): - frame_path_input = os.path.join(self.output_path, 'frames-input') - frame_path_interpolated = os.path.join(self.output_path, - 'frames-interpolated') - frame_path_combined = os.path.join(self.output_path, 'frames-combined') - video_path_output = os.path.join(self.output_path, 'videos-output') - - if not os.path.exists(self.output_path): - os.makedirs(self.output_path) - if not os.path.exists(frame_path_input): - os.makedirs(frame_path_input) - if not os.path.exists(frame_path_interpolated): - os.makedirs(frame_path_interpolated) - if not os.path.exists(frame_path_combined): - os.makedirs(frame_path_combined) - if not os.path.exists(video_path_output): - os.makedirs(video_path_output) - - timestep = self.time_step - num_frames = int(1.0 / timestep) - 1 - - if self.video_path.endswith('.mp4'): - videos = [self.video_path] - else: - videos = sorted(glob.glob(os.path.join(self.video_path, '*.mp4'))) - - for cnt, vid in enumerate(videos): - print("Interpolating video:", vid) - cap = cv2.VideoCapture(vid) - fps = cap.get(cv2.CAP_PROP_FPS) - print("Old fps (frame rate): ", fps) - - times_interp = int(1.0 / timestep) - r2 = str(int(fps) * times_interp) - print("New fps (frame rate): ", r2) - - out_path = video2frames(vid, frame_path_input) - - vidname = vid.split('/')[-1].split('.')[0] - - tot_timer = AverageMeter() - proc_timer = AverageMeter() - end = time.time() - - frames = sorted(glob.glob(os.path.join(out_path, '*.png'))) - - img = imread(frames[0]) - - int_width = img.shape[1] - int_height = img.shape[0] - channel = img.shape[2] - if not channel == 3: - continue - - if int_width != ((int_width >> 7) << 7): - int_width_pad = ( - ((int_width >> 7) + 1) << 7) # more than necessary - padding_left = int((int_width_pad - int_width) / 2) - padding_right = int_width_pad - int_width - padding_left - else: - int_width_pad = int_width - padding_left = 32 - padding_right = 32 - - if int_height != ((int_height >> 7) << 7): - int_height_pad = ( - ((int_height >> 7) + 1) << 7) # more than necessary - padding_top = int((int_height_pad - int_height) / 2) - padding_bottom = int_height_pad - int_height - padding_top - else: - int_height_pad = int_height - padding_top = 32 - padding_bottom = 32 - - frame_num = len(frames) - print('processing {} frames, from video: {}'.format(frame_num, vid)) - - if not os.path.exists(os.path.join(frame_path_interpolated, - vidname)): - os.makedirs(os.path.join(frame_path_interpolated, vidname)) - if not os.path.exists(os.path.join(frame_path_combined, vidname)): - os.makedirs(os.path.join(frame_path_combined, vidname)) - - for i in tqdm(range(frame_num - 1)): - first = frames[i] - second = frames[i + 1] - - img_first = imread(first) - img_second = imread(second) - '''--------------Frame change test------------------------''' - img_first_gray = np.dot(img_first[..., :3], - [0.299, 0.587, 0.114]) - img_second_gray = np.dot(img_second[..., :3], - [0.299, 0.587, 0.114]) - - img_first_gray = img_first_gray.flatten(order='C') - img_second_gray = img_second_gray.flatten(order='C') - corr = np.corrcoef(img_first_gray, img_second_gray)[0, 1] - key_frame = False - if corr < self.key_frame_thread: - key_frame = True - '''-------------------------------------------------------''' - - X0 = img_first.astype('float32').transpose((2, 0, 1)) / 255 - X1 = img_second.astype('float32').transpose((2, 0, 1)) / 255 - - if key_frame: - y_ = [ - np.transpose(255.0 * X0.clip(0, 1.0), (1, 2, 0)) - for i in range(num_frames) - ] - else: - assert (X0.shape[1] == X1.shape[1]) - assert (X0.shape[2] == X1.shape[2]) - - X0 = np.pad(X0, ((0,0), (padding_top, padding_bottom), \ - (padding_left, padding_right)), mode='edge') - X1 = np.pad(X1, ((0,0), (padding_top, padding_bottom), \ - (padding_left, padding_right)), mode='edge') - - X0 = np.expand_dims(X0, axis=0) - X1 = np.expand_dims(X1, axis=0) - - X0 = np.expand_dims(X0, axis=0) - X1 = np.expand_dims(X1, axis=0) - - X = np.concatenate((X0, X1), axis=0) - - proc_end = time.time() - o = self.exe.run(self.program, - fetch_list=self.fetch_targets, - feed={"image": X}) - - y_ = o[0] - - proc_timer.update(time.time() - proc_end) - tot_timer.update(time.time() - end) - end = time.time() - - y_ = [ - np.transpose( - 255.0 * item.clip( - 0, 1.0)[0, :, - padding_top:padding_top + int_height, - padding_left:padding_left + int_width], - (1, 2, 0)) for item in y_ - ] - time_offsets = [ - kk * timestep for kk in range(1, 1 + num_frames, 1) - ] - - count = 1 - for item, time_offset in zip(y_, time_offsets): - out_dir = os.path.join( - frame_path_interpolated, vidname, - "{:0>6d}_{:0>4d}.png".format(i, count)) - count = count + 1 - imsave(out_dir, np.round(item).astype(np.uint8)) - - num_frames = int(1.0 / timestep) - 1 - - input_dir = os.path.join(frame_path_input, vidname) - interpolated_dir = os.path.join(frame_path_interpolated, vidname) - combined_dir = os.path.join(frame_path_combined, vidname) - combine_frames(input_dir, interpolated_dir, combined_dir, - num_frames) - - frame_pattern_combined = os.path.join(frame_path_combined, vidname, - '%08d.png') - video_pattern_output = os.path.join(video_path_output, - vidname + '.mp4') - if os.path.exists(video_pattern_output): - os.remove(video_pattern_output) - frames2video(frame_pattern_combined, video_pattern_output, r2) - - return frame_pattern_combined, video_pattern_output - - -if __name__ == '__main__': - args = parser.parse_args() - predictor = VideoFrameInterp(args.time_step, args.saved_model, - args.video_path, args.output_path) - predictor.run() diff --git a/applications/DAIN/util.py b/applications/DAIN/util.py deleted file mode 100644 index 24ea274..0000000 --- a/applications/DAIN/util.py +++ /dev/null @@ -1,46 +0,0 @@ -import os, sys -import glob -import shutil - - -class AverageMeter(object): - """Computes and stores the average and current value""" - def __init__(self): - self.reset() - - def reset(self): - self.val = 0 - self.avg = 0 - self.sum = 0 - self.count = 0 - - def update(self, val, n=1): - self.val = val - self.sum += val * n - self.count += n - self.avg = self.sum / self.count - - -def combine_frames(input, interpolated, combined, num_frames): - frames1 = sorted(glob.glob(os.path.join(input, '*.png'))) - frames2 = sorted(glob.glob(os.path.join(interpolated, '*.png'))) - num1 = len(frames1) - num2 = len(frames2) - # assert (num1 - 1) * num_frames == num2 - for i in range(num1): - src = frames1[i] - imgname = int(src.split('/')[-1].split('.')[-2]) - assert i == imgname - dst = os.path.join(combined, '{:08d}.png'.format(i * (num_frames + 1))) - shutil.copy2(src, dst) - if i < num1 - 1: - try: - for k in range(num_frames): - src = frames2[i * num_frames + k] - dst = os.path.join( - combined, - '{:08d}.png'.format(i * (num_frames + 1) + k + 1)) - shutil.copy2(src, dst) - except Exception as e: - print(e) - print(len(frames2), num_frames, i, k, i * num_frames + k) -- GitLab