0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实现图像到文字的转换过程

lviY_AI_shequ 来源:未知 作者:李倩 2018-04-04 08:51 次阅读

赛题以识别类似手写体的四则运算式为主题,参赛者需要在充满干扰信息的10万张图片中,设计算法识别图片上数学运算式并计算结果。决赛在初赛的基础上,引入分数和更加复杂的运算,同样以最终的识别率来评判算法。

本节会详细介绍我在进行四则混合运算识别竞赛初赛时的所有思路。

问题描述

本次竞赛目的是为了解决一个 OCR 问题,通俗地讲就是实现图像到文字的转换过程。

数据集

初赛数据集一共包含10万张180*60的图片和一个labels.txt的文本文件。每张图片包含一个数学运算式,运算式包含:

3个运算数:3个0到9的整型数字; 2个运算符:可以是+、-、*,分别代表加法、减法、乘法 0或1对括号:括号可能是0对或者1对

图片的名称从0.png到99999.png,下面是一些样例图片(这里只取了一张):

文本文件 labels.txt 包含10w行文本,每行文本包含每张图片对应的公式以及公式的计算结果,公式和计算结果之间空格分开,例如图片中的示例图片对应的文本如下所示:

(3-7)+5 1

5-6+2 1

(6+7)*2 26

(4+2)+7 13

(6*4)*4 96

评价指标

官方的评价指标是准确率,初赛只有整数的加减乘运算,所得的结果一定是整数,所以要求序列与运算结果都正确才会判定为正确。

我们本地除了会使用官方的准确率作为评估标准以外,还会使用 CTC loss 来评估模型。

使用 captcha 进行数据增强

官方提供了10万张图片,我们可以直接使用官方数据进行训练,也可以通过Captcha,参照官方训练集,随机生成更多数据,进而提高准确性。根据题目要求,label 必定是三个数字,两个运算符,一对或没有括号,根据括号规则,只有可能是没括号,左括号和右括号,因此很容易就可以写出数据生成器的代码。

生成器

生成器的生成规则很简单:

相信大家都能看懂。当然,我写文章的时候又想到一种更好的写法:

除了生成算式以外,还有一个值得注意的地方就是初赛所有的减号(也就是“-”)都是细的,但是我们直接用 captcha 库生成图像会得到粗的减号,所以我们修改了image.py中的代码,在_draw_character函数中我们增加了一句判断,如果是减号,我们就不进行 resize 操作,这样就能防止减号变粗:

我们继而使用生成器生成四则运算验证码:

上图就是原版生成器生成的图,我们可以看到减号是很粗的。

上图是修改过的生成器,可以看到减号已经不粗了。

模型结构

模型结构像之前写的文章一样,只是把卷积核的个数改多了一点,加了一些 BN 层,并且在四卡上做了一点小改动以支持多GPU训练。如果你是单卡,可以直接去掉base_model2 = make_parallel(base_model, 4)的代码。

BN 层主要是为了训练加速,实验结果非常好,模型收敛快了很多。

base_model 的可视化:

model 的可视化:

模型训练

在经过几次测试以后,我已经抛弃了 evaluate 函数,因为在验证集上已经能做到 100% 识别率了,所以只需要看 val_loss 就可以了。在经过之前的几次尝试以后,我发现在有生成器的情况下,训练代数越多越好,因此直接用 adam 跑了50代,每代10万样本,可以看到模型在10代以后基本已经收敛。

我们可以看到模型先分为四份,在四个显卡上并行计算,然后合并结果,计算最后的 ctc loss,进而训练模型。

结果可视化

这里我们对生成的数据进行了可视化,可以看到模型基本已经做到万无一失,百发百中。

打包成 docker 以后提交到比赛系统中,经过十几分钟的运行,我们得到了完美的1分。

总结

初赛是非常简单的,因此我们才能得到这么准的分数,之后官方进一步提升了难度,将初赛测试集提高到了20万张,在这个集上我们的模型只能拿到0.999925的成绩,可行的改进方法是将准确率进一步降低,充分训练模型,将多个模型结果融合等。

官方扩充测试集的难点

在扩充数据集上,我们发现有一些图片预测出来无法计算,比如[629,2271,6579,17416,71857,77631,95303,102187,117422,142660,183693]等,这里我们取 117422.png 为例。

我们可以看到肉眼基本无法认出这个图,但是经过一定的图像处理,我们可以显现出来它的真实面貌:

然后我们可以看到这样的结果:

当然,还有一张图是无法通过预处理得到结果的,142660,这有可能是程序的 bug 造成的小概率事件,所以初赛除了我们跑了一个 docker 得到满分以外,没有第二个人达到满分。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像
    +关注

    关注

    2

    文章

    1083

    浏览量

    40449
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68529
  • 生成器
    +关注

    关注

    7

    文章

    315

    浏览量

    21003

原文标题:百度魅族深度学习大赛初赛冠军作品(图像识别.源码)

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    模数A/D转换器的基本原理与转换过程解析

    在一系列选定的瞬间对模拟信号进行取样,然后再将这些取样值转换成输出的数字量,并按一定的编码形式给出转换结果。整个A/D转换过程大致可分为取样、量化、编码三个过程
    发表于 08-03 15:22 7005次阅读
    模数A/D<b class='flag-5'>转换</b>器的基本原理与<b class='flag-5'>转换过程</b>解析

    A/D转换器的转换过程及电路分析

    值也离散的数字信号,因此,A/D转换一般要经过取样、保持、量化及编码4个过程。在实际电路中,这些过程有的是合并进行的,例如,取样和保持,量化和编码往往都是在转换过程中同时
    发表于 02-28 18:04 6779次阅读
    A/D<b class='flag-5'>转换</b>器的<b class='flag-5'>转换过程</b>及电路分析

    labview编程模拟十进制数到二进制数的转换过程

    模拟十进制数到二进制数的转换过程,以LED来模拟各个二进制位,并能以动画方式模拟计数的过程。 选择手动方式时,将8个LED变成滑动条中数字的二进制(基数2)表示。例如,如果滑动条设置为数字10(在
    发表于 12-07 22:20

    晶体二极管的开关转换过程

    晶体二极管开关电源转换过程分析
    发表于 05-21 07:24

    当将IoT原理应用到工厂流程时,在转换过程中会丢失什么?

    当将IoT原理应用到工厂流程时,在转换过程中会丢失什么?
    发表于 06-16 09:01

    AD转换过程是通过哪几个步骤完成的

    模拟分频器是什么?AD转换过程是通过哪几个步骤完成的?压敏电阻的作用有哪些?
    发表于 10-18 06:00

    一文浅析ADC的转换过程

      ADC转换过程:取样保持、量化和编码。  1) 采样保持:模拟电子开关S在采样脉冲CPS的控制下重复的开关。S接通时,ui(t)对C充电,为采样过程;S断开时,C上的电压保持不变,为保持过程
    发表于 03-16 18:06

    图像文字的合成

    前几天要做一段程序,把文字和位图图像合成并保存为位图文件。但问了好久都没人给一个满意的答复,只好在黑暗中摸索,费了一番功夫,实现图像文字
    发表于 10-25 15:50 3次下载

    电液伺服系统位置与压力控制转换过程的加减速算法与仿真

    电液伺服系统位置与压力控制转换过程的加减速算法与仿真
    发表于 05-03 14:23 8次下载

    详解晶体二极管开关转换过程

    晶体二极管开关电路在数字系统和自动化系统里应用很广泛,在晶体二极管开关特性实验中,其开关转换过程中输出与输入存在时间上的延迟或者滞后,研究晶体二极管开关特性主要是研究其开关状态转换过程所需时间的长短。
    的头像 发表于 01-08 16:04 5061次阅读
    详解晶体二极管开关<b class='flag-5'>转换过程</b>

    如何使用FPGA实现BayerRGB图像格式转换的设计

    利用FPGA处理数据量大、处理速度快,结合CMOS图像传感器MT9M001和BayerCFA格式图像的特点,设计一种基于FPGA的图像数据转换处理系统,提出用硬件
    发表于 01-25 16:04 6次下载
    如何使用FPGA<b class='flag-5'>实现</b>Bayer<b class='flag-5'>到</b>RGB<b class='flag-5'>图像</b>格式<b class='flag-5'>转换</b>的设计

    Linux虚拟地址物理地址转换过程

    虚拟地址物理地址转换过程 虚拟地址和物理地址都被划分了两部分: 虚拟地址由虚拟页面号VPN和虚拟地址偏移VA offset两部分组成。同样,物理地址由物理页帧号PFN和物理地址偏移PA
    的头像 发表于 10-08 11:45 1948次阅读
    Linux虚拟地址<b class='flag-5'>到</b>物理地址<b class='flag-5'>转换过程</b>

    一文讲解ADC模数转换芯片的原理及转换过程

    和传输时,就需要ADC模拟转换芯片帮助我们实现这一功能。ADC芯片全称Analog-to-Digital Converter(模拟数字转换器),是一个帮助我们将模拟信号转换成为数字信号
    的头像 发表于 10-23 14:57 2337次阅读

    应用卫星通信领域的一个坐标转换过程—机体坐标系与ENU坐标系的转换

    今天我们要讲的是应用于卫星通信领域的一个坐标转换过程——机体坐标系与ENU坐标系的转换
    的头像 发表于 12-27 09:30 4379次阅读
    应用卫星通信领域的一个坐标<b class='flag-5'>转换过程</b>—机体坐标系与ENU坐标系的<b class='flag-5'>转换</b>

    SDI转AV转换器技术解析:转换过程中的关键要素与优势

    随着高清视频技术的快速发展,SDI(Serial Digital Interface)转AV转换器成为了实现高清信号与普通家电设备兼容的关键设备。这种转换器在技术上涉及多个关键要素,
    的头像 发表于 02-22 15:03 654次阅读