基于Paddle-DSR-Lab的百度网盘文档图像超分比赛Baseline

1. 比赛介绍

  • 背景:大家平时在使用手机进行拍照、扫描的时候,往往会需要将图片放大的场景,可是分辨率放大,图片中的元素都变得模糊起来,进而难以使用。这次比赛希望选手们通过算法等知识技术,帮助人们将因为放大而模糊的图片复原,提高图片分辨率,实现文档图像的“无损放大”,让其重新发挥作用。比赛链接
  • 分析:文字的超分其实近几年有一些优秀的工作,例如Scene Text Image Super-Resolution in the wildScene Text Telescope: Text-Focused Scene Image Super-Resolution。但是他们的评价标准是以OCR模型识别的准确率来比较的,目的是提高文字识别准确率,但是此次百度网盘的文档超分比赛,评分的标准是PSNRMS_SSIM,所以个人认为还是要回到刷图像重建质量的模型上
  • Paddle-DSR-Lab工具介绍:该工具为我基于PaddleGAN做的用于深度图超分的工具。因为注意到深度超分论文如WAFP-Net会在对比实验部分加入图像超分的网络作为对比,所以也将复现的图像超分网络加入。而本次比赛正好是使用图像超分的,所以就基于Paddle-DSR-Lab工具来简单打一下比赛
  • 本基线提交的结果为PSNR: 29.33225, MS_SSIM: 0.9629,最终分数为0.62811分,在10月15日时,A榜排名第四

2. 数据处理

2.1 数据增广

  • 训练的文档的图像很大,为减小训练过程中的IO占用,应该将其进行切块处理
  • 以步长512,大小为1024进行切块
  • 在训练的过程中,使用随机翻转、旋转等操作处理
# 克隆仓库代码,项目中已有仓库代码,可不执行此操作
#!git clone https://github.com/kongdebug/Paddle-DSR-Lab
正克隆到 'Paddle-DSR-Lab'...
remote: Enumerating objects: 124, done.[K
remote: Counting objects: 100% (124/124), done.[K
remote: Compressing objects: 100% (73/73), done.[K
remote: Total 124 (delta 48), reused 118 (delta 45), pack-reused 0[K
接收对象中: 100% (124/124), 71.85 KiB | 0 bytes/s, 完成.
处理 delta 中: 100% (48/48), 完成.
检查连接... 完成。
# 这里数据集中的09.zip存在一些问题,可以自行上传
# 解压数据集
!unzip -qo data/data170600/01.zip -d ./data/
!unzip -qo data/data170600/02.zip -d ./data/
!unzip -qo data/data170600/03.zip -d ./data/
!unzip -qo data/data170600/04.zip -d ./data/
!unzip -qo data/data170600/05.zip -d ./data/
!unzip -qo data/data170600/06.zip -d ./data/
!unzip -qo data/data170600/07.zip -d ./data/
!unzip -qo data/data170600/08.zip -d ./data/
!unzip -qo data/data170600/10.zip -d ./data/
# 安装依赖
%cd Paddle-DSR-Lab/
!pip install -r requirements.txt
# 由于图像块很大,所以将其切割成小的图像块
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/01/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/02/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/03/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/04/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/05/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/06/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/07/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/08/
!python data/process_DocumentIMG/process_doc_data.py --data-root ../data/10/
# 将每个文件夹下,剪裁得到的图像块进行合并,得到完整图像块
!python data/process_DocumentIMG/combine_data.py --root_dir ../data/ --save_root ./data/DocIMG/

2.2 数据筛选

  • 在进行切块处理后,会有以一些图像块是白色的,由于他们很容易恢复,对模型的收敛可能会产生负面的影响,导致收敛不充分
  • 在去模糊的比赛中我采取的方法是剔除空白图像块,A/B榜的排名是第4名,今天我看到了去模糊第一名的方案,他使用的模型跟我一样,但是在数据筛选时,是计算图像梯度,并将图像梯度小于10的图像块删掉,这里我采用同样的方法,也感谢榜一大哥公开了项目!salute!
# 数据清理模块
# 剪裁的图像块中,有的是空白的,或者纹理很少,
!python data/process_DocumentIMG/data_fileter.py --x_dir ./data/DocIMG/x --x2_dir ./data/DocIMG/x \
--x4_dir ./data/DocIMG/x --mode gradint

2.3 数据划分

  • 从筛选好的数据随机选取500张作为训练时候的验证集,以评估模型训练时的性能
!python data/process_DocumentIMG/split_data.py --source ./data/DocIMG/ --target ./data/test_doc/

3. 开始训练

  • 基于先前RCAN提供的预训练权重进行finetune训练,预训练权重在work文件夹下
  • 训练设置的轮数为100w,但是因为时间的关系,我没有训练那么多次,x4的模型训练了4w次,而x2的模型训练了6w次
  • 由于训练不够充分,所以SSIM指标并不会太高
  • 训练的配置文件在configs文件夹下,可以按需修改
# 训练x2的模型
!python -u tools/main.py --config-file configs/rcan_x2.yaml --load ../work/RCAN_X2_DIV2K.pdparams
# 训练x4的模型
!python -u tools/main.py --config-file configs/rcan_x4.yaml --load ../work/RCAN_X4_DIV2K.pdparams

4. 准备提交

  • 在训练过程中得到权重后,可以将权重重命名为RCAN_x2.pdparamsRCAN_x4.pdparams并放入SR-competition文件夹下
  • 权重文件是名字中含有weight的文件
  • 将权重放入后,执行以下代码压缩文件夹,下载result.zip即可提交
%cd /home/aistudio/SR-competition
/home/aistudio/SR-competition
!zip -r ../result.zip predict.py networks/ RCAN_x2.pdparams RCAN_x4.pdparams
  adding: predict.py (deflated 66%)
  adding: networks/ (stored 0%)
  adding: networks/rcan.py (deflated 75%)
  adding: networks/__pycache__/ (stored 0%)
  adding: networks/__pycache__/rcan.cpython-37.pyc (deflated 52%)
  adding: RCAN_x2.pdparams (deflated 25%)
  adding: RCAN_x4.pdparams (deflated 25%)

5. 讨论

5.1 结果分析

  • 提交的结果为PSNR: 29.33225, MS_SSIM: 0.9629,最终分数为0.62811分,目前A榜排名第四
  • 从榜单上看,如果单看PSNR值,仅训练了1/20总数的RCAN模型就能排到前4,但是,SSIM值比前三,仅为0.96,前三的SSIM就达到0.99+
  • 我猜原因可能有以下两点:
    • RCAN模型很大,还没有收敛,SSIM值比较低,还需要继续训练
    • 由于RCAN预测需要较大的显存,全图预测会导致显存爆了,因此采用剪裁预测的策略,预测图像块的大小会导致SSIM的损失
  • 以上原因只是猜想,还没有时间进行验证,毕竟RCAN确实很难训练,最近显卡又比较紧张
  • 由于是切块预测,用时比较长,达到了9s,后期需要优化的

5.2 优化思路

  • RCAN-it的研究表明,超分辨率重建任务大多数是欠拟合的,他们加大训练轮数和patch size来训练RCAN,效果可以媲美SwinIR,同时速度比SwinIR快,所以有算力的同学可以嗯冲,肯定可以涨点
  • 考虑使用MS_SSIM损失来进行微调,提升MS_SSIM的分数
  • 模型还需要考虑比赛推理速度需要每张图像超分在5s之内,所以可以考虑通道缩减和减少深度的操作来使推理时间
  • 对于大图的超分,Class-SR有做相应的优化,即切块预测时进行判断,需要大模型还是小模型,以达到节省资源提升速度的效果,不过实际操作还没做过,paddle有Class-SR-RCAN的复现过

6. 彩蛋

  • 开源不易,要是觉得这份baseline还可以,可以到原仓库fork或star呀,仓库地址:https://github.com/kongdebug/Paddle-DSR-Lab
  • star后的同学可以发邮件给我,我将提供此次训练6w轮和4w轮的权重,大家可以拿去提交或finetune,邮箱:keyk_yuanhang@163.com

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

此文章为搬运
原项目链接

Logo

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

更多推荐