文章目录
单帧图像超分辨率
1. 环境搭建
远程环境
服务器, Ubuntu 16.04, GPU 1080 Ti
本地应用
- MobaXterm(与远程建立ssh连接,方便SFTP方式管理远程文件)
- Sublime(作为本地文本阅读器使用, Markdown,Code)
- Pycharm(可选,方便工程管理,调试)
- Vscode(可选,方便工程管理,调试)
2. 框架学习
- 此处向Xinntao前辈学习,使用其BasicSR框架,此处为Github地址。
- 该框架可实现三类深度超分网络, PSNR-oriented SR(如 SCRCNN, SRResNet等),Enhanced SRGAN(同时可训练SRGAN),以及SFTGAN。
- 代码分为五大部分
- 依赖关系
- Python 3 (Recommend to use [Anaconda] (https://www.anaconda.com/download/#linux))
- PyTorch >= 0.4.0
- NVIDIA GPU + CUDA
- Python packages:
pip install numpy opencv-python lmdb scikit-image
- [option] Python packages: [
pip install tensorflow tensorboard_logger
] (https://github.com/xinntao/BasicSR/tree/master/codes/utils), for visualizing curves.
- 代码
整体代码框架如[下图][1]所示:
主要是数据准备(训练集,验证集,测试集),模型选取,参数设定。
- 依赖关系
3. SRResnet的具体实现
本框架所选用默认训练集为DIV2K(分为训练部分和测试部分),本次实验所选用验证(测试)集为Set5。
- DIV2K数据集处理:
- a.先下载得到 DIV2K_train_HR与DIV2K_valid_HR两部分数据;
- b.然后用codes/scripts中的 extract_subimags_single.py处理(需要修改其中保存路径),分别得到DIV2K_train_HR_sub,和DIV2K_valid_HR_sub;
- c.接着用codes/scripts中的generate_mod_LR_bic.m进行处理(需要修改其中保存路径),此步为生成低分辨率的图像(设定mod=4, scale=4),得到DIV2K_train_HR_sub_bicLRx4,以及DIV2K_valid_HR_sub_bicLRx4;
- d.接下来用codes/scripts中的create_lmdb.py处理,生成相应的DIV2K_train_HR_sub.imdb和DIV2K_valid_HR_sub_bicLRx4.imdb,至此图片处理暂时完成。
- (对于Set5及Set14类似,但不需进行b的处理)
- 修改train_sr.json
需要添加一些路径信息,如下所示,根据自己的具体设置更改。
, "path": {
"root": "/media/sdc/cyli/BasicSR"
, "experiments_root":"/media/sdc/cyli/BasicSR/experiments/SRresnet_PSNR_x4_DIV2K/"
, "models":"/media/sdc/cyli/BasicSR/experiments/SRresnet_PSNR_x4_DIV2K/models"
, "log":"/media/sdc/cyli/BasicSR/experiments/SRresnet_PSNR_x4_DIV2K"
, "val_images": "/media/sdc/cyli/BasicSR/experiments/SRresnet_PSNR_x4_DIV2K/val_images"
, "pretrain_model_G": null
-
训练开始
待修改train_sr.json完成后可以,进入train.py所在目录,输入 python test.py -opt options/test/test_sr.json 即可开始训练。如果顺利在终端界面会出现如下图所示的输出信息。
-
训练过程可视化
可用Tensorboard 实现训练过程的可视化,在开始训练时会出现“BasicSR/tb_logger/XX”文件夹,在另一终端窗口输入 tensorboard --logdir ./BasicSR/tb_logger/XX/ ,会有输出结果类似于 “TensorBoard 1.12.0 at http://ubuntu:6006 (Press CTRL+C to quit)”,此时将ubuntu替换为你所用的远程服务器的地址,并在浏览器窗口打开相应地址即可得到类似如下图的结果。
-
(未完待续)
[1] : https://github.com/xinntao/public_figures/blob/master/BasicSR/code_framework.png
Network Building
###1. First meet
train.py
from models import create_model
# Create model
model = create_model(opt) #返回何种类型的model, sr, srgan, srrgan, stfgan
Here the opt is a dictionary
{
'name': 'DnCNN_S_PSNR_sigma25_001', 'use_tb_logger': True, 'model': 'sr', 'scale': 1, 'gpu_ids': [0, 1, 2, 3], 'datasets': {
'train': {
'name': 'DIV2K', 'mode': 'NHR', 'dataroot_HR': '/media/sdc/cyli/datasets/DIV2K800/DIV2K800_train_sub/', 'dataroot_LR': None, 'subset_file': None, 'use_shuffle': True, 'n_workers': 8, 'batch_size': 128, 'HR_size': 40, 'use_flip': True, 'use_rot': True, 'data_type': 'img', 'phase': 'train', 'scale': 1}, 'val': {
'name': 'val_set5', 'mode': 'NHR', 'dataroot_HR': '/media/sdc/cyli/datasets/val_set5/Set5/', 'dataroot_LR': None, 'phase': 'val', 'HR_size': 40, 'scale': 1, 'data_type': 'img'}}, 'path': {
'root': '/media/sdc/cyli/BasicSR', 'experiments_root': '/media/sdc/cyli/BasicSR/experiments/DnCNN_S_PSNR_sigma25_001', 'models': '/media/sdc/cyli/BasicSR/experiments/DnCNN_S_PSNR_sigma25_001/models', 'log': '/media/sdc/cyli/BasicSR/experiments/DnCNN_S_PSNR_sigma25_001', 'val_images': '/media/sdc/cyli/BasicSR/experiments/DnCNN_S_PSNR_sigma25_001/val_images', 'pretrain_model_G': None}, 'network_G':