当前位置: 首页 > news >正文

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

相关文章:

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

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

FPGA的IP核接口引脚含义-快解

疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…...

数据库高安全—审计追踪:传统审计统一审计

书接上文数据库高安全—角色权限:权限管理&权限检查,从权限管理和权限检查方面解读了高斯数据库的角色权限,本篇将从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读。 4 审计追踪 4.1 传统审计 审计内容的记录方式通…...

机器学习 - 需要了解的条件概率、高斯分布、似然函数

似然函数是连接数据与参数的桥梁,通过“数据反推参数”的逆向思维,成为统计推断的核心工具。理解它的关键在于区分“参数固定时数据的概率”与“数据固定时参数的合理性”,这种视角转换是掌握现代统计学和机器学习的基础。 一、在学习似然函…...

Spring Boot Web 入门

目录 Spring Boot Web 是 Spring Boot 框架的一个重要模块,它简化了基于 Spring 的 Web 应用程序的开发过程。以下是一个 Spring Boot Web 项目的入门指南,涵盖了项目创建、代码编写、运行等关键步骤。 1. 项目创建 使用 Spring Initializr 使用 IDE …...

神经网络|(八)概率论基础知识-二项分布及python仿真

【1】引言 前序已经学习了古典概型、条件概率、全概率公式和贝叶斯公式,它们作为基础,解释了事件发生及其概率的对应关系,相关文章链接为: 神经网络|(四)概率论基础知识-古典概型-CSDN博客 神经网络|(五)概率论基础知识-条件概…...

【面试场景】MySQL分布式主键选取

文章目录 一. MySQL的自增主键二. UUID三. 雪花ID(推荐) 我的博客地址 一. MySQL的自增主键 适合单表的情况, 在分布式分库分表下可能会有一些问题 主键冲突问题 在分布式系统中,多个数据库节点独立生成自增主键,很容易出现重复的主键值。例如&#xff…...

执行git stash drop stash@{x} 时出现error: unknown switch `e‘ 的解决方式

原因: 在 PowerShell 或某些 Shell 中,{} 是特殊符号,stash{0} 会被解析成 stash 0,而 后的字符可能被误认为选项(如 -e),使 Git 收到意外的 -e 参数,导致报错 unknown switch ‘e’。 解决方…...

链表和 list

一、单链表的模拟实现 1.实现方式 链表的实现方式分为动态实现和静态实现两种。 动态实现是通过 new 申请结点,然后通过 delete 释放结点的形式构造链表。这种实现方式最能体 现链表的特性; 静态实现是利用两个数组配合来模拟链表。一个表示数据域&am…...

windows 蓝牙驱动开发-传输总线驱动程序常见问题

以下是驱动程序开发人员在开发总线驱动程序以支持蓝牙功能时可能会遇到的一些常见问题和方案。 我的串行总线驱动程序遇到了一些错误。 它意味着什么? 代码 10-49:设备管理器生成的错误代码。 代码 51:当串行总线驱动程序具有相关的控制器…...

Qt修仙之路2-1 炼丹初成

widget.cpp #include "widget.h" #include<QDebug> //实现槽函数 void Widget::login1() {QString userusername_input->text();QString passpassword_input->text();//如果不勾选无法登入if(!check->isChecked()){qDebug()<<"xxx"&…...

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue宠物预约上门服务预约平台

开题报告 本研究论文旨在构建并阐述一个基于 SpringBoot 和 Vue 技术栈开发的宠物上门服务预约平台的设计与实现。该平台集成了丰富的功能模块&#xff0c;为用户提供一体化的便捷服务体验。首先&#xff0c;用户能够通过注册并登录系统&#xff0c;享受个性化的服务流程。在平…...

无线AP之详解(Detailed Explanation of Wireless AP)

无线AP是什么&#xff1f; 市场上的AP基本上分为两大类&#xff1a;单纯型AP和扩展型AP。扩展型AP除了基本的AP功能之外&#xff0c;还可能带有若干以太网交换口、路由、NAT、DHCP、打印服务器等功能。 无线AP也就是一个无线交换机 无线路由器就是一个带路由功能的无线AP&am…...

Spring Boot Actuator与JMX集成实战

在微服务架构中&#xff0c;监控和管理应用的运行状态是至关重要的。Spring Boot Actuator 提供了一种便捷的方式来监控和管理 Spring Boot 应用&#xff0c;而 JMX&#xff08;Java Management Extensions&#xff09;则是一种用于管理 Java 应用的标准技术。本文将通过一个实…...

mac环境下,ollama+deepseek+cherry studio+chatbox本地部署

春节期间&#xff0c;deepseek迅速火爆全网&#xff0c;然后回来上班&#xff0c;我就浅浅的学习一下&#xff0c;然后这里总结一下&#xff0c;我学习中&#xff0c;总结的一些知识点吧&#xff0c;分享给大家。具体的深度安装部署&#xff0c;这里不做赘述&#xff0c;因为网…...

camera光心检测算法

1.概要 光心检测算法&#xff0c;基于opencv c实现&#xff0c;便于模组厂快速集成到软件工具中&#xff0c;适用于camera模组厂算法评估组装制程镜头与sensor的偏心程度&#xff0c;便于工程师了解制程的问题找出改善方向。 2.技术介绍 下图为camera模组厂抓取的bayer-raw经过…...

【MySQL】向后兼容设计规范(无回滚场景)

MySQL 向后兼容设计规范&#xff08;无回滚场景&#xff09; 在 不支持数据库回滚 且需保证 长期向后兼容性 的系统中&#xff0c;需通过 架构设计 和 流程管控 规避风险。以下是关键设计规范&#xff1a; 一、变更流程规范 变更分类分级 变更类型风险评估等级审批流程测试要求…...

还搞不透stm32单片机启动过程?一篇文章几百字让你彻底看懂!

1.stm32启动 1.1 msp和pc的初始值&#xff0c;第一步&#xff1a; 2.boot的值就被锁定了 可以根据实际绑定的值变动&#xff0c; 这里补充一点boot1和0的原理&#xff1a; 1.2来点刺激的&#xff1a; 这里我插入一个链接&#xff1a; 【明解STM32】一文搞明白STM32芯片存储…...

无界构建微前端?NO!NO!NO!多系统融合思路!

文章目录 微前端理解1、微前端概念2、微前端特性3、微前端方案a、iframeb、qiankun --> 使用比较复杂 --> 自己写对vite的插件c、micro-app --> 京东开发 --> 对vite支持更拉跨d、EMP 方案--> 必须使用 webpack5 --> 很多人感觉不是微前端 --> 去中心化方…...

DeepSeek辅助段落扩写的能力怎么样?

DeepSeek-R1在学术写作的诸多细节层面展现出了显著的应用价值。接下来我们将通过一系列具体案例&#xff0c;深入探讨该工具如何在扩写、翻译、发表以及内容改进等关键环节为学术写作提供有力支持。在提问环节&#xff0c;DeepSeek-R1能够高效地简化提示词&#xff0c;并精准地…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...