提交 c2b3923f 编写于 作者: L LielinJiang

Merge branch 'master' of https://github.com/PaddlePaddle/PaddleGAN into release/0.1.0

......@@ -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:
......
......@@ -27,6 +27,7 @@ dataset:
name: UnpairedDataset
dataroot: data/cityscapes
num_workers: 0
batch_size: 1
phase: train
max_dataset_size: inf
direction: AtoB
......
......@@ -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
......
......@@ -25,6 +25,7 @@ dataset:
name: PairedDataset
dataroot: data/cityscapes
num_workers: 4
batch_size: 1
phase: train
max_dataset_size: inf
direction: BtoA
......
......@@ -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
......
......@@ -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
......
......@@ -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
```
......@@ -19,7 +19,7 @@ python tools/psgan_infer.py \
--config-file configs/makeup.yaml \
--model_path /your/model/path \
--source_path docs/imgs/ps_source.png \
--reference_dir docs/imgs/ref/ps_ref \
--reference_dir docs/imgs/ref \
--evaluate-only True
```
**params:**
......
docs/imgs/ref/ps_ref.png

88.4 KB | W: | H:

docs/imgs/ref/ps_ref.png

98.9 KB | W: | H:

docs/imgs/ref/ps_ref.png
docs/imgs/ref/ps_ref.png
docs/imgs/ref/ps_ref.png
docs/imgs/ref/ps_ref.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -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/)下载
#### 使用脚本下载
......
......@@ -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
```
......@@ -19,7 +19,7 @@ python tools/psgan_infer.py \
--config-file configs/makeup.yaml \
--model_path /your/model/path \
--source_path docs/imgs/ps_source.png \
--reference_dir docs/imgs/ref/ps_ref \
--reference_dir docs/imgs/ref \
--evaluate-only True
```
**参数说明:**
......
......@@ -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)
......
......@@ -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
......@@ -210,8 +210,10 @@ class PSGANPredictor(BasePredictor):
ref_img_name = os.path.split(reference_path)[1]
if not os.path.exists(self.output_path):
os.makedirs(sefl.output_path)
os.makedirs(self.output_path)
save_path = os.path.join(self.output_path,
'transfered_ref_' + ref_img_name)
image.save(save_path)
print('Transfered image {} has been saved!'.format(save_path))
print('done!!!')
......@@ -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
......@@ -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()
......
......@@ -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']
......
......@@ -18,12 +18,12 @@ import sys
from paddle.distributed import ParallelEnv
logger_initialized = {}
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
......@@ -67,13 +69,13 @@ def setup_logger(output=None, name="ppgan"):
fh.setLevel(logging.DEBUG)
fh.setFormatter(plain_formatter)
logger.addHandler(fh)
logger_initialized.append(name)
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)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册