【百度网盘AI大赛 文档图像超分比赛】 SwinIR方案

【百度网盘AI大赛 文档图像超分比赛】 SwinIR方案

一、项目背景

        该项目基于百度网盘AI大赛——图像处理挑战赛:文档图像超分 比赛进行开发,下面将从比赛介绍和提交排名两个方面对项目背景进行具体阐述。

1.1 比赛介绍

  • 背景:大家平时在使用手机进行拍照、扫描的时候,往往会需要将图片放大的场景,可是分辨率放大,图片中的元素都变得模糊起来,进而难以使用。本次比赛希望选手们通过算法等知识技术,帮助人们将因为放大而模糊的图片复原,提高图片分辨率,实现文档图像的“无损放大”,让其重新发挥作用。

  • 分析:本次比赛提供了4篇参考文献:SwinIR: Image Restoration Using Swin Transformer(SwinIR)、Activating More Pixels in Image Super-Resolution Transformer(HAT)、Image Super-Resolution Using Very Deep Residual Channel Attention Networks(RCAN)和 Learned Image Downscaling for Upscaling using Content Adaptive Resampler(CAR)。CAR模型需要先对高分辨率图像下采样,再对下采样图像进行超分辨率,研究的更多是如何让下采样图像与真实的低分辨率图像尽可能相似。但在比赛测试中不可能提供高分辨率图像,因此首先排除选取该网络作为baseline。从目前论文中公布的自然图像超分辨评估结果来看,HAT要优于Swin IR优于RCAN,但是在实际应用中需要对算力、推理速度进行多方面考虑,Swin IR和HAT都是在多GPU上训练极长的时间才获得了论文中的SOTA性能,因此需要慎重选择。由于目前公开的baseline提供了RCAN模型,本项目基于Swin IR模型进行训练,并提供了HAT模型的paddle脚本文件,来解决当前公开项目缺乏另外2个模型训练案例的问题。

  • 训练策略: 原始的Swin IR 采用 64 × 64 64 \times 64 64×64 的图像块进行训练,但是对于1K到2K测评图像来说,预测时间过长,这里我们采用 128 × 128 128 \times 128 128×128 的图像块进行多阶段训练。根据之前“模糊文档恢复比赛” 经验 , Transformer类网络的优化往往存在着一些技巧型操作,比如“模糊文档恢复比赛”第一名对图片进行下采样之后直接获得了近三个点的增长。因此参赛者可以从域变换、数据增强策略等方面进行挖掘。截止11月8日,榜一大神的分数已经高达67.69,因此当前模型仍有极大的提升空间,同时 Transformer类网络也许并不是最优网络,需要参赛者自行探索。

  • 比赛链接https://aistudio.baidu.com/aistudio/competition/detail/493/0/introduction

1.2 提交排名

        当前公开版本在 A 榜分数为 0.64625, PSNR为 29.92764, SSIM为 0.9932, 单张图片测试耗时为 7.665s。在11月8日时,排名大约在11名左右。可作为 Swin IR 的预训练模型继续优化。

在这里插入图片描述



        当前项目的后续优化版本在 A 榜分数为 0.65014, PSNR为 30.6457, SSIM为 0.99382, 单张图片测试耗时为 6.6519s。在11月8日, 排名为第9名。

在这里插入图片描述

二、项目方案

        该项目采用SwinIR进行图像超分辨率,该模型的网络架构图如下:
在这里插入图片描述

        该网络由三个部分组成。浅层特征提取、深层特征提取和高质量图像重建。其中,深层特征提取模块由一系列残差 Swin Transformer模块组成。Swin IR在 图像超分辨率、图像降噪 和JPEG 压缩图像增强三个任务取得了SOTA的成绩,因此选作本次比赛的baseline模型。

三、数据说明

        该项目的数据来源于百度网盘AI大赛——图像处理挑战赛:文档图像超分的官方数据集。为了让网络更好地收敛,我们对数据集进行了数据增广、数据筛选等处理。

3.1 数据集介绍

        在本次比赛最新发布的数据集中,所有的图像数据均由真实场景采集得到,再通过技术手段进行相应处理,生成可用的脱敏数据集。该任务为image-to-image的形式,因此源数据和对应的超分后数据均以图片的形式来提供。

数据集构成

训练数据集构成

|- train_data  
    |- x
    |- x2
    |- x4

测试数据集构成

|- test_data  
    |- x
  • 本次比赛最新发布的数据集共包含训练集、A榜测试集、B榜测试集三个部分,其中训练集共3000个样本,A榜测试集共200个样本,B榜测试集共200个样本;
  • x 为原始图像数据,x2为原始数据分辨率放大两倍后的数据,x4为原始数据分辨率放大四倍后的数据(仅有训练集数据提供x2,x4图像 ,A榜测试集、B榜测试集数据均不提供);
  • x,x2 与 x4中的图片根据图片名称一一对应。

数据集下载

数据集类型是否开放百度网盘链接AI Studio链接
训练集已开放百度网盘下载AI studio引用
A榜测试集已开放百度网盘下载AI studio引用
B榜测试集未开放

数据集可视化展示

在这里插入图片描述

3.2 数据增广

  • 由于Swin IR模型采用Transformer架构,因此对图像的尺寸较为敏感,过大的图像尺寸会导致显存溢出,过小的尺寸又会增加模型耗时,因此将模型裁剪为 128 × 128 128 \times 128 128×128 的patch作为网络输入。

  • 为了提高网络鲁棒性,在数据集读取过程中,对图像块进行了随机翻转和旋转操作。

3.3 数据筛选

  • 采用“百度网盘AI大赛-模糊文档图像恢复比赛第1名方案”项目的方法,根据平均梯度,筛选掉图像纹理较少或者空白的图像块。

  • 由于数据预处理过程较长,我们已经将裁剪后的图像块上传到 AI Studio数据集 中。 想要对数据进行预处理的同学可以参考/home/aistudio/work/data_preparation_all.py文件。

3.4 数据划分

  • 裁剪后的数据集总共包含126837 张图像块, 不同阶段的数据集和划分比例如下表:
当前阶段数据集内容对应原始数据集压缩包数据集大小划分比例
Step 1patch_dataset01-03.ziptrain 38507 val 7860.98:0.02
Step 2patch_dataset104-08.ziptrain 66224 val 34860.95:0.05
Step 3patch_dataset
patch_dataset2
01-03.zip
09-10.zip
train 60613 val 67350.90:0.10

四、代码实现

  • 训练细节: Swin IR 模型采用多阶段训练策略进行训练,训练环境为 V100 32G, 如需在 V100 16G 环境下训练,请降低 batch 数量。每个阶段训练细节如下表:
当前阶段训练模式损失函数迭代次数初始学习率调整策略batch
Step 1evalCharbonnierLoss + MS-SSIM80k1e-4固定学习率4
Step 2trainL1Loss210k1e-4MultiStepDecay4
Step 3trainCharbonnierLoss + MS-SSIM540k0.25*1e-4固定学习率4
  • 与baseline差异: 与已有baseline不同,这里我们对文档图像的2倍超分辨和4倍超分辨进行联合训练, 2倍超分辨和4倍超分辨损失按 0.4 和 0.6 的比例进行求和。

  • 模型保存: 网络每 500 次迭代保存一次临时模型,以便进行网络恢复; 每 5000 次迭代在测试集上进行一次测试, 选取测试分数最高的模型保存。目前最优模型保存在 /home/aistudio/work/best_model/model_Step3_515k.param 路径下。

# 解压数据集,虽然控制台可以解压,但是强烈建议在终端运行如下命令, patch_dataset_Step1.zip有近4万*3张图像块,输出过多
# 可能会导致控制台卡顿,整个解压过程耗时约半个小时左右
!unzip -d /home/aistudio/ /home/aistudio/data/data173301/patch_dataset_Step1.zip
!unzip -d /home/aistudio/ /home/aistudio/data/data173301/patch_dataset_Step2.zip
!unzip -d /home/aistudio/ /home/aistudio/data/data173301/patch_dataset_Step3.zip
# 安装paddle_msssim包
!pip install paddle_msssim
# 启动第一阶段训练代码
%cd /home/aistudio/work/
# 创建输出文件夹,用于模型保存
!mkdir output sample
!python train_Step1.py
# 启动第二阶段训练代码,此处需要加载Step1的最佳模型进行权重初始化
%cd /home/aistudio/work/
!python train_Step2.py
# 启动第三阶段训练代码,此处需要加载Step2的最佳模型进行权重初始化
%cd /home/aistudio/work/
/
!python train_Step3.py

五、效果展示

  • 可视化结果保存于/home/aistudio/result/x2和/home/aistudio/result/x4文件夹。由于生成的超分图像过大,请下载到本地查看。

  • 提交: 可直接下载/home/aistudio/submit_project.zip文件或自行打包/home/aistudio/predict_code内的脚本和模型进行提交。

%cd  /home/aistudio
!mkdir /home/aistudio/result/ /home/aistudio/result/x/  /home/aistudio/result/x2 /home/aistudio/result/x4
!cp /home/aistudio/work/best_model/model_Step3_515k.param /home/aistudio/predict_code
%cd /home/aistudio/predict_code/
!python predict.py /home/aistudio/result/x/  /home/aistudio/result/x2   /home/aistudio/result/x4

六、总结提高

  • 目前Swin IR采用128×128 的图像块,batch size = 4 作为输入,耗时为 7.6s。 如果采用256×256的图像块或更大尺寸作为输入耗时可能降到5s以内; 因此可以先在128×128块图像块上进行预训练,再在256×256图像块上进行微调。

  • Swin IR对图像块进行预测试时存在部分空白或纹理较少图像块,可以使用平均梯度筛选出这些图像块进行区分处理。对于纹理较少图像块采用cubic插值法,其他部分采用Swin IR进行超分辨率,进一步缩短模型处理时间。

  • 此外,我们还实现了HAT模型, 该模型位于/home/aistudio/work/hat_arc.py路径下, 算力充足的小伙伴可以尝试使用HAT模型进行图像超分辨率。

七、参考项目

[1] 百度网盘AI大赛-模糊文档图像恢复比赛第1名方案

https://aistudio.baidu.com/aistudio/projectdetail/4500726?channelType=0&channel=0

此文章为搬运
原项目链接

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值