Towards Robust Tampered Text Detection in Document Image: New dataset and New Solution

1 数据合成-Selective Tampering Synthesis

共包含copy-move、generation、erase三种篡改方式

  • 提取bounding box内的text mask:
    1. 将box扩大到原本的1.5倍,确保box能完全框死整个字符(后续需要进行形态学操作和根据轮廓填充mask,如果不能完全框死,会导致效果不好)
    2. 对box进行clip,确保box没有超出图像边缘
    3. 图像灰度化
    4. 对box内区域进行canny运算,canny算法第一个阈值为100,第二个阈值为200,得到文字的轮廓
    5. 对轮廓进行膨胀
    6. 进行形态学闭运算,尽可能闭合文字的边缘
    7. 寻找图片中的所有闭合轮廓,如果轮廓形成的面积小于box面积的一半,则将其填充,得到mask
    8. (可选)使用adaptive binarized的图片,和刚刚第七步得到的mask做或运算,作为上述算法的补充,有一些浅色字体(红色、绿色等)会被canny漏掉,增强算法鲁棒性。
    9. (可选)继续对图片做闭运算
  • copy-move:
    1. 使用OCR检测图片,得到每个字符的bounding box。
    2. 计算text mask:
      1. 只用canny算子计算文字的边缘
    3. 对于每一个字符,二值化每个字符bounding box内的区域,得到前景和背景,分别计算前景和背景的均值和方差。
    4. 随机选取一个bounding box(target),寻找和其具有相近前景背景均值和方差,且字符类型(数字、汉子、英文字母等)相同的bounding box(source)
    5. 两种篡改方式:
      • 将source框resize到target大小,整个粘贴到target区域,标注mask为矩形框
      • 将source框中text mask的部分取出,将target区域内的text mask区域inpaint,最后把source框中text mask的部分粘贴到target框区域中,标注的mask为两个text mask的并集
    6. 对周围区域进行一些模糊,提升视觉一致性。
  • generation:
    1. 将target区域内的text mask区域inpaint
    2. 随机选取一个和target区域内相同类型的字符,print到框内
  • erase:
    1. 将target区域内的text mask区域inpaint。

2 Document Tampering Detector

双流频域-RGB模型

2.1 Frequency Perception Head

JPEG在压缩的时候是基于8✖️8的小块进行压缩的,对于每个小块进行DCT变换,并量化。因此会呈现出一块块的现象,成为块状伪影(Block Artifact Grids,BAG),因为整张图是有同样的压缩历史和量化表,所以每一块的DCT系数的分布情况应该相近,如果某个区域是从别处粘贴过来或者经过擦除/修改,新生成的像素没有经过压缩或者压缩历史和其他区域不同,那篡改区域的DCT分布情况和其他区域就不同,产生不连续性,利用这种特性,可以在频域上检测篡改区域。

  1. 将RGB图片转换为YCbCr的形式,计算Y通道的DCT系数矩阵。
  2. 将DCT系数取绝对值,并clip到20以内,选取20个正交基表示DCT系数,然后卷积。
  3. 将量化表(q table)复制若干份,构成和原图大小一致的矩阵,经过learnable embedding层之后,和经过正交表时的DCT系数相乘,模拟还原原始DCT系数的过程。
  4. 将原始DCT系数和正交表示的DCT系数concat,然后8倍下采样,这样一个像素就可以代表DCT系数矩阵中的8✖️8的块。

作者用20个正交基表示DCT系数,我自己分析的原因是:

  • DCT系数值是没有上下界的,很大的负数或者很大的正数都能取到,这样会让神经网络很难学习,一个非常简单的想法就是normalize到(-1,1),我们本质上是想通过DCT系数去找有没有区域和其他区域有明显的DCT系数分布情况不同,但是把dct系数压缩到(-1,1),表示能力欠佳,会压缩掉数值的区分能力,特别是中等值和极大值之间的差异可能被“抹平。比如:1,10,1000,归一化之后变为0.01,0.1,1.0,差异明显缩小。
  • 并且使用归一化,相当于一个连续空间映射,模型容易把数值差异当成线性关系去学习,但篡改检测更关心分布形态 而不是具体数值,比如: 0 和 1 的差异,在篡改检测中可能比 19 和 20 更重要,归一化之后,网络可能会认为0,1与19,20的差异同样重要甚至不如;而用 one-hot 可以更公平地对待每个可能的系数。用正交基表示,由于正交的关系,1的基其实和20的基的距离与1与2的距离是一样的,不会存在压缩的状态,在初始的时候公平对待他们;然后在训练时,如果训练数据里表现出“低频小系数差异更敏感”,网络就能学到在 0/1 附近给出更大的权重;如果“高频大系数差异不那么重要”,它也能学到在 19/20 附近弱化差异。
  • 因此把DCT系数用离散的21个正交基表示,这样会让不同8乘8块的DCT分布的区分能力变强。用 21 个正交基,本质上是把系数“离散化成 21 个状态”,转化为一个小规模分类问题。分类空间比回归空间更容易被卷积或注意力捕捉规律,也更适合“找分布差异”。当然,用更多的正交基会带来更强的表征能力。

2.2 课程学习-Curriculum Learning

在训练模型时,先学习简单数据再学习困难数据,会提升训练效果。

在实际操作中,每一步随机从\((B_1,100)\)选取压缩质量,\(B_1\)是从\(100-S/T, 100\)动态选取,S是目前training steps,T是预先设定好的常数。通过这种方式,模型在训练初期更容易接触到没经过压缩的简单图片。

3 text center border probability (TCBP)

由于篡改区域都往往很小,篡改区域平均占整张图片1%,会导致模型更偏向于认为图片没经过篡改,表现为模型在预测时过于谨慎导致漏召,为了解决这个问题,采用TCBP这种区域概率建模的方法,去建立软标签。

method:

  • 篡改区域标注不变,仍为1。
  • 从篡改区域往外扩散,用距离变换得到每个像素到最近正样本(篡改中心)的距离,然后按距离区间映射到不同概率值(0.7、0.5、0.2、0)。

优势:

  • 让模型学习到“篡改区域有一个中心—边界的不确定性过渡”,避免过拟合在边缘噪声,因为我们最终业务落地要做一个分类任务,并不要求准确分割,因此只要模型能够找到分割位置大概在哪里即可,因此将mask相较于篡改区域放大一些,是有利于业务的。

  • 边界周围赋中等概率(0.7、0.5 等),表示不确定性,鼓励模型在边界“宽容”一点,减少漏检。

4 在线困难样本挖掘-Online Hard Example Mining

正负样本极度不平衡:背景像素/区域 >> 前景像素/区域。绝大多数样本都非常容易分类(easy examples),对 loss 的贡献很小。因此要不要均等地训练所有样本,而是挑选出“最难”的部分样本来反向传播。

具体来说,对于正样本(篡改),计算其所有像素的损失,对于负样本,排序他们所有BCE loss的值,并选取topk = 3 ✖️ 正样本数量。因此,经过OHEM的BCE loss为:

\[L_{BCE}=\frac{\sum_{i=1}^{N_{pos}}l_{i^{pos}}^{CE}+\sum_{i=1}^{k}l_{i^{neg}}^{CE}}{N_{pos}+k}\]

\(N_{pos}\)为正样本数量。

BCE loss也是可以用于TCBP构成的soft target的。

5 Loss计算

dice loss

dice系数:

\[\mathrm{Dice}(p,g)=\frac{2\sum_i(p_ig_i)}{\sum_ip_i+\sum_ig_i}\]

p,g 分别为prediction和gt

dice loss:

\[\mathrm{Loss}=1-\mathrm{Dice}(p,g)\]

从公式可以看出,Dice Loss 专注于重叠部分,大面积背景对于Dice loss没有贡献,类别严重不均匀时很有用。但是对背景判别的约束不足,所以实际训练时经常会 Dice Loss + BCE Loss 一起用。因此最终的loss为BCE+Dice:

\[L_{DiceBCE}=\alpha L_{Dice}+(1-\alpha)L_{BCE}\]

 

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇