有图又怎样?我有文来斗:表情包文字识别解析

导语

表情已经充斥在网络的各个角落。现在流行 “能发图就不打字”。在我们的表情项目当中需要从形形色色的网络表情中找出对应的文字,作为关键字搜索。这些表情中提取出的文字,亦可用于我们后续的文本分析,情感预测,语义理解等。因此,表情文字识别成为了重中之重。这篇文章是我们在文字识别上的一些积累和成果,分享给大家。

产品背景

相信大家都有使用过表情的经历,一张合适的底图配上逗比的文字往往比冰冷的文字更加能表达当时的一个心理状态。基于这个背景,我们团队想在表情上做一些创新的尝试,让用户能够搜索到他们想要的表情。因此,搜索成为了这个产品的关键,而一个搜索方式就是用户根据文字找到想要的表情。

为了打通图片和文字的桥梁,我们把重心放在了文字识别,也可以叫做OCR识别上。使用了公司的通用OCR后,发现针对复杂多变的表情文字,很难达到理想的效果。如何在表情文字识别这个垂直领域上做一些突破?我们针对这个问题进行了深入的研究并且取得了一定的成果。

识别算法介绍

目前主流的文字识别方法都差不多。主要分为两个模块,一个模块定位文字位置,另外一个模块针对定位后的文字进行识别。针对这两个模块,我们使用的是Faster RCNN + CTC的方案。

文字定位

Faster RCNN1是从RCNN2逐渐演变过来的。相对于它的前辈RCNN以及Fast RCNN3, Faster RCNN提出了RPN(Region Proposal Network)网络。通过RPN输出Anchor Box Proposals。再通过NMS和其他一些方法进行Proposals Reduction。该方法对比以往的方案,性能更优,减少了selective search里面繁琐的计算。当然目前目标检测还有其他state of art的定位方案,例如YOLOv24,Mask RCNN5等,其中Mask RCNN更多聚焦在image segmentation上。

图1: Faster RCNN的基本结构

图2: 文字定位后截取的图片

文字识别

文字识别使用的CTC(Connectionist Temporal Classification)6技术在语音识别里很常用,后来也被用于文字的识别。文字识别中使用的CTC也是基于端对端的。基本思路是将定位后的图片,用CNN网络提取特征,输出特征给RNN网络,再由RNN网络输出预测序列。输出的序列通过greedy decoder、最优路径等方法进行解码,并计算出损失。

图3: CTC模型输出

识别方案介绍

为了达到我们想要的效果,我们主要在数据扩增,网络结构,tricks以及参数调优上面做了大量的工作。下面我们会大致介绍部分使用到的调优方法。

数据扩增

通过人工去标注大量的文字定位信息和文字内容信息用于训练显然是不可行的。对比其他业务的标签数据,文字识别是比较容易通过机器去生成。我们研究了后台表情图片的文字大致分布,然后模拟生成接近真实图片的训练数据。

方法包括:

a. 我们找了各种颜色的背景图,以便于生成多样性,例如偏蓝色背景图,偏红色背景图,黑白背景图等等。

b. 结合语料使生成的图片更加接近真实数据集。

c. 控制各种类型图片生成比例。

最终,在定位中使用的训练数据集大约60万张,而在文字识别使用中生成的数据集大约200万张。我们训练两个网络使用不同的数据集,目的是避免overfitting.

图4: 生成图片采样

网络结构

a. 文字定位最开始用的是VGG网络,定位出来的坐标不够准确。定位后发现是由于VGG网络学习容易饱和导致。后采用深度残差网络替换,使得loss能够进一步降低。

b. CTC模型使用的是一个改进的VGG16网络,以及一个双向RNN网络。在改进版VGG16网络中,每一层都加上Batch Norm以及dropout。

tricks

a. 由于我们在CTC中使用的是双向RNN网络,因此在训练过程中,前几个time step不计算损失。目的是让网络在第一次计算loss的时候,能拿到前后的信息。

b. Spatial Transform。定位的图片输入后使用ST对输入进行空间变换,增加模型健壮性。

c. 权重初始化使用何恺明论文里提出的variance scaling initializer7。

d. 图片输入网络之前使用双线性插值。

参数调优

除去常规的参数调优,这里列举一些值得关注的参数调整

a. 针对文字定位部分,主要调整了anchor box的aspect ratio。由于文字一般是长方形,因此我们希望长方形的anchor box生成的更多,减少其他不必要的anchor box。

b. RNN输出的序列不宜过长,否则效果会下降。

评估对比

公司在文字识别中做了不少的工作。我们主要对比的就是他们的通用OCR。对比的数据集是我们人工随机抽取的980张图片,并且标注了ground truth文字内容。对比数据如下:

String Accuracy

Char Accuracy

Tencent General OCR

0.249

0.418

Ours

0.65

0.801

针对我们业务最关心的整句准确率,可以看出一定的提升。

总结

以上就是我们在表情识别方面的一些经验和积累。对于不同的特定业务,需要收集该业务中尽可能多的标签数据,并针对这些标签数据做好数据扩增。使用适合的tricks和参数提高上限。

目前我们已经把我们的模型接入到了运营环境中。如下图所示:

图5: 运营环境实际使用

未来工作

深度残差网络能够有效对抗梯度问题,但是由于网络太深,参数太多,会引起训练以及预测时候效率的下降。今年的CVPR中提到了Dense CNN8,一种新的网络结构,能够有效降低参数数量,加快训练速度。也许可以用于替换我们现有的CNN。

感谢

在这里特别感谢 MIG D2数据计算平台对我们项目提供的各种计算支持

Reference

1 Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun(2016 v3), Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

2 Girshick, Ross and Donahue, Jeff and Darrell, Trevor and Malik, Jitendra(2014), Rich feature hierarchies for accurate object detection and semantic segmentation

3 Ross Girshick(2015), Fast R-CNN

4 Joseph Redmon, Ali Farhadi(2016), YOLO9000: Better, Faster, Stronger

5 Kaiming He, Georgia Gkioxari, Piotr Dollár, Ross Girshick(2017), Mask R-CNN

6 Alex Graves, Santiago Fern´andez, Faustino Gomez, Jurgen Schmidhuber(2006), Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks

7 Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun(2015), Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

8 Gao Huang, Zhuang Liu, Kilian Q. Weinberger, Laurens van der Maaten(2016), Densely Connected Convolutional Networks

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

周力的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

深度 | Yoshua Bengio AIWTB大会解读深度生成模型:让机器具备无监督学习能力

机器之心报道 演讲者:Yoshua Bengio 参与:吴攀、蒋思源 面向开发者的世界上最大的人工智能主题在线演讲与对话大会 AI WITH THE BEST(...

34712
来自专栏AI研习社

分分钟带你杀入Kaggle Top 1%

不知道你有没有这样的感受,在刚刚入门机器学习的时候,我们一般都是从MNIST、CIFAR-10这一类知名公开数据集开始快速上手,复现别人的结果,但总觉得过于简单...

5397
来自专栏人工智能头条

分分钟带你杀入Kaggle Top 1%

461
来自专栏数据派THU

ML:教你聚类并构建学习模型处理数据(附数据集)

1758
来自专栏智能算法

人脸识别应用之“变脸”

“照片分享”是社交场景中比重很大的一部分,当然现在来看视频(特别是短视频)也变得越来越多,而照片又以人像为主,所以我们看到如QQ空间、微博、微信朋友圈里,自拍、...

5517
来自专栏语言、知识与人工智能

【腾讯知文】任务型对话之语言理解

本文的重点将介绍传统算法框架中语言理解模块的意图与槽位的联合模型。

10.3K7
来自专栏应用案例

OCR技术浅析

OCR(Optical Character Recognition,光学字符识别)的概念早于1920年代便被提出,一直是模式识别领域中重要的研究方向。 近年来,...

1.4K1
来自专栏AI科技评论

大神Yoshua Bengio经典前瞻演讲——深度学习框架将所向披靡(51页PPT干货)

编者注:Yoshua Bengio教授是机器学习大神之一,尤其是在深度学习这个领域,他也是人工智能领域中经典之作《Learning Deep Architect...

3525
来自专栏机器之心

MIT提出精细到头发丝的语义分割技术,打造效果惊艳的特效电影

随着电影越来越关注 CGI,电影制作人必须更加擅长「合成」,即将前景和背景图像融合,比如将演员放在飞机或行星上,或者放在电影《黑豹》里瓦坎达这样的虚构世界中。

1341
来自专栏数据派THU

独家 | 一文读懂贝叶斯分类算法(附学习资源)

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本文首先介绍分类问题,给出分类问题的定义。随后介绍贝叶斯分类算法的基础——贝叶...

2375

扫码关注云+社区