后期将更新对此数据集处理的代码
文章链接: EMNIST: an extension of MNIST to handwritten letters
数据集下载链接: [Download]
Python3 提取 EMNIST 原图源码见我的 github : https://github.com/anlongstory/data_process/tree/master
下面对 EMNIST 做一个简单的介绍。
NIST 与 MNIST
NIST 全称为 NIST Speical Database 19,全数据集包含了 80 多万张图片,MNIST 则是 NIST 数据集的缩减版,因为 NIST 数据集的存储方式,及数据分类构成比较难用,而 MNIST 作为 NIST 的子集,则图片量更少,且仅含有数字,更易操作。
NIST 是收集了 超过 500 个人的手写字母/数字,对它们进行黑白扫描做成的,NIST 总共按照不同的分法共分成 5 类:
- By_page:里面含有未经处理的整页的字符黑白扫描
- By_Author: 里面根据不同的书写者,将属于同一个人的所有字符都归成一类
- By_Field: 分成字母,数字,可以用于字母或者数字分割
- By_Class: 按类别,即 数字 10 类[0-9],26 类 [a-z],26 类 [A-Z],共 62 类
- By_Merge: 因为有的因为字母,大小写手写体基本很难分辨,所有这里将这些字母大小写合并,又构成一个新的分类,被合并的字母有 15 类 [C,I,J,K,L,M,O,P,S,U,V,W,X,Y,Z],所以最后最剩下 47 类
而在 By_Class 和 By_Merge 两种分类方法所有 814255 张图片中,有超过半数的是数字,而英文字母根据它们在英文中使用习惯的问题,出现的频率也不是一样的。

MNIST 这里就不多展开了,相信大家很熟悉了。
EMNIST
名字的由来为,Extended MNIST (EMNIST), 因为 MNIST 被大家熟知,但是目前 MNIST 上的精度已经很高了,一个好的数据集应该更具挑战性,所以这里就推出了 EMNIST ,一个在手写字体分类任务中更有挑战的 Benchmark 。
在数据集接口上,此数据集的处理方式跟 MNIST 保持一致,也是为了方便已经熟悉 MNIST 的我们去使用,这里着重介绍一下 EMNIST 的分类方式。
分类方式
前面介绍,因为语言及使用习惯的问题,数字比字母多,而字母之间也有差异,所以 EMNIST 主要分为以下 5 类:
- By_Class : 共 814255 张,62 类,与 NIST 相比重新划分类训练集与测试机的图片数
- By_Merge: 共 814255 张,47 类, 与 NIST 相比重新划分类训练集与测试机的图片数
- Balanced : 共 131600 张,47 类, 每一类都包含了相同的数据,每一类训练集 2400 张,测试集 400 张
- Digits :共 28000 张,10 类,每一类包含相同数量数据,每一类训练集 24000 张,测试集 4000 张
- Letters : 共 145600 张,26 类,每一类包含相同数据,每一类训练集5600 张,测试集 800 张
- MNIST : 共 70000 张,10 类,每一类包含相同数量数据(注:这里虽然数目和分类都一样,但是图片的处理方式不一样,EMNIST 的 MNIST 子集数字占的比重更大)
这里做一个简单的比较:


而且,论文中有做实验比较,original MNIST 和 EMNIST MNIST,多个不同结构的网络均在 EMNIST MNIST 上表现更好,因为其字母所占比例更大,更多特征可以被抓住。
