自研算法提升文本图像篡改检测精度,抖音技术团队获 ICDAR2023 分类赛道冠军...

news2024/11/25 4:50:28

动手点关注

bf9b894641e71a460d2b39873e619c0e.gif

干货不迷路

近日,抖音 CV 技术团队在 ICDAR 2023 的“Detecting Tampered Text in Images”比赛中,利用自研的“CAS”算法从 1267 个参赛队伍中脱颖而出,获得分类赛道的第一名。

ICDAR(International Conference on Document Analysis and Recognition),是国际文档图像分析和识别领域公认的权威学术会议,涉及的领域包括文本识别、文本检测、文档分析和自然语言处理等。该会议从 1991 年开始,每两年举办一次,吸引了来自全世界的科学家、工程师和学者参加,分享他们的研究成果和最新技术进展。第 17 届将于 2023 年 8 月在美国加利福尼亚举行。

DTT 竞赛聚焦于真实场景下的文本图像篡改检测。随着文档分析与识别领域的快速发展,新兴技术也在不断涌现,并广泛应用于数字金融、电子商务、安全审核和智慧教育等领域。然而,以往的研究大多集中于文本内容的理解,对于图像本身的真实性关注度较低。与通常针对自然图片中人或物的篡改检测不同,文本的篡改检测在精度和泛化性方面更具挑战性。首先,篡改的区域通常很小,几个字符的改动即可导致整体语义的扭曲,且由于背景缺乏复杂的纹理,篡改区域与邻近区域之间也没有明显的差异。

竞赛简介

竞赛数据集共收录了 19000 张通过拍摄、扫描和截图等多种方式在真实场景下采集到的文本图像,并使用人工修图或者机器合成等方式对部分图片进行了包括复制粘贴,替换和擦除等不同类型的篡改。比赛任务是训练一个分类器,判断测试集中的图片是否经过篡改。

a28215eb9e39110747040475e08d63b0.png

图1. 训练样本

7279fdd8a24ba271841c159252a6bd49.png

图2. 篡改区域面积占比分布直方图

赛程分两个阶段:

  • 初赛阶段提供训练集和初赛测试集。训练集包含图片以及分割和分类的标签,测试集仅包含图片。该阶段,参赛选手直接提交预测结果计算得分,为期 35 天,每个队伍 1 天最多提交 5 次。

  • 初赛排名前 30 的队伍进入复赛,为期 6 天。复赛阶段测试集不公开,入围选手每次可提交 1 次 Docker 镜像,由主办方负责执行推理并计算得分。取复赛阶段的最高分作为最终的成绩。

参赛方案

针对数据集中篡改类型多、前景区域小且训练数据量少等特点,对传统分类方案进行了以下改进:

  • 通过引入第三方数据集和在线生成等多种方式扩充训练样本,以数据驱动替代模型驱动,提高泛化能力。

  • 设计了"Classification After Segmentation"的二阶段分类器,兼顾 CNN 和 Transformer 的不同特性并加以融合,最大程度地发掘不同层级的图像信息。

  • 使用在高分辨率的原图上进行滑窗的采样方式,在算力和资源有限的情况下,尽可能地保留图片的整体语义和局部细节。

数据扩充

除了引入多个篡改检测的开源数据集扩充样本数量,在训练阶段也使用了在线合成的方式生成篡改图片,提供了丰富的训练数据。常用的篡改方式包括局部擦除、相同图片不同区域之前的复制黏贴,以及不同图片区域的替换等。由于比赛主要针对文本区域的篡改,因此在合成数据之前需要先进行文本检测区分字符和背景。同时为了更贴近真实的场景,除了对图片进行简单篡改之外,还需要使用各种后处理消除篡改痕迹。例如,随机尺度的缩放、二次 JPEG 压缩、图像模糊和随机噪声等。

模型结构

借鉴了图像篡改检测中常用的不同类型特征的融合方案,团队创新性地设计了一个先分割后分类(Classification After Segmentation)的结构,将浅层篡改痕迹的感知和抽象文本语义的理解进行解耦,并在后续阶段融合不同层级的视觉概念,从而尽可能丰富地发掘图像信息。分割阶段使用 CNN 作为编码器进行局部信息的捕捉,同时采样和 UperNet 类似的特征金字塔结构,进行像素级热力图的生成,并与原图进行合并,作为后续分类模型的输入。而相较于 CNN,Transformer 的自注意力机制更适合高层特征的提取和抽象语义的理解,因此在分类阶段使用 Transformer 作为编码器,进行全图标签的预测。

7b4086be2d0142f5fa0001872bacc916.png

图3. CAS 结构图

考虑到目标区域较小,对原图进行缩放会造成篡改痕迹的损坏,不利于模型的收敛。同时,由于比赛中对于模型的算力和显存占用存在限制,因此无法直接使用原始尺寸进行推理。为了最大程度地保留图片信息,采样了滑窗采样的方式进行训练和推理。在图像分割领域,滑窗推理原本就是一个常用的技巧,因此第一阶段也沿用了相同的采样策略。而第二阶段,在编码过程中,先使用滑窗对原图不同区域进行特征提取和全局池化。随后将所有区域的特征向量进行融合,生成全图特征后再使用分类器进行解码,得到二分类的预测结果。

对于图像分割,使用 dice loss 往往能够有效提高模型的性能,但是也存在梯度变化剧烈,导致训练不稳定的风险。因此分割阶段采用 BCE loss 和 dice loss 相结合的方式,保证训练稳定的情况下提升模型性能。同时由于正负区域的面积差异过大,还采用了像素级的 OHEM(在线难例挖掘)样本平衡策略加速模型的收敛。分类阶段,则使用常规的交叉熵作为损失函数。同时,也尝试引入了多分类模型常用的标签平滑。实验证明,即使是在二分类场景,适当的标签平滑也能够有效地提升模型性能。

实验中发现,使用相同的数据进行端到端的训练容易导致下游分类模型对上游分割生成的热力图过拟合,从而降低模型的泛化能力。因此采用二阶段训练策略:在第一阶段,使用多种数据扩充的方式生成丰富的训练样本,训练一个"通用"的分割模型,提高上游的泛化能力;第二阶段,固定分割部分的权重,仅使用比赛的数据集微调下游的分类模型,提高整体性能。

b6b61036ec0c66c2d77ab341a62bf7da.png

图4. CAS 消融实验

结果融合

训练阶段尝试了不同的骨干网络,发现并非更深的网络和更多的参数就能取得最优的性能。考虑到复赛阶段对于推理时间的限制,最终选取了 3 个性能高且耗时低的模型在推理阶段进行融合。同时,为了获得更鲁棒的性能,在推理过程中,对测试图片进行水平翻转,并将翻转前后的结果进行融合计算最终的预测分数。上述的提及的两种融合都统一采用了加权平均的方式。实验证明,激活前融合的效果通常优于激活后融合。即通过线性分类器对特征进行映射后,先进行融合再使用 softmax 计算分数的方式性能更佳。

4be434fac809f0d4d1d9f5339843a602.png

图5. 局部篡改检测示例

除此之外,利用训练集和测试集中存在数据同源(基于同一张图片进行不同方式的篡改)的情况,通过对比同源图片的差异,也能够获取可靠的局部篡改信息。首先经过特征提取并计算余弦相似度进行全图匹配,获取候选的参考图片。随后使用 ECC(Enhanced Correlation Coefficient)进行图像配准,在对齐后的图像上计算局部差异,并过滤噪声后获得篡改信息。结合参考图片的标签和篡改信息进行打分,最终根据置信度更新预测结果。

b386660f1aa9a337ae6dd565121a754f.png

图6. 获奖证书

关于抖音 CV 团队

抖音 CV 技术团队是抖音集团旗下的计算机视觉算法团队。通过不断产出业界前沿的深度学习模型,团队保障了抖音、西瓜、头条等多业务推荐系统和内容生态的安全发展。自成立以来,团队一直坚持底层创新,建设业界前沿的视觉表征、内容理解、真伪鉴别等解决方案,曾获得多项国际级技术赛事冠军。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源反分裂与数字大同世界

这是一篇报告的读后感,这篇报告是由Linux基金会研究部门发布的,名为《助力全球协作——开源代码的领导者如何面对分裂的挑战》。 这份报告的主要内容包括: - 开源代码开发中的分裂及其利弊- 开源的国际化,以及项目领导者如何克服参…

[Halcon3D] 3D鞋点胶的点云边界提取

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…

Springboot整合Camunda工作流引擎实现审批流程实例

环境&#xff1a;Spingboot2.6.14 camunda-spring-boot-starter7.18.0 环境配置 依赖配置 <camunda.version>7.18.0</camunda.version> <dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boo…

OpenCV 项目开发实战--用 (C++ / Python)实现伪着色

文末附相关测试代码下载链接 在本教程中,我们将首先展示一种使用 OpenCV 的预定义颜色图对灰度图像进行伪彩色/伪彩色 的简单方法。如果您更愿意使用自己的颜色图,我们还将展示一种定义自定义颜色图的方法。 行星和太空中其他物体的灰度图像通常是伪彩色的,以显示细…

基于在线光度校准的混合稀疏单目视觉里程计

文章&#xff1a;Hybrid sparse monocular visual odometry with online photometric calibration 作者&#xff1a;Dongting Luo, Yan Zhuang and Sen Wang 编辑&#xff1a;点云PCL 代码&#xff1a;https://github.com/luodongting/HSO.git 欢迎各位加入知识星球&#xff0c…

小破站上线了!

作者 | 磊哥 来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09; 转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09; 为了给大家更好的阅读体验&#xff0c;磊哥搞了一个专业的技术网站&#xff0c;整理并总结了 Java 中比较经典的文章&…

管理类联考——英语——知识篇——作文题材说明

小作文题材 一、题材&#xff1a;小作文的内容&#xff08;写什么&#xff09; 1.疫情相关的主题&#xff1a;&#xff08;以信件方式出题可能性60%&#xff0c;对生活影响大&#xff09; (1)停学、复学&#xff1a;线上或线下停学和复学( go back to class/ school )&#x…

绕过激活锁 ,拯救一台旧手机iphone

一台旧的iphone忘了apple id账号和密码了&#xff0c;导致锁住了 某宝上解锁要花50&#xff0c; 不是舍不得花钱&#xff0c;作为一个搞技术的&#xff0c;实在觉得花钱有点丢人 经过一番探索 最终确定了有用的流程 并贴出来 亲测可用 最终实现了趟再床上就可以打卡 1、 刷机 …

拯救者2022款 y9000k 安装ubuntu20.04 休眠后无法唤醒(成功解决)

拯救者2022款 y9000k 安装ubuntu20.04 休眠后无法唤醒 一.建议在安装新的 NVIDIA 显卡驱动之前卸载原有的驱动程序。这样可以确保新驱动程序的安装过程更加干净和稳定。以下是卸载原有驱动的步骤&#xff1a;1.进入命令行界面&#xff1a; 按下 Ctrl Alt F3 进入文本模式的命…

IDEA Build Artifacts 功能使用总结

文章目录 创建Artifact步骤Build Artifact步骤 打开IDEA&#xff0c;在没有创建Artifact时&#xff0c;菜单"Build -> Build Artifacts…“是灰色的&#xff0c;不可用状态。 所以&#xff0c;第一步是进入"File -> Project Structure…”&#xff0c;创建Arti…

10. python从入门到精通——模块

目录 模块的概述 自定义模块 Python中的包 以主程序的形式执行 引用其他模块 模块的概述 什么是模块&#xff1a;在python中模块就是python程序&#xff0c;一个模块就是一个*.py的文件&#xff0c;通常情况下把能够实现某一特定功能的代码放置在一个文件中作为一个模块&…

基于Java实验室耗材管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

如何理解gic控制器中的originating PE Banked和target PE Banked

【问题】 如何理解originating PE Banked和target PE Banked&#xff0c;下面gicv2/gicv3的banked如何理解&#xff1f; 【回答】 GICv2 中&#xff0c;SGI 对于 originating PE&#xff08;即生成中断的处理器&#xff09;和 target PE&#xff08;即接收中断的处理器&#…

【JVM】命令行工具的基本使用--JVM常用指令

文章目录 背景一、Java 性能诊断工具简介二、简单命令行工具2.1、jps2.2、jinfo2.3、jstat2.4、jstack2.5、jmap2.6、jhat 三、图形化综合诊断工具3.1、JVisualvm3.2、JProfiler3.3、JConsole 背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用…

few-shot / one shot / zero shot object counting论文汇总

文章目录 2021OBJECT COUNTING: YOU ONLY NEED TO LOOK AT ONE 2022Scale-Prior Deformable Convolution for Exemplar-Guided Class-Agnostic CountingCounTR: Transformer-based Generalised Visual CountingFew-shot Object Counting with Similarity-Aware Feature Enhance…

python+vue企业高校文档管理系统的设计与实现

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 在这个推荐个性化的时代&#xff0c;采用新技术开发一个文档系统来分享和展示内容是一个…

编程语言/文件系统/网络协议存在的那些编码

前面的文章介绍了URL编码&#xff0c;UTF8编码&#xff0c;base64&#xff0c;gzip等多种编解码的方式&#xff0c;这里&#xff0c;本节对字符和编码一些杂项进行梳理&#xff0c;相信你会感兴趣。 Python 中的字符和编码 为什么要强调字符编号和字符编码分离这样⼀个概念呢…

A100 GPU服务器安装CUDA教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

02队列及代码实现

队列介绍 队列是一个有序列表&#xff0c;可以用数组或是链表来实现。、遵循先入先出的原则。 &#xff08;先存入队列的数据&#xff0c;要先取出。后存入的要后取出&#xff09; 数组模拟队列 队列本身是有序列表&#xff0c;若使用数组的结构来存储队列的数据&#xff0c;则…

【6月比赛合集】42场可报名的「创新应用」、「数据分析」和「程序设计」大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 创新应用赛&#xff08;39场比赛&#xff09;数据分析赛&…