2025 CCF BDCI|“基于TPU平台的OCR模型性能优化”一等奖作品

2024年12月,中国计算机学会在海南博鳌成功举办了第十二届CCF大数据与计算智能大赛(简称2024 CCF BDCI)。本届比赛的算能赛道吸引了1748名选手报名,经过激烈角逐,北京航空航天大学的“常务副SOTA”团队脱颖而出,荣获大赛最佳算法能力奖。

本届CCF BDCI大赛中,算能赛道推出了“基于TPU平台的OCR模型性能优化”的赛题,旨在探索如何通过高效的TPU硬件平台— Duo系列开发板,以及先进的算法优化技术,实现OCR模型在精度、速度和资源消耗等方面的全面优化,进而精确识别目标文本。

针对该赛题,“常务副SOTA”团队选择了YOLOv8关键点模型和PPOCRv2-Rec作为基础模型,因其在速度和精度上的优越表现。团队通过通道剪枝、算子融合和词表剪裁等技术,显著减少了计算量和推理时间。在模型转换中,使用TPU-MLIR工具确保高效运行并保持精度。同时,优化前后处理环节,如使用RVV加速图像处理,进一步提升性能。最终,检测模型和识别模型的推理速度分别提升了近4.9倍和3.5倍,单图推理时间缩短至700ms以内。

以下为“常务副SOTA”团队的研究技术报告,供开发者们参考与学习!

团队简介

我们团队由四位深度学习技术爱好者组成,队名为“常务副SOTA”,希望通过比赛来促进队员的成长,也希望提出的方案能为实际应用添砖加瓦。

摘要

随着深度学习的快速发展,OCR(Optical Character Recognition,光学字符识别)技术已广泛应用于文本识别、自动化办公、信息提取等多个领域。然而,由于OCR任务对计算资源的需求较高,如何在低功耗设备上实现高效的OCR模型成为了一个重要挑战。本文基于TPU平台MilkV-Duo部署,针对OCR模型的性能进行优化,涉及模型选择、优化、转换及前后处理等方面。通过一系列的优化手段,包括通道剪枝、模型量化、算子融合、前处理加速等,成功提升了模型的推理速度和精度,最终实现了在端侧设备上的高效运行。

关键词

OCR,TPU-MLIR,MilkV-Duo 部署,量化

1.比赛分析

本次比赛的目标是将OCR模型优化并部署到TPU平台上,达到高效运行的要求。OCR任务通常包括图像输入、前处理、检测、矫正、分类和识别等步骤。在比赛中,参赛队伍需要对OCR模型进行优化,减少模型的计算量和存储需求,同时提高推理速度和准确率。

比赛提供了一个基线模型,该模型的OCR流程如下:

  1. 图像输入:读取输入图像并进行预处理。
  2. 检测前处理:对图像进行一些基本的预处理,例如灰度化、二值化等。
  3. 检测模型:通过模型输出二值图,进一步进行目标区域的识别。
  4. 连通域算法:寻找图像中的目标区域并提取最小外接旋转矩形。
  5. 仿射变换:将图像旋转拉正为矩形。
  6. 分类前处理:对图像进行分类处理,输出旋转角度。
  7. 识别前处理:进一步对图像进行旋转,确保识别模型的准确性。
  8. 识别模型:最后通过识别模型输出识别结果。

比赛的要求是要在TPU平台上实现高效的推理,因此需要优化各个环节,特别是模型的计算量和推理速度。

2.模型选择

为了在TPU平台上实现高效的OCR模型,我们首先从多个候选模型中进行选择。考虑到OCR任务的特点,如需要获取目标的不规则四边形输出,最终我们在PPOCR系列,YOLO目标检测系列,以及YOLO关键点检测系列模型中进行选型。

通过简单的速度实验对比,我们发现PPOCRv4-Det检测模型存在参数量大,模型后处理复杂,且推理速度较慢等明显问题,640*640的输入下端到端需要1080ms才能完成推理,相比之下,YOLOv8检测模型端到端只需要820ms,YOLOv8关键点模型端到端只需要840ms,总的来说使用检测和关键点模型在推理速度上更加有优势。

在选择识别模型时,我们还同时还考虑了精度与速度的平衡,比如PPOCRv4-Rec虽然在精度上有一定提升,但引入Transformer结构后,推理速度较慢,因此我们选择了更早版本,且没有使用Transformer结构的PPOCRv2-Rec作为识别模型。

除此之外,我们考虑到资源占用问题,由于赛题要求在端侧设备上运行,尽量减少OCR任务中的pipeline模型个数,最终我们没有使用方向分类模型,这可以降低资源Milkv-Duo的资源占用。

最终,我们选择使用YOLOv8关键点模型和PPOCRv2-Rec识别模型最为我们团队的OCR任务基座模型,然后在这基础上最更多的优化工作。

3.模型优化

在模型选择之后,我们分别对关键点模型和识别模型进行了多方面的优化,以提高其在TPU平台上的运行效率。具体优化策略如下:

1. 通道剪枝:通过通道剪枝技术,我们减少了YOLOv8n-pose模型的通道为原来的一半,减少了计算量,从而加速了模型的推理速度。我们通过重新训练的方法让通道剪枝能够在不显著降低精度的情况下,减小模型的计算量。

2. 增加特征尺度:在模型的训练过程中,增加了对特征尺度P2(下图黄色部分)的融合,使得模型能够在多个尺度下进行特征提取,从而提高模型对多尺度目标的适应性,进而提升了识别精度。

图1:增加特征尺度

3. 模型算子融合:我们通过算子融合,将多个操作合并为一个操作,如连续的卷积或反卷积和批归一化层、连续的卷积或反卷积和线性变化层等合并为一个算子,还通过将多个复杂琐碎的算子如被拆散的层归一化算子融合为单独的层归一化算子降低了多个算子的计算和访存,通过这一方案,我们成功减少了计算图的复杂性,减小了模型的计算开销。

4. 模型的算子移除:我们通过将一些复杂的后处理算子,如和置信度计算的sigmoid激活以及和提取分类标签的softmax算子从模型中移除,通过和int8输出的反量化融合来减少计算的开销。

5. 词表剪裁:对模型的词表进行了剪裁,将原始的6625个类别减少至3952个,减少了40%的词表大小,缩短了匹配时间。

6. 关键点模型的后处理减枝:我们通过将YOLOv8-pose模型后处理完整裁剪,通过提前使用置信度阈值过滤不必要的计算来提升模型的端到端速度。

通过上述模型层面的优化,我们的方案在保证精度的前提下减少了模型尺寸,减少了模型算子数量,并且避免了大量的冗余计算,更加适合在TPU平台高效运行。

4.模型转换

在模型优化完成后,我们使用TPU-MLIR工具对模型进行转换,以便能够在TPU平台上高效运行。模型转换主要包括以下两个方面:

1. 检测模型转换:将检测模型从onnx转换为mlir格式,最后转换为cvimodel格式。这一过程中,优化了检测模型的输入尺寸,将输入尺寸从640*640调整为320*320,以减少图像前处理的耗时和推理的计算量。我们尝试将检测模型以INT8精度转换,在Milkv-Duo上的精度保持很好,最终我们采用了INT8模型部署,并且将前处理融合到模型道中,以加速端到端的速度。

 2. 识别模型转换:将识别模型从onnx转换为mlir格式,最后转换为cvimodel格式。识别模型的转换过程中,由于原始输入尺寸为32x640,转换时遇到了一些问题,最终通过调整为32x320的输入尺寸,解决了转换失败的问题。我们尝试过INT8精度转换,但是在Milkv-Duo上的精度较差,最终我们选择使用BF16精度部署,并且将前处理融合到模型道中,以加速端到端的速度。

5.前后处理优化

在前后处理阶段,我采用了一些优化策略,以进一步提升模型的运行效率。具体优化手段包括:

1. 前处理优化:使用RVV(RISC-V Vector Extension)实现图像resize操作,将原本120ms的图像resize时间减少至90ms,提升了33.33%的速度。

2. 后处理优化:通过使用int8查表实现sigmoid过滤阈值,减少了后处理的计算量,将后处理的时间从20ms减少至18ms,提升了11.11%的速度。

3. anchor生成优化:通过将anchor生成和softmax计算通过int16进行优化,并结合反量化操作,使得后处理速度提升了66.66%(从10ms降至6ms)。

4. OpenCV优化:使用平头哥的OpenCV替代了opencv-mobile,提升了OpenCV算子的执行速度,进而加速了整体模型的运行。

6.实验记录

经过上述优化后,我们对模型进行了全面的实验验证。实验结果如下:

首先是检测模型的实验情况:

模型

端到端耗时(ms)

备注

Base

1080ms

640x640

Base

650ms

320x320

Pose

472ms

320x320

Pose

440ms

+后处理裁剪

Pose

310ms

+int8 融合前处理

Pose

294ms

+算子融合

Pose

260ms

+rvv reize + 库优化

Pose

242ms

+sigmod/softmax优化

Pose

220ms

+阈值 (conf0.3 iou0.7)

然后是识别模型的实验情况:

模型

端到端耗时(ms)

备注

ppocrv2

560ms

32x640

ppocrv2

380ms

32x320

ppocrv2

220ms

+int8 融合前处理

ppocrv2

209ms

+裁剪softmax

ppocrv2

188ms

+算子融合

ppocrv2

154ms

+裁剪词表

ppocrv2

140ms

+rvv reize  + 库优化

最终,我们优化后的检测模型相比基线版本提升了接近4.9倍,我们优化后的识别模型相比基线版本提升了接近3.5倍。

在单图推理的情况下(包括一次检测和三次识别),优化后的模型能够在700ms以内完成,远低于基线模型的运行时间。这一结果表明,通过上述优化手段,模型在TPU平台上的运行效率得到了显著提升。

致谢

感谢CCF协会、DF平台和SOPHGO公司提供的宝贵机会;感谢主办方免费提供的milkv duo开发板,以及主办方针对开发板板特性和模型部署问题的答疑;感谢平头哥和nihui老师开源OpenCV-THead和OpenCV-Mobile;感谢百度PaddlePaddle团队开源PPOCR工具;感谢Ultralytics对YOLO模型的开源;感谢一起参加此次比赛的友军的分享和讨论。

参考

[1] Ultralytic, YOLOv8,https://github.com/ultralytics/ultralytics

[2] nihui,OpenCV-Mobile,https://github.com/nihui/opencv-mobile

[3] 平头哥团队,OpenCV-Mobile,https://www.xrvm.cn/community/

download?id=4112956065753141248

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

22.[前端开发]Day22-CSS单位-CSS预处理器-移动端视口

1 CSS常见单位详解 CSS中的单位 CSS中的绝对单位( Absolute length units ) CSS中的相对单位( Relative length units ) 1.em: 相对自己的font-size;如果自己没有设置, 那么会继承父元素的font-size 2.如果font-size中…

网站改HTTPS方法

默认的网站建设好后打开的样子那看起来像是钓鱼网站,现在的浏览器特别只能,就是你新买来的电脑默认的浏览器同样也会出现这样“不安全”提示。 传输协议启动了向全球用户安全传输网页内容的流程。然而,随着HTTPS的推出,传输协议通…

MySQL的底层原理与架构

前言 了解MySQL的架构和原理对于很多的后续很多的操作会有很大的帮助与理解。并且很多知识都与底层架构相关联。 了解MySQL架构 通过上面的架构图可以得知,Server层中主要由 连接器、查询缓存、解析器/分析器、优化器、执行器 几部分组成的,下面将主要…

极客说|利用 Azure AI Agent Service 创建自定义 VS Code Chat participant

作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&a…

艾蒿染色体水平基因组-文献精读111

A chromosome-scale genome assembly of Artemisia argyi reveals unbiased subgenome evolution and key contributions of gene duplication to volatile terpenoid diversity 一项关于艾蒿(Artemisia argyi)的染色体尺度基因组组装揭示了无偏的亚基因…

【Linux系统】线程:线程的优点 / 缺点 / 超线程技术 / 异常 / 用途

1、线程的优点 创建和删除线程代价较小 创建一个新线程的代价要比创建一个新进程小得多,删除代价也小。这种说法主要基于以下几个方面: (1)资源共享 内存空间:每个进程都有自己独立的内存空间,包括代码段…

光学和光子学模拟工具在 AR/VR 中的作用

AR/VR 中的光学和光子学 增强现实 (AR) 和虚拟现实 (VR) 站在数字进化的前沿。光学和光子学这一复杂的科学深入研究了光的产生、检测和操控,在这一转变中发挥着至关重要的作用。 图 1 (a) 展示了 AR 系统的设计,强调了光学的关键作用。该图描绘了光的旅…

U3D支持webgpu阅读

https://docs.unity3d.com/6000.1/Documentation/Manual/WebGPU-features.html 这里看到已经该有的差不多都有了 WOW VFX更是好东西 https://unity.com/cn/features/visual-effect-graph 这玩意儿化简了纯手搓一个特效的流程 如果按原理说就是compute shader刷position&#…

BFS算法篇——FloodFill问题的高效解决之道(下)

文章目录 前言一. 图像渲染1.1 题目链接:https://leetcode.cn/problems/flood-fill/description/1.2 题目分析:1.3 思路讲解:1.4 代码实现: 二. 岛屿数量2.1 题目链接:https://leetcode.cn/problems/number-of-islands…

DEEPSEEK与GPT等AI技术在机床数据采集与数字化转型中的应用与影响

随着人工智能(AI)技术的迅猛发展,深度学习、自然语言处理等先进技术开始广泛应用于各行各业。在制造业尤其是机床行业,AI技术的融合带来了巨大的变革,尤其在机床数据采集与机床数字化方面的应用。本文将探讨DEEPSEEK、…

android手机安装deepseek-r1:1.5b

序 本文主要展示一下如何在android手机上安装deepseek-r1:1.5b 步骤 安装termux 到https://termux.dev/cn/index.html去下载 然后执行termux-setup-storage以获取手机存储权限 安装构建依赖 pkg install git cmake golang下载ollama git clone --depth 1 https://gitee.…

单张照片可生成写实3D头部模型!Adobe提出FaceLift,从单一的人脸图像中重建出360度的头部模型。

FaceLift是Adobe和加州大学默塞德分校推出的单图像到3D头部模型的转换技术,能从单一的人脸图像中重建出360度的头部模型。FaceLift基于两阶段的流程实现:基于扩散的多视图生成模型从单张人脸图像生成一致的侧面和背面视图;生成的视图被输入到GS-LRM重建器中,产出详细的3D高斯表…

如何使用 DataX 连接 Easysearch

DataX DataX 是阿里开源的一款离线数据同步工具,致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高效的数据同步功能。 本篇主要介绍 DataX 如何将数据写入到 Easysearch,对于各种数据源的连接…

Gemini 2.0模型更新:谷歌最新AI大模型全面开启智能时代

引言 2025年2月5日,谷歌人工智能实验室(Google DeepMind)发布了最新的Gemini 2.0模型系列更新,包括2.0 Flash、Flash-Lite和Pro实验版本。这些AI大模型的发布标志着人工智能技术在性能、效率和多模态能力上的进一步突破&#xff…

Visual Studio 2022 中使用 Google Test

要在 Visual Studio 2022 中使用 Google Test (gtest),可以按照以下步骤进行: 安装 Google Test:确保你已经安装了 Google Test。如果没有安装,可以通过 Visual Studio Installer 安装。在安装程序中,找到并选择 Googl…

基于SpringBoot的校园社交平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

【R语言】数据重塑

一、定义 R语言中,数据重塑(Data Reshaping)是指改变数据框(data frame)或类似结构(如矩阵、列表等)的形状,以适应不同的分析或可视化需求。这通常涉及行和列的重新排列、数据的汇总…

【银河麒麟高级服务器操作系统】系统日志Call trace现象分析及处理全流程

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://document.kylinos.cn 服务器环境以及配置 系统环境 物理机/虚拟机/云…

代码随想录_二叉树

二叉树 二叉树的递归遍历 144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer&g…

科普书《从一到无穷大》的科普知识推翻百年集论

科普书《从一到无穷大》的科普知识推翻百年集论 黄小宁 “我们给两组无穷大数列中的各个数一一配对&#xff0c;如果最后这两组都一个不剩&#xff0c;这两组无穷大就是相等的&#xff1b;如果有一组还有些数没有配出去&#xff0c;这一组就比另一组大些&#xff0c;或者说强些…