高考想重来,脑补橡皮擦,再卷网盘赛二,榜评分0.55599

基于MTRNet++ 实现图像文字擦除,榜评分0.55599

百度网盘大赛二,手写文字擦除

一、 如果高考能重来一次…

1.这是不是考完试,卷纸发下来之后,你的姿势

2.面对试卷上的错题,心里会想点什么…

3.脑海中一定想过:如果有橡皮擦

4.考试能不能重来一次

5.高考想重来,前提是要有橡皮擦

二、做橡皮擦要分几步

给定一幅自然场景图像,只将图像中文字区域抹去而不改动其他区域像素值的方法称为文字擦除算法。该方法在隐私保护,身份信息篡改,数据增广等领域有着广泛的应用和研究前景。

受传统生成对抗网络(GAN)算法的启发,基于深度学习的文字擦除算法都采用了类似的生成器+判别器的结构,其损失函数为:

  1. 整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。
  2. D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。
  3. G的目的:上面提到过,D(G(z))是D网络判断G生成的图片是否真实的概率,G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能的大,这时V(D, G)会变小。因此我们看到式子的最前面的记号是min_G。
  4. D的目的:D的能力越强,D(x)应该越大,D(G(z))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)。

三、怎么做一个有思想的橡皮檫:MTRNet++

文字擦除可以分为两个子任务:1)文字区域定位。2)文字内容擦除

为了将两个子任务进行更好的学习,从而实现更准确的文字擦除结果,MTRNet在输入引入文字分割结果,让网络能够感知文字区域的位置信息,从而降低任务难度,实现更准确的擦除结果。但是由于需要提前知道文字区域的准确位置信息,所以这些方法具有一定的局限性。

MTRNet++在STRNet基础上进行了改进(下图),通过引入一个微调子网络降低了整体网络对输入位置信息的依赖性,从而实现更鲁棒的文字擦除算法。

1.生成器由三个分支组成:掩码精化分支、粗修分支和接在两个分支后面的精修分支。

2.输入数据由图像和掩码按通道连接而成,掩码可以随机生成,也可以通过预处理得到。

3.判别器是PatchGAN结构,也可以是加了谱归一化的SN-PatchGAN。

4.生成器的损失,由L1,Style,Perceptual和对抗损失组成:

5.判别器的损失是对抗损失:

四、制作橡皮擦

#1.准备原料:解压比赛的数据集
!unzip data/data121261/dehw_train_dataset.zip -d data/ >>/dev/null
!unzip data/data121261/dehw_testA_dataset.zip -d data/ >>/dev/null
#2.准备工具
!pip install scikit_image -q
#3.用训练图像和标签生成掩码
#%cd work/scripts/
#!python generate_bbox.py
#4.调好原料比例,生成数据集
#%cd work/scripts/
#!python create_dataset.py
#5.调好配方,其中MASK类型8为固定生成;
#  或者用上面生成的BBOX Mask,MASK类型设为7;
#  如果是图像类型的Mask,设为3。
#!cat /home/aistudio/work/config/config.yml
#5.反复制作
%cd /home/aistudio/work/
!python train.py

(1)output目录下文件夹的log目录下保存日志文件,训练过程中的参数保存在model目录下。

(2)断点接续训练,在config.yml文件中设置G_MODEL_PATH和D_MODEL_PATH为保存过模型的路径。

(3)可以通过左侧的VisualDL的数据模型可视化功能,查看训练指标和训练过程中生成的图像。

                             训练指标可视化

                           训练过程生成的图像

  上图中:左为输入原始图像,    中间为标签图像,        右边为生成图像
#6.检查质量
%cd /home/aistudio/work/
!python test.py --config /home/aistudio/work/config/config.yml \
    --mode 3 --dataset_root /home/aistudio/data/dehw_testA_dataset/ \
    --pretrained /home/aistudio/output/20211222-060441/model/MaskInpaintModel_gen_30000.pdparams
#7.试试效果,压缩文件提交评分
%cd /home/aistudio/work/test_result/
!zip result.zip *.png *.txt

保存的文件在test_result路径中,进入该路径创建readme.txt文件,输入要求的内容:

训练框架:PaddlePaddle

代码运行环境:V100

是否使用GPU:是

单张图片耗时/s:1

模型大小:45

其他说明:算法参考MTRNet++

总结

手写文字擦除比赛的数据集很有挑战性,涨点的思路供参考:

1.利用外部数据和预训练模型,在比赛数据集在微调;

2.优化Mask的生成方式,准确定位待擦除的文字区域;

3.调整模型结构;

4.调整Config文件中的超参数。

上表是论文中显示,MTRNet++在SCUT和Oxford数据集上获得SOTA。

参考资料:

1.Paper:

MTRNet++: One-stage mask-based scene text eraser.

https://arxiv.org/pdf/1912.07183.pdf

2.Code:

https://github.com/neouyghur/One-stage-Mask-based-Scene-Text-Eraser

Logo

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

更多推荐