EnsNet: Ensconce Text in the Wild 论文笔记

2024-02-19 17:20

本文主要是介绍EnsNet: Ensconce Text in the Wild 论文笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[2019 AAAI] EnsNet: Ensconce Text in the Wild

  • 文章 https://arxiv.org/pdf/1812.00723
  • 代码 https://github.com/HCIILAB/Scene-Text-Removal (MXNet)

 

论文提出了一种去除自然场景下的图像中的文本的方法。主要解决了两个问题:1.准确定位到图像中的文本位置;2.将文本区域图像替换为合理的的背景图像。主要的创新点在于:1.提出了一种“横向连接”(lateral connections);2.设计了四个损失函数来确保正确地去除文本区域。

一、网络总体结构

网络由Generator(生成器), Discriminator(判别器) 和 Refined-loss modules三部分构成。

二、生成器

       生成器是典型的编码器-解码器结构,其中编码器为ResNet18,解码器由5个(kernel_size=2, stride=2, padding=1)的转置卷积层组成。除此之外,论文还提出了“横向连接”,用来将浅层的语义特征和深层的图像细节组合,结构如下

结构包括Transformaing Block和Up-sampling Block两个模块。 

  1. Transforming Block部分包含三个部分,Shrinking层使用1×1的卷积进行降维,Nonlinear层使用两个3×3的卷积进行非线性变换,Expanding层使用1×1的卷积还原通道数。这种做法在获得更大的感受野的同时,避免了使用较大核的卷积,提高了网络的运行效率。
  2. 在Up-sampling Block中,转置卷积输出的特征图和Transforming Block输出的特征图进行逐元素相加。同时,转置卷积没有使用ReLU或Leaky ReLU作为激活函数,而是使用ELU,表达式为

                                 f(x)= \begin{cases} x& \text{x\textgreater 0}\\ \alpha(e^x-1)& \text{x\textless = 0} \end{cases}

        这能使训练更稳定,因为ELU能够制住较大的负数。另外,CSDN的编辑器无法使用\le或\leq打出小于等于号,因此公式格式有点奇怪,请见谅。

三、Refined-loss Modules

       这部分说明了提出的四个损失函数,分别为multiscale regression loss, content loss, texture loss 和 total variation loss。

  1. Multiscale regression loss 记为Lm

          L_{m}(M, I_{out}, I_{gt})=

                                   \sum _{i=1}^n \lambda _i (||M_i \odot (I_{out(i)}-I_{gt(i)}) ||_1+\alpha||(1-M_i)\odot (I_{out(i)}-I_{gt(i)})||_1)

       其中I_{out(i)}是解码器第i层输出的特征图,M_iI_{gt(i)}是对应此输出特征图尺寸的mask和groundtruth。这里的mask是将文本区域像素记为1,非文本区域像素记为0的binary mask。\alpha代表非文本区域所占的权重,原文设为6,\lambda _i是第i层所占的权重,原文为第3、4、5层分别设置了0.6,0.8,1.0。

       这项损失函数计算了各层输出的特征图的文本区域和非文本区域相比gt的L1Loss,可以获取不同尺度图像的更多上下文信息。

     2. Content loss 记为L_c

          L_c = \sum _{n=1}^{N-1}||A_n(I_{out})-A_n(I_{gt})||_1+\sum _{n=1}^{N-1}||A_n(I_{comp})-A_n(I_{gt})||_1

       I_{gt}I_{out}是groundtruth和生成器输出图像,I_{comp}是将生成器输出图像的非文本区域替换为groundtruth得到的图像。A_n指的是第n层的Activation map,这里activation map的定义不太明确,从代码来看指的应该是在预训练vgg16模型中取到的feature map。这里从第1、2、3个pooling层进行了取值计算。

       这项损失函数计算了预测图像和gt图像经VGG16输出的特征图的L1Loss,和仅保留文本区域的预测图像和gt图像经VGG16输出的特征图的差值的和。这项损失函数惩罚了预测图像和gt的特征的不同,有助于网络检测和去除文本区域。

     3. Texture loss 记为L_T

          L_{T_{out}}=\sum _{n=1}^{N-1}||\frac{1}{C_n H_n W_n}((A_n(I_{out}))^T(A_n(I_{out}))-((A_n(I_{gt}))^T(A_n(I_{gt}))||_1

         L_{T_{comp}}=\sum _{n=1}^{N-1}||\frac{1}{C_n H_n W_n}((A_n(I_{comp}))^T(A_n(I_{comp}))-((A_n(I_{gt}))^T(A_n(I_{gt}))||_1

       这里公式是直接从论文中原样照抄的,我总觉得括号有点问题……不过也不重要,意思能明白就好。C_nH_nW_nA_n这个activation map的形状。

       这项损失函数计算了activation map矩阵所有列向量的Gram矩阵后再计算L1Loss,用于惩罚预测图像和gt纹理信息的不同。

     4. Total Variation loss 记为L_{tv}

          L_{tv}=\sum _{i,j} ||I_{out}^{i,j}-I_{out}^{i+1,j}||_1 +||I_{out}^{i,j}-I_{out}^{i,j+1}||_1

      这里i,j指的是像素坐标。

      这项损失函数不涉及gt,而是计算预测图像内部相邻像素间的L1Loss,用于降低噪声。

四、判别器

        普通情况下训练GAN时,往往会将gt标注为1,预测图像标注为0,这样网络学习到的是整幅图像的信息,而我们希望网络专注于文本区域。因此,判别器参考了Patch GAN。Patch GAN的判别器将输入的图像映射为Patch矩阵,求出每个Patch为真样本的概率,并求均值作为最终输出。这里将图像映射为S×S(62×62)的Patch矩阵,每个Patch对应原图上N×N(70×70)的区域。label是这样给出的

                                  f(x)= \begin{cases} 0& \text{if sum(M)\textgreater 0}\\ 1& \text{otherwise} \end{cases}

这里M是上文提到过的binary mask。通过这种方式,在训练过程中基本只有预测的文本区域的Patch(理论上文本应该已经被去除)被标注为0,而不是整幅预测的图像被标注为0。GAN损失函数的定义为

          L_D=-\sum _{i=1}^{S^2}\frac{sum(M_i)}{N\times N}(1-L_i)(log(P_i))

P_i是判别器的输出,L_i是每个Patch的label。

五、实验

  1. 数据

       采用了合成的数据和真实的数据进行测试。数据合成的方法参考了Synthetic Data for Text Localisation in Natural Images,合成的数据在本论文的github主页可以找到;真实数据包括ICDAR2013和ICDAR2017 MLT数据集。

     2. 测试指标

       测试指标使用图像修复使用的几项指标,包括L2 Error,PSNR,SSIM,AGE,pEPs和pCEPS。 其中PSNR和SSIM的值越高表示效果越好,其它指标均为越低越好。除此之外,还采用了文本检测网络对处理后的图像进行检测。这里使用的是训练好的DSSD网络,当得到的Recall,Precision和F-measure的值越低时,说明文本被去除的越干净,文本更无法被检测到,也就代表更好的效果。Ablations和Comparisons的结果列举如下

可以看出,EnsNet在各个数据集下均取得了最好的效果。Baseline直接使用了简单的全卷积网络和L1Loss,可以看出虽然Baseline得出的R,P,F均较低,表明效果较好,但PSNR和SSIM值也较低,说明图像质量较差。因此仅使用R,P,F来代表网络性能是不合适的。同时EnsNet的速度达到了333FPS,运行速度较快。

这篇关于EnsNet: Ensconce Text in the Wild 论文笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725365

相关文章

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi