0

0

【Paddle打比赛】AIWIN手写字体OCR识别竞赛任务一优化方案

P粉084495128

P粉084495128

发布时间:2025-07-28 11:12:25

|

634人浏览过

|

来源于php中文网

原创

本文围绕世界人工智能创新大赛AIWIN手写字体OCR识别竞赛任务一,提出优化方案。在原baseline基础上更换更优模型并微调,得分提升1.955%至0.99171,排名39/137。介绍数据处理流程,包括格式转换、划分训练验证集等,还涉及模型构建与预测,最后总结尝试及优化建议。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

【paddle打比赛】aiwin手写字体ocr识别竞赛任务一优化方案 - php中文网

世界人工智能创新大赛AIWIN手写字体OCR识别竞赛任务一优化方案

一、竞赛介绍

2021世界人工智能创新大赛(AIWIN),由世界人工智能大会组委会主办,AI SPACE承办,是全球范围内初具影响力的人工智能赛事,是2021世界人工智能大会的重要组成部分。

秋季赛将继续围绕“人工智能助力城市数字化转型”的主题,以“开展算法创新、选拔数字人才”为目标,继续秉持“高端化、专业化、国际化、市场化“的原则开展赛事。

今年提供手写字体OCR识别竞赛和心电智能诊断算法竞赛两个赛题。

我们选取【手写字体OCR识别竞赛】任务一进行实验,接下来对赛题背景及任务进行简单介绍。

1.1 赛题背景

银行日常业务中涉及到各类凭证的识别录入,例如身份证录入、支票录入、对账单录入等。以往的录入方式主要是以人工录入为主,效率较低,人力成本较高。近几年来,OCR相关技术以其自动执行、人为干预较少等特点正逐步替代传统的人工录入方式。但OCR技术在实际应用中也存在一些问题,在各类凭证字段的识别中,手写体由于其字体差异性大、字数不固定、语义关联性较低、凭证背景干扰等原因,导致OCR识别率准确率不高,需要大量人工校正,对日常的银行录入业务造成了一定的影响。

1.2 赛题任务

【Paddle打比赛】AIWIN手写字体OCR识别竞赛任务一优化方案 - php中文网        

1.3 赛题奖励

【Paddle打比赛】AIWIN手写字体OCR识别竞赛任务一优化方案 - php中文网        

本次方案简介:

在参考原作者的baseline:【Paddle打比赛】手写字体OCR识别竞赛baseline的基础上,更换精度更好的模型,并在这基础进行fine-tune

原作者Baseline得分:0.97216

本次方案得分:0.99171(+1.955%),最终排名:39/137。证明此方案可行

【Paddle打比赛】AIWIN手写字体OCR识别竞赛任务一优化方案 - php中文网        

二、数据处理

2.1 数据下载

大赛使用数据要求如下"参赛人员不得对外以任何形式转载、发布赛题的训练集、验证集的全部或任意部分",因此需要大家自行去官网下载数据集。

注:数据量8000,且均是文字区域,下载速度很快。

In [1]
#新建文件夹【dataset】!mkdir dataset
   

将下载的数据集上传到【dataset】文件夹内,操作流程如下图所示:

【Paddle打比赛】AIWIN手写字体OCR识别竞赛任务一优化方案 - php中文网        

然后解压数据集:

In [ ]
!unzip -q data/2021A_T1_Task1_Sample_V1106.zip -d ./dataset/
!unzip -q data/2021A_T1_Task1_数据集.zip -d ./dataset/
   

2.2 数据格式

下载的数据标注为json格式且图片在两个文件夹内,我们需要处理为PaddleOCR训练所需要的格式:建议将训练图片放入同一个文件夹,并用一个txt文件(rec_gt_train.txt)记录图片路径和标签,txt文件里的内容如下:

注意: txt文件中默认请将图片路径和图片标签用 \t 分割,如用其他方式分割将造成训练报错。

" 图像文件名                 图像标注信息 "train_data/rec/train/word_001.jpg   简单可依赖
train_data/rec/train/word_002.jpg   用科技让复杂的世界更简单
...
       

最终训练集应有如下文件结构:

|-train_data
  |- rec_gt_train.txt
  |- train
    |- 8bb1941c760a2c1d017626c361da6c4d.jpg
    |- 8bb1941c760a2c1d01762b943a624421.jpg
    |- 8bb1941c760a2c1d0176415a9ec807fe.jpg
    | ...
       

接下来,我们一起看怎么用代码具体实现吧~

In [9]
import osimport os.path as ospimport jsonimport shutilimport yaml
   

定义write_file函数,处理训练集中date和amount中的数据:

In [10]
def write_file(file, json_file, save_pic):
    # 读取json文件
    data = yaml.load(open(json_file))    
    # all_str为了后面统计训练集的字典
    all_str = ''
    
    for pic_name, label_info in data.items():        # 修改成OCR需要的格式
        line = os.path.join(save_pic, pic_name)+'\t'+label_info+'\n'
        file.write(line)

        all_str+=label_info        # 将图片移动到save_pic目录下
        ori_path = osp.join(osp.dirname(json_file), 'images', pic_name)
        save_path = osp.join(save_pic, pic_name)
        shutil.copy(ori_path, save_path)    return set(all_str)
   

2.3划分数据集

原作者是把所有数据进行训练,这样对进行fine-tune不太友好,因此我把原数据集进行8:2进行划分为训练集、验证集,这样可以更直观看到自己改进的参数是否对模型有帮助,可手动删除rec_gt_val.txt多的部分。

In [16]
import randomimport os# 处理数据之后的保存路径# !mkdir 'train_data'# 记录图片和标签的txtsave_txt = '/home/aistudio/train_data/rec_gt_train.txt'save_val_txt='/home/aistudio/train_data/rec_gt_val.txt'# 所有图片放在一个文件夹内save_pic = '/home/aistudio/train_data/train'if not os.path.exists(save_pic):
    os.mkdir(save_pic)# 读取date和amount的json文件date_json = '/home/aistudio/dataset/训练集/date/gt.json'amount_json = '/home/aistudio/dataset/训练集/amount/gt.json'file = open(save_txt, 'w')
date_set = write_file(file, date_json, save_pic)
amount_set = write_file(file, amount_json, save_pic)
file.close()

file = open(save_val_txt, 'w')
date_set = write_file(file, date_json, save_pic)
amount_set = write_file(file, amount_json, save_pic)
file.close()
   

处理测试集,将所有图片放在一个文件夹内:

In [ ]
!mkdir /home/aistudio/test_data/
!cp -r /home/aistudio/dataset/测试集/amount/images/* /home/aistudio/test_data/
!cp -r /home/aistudio/dataset/测试集/date/images/* /home/aistudio/test_data/
   

2.4 字典

最后需要提供一个字典({rec_gt_label}.txt),使模型在训练时,可以将所有出现的字符映射为字典的索引。

因此字典需要包含所有希望被正确识别的字符,{rec_gt_label}.txt需要写成如下格式,并以 utf-8 编码格式保存:

TTSMaker
TTSMaker

TTSMaker是一个免费的文本转语音工具,提供语音生成服务,支持多种语言。

下载
l
dad
r
n
   
In [ ]
character_dict_path = 'train_data/rec_gt_label.txt'with open(character_dict_path, 'w', encoding='utf-8') as out_file:
    merge_set = date_set|amount_set
    num_class = len(merge_set)    print('num_class:',num_class)    for label in merge_set:
        line = label+'\n'
        out_file.write(line)
   

三、模型构建

3.1 识别算法

PaddleOCR中提供了如下文本识别算法列表,以及每个算法在英文公开数据集上的模型和指标,主要用于算法简介和算法性能对比。

文本识别算法:

模型 骨干网络 Avg Accuracy 模型存储命名 下载链接
Rosetta Resnet34_vd 80.24% rec_r34_vd_none_none_ctc 下载链接
Rosetta MobileNetV3 78.16% rec_mv3_none_none_ctc 下载链接
CRNN Resnet34_vd 82.20% rec_r34_vd_none_bilstm_ctc 下载链接
CRNN MobileNetV3 79.37% rec_mv3_none_bilstm_ctc 下载链接
STAR-Net Resnet34_vd 83.93% rec_r34_vd_tps_bilstm_ctc 下载链接
STAR-Net MobileNetV3 81.56% rec_mv3_tps_bilstm_ctc 下载链接
RARE Resnet34_vd 84.90% rec_r34_vd_tps_bilstm_attn 下载链接
RARE MobileNetV3 83.32% rec_mv3_tps_bilstm_attn 下载链接
SRN Resnet50_vd_fpn 88.33% rec_r50fpn_vd_none_srn 下载链接

3.2 安装PaddleOCR

本项目中已经帮大家安装好了最新版的PaddleOCR,且修改好配置文件、后处理代码,无需安装~

如仍需安装or安装更新,可以执行以下步骤(目前支持Clone GitHub【推荐】和Gitee两种方式):

注:码云托管代码可能无法实时同步本github项目更新,存在3~5天延时,请优先使用推荐方式。

In [1]
# 安装依赖,每次启动项目都需要执行%cd PaddleOCR
!pip install --upgrade pip
!pip install -r requirements.txt
   

3.3 模型训练

原作者是选择CRNN模型进行训练、MobileNetv3作为backbone,具体参数可以在configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml文件里修改训练配置:比如是否使用GPU、模型保存路径、数据集路径、学习率、优化等。

本次方案是选择STAR-Net模型进行训练、Resnet34_vd作为backbone,具体参数可以在configs/rec/ch_ppocr_v2.0/rec_train.yml查看。

注意: 训练的过程中会有 前面27个左右epochs,acc=0的情况,具体原因我也不清楚,期待有懂得同学可以解答一下。

执行命令,启动训练:

In [2]
!python tools/train.py -c configs/rec/ch_ppocr_v2.0/rec_train.yml
   

四、模型预测

训练好模型之后,即可启动测试,Global.pretrained_model表示预测使用的模型,Global.infer_img表示测试的图片路径或着测试图片文件夹路径:

In [3]
# 预测中文结果!python3 tools/infer_rec.py -c configs/rec/ch_ppocr_v2.0/rec_train.yml -o Global.pretrained_model=output/rec_train/best_accuracy  Global.load_static_weights=false Global.infer_img=/home/aistudio/test_data
   

4.1生成提交比赛所需格式

In [4]
%cd output/rec
       
/home/aistudio/PaddleOCR/output/rec
       
In [5]
!zip -r answer.zip  answer.json
       
  adding: answer.json (deflated 81%)
       

同时修改infer_rec.py将结果保存为比赛要求的格式,保存结果的路径由configs/rec/ch_ppocr_v2.0/rec_train.yml中save_res_path参数控制,结果answer.json效果如下图:

【Paddle打比赛】AIWIN手写字体OCR识别竞赛任务一优化方案 - php中文网        

总结

做了许多的尝试,调整学习率,使用更多的数据增强方式,更改batch_size,使用预训练模型等等

结果如下:(+表示有效,-表示效果更差,0表示变动不大)

调整学习率(+)

使用更多的数据增强方式(-)

更改batch_size(0)

使用预训练模型(-)

优化建议:

可以使用精度更高的模型,并进行微调,可以尝试以上我觉得不行的方案,可能是我打开的方式不对,微调过后可以选择多种模型进行融合。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

36

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

135

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

47

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

90

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

226

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

502

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

170

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

286

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号