# IRN_gpu **Repository Path**: sudo-aimer/IRN_gpu ## Basic Information - **Project Name**: IRN_gpu - **Description**: IRN_gpu - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-08-26 - **Last Updated**: 2022-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 目录 - [目录](#目录) - [IRN描述](#IRN描述) - [模型架构](#模型架构) - [数据集](#数据集) - [环境要求](#环境要求) - [脚本说明](#脚本说明) - [脚本及样例代码](#脚本及样例代码) - [脚本参数](#脚本参数) - [快速入门](#快速入门) - [训练过程](#训练过程) - [训练](#训练) - [分布式训练](#分布式训练) - [评估过程](#评估过程) - [评估](#评估) - [模型描述](#模型描述) - [性能](#性能) - [训练性能](#训练性能) - [评估性能](#评估性能) - [随机情况说明](#随机情况说明) - [ModelZoo主页](#modelzoo主页) # IRN描述 高分辨率数字图像通常被缩小,以适应各种显示屏或节省存储和带宽的成本,同时调整后缩放以恢复原始分辨率或缩放图像中的细节。然而,由于高频信息的丢失,典型的图像降尺度是一种非影射映射,这导致了逆上尺度过程的不适定问题,并对从降尺度低分辨率图像中恢复细节提出了巨大的挑战。简单地用图像超分辨率方法进行缩放会导致恢复性能不理想,该可逆重缩放网络 (IRN)从新的角度对缩小和放大过程进行建模来解决这个问题,即可逆双射变换,在缩小过程中使用遵循特定分布的潜在变量来捕获丢失信息的分布,这可以在很大程度上减轻图像放大的不适定性质,以生成视觉上令人愉悦的低分辨率图像。通过这种方式,通过网络将随机绘制的潜在变量与低分辨率图像反向传递,从而使放大变得易于处理。 本示例主要针对IRN提出的深度神经网络架构以及训练过程进行了实现。 [Invertible-Image-Rescaling](https://link.springer.com/chapter/10.1007%2F978-3-030-58452-8_8) :Mingqing Xiao , Shuxin Zheng , Chang Liu , Yaolong Wang , Di He1 , Guolin Ke , Jiang Bian , Zhouchen Lin , and Tie-Yan Liu # 模型架构 ![pic](./figures/architecture.png) # 数据集 使用的数据集:[DIV2K]() 常用的训练和测试数据集可以在[这里](https://github.com/xinntao/BasicSR/blob/master/docs/DatasetPreparation.md)下载。 - 数据集数量: - 训练集:共 800 张图像 - 测试集:共 100 张图像 - 数据格式:png文件 - 注:数据将在src/data/util.py中处理。 ```shell DIV2K_data ├── DIV2K_train_HR/ # 训练集数据 └── DIV2K_valid_HR/ # 测试集数据 ``` # 环境要求 - 硬件(GPU) - 使用GPU处理器来搭建硬件环境。 - 框架 - [MindSpore](https://www.mindspore.cn/install/en) - 如需查看详情,请参见如下资源: - [MindSpore教程](https://www.mindspore.cn/tutorials/zh-CN/master/index.html) - [MindSpore Python API](https://www.mindspore.cn/docs/api/en/master/index.html) # 脚本说明 ## 脚本及样例代码 ```bash ├── README.md # 说明文档 ├── script │ ├── run_distribute_train.sh # GPU处理器环境多卡训练脚本 │ ├── run_eval.sh # GPU处理器环境评估脚本 │ └── run_standalone_train.sh # GPU处理器环境单卡训练脚本 ├── src │ ├── data │ │ ├── __init__.py # 数据处理方法 │ │ ├── dataset.py # 数据集处理 │ │ └── util.py # 数据集读取图片缩放等 │ ├── networks.py # IRN网络定义等 │ ├── optim │ │ ├── warmup_cosine_annealing_lr.py # 余弦退火学习率算法 │ │ └── warmup_multisteplr.py # 多步学习率算法 │ ├── metrics.py # 度量指标计算 │ ├── model.py # 网络模型结构 │ ├── loss.py # 损失函数 │ └── util.py # 图片处理方法 ├── train.py # 训练网络 └── eval.py # 测试网络 ``` ## 脚本参数 主要参数如下: ```python datasets: train: name: DIV2K mode: LQGT batch_size: 8 #### network structures network_G: which_model_G: subnet_type: DBNet in_nc: 3 out_nc: 3 block_num: [8, 8] scale: 4 init: xavier #### training settings: learning rate scheme, loss train: lr_G: float 2e-4 beta1: 0.9 beta2: 0.999 epochs: 5000 warmup_iter: -1 # no warm up lr_scheme: MultiStepLR lr_steps: [100000, 200000, 300000, 400000] lr_gamma: 0.5 pixel_criterion_forw: l2 pixel_criterion_back: l1 manual_seed: 10 val_freq: float 5e3 lambda_fit_forw: 16. lambda_rec_back: 1 lambda_ce_forw: 1 weight_decay_G: float 1e-5 gradient_clipping: 10 ``` # 快速入门 通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估: ## 训练过程 ### 单卡训练 - GPU处理器环境运行 ```shell #单卡训练 用法:bash run_standalone_train.sh [DEVICE_ID] [SCALE] [DATASET_GT_PATH] 示例:bash run_standalone_train.sh 0 2 ./DIV2K_train_HR ``` 上述python命令将在后台运行,您可以通过train.log文件查看结果。 ### 分布式训练 - GPU处理器环境运行 ```shell #分布式训练 用法:bash run_distribute_train.sh [DEVICE_NUM] [DATASET_GT_PATH] [SCALE] 示例:bash run_distribute_train.sh 4 ./DIV2K_train_HR 2 ``` 上述python命令将在后台运行,您可以通过train.log文件查看结果。 ## 评估过程 ### 评估 在运行以下命令之前,请检查用于评估的检查点路径。 ```python #评估 用法:bash run_eval.sh [DEVICE_ID] [SCALE] [DATASET_GT_PATH] [CHECKPOINT_PATH] 示例:bash run_eval.sh 0 2 ./DIV2K_train_HR ./ckpt/x2001.ckpt ``` ## 导出脚本 将训练好的模型导出为AIR、ONNX或MINDIR格式: ```bash # python export.py -h usage: export.py [-h] [--scale {2,4}] [--G_scale {2,4}] [--device_id DEVICE_ID] [--resume_state CHECKPOINT_PATH] [--file_name FILE_NAME] [--file_format {MINDIR}] [--device_target {GPU,CPU}] WRN with AutoAugment export. optional arguments: -h, --help Show this help message and exit --scale {2,4} Rescaling parameter --G_scale{2,4} Net rescaling parameter --device_id DEVICE_ID Device id. --resume_state CHECKPOINT_PATH Checkpoint file path. --file_name FILE_NAME Output file name. --file_format {AIR,ONNX,MINDIR} Export format. --device_target {GPU,CPU} Device target. ``` # 模型描述 ## 性能 ### 训练性能 | 参数 | GPU | | ------------- | ------------------------------------------------------------| | 资源 | A100 | | 上传日期 | 2021-11-21 | | MindSpore版本 | 1.3.0 | | 数据集 | DIV2K | | 训练参数 | epoch=5000, batch_size =8, lr=0.0002 | | 优化器 | Adam | | 损失函数 | ReconstructionLoss | | 输出 | Reconstructed HR image | | 速度 (X2) | 4卡:1279 ms/step | | 总时长 (X2) | 4卡:2664 mins | | 速度 (X4) | 4卡:1956 ms/step | | 总时长 (X4) | 4卡:4074 mins | | 微调检查点 | 49.97M(.ckpt文件) | ### 评估性能 | 参数 | GPU | | ------------- | -----------------------------------------------------------| | 资源 | A100 | | 上传日期 | 2021-11-21 | | MindSpore版本 | 1.3.0 | | 数据集 | DIV2K | | batch_size | 8 | | 输出 | Reconstructed HR image | | PSNR (X2) | 44.32 | | PSNR (X4) | 35.07 | | 输出 | Reconstructed HR image | | 总时长 (X2) | 70.17 mins | | 总时长(X4) | 84.38 mins | | 微调检查点 | 49.97M(.ckpt文件) | # 随机情况说明 在train.py中,我们设置了“train_net”函数内的种子。 # ModelZoo主页 请浏览官网[主页](https://gitee.com/mindspore/mindspore/tree/master/model_zoo)。