HINet

HINet: Half Instance Normalization Network for Image Restoration 论文复现

官方源码

AI Studio项目地址

1. 简介

在这里插入图片描述

HINet创新性地将Instance Normalization的方法应用到图像复原这种low-level的任务上,提出了HIN Block并以此构建了多阶段网络,以提高图像复原的质量,并达到了SOTA。

2. 复现精度

原文结果:SIDD PSNR: 39.99 SSIM: 0.958

复现结果:SIDD PSNR: 39.91 SSIM: 0.958

3. 数据集

SIDD(Smartphone Image Denoising Dataset)数据集是CVPR2018的一篇论文提出的,用于手机相机降噪研究的数据集。SIDD用了5种不同的手机拍摄了10个场景下,总共30000张在不同光照条件下的带噪声的图像,同时也还有对应的“无噪声”的真实图像

数据集处理参考链接

4.文件结构

hinet_paddle
    |-- dataloaders
    |-- SIDD_Data
         |-- train                 # SIDD-Medium 训练数据
         |-- val                   # SIDD 测试数据
    |-- SIDD_patches
         |-- train_mini            # 小训练数据,用于TIPC测试
         |-- val_mini              # 小测试数据,用于TIPC测试
    |-- logs                       # 训练日志
    |-- test_tipc                  # TIPC: Linux GPU/CPU 基础训练推理测试
    |-- networks
         |-- hinet_arch.py       # HINet模型代码
    |-- pretrained_models          # 预训练模型
    |-- utils                      # 一些工具代码
    |-- config.py                  # 配置文件
    |-- export_model.py            # 预训练模型的导出代码
    |-- infer.py                   # 模型推理代码
    |-- LICENSE                    # LICENSE文件
    |-- losses.py                  # 损失函数
    |-- predict.py                 # 模型预测代码
    |-- README.md                  # README.md文件
    |-- sidd_data_preprocessing.py # SIDD数据预处理代码
    |-- test_denoising_sidd.py     # 测试SIDD数据上的指标
    |-- train.py                   # TIPC训练测试代码
    |-- train_denoising_1card.py   # 单机单卡训练代码
    |-- train_denoising_4cards.py  # 单机多卡训练代码
    |-- training_1card.yml         # 单机单卡训练配置文件
    |-- training_4cards.py         # 单机多卡训练配置文件

5. 环境依赖

PaddlePaddle == 2.3.0

6. 快速开始

安装相关包

!pip install yacs
!pip install natsort
!pip install scikit-image==0.19.2
!pip install reprod_log
!pip install https://paddleocr.bj.bcebos.com/libs/auto_log-1.2.0-py3-none-any.whl

准备数据集

import os
os.chdir('hinet_paddle')
os.mkdir('SIDD_Data')
os.chdir('SIDD_Data')
!unzip ~/data/data149460/SIDD.zip
os.chdir('..')
os.chdir('SIDD_Data/train')
!mv gt_crops groundtruth
!mv input_crops input
os.chdir('../..')
os.chdir('SIDD_Data/val')
!mv gt_crops groundtruth
!mv input_crops input
os.chdir('../..')

拷入预训练模型

os.mkdir('pretrained_models')
!mv ~/data/data152642/model_best.pdparams pretrained_models/

训练注意事项

GPU数量改变时,须保证

total_batchsize*iter == 8gpus*8bs*400000iters

与官方保持一致

训练代码

!python train_denoising_1card.py

测试代码

!python test_denoising_sidd.py --weights ./pretrained_models/model_best.pdparams

推理代码

!python predict.py --model_ckpt ./pretrained_models/model_best.pdparams --data_path ./SIDD_patches/val_mini/ --save_path results/ --save_images

7. 心得

之前一直习惯用别的深度学习框架,利用这次难得的机会,正好学习一下paddle的框架,体验下来感觉基本上是无缝切换了,用起来也比较简单,上手很快。经历了整个复现的过程,感觉不仅仅是对复现的论文有了更深入的理解,而且也学会了paddle基础的使用,给自己的技能库又增加了一项,挺有收获的。

另外感谢HINet-officialMIRNet_paddle分享了他们的代码,在本次复现过程中提供了帮助,以及AI Studio提供的算力与答疑支持。

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐