由于深度学习近期取得的进展,手写字符识别任务对一些主流语言来说已然不是什么难题了。但是对于一些训练样本较少的非主流语言来说,这仍是一个挑战性问题。为此,本文提出新模型TextCaps,它每类仅用200个训练样本就能达到和当前最佳水平媲美的结果。

由于深度学习模型近期取得的进展,对于许多主流语言来说,手写字符识别已经是得到解决的问题了。但对于其它语言而言,由于缺乏足够大的、用来训练深度学习模型的标注数据集,这仍然是一个极具挑战性的问题。

尽管 CNN 可以很好地理解图片中的低级和高级特征,但这样做会在池化层上丢失有价值的信息。CNN 的训练需要大量训练样本(一般每一类需要数千或数万个样本)才能成功地对图像分类。因此人们对用少量训练样本训练成功的 CNN 有着浓厚兴趣。

本文提出了一种技术,它借助胶囊网络(Capsule Networks,CapsNets)[4] 解决了标注数据集太小的问题。我们仅通过操纵实例化参数 [5],利用了 CapsNet 增强数据的能力。在本文的例子中,CapsNet 不仅识别了字符图像,还学习了它的属性。这让 CapsNet 得以在标注数据很少的字符识别问题中大展拳脚。

本文的架构以 Sabour 等人提出的 CapsNet 架构 [4] 为基础,该架构是由胶囊网络和全连接解码器网络组成的。研究人员用(deconvolutional network)代替了解码器网络,同时还对胶囊网络做了一些小改动。

通过给表征实体属性的实例化参数加入一些可控噪声,研究人员转换实体以表征现实中发生的实际变化。这样就产生了一种全新的数据生成技术,这种技术生成的数据会比基于仿射变换生成的增强数据更加逼真。

重建准确率在很多情况下也很重要,因此研究人员提出了一种从经验上讲很合适的策略,这种策略结合了可以显著提升重建性能的损失函数。该系统在每类样本只有 200 个数据点的情况下得到了和当前最佳结果相当的结果。如果用更多训练数据,可以得到更好的结果。

本文的主要贡献如下:

  • 在所有可用训练样本上训练该系统后,在 EMNIST-letters、EMNIST-balanced 以及 EMNIST-digits 字符数据集上得到的结果都优于当前最佳结果;

  • 研究人员还在非字符数据集 Fashion-MNIST 上评估了该架构,以确保模型的灵活性和鲁棒性。他们用 200 个训练样本得到了非常好的结果,并用完整的数据集得到了当前最佳的结果;

  • 研究人员提出了一种用少量训练样本(每一类 200 个数据)训练胶囊网络的新技术,并在相同数量的测试样本上实现了当前最佳的性能。和当前最佳的系统相比,我们的模型只需要 10% 的数据就可以得到类似的结果;

  • 研究人员还提出并评估了解码器网络的几个变体,用不同的损失函数分析了解码器网络的性能,以提供组合损失函数的适当策略。

论文:TextCaps : Handwritten Character Recognition with Very Small Datasets 

论文地址:https://arxiv.org/pdf/1904.08095.pdf

摘要:尽管字符识别系统进展很快,但由于缺乏大量有标注的训练数据,很多本地化语言还是难以从中获益。这是因为这样的语言难以获得大量标注数据,而深度学习还无法通过少量训练样本正确学习。

为了解决这个问题,我们引入了一种根据现有样本生成新训练样本的技术。通过给相应的实例化参数添加随机可控噪声,这个新技术可以产生逼真的增强数据,这些增强数据也会反映出人类实际手写字符时会出现的一些变化。

我们只用每类 200 个训练样本的数据进行训练,就得到了超越基于 EMNIST-letter 数据集所获的现有字符识别的结果,同时还获得了与 EMNIST-balanced 、EMNIST-digits 以及 MNIST 这三个数据集相当的现有结果。

我们还开发了一种用损失函数组合有效改善重建能力的策略。我们的系统在缺乏大量标注训练数据的本地化语言的字符识别任务中很有用,甚至在其它相关的通用内容(比如目标识别)上也是如此。

用胶囊网络进行字符识别

我们提出了一种由胶囊网络和解码器网络组成且针对字符识别任务的架构,如图 1 和图 2 所示。

图 1:TextCap 模型:用于字符分类的 CapsNet 模型。

图 2:TextCap 解码器:用于字符重建的解码器网络。通过屏蔽 TextCap 分类器的 DigitCaps 层来获得网络的输入。

基于实例化参数扰动的图像数据生成技术

用预训练的解码器网络,我们可以只用实例化参数向量成功重建原始图像。该扰动算法背后的原理是,通过在实例化向量值中添加可控的随机噪声,我们可以创建和原始图像迥然不同的新图像,从而有效扩大训练数据集。

图 3 展示了改变一个特定实例化参数后产生的图像变体。

图 3:扰动实例化参数后产生的字符变体。

类似地,每一个实例化参数都分别或共同负责图像的某个特定属性。因此,我们提出了一种新技术,它可以根据训练样本有限的数据集产生新数据集,如图 4 所示。

图 4:提升解码器性能的整体方法。

实验和结果

我们从表 1 中每个数据集的训练集中选取了 200 个训练样本来训练 TextCaps,并用每个数据集的完整测试集进行测试。为了测试 TextCaps 架构的性能,我们还用完整的训练集训练了模型,并用完整的测试集进行测试。

表 1:用于评估 TextCaps 的五个数据集。

表 2:TextCaps 和当前最佳结果的比较,表中展示了 3 次试验的平均值和标准差。

表 3:使用不同的损失函数组合时产生的每个重建结果的 PSNR 值。我们在这里用了两个解码器网络模型,每个解码器都有一个损失函数。对每一个损失函数组合来说,第一行的 PSNR 值对应第一个重建损失函数(用在第一个解码器中),第二行对应的是第二个损失函数(用在第二个解码器中)。

原文链接:https://arxiv.org/abs/1904.08095

仅用200个样本就能得到当前最佳结果:手写字符识别新模型TextCaps的更多相关文章

  1. 使用caffemodel模型(由mnist训练)测试单张手写数字样本

    caffe中训练和测试mnist数据集都是批处理,可以反馈识别率,但是看不到单张样本的识别效果,这里使用windows自带的画图工具手写制作0~9的测试数字,然后使用caffemodel模型识别. 1 ...

  2. 小游戏:200行python代码手写2048

    #-*- coding: utf-8 -*- import curses from random import randrange, choice from collections import de ...

  3. 不使用tomcat,仅适用javaSE手写服务器--模拟登陆

    1.搭建框架 我们只是简单模拟,框架简单分三个模块 a,服务器端server包 b,servlet,根据不同的请求url,利用反射生产对应的servlet c,IO工具包,用来关闭IO流 d,编写we ...

  4. 史上最简单的手写Promise,仅17行代码即可实现Promise链式调用

    Promise的使用相比大家已经孰能生巧了,我这里就不赘述了 先说说我写的Promise的问题吧,无法实现宏任务和微任务里的正确执行(也就是在Promise里面写setTimeout,setInter ...

  5. AI学习---数据IO操作&神经网络基础

    数据IO操作 TF支持3种文件读取:    1.直接把数据保存到变量中    2.占位符配合feed_dict使用    3. QueueRunner(TF中特有的) 文件读取流程 文件读取流程(多线 ...

  6. 深度学习论文翻译解析(五):Siamese Neural Networks for One-shot Image Recognition

    论文标题:Siamese Neural Networks for One-shot Image Recognition 论文作者: Gregory Koch   Richard Zemel Rusla ...

  7. Deep-Learning-with-Python] 文本序列中的深度学习

    https://blog.csdn.net/LSG_Down/article/details/81327072 将文本数据处理成有用的数据表示 循环神经网络 使用1D卷积处理序列数据 深度学习模型可以 ...

  8. 支持向量机通俗导论(理解SVM的三层境界)

    原文链接:http://blog.csdn.net/v_july_v/article/details/7624837 作者:July.pluskid :致谢:白石.JerryLead 出处:结构之法算 ...

  9. Python之路【第二十四篇】:Python学习路径及练手项目合集

      Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...

随机推荐

  1. android逆向---charles抓包

    手机与电脑处于同一网络环境,且正确设置代理后,charles显示CONNECT失败,提示信息SSL handshake with client failed: An unknown issue occ ...

  2. 达拉草201771010105《面向对象程序设计(java)》第十一周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十一周学习总结 实验十一   集合 实验时间 2018-11-8 第一部分:理论知识 1.集合(Collection或称为容 ...

  3. 【阿里云IoT+YF3300】16.云端一体化,天猫精灵操控YF3300

    “你好天猫精灵”,“主人有什么吩咐”,“打开灯”,“好的,灯已打开”.对于这样的对话应该大多数人都很熟悉,这就是智能家居的缩影.对于现在市面上层出不穷的智能家居系统,功能越来越繁杂,可是因为开发难度高 ...

  4. C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比

    系列目录     [已更新最新开发文章,点击查看详细] 在实际项目中,由于需求变更经常需要对模型文件进行修改.为了便于用户了解模型在修改前后发生的变化,BIMFACE提供了模型在线对比功能,可以利用在 ...

  5. 在高德地图上用svg.js绘制简单图形

    这段时间做的一个项目,需要在地图上绘制简单的图形.在学习高德地图JS API的过程中,发现高德地图提供的点.线等API并不能满足我的需求,还好它开放了自定义图层CustomLayer,官方说自定义图层 ...

  6. crypto-js aes加密解密

    安装 npm install crypto-js --save unit.js import CryptoJS from "crypto-js"; //秘钥 const CRYPT ...

  7. Vue进阶课堂之《从HTML到Pug》

    是啥 Pug听起来或许比较陌生,但是如果说起她的前生,相信各位多少会有耳闻:Jade.每当你不停的敲打<><><><></></> ...

  8. 如何提升.NET控制台应用体验?

    原文:Upgrade Your .NET Console App Experience 作者:Khalid Abuhakmeh 译文:Lamond Lu 在.NET生态系统中,控制台程序的表现相对较差 ...

  9. 跨域解决方案之CORS

    什么情况表示遇到跨域请求 一般在前后端分离项目中,前端请求接口,浏览器控制台报如下错误 类似 No 'Access-Control-Allow-Origin' header 报错 为什么会有跨域请求 ...

  10. 教你用纯Java实现一个网页版的Xshell(附源码)

    前言 最近由于项目需求,项目中需要实现一个WebSSH连接终端的功能,由于自己第一次做这类型功能,所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用,当时看到了很多这方面的项目,例如:Gat ...