From 4953961af078a23ea4498c379c79fed35573dc3f Mon Sep 17 00:00:00 2001 From: LielinJiang <50691816+LielinJiang@users.noreply.github.com> Date: Tue, 17 Nov 2020 18:25:27 +0800 Subject: [PATCH] Refine codes and docs (#93) * refine codes docs * fix pix2pix to_tensor * fix apps --- applications/tools/video-enhance.py | 4 ++-- configs/cyclegan_cityscapes.yaml | 1 + configs/cyclegan_horse2zebra.yaml | 2 ++ configs/pix2pix_cityscapes.yaml | 1 + configs/pix2pix_cityscapes_2gpus.yaml | 2 ++ configs/pix2pix_facades.yaml | 2 ++ docs/en_US/install.md | 10 ++++++++++ docs/zh_CN/data_prepare.md | 2 +- docs/zh_CN/install.md | 11 +++++++++++ docs/zh_CN/tutorials/video_restore.md | 4 ++-- ppgan/apps/deoldify_predictor.py | 3 +++ ppgan/apps/realsr_predictor.py | 4 ++++ ppgan/engine/trainer.py | 5 +++-- ppgan/models/pix2pix_model.py | 6 ++++-- ppgan/utils/logger.py | 8 +++++--- 15 files changed, 53 insertions(+), 12 deletions(-) diff --git a/applications/tools/video-enhance.py b/applications/tools/video-enhance.py index 05fdacb..6a06050 100644 --- a/applications/tools/video-enhance.py +++ b/applications/tools/video-enhance.py @@ -76,7 +76,7 @@ parser.add_argument('--render_factor', default=32, help='model inputsize=render_factor*16') #process order support model name:[DAIN, DeepRemaster, DeOldify, RealSR, EDVR] -parser.add_argument('--proccess_order', +parser.add_argument('--process_order', type=str, default='none', nargs='+', @@ -85,7 +85,7 @@ parser.add_argument('--proccess_order', if __name__ == "__main__": args = parser.parse_args() - orders = args.proccess_order + orders = args.process_order temp_video_path = None for order in orders: diff --git a/configs/cyclegan_cityscapes.yaml b/configs/cyclegan_cityscapes.yaml index 66daebf..b1a9378 100644 --- a/configs/cyclegan_cityscapes.yaml +++ b/configs/cyclegan_cityscapes.yaml @@ -27,6 +27,7 @@ dataset: name: UnpairedDataset dataroot: data/cityscapes num_workers: 0 + batch_size: 1 phase: train max_dataset_size: inf direction: AtoB diff --git a/configs/cyclegan_horse2zebra.yaml b/configs/cyclegan_horse2zebra.yaml index 7c098dd..e4b6816 100644 --- a/configs/cyclegan_horse2zebra.yaml +++ b/configs/cyclegan_horse2zebra.yaml @@ -26,6 +26,8 @@ dataset: train: name: UnpairedDataset dataroot: data/horse2zebra + num_workers: 0 + batch_size: 1 phase: train max_dataset_size: inf direction: AtoB diff --git a/configs/pix2pix_cityscapes.yaml b/configs/pix2pix_cityscapes.yaml index 6d8e22e..a7bfb12 100644 --- a/configs/pix2pix_cityscapes.yaml +++ b/configs/pix2pix_cityscapes.yaml @@ -25,6 +25,7 @@ dataset: name: PairedDataset dataroot: data/cityscapes num_workers: 4 + batch_size: 1 phase: train max_dataset_size: inf direction: BtoA diff --git a/configs/pix2pix_cityscapes_2gpus.yaml b/configs/pix2pix_cityscapes_2gpus.yaml index f40c63a..6448438 100644 --- a/configs/pix2pix_cityscapes_2gpus.yaml +++ b/configs/pix2pix_cityscapes_2gpus.yaml @@ -24,6 +24,8 @@ dataset: train: name: PairedDataset dataroot: data/cityscapes + num_workers: 0 + batch_size: 1 phase: train max_dataset_size: inf direction: BtoA diff --git a/configs/pix2pix_facades.yaml b/configs/pix2pix_facades.yaml index e345870..1db2c13 100644 --- a/configs/pix2pix_facades.yaml +++ b/configs/pix2pix_facades.yaml @@ -24,6 +24,8 @@ dataset: train: name: PairedDataset dataroot: data/facades/ + num_workers: 0 + batch_size: 1 phase: train max_dataset_size: inf direction: BtoA diff --git a/docs/en_US/install.md b/docs/en_US/install.md index 7b4b0e4..748749d 100644 --- a/docs/en_US/install.md +++ b/docs/en_US/install.md @@ -46,3 +46,13 @@ git clone https://github.com/PaddlePaddle/PaddleGAN cd PaddleGAN pip install -v -e . # or "python setup.py develop" ``` + +### 4. Installation of other tools that may be used + +#### 4.1 ffmpeg + +If you need to use ppgan to handle video-related tasks, you need to install ffmpeg. It is recommended that you use [conda](https://docs.conda.io/en/latest/miniconda.html) to install: + +``` +conda install x264=='1!152.20180717' ffmpeg=4.0.2 -c conda-forge +``` diff --git a/docs/zh_CN/data_prepare.md b/docs/zh_CN/data_prepare.md index 0abd857..4602d75 100644 --- a/docs/zh_CN/data_prepare.md +++ b/docs/zh_CN/data_prepare.md @@ -70,7 +70,7 @@ custom_datasets #### 从网页下载 -pixel2pixel模型相关的数据集可以在[这里](hhttps://people.eecs.berkeley.edu/~tinghuiz/projects/pix2pix/datasets/)下载 +pixel2pixel模型相关的数据集可以在[这里](https://people.eecs.berkeley.edu/~tinghuiz/projects/pix2pix/datasets/)下载 #### 使用脚本下载 diff --git a/docs/zh_CN/install.md b/docs/zh_CN/install.md index 48e5ad9..c03ab63 100644 --- a/docs/zh_CN/install.md +++ b/docs/zh_CN/install.md @@ -47,3 +47,14 @@ pip install -v -e . # or "python setup.py develop" ``` 按照上述方法安装成功后,本地的修改也会自动同步到ppgan中 + + +### 4. 其他可能用到的工具安装 + +#### 4.1 ffmpeg + +如果需要使用ppgan处理视频相关的任务,则需要安装ffmpeg。这里推荐您使用[conda](https://docs.conda.io/en/latest/miniconda.html)安装: + +``` +conda install x264=='1!152.20180717' ffmpeg=4.0.2 -c conda-forge +``` diff --git a/docs/zh_CN/tutorials/video_restore.md b/docs/zh_CN/tutorials/video_restore.md index 06dcd1e..88b12a9 100644 --- a/docs/zh_CN/tutorials/video_restore.md +++ b/docs/zh_CN/tutorials/video_restore.md @@ -5,13 +5,13 @@ ### 使用applications中的video-enhance.py工具进行快速开始视频修复 ``` cd applications -python tools/video-enhance.py --input you_video_path.mp4 --proccess_order DAIN DeOldify EDVR --output output_dir +python tools/video-enhance.py --input you_video_path.mp4 --process_order DAIN DeOldify EDVR --output output_dir ``` #### 参数 - `--input (str)`: 输入的视频路径。 - `--output (str)`: 输出的视频路径。 -- `--proccess_order`: 调用的模型名字和顺序,比如输入为 `DAIN DeOldify EDVR`,则会顺序调用 `DAINPredictor` `DeOldifyPredictor` `EDVRPredictor` 。 +- `--process_order`: 调用的模型名字和顺序,比如输入为 `DAIN DeOldify EDVR`,则会顺序调用 `DAINPredictor` `DeOldifyPredictor` `EDVRPredictor` 。 #### 效果展示 ![](../../imgs/color_sr_peking.gif) diff --git a/ppgan/apps/deoldify_predictor.py b/ppgan/apps/deoldify_predictor.py index 6379d4d..d826f31 100644 --- a/ppgan/apps/deoldify_predictor.py +++ b/ppgan/apps/deoldify_predictor.py @@ -23,6 +23,7 @@ import paddle from ppgan.utils.download import get_path_from_url from ppgan.utils.video import frames2video, video2frames from ppgan.models.generators.deoldify import build_model +from ppgan.utils.logger import get_logger from .base_predictor import BasePredictor @@ -150,5 +151,7 @@ class DeOldifyPredictor(BasePredictor): base_name = 'result' out_path = os.path.join(self.output, base_name + '.png') pred_img.save(out_path) + logger = get_logger() + logger.info('Image saved to {}'.format(out_path)) return pred_img, out_path diff --git a/ppgan/apps/realsr_predictor.py b/ppgan/apps/realsr_predictor.py index 3f471d4..759d810 100644 --- a/ppgan/apps/realsr_predictor.py +++ b/ppgan/apps/realsr_predictor.py @@ -23,6 +23,8 @@ import paddle from ppgan.models.generators import RRDBNet from ppgan.utils.video import frames2video, video2frames from ppgan.utils.download import get_path_from_url +from ppgan.utils.logger import get_logger + from .base_predictor import BasePredictor REALSR_WEIGHT_URL = 'https://paddlegan.bj.bcebos.com/applications/DF2K_JPEG.pdparams' @@ -113,5 +115,7 @@ class RealSRPredictor(BasePredictor): base_name = 'result' out_path = os.path.join(self.output, base_name + '.png') pred_img.save(out_path) + logger = get_logger() + logger.info('Image saved to {}'.format(out_path)) return pred_img, out_path diff --git a/ppgan/engine/trainer.py b/ppgan/engine/trainer.py index 1454804..1fe21e8 100644 --- a/ppgan/engine/trainer.py +++ b/ppgan/engine/trainer.py @@ -105,8 +105,9 @@ class Trainer: step_start_time = time.time() - self.logger.info('train one epoch time: {}'.format(time.time() - - start_time)) + self.logger.info( + 'train one epoch use time: {:.3f} seconds.'.format(time.time() - + start_time)) if self.validate_interval > -1 and epoch % self.validate_interval: self.validate() self.model.lr_scheduler.step() diff --git a/ppgan/models/pix2pix_model.py b/ppgan/models/pix2pix_model.py index 99253fb..e44bba0 100644 --- a/ppgan/models/pix2pix_model.py +++ b/ppgan/models/pix2pix_model.py @@ -80,8 +80,10 @@ class Pix2PixModel(BaseModel): AtoB = self.cfg.dataset.train.direction == 'AtoB' - self.real_A = paddle.to_tensor(input['A' if AtoB else 'B']) - self.real_B = paddle.to_tensor(input['B' if AtoB else 'A']) + self.real_A = paddle.fluid.dygraph.to_variable( + input['A' if AtoB else 'B']) + self.real_B = paddle.fluid.dygraph.to_variable( + input['B' if AtoB else 'A']) self.image_paths = input['A_paths' if AtoB else 'B_paths'] diff --git a/ppgan/utils/logger.py b/ppgan/utils/logger.py index 43e4cca..6fb9701 100644 --- a/ppgan/utils/logger.py +++ b/ppgan/utils/logger.py @@ -23,7 +23,7 @@ logger_initialized = [] def setup_logger(output=None, name="ppgan"): """ - Initialize the detectron2 logger and set its verbosity level to "INFO". + Initialize the ppgan logger and set its verbosity level to "INFO". Args: output (str): a file name or a directory to save log. If None, will not save log file. @@ -35,6 +35,8 @@ def setup_logger(output=None, name="ppgan"): logging.Logger: a logger """ logger = logging.getLogger(name) + if name in logger_initialized: + return logger logger.setLevel(logging.INFO) logger.propagate = False @@ -71,9 +73,9 @@ def setup_logger(output=None, name="ppgan"): return logger -def get_logger(name, output=None): +def get_logger(name='ppgan'): logger = logging.getLogger(name) if name in logger_initialized: return logger - return setup_logger(name=name, output=name) + return setup_logger(name=name) -- GitLab