我是靠谱客的博主 精明百褶裙,最近开发中收集的这篇文章主要介绍【MNIST/Python】手写体数字训练/测试数据集(图片格式)下载及分割预处理MNIST手写体数字数据集单个数字分割预处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MNIST手写体数字数据集

MNIST是一个手写数字数据库,它有60000个训练样本集和10000个测试样本集
由Yann LeCun等人建立,是NIST数据库的一个子集
官方网址链接:Link
官网上的数据库文件形式如下:

train-images-idx3-ubyte.gz: training set images (9912422 bytes)
train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)

下载并解压缩后发现这些文件并不是标准的图像格式,而是以二进制的形式保存在文件中,每个样本图像的边长尺寸均为28*28
现今已经有不少方法将原始的二进制数据样本转化为如下的图片格式:

MNIST

这里提供一种按照训练/测试样本和数字类别(2×10)进行分类的图片格式数据集(*.jpg),并包含对应的预处理代码,下载链接:Link

单个数字分割预处理

转换为图片后,数据集变为了多个数字图片的整体堆叠,仍然不利于进一步使用
因此需要对其进行一些预处理,将整张图片分割为多个单独的手写体数字,并进行额外存储
使用Python编写的预处理代码示例如下:

【MNIST_extraction.py】

#!/usr/bin/env python
#-*- coding: utf-8 -*-

'''
MNIST Preprocessing
@Author: Alex Pan
@From: CASIA
@Date: 2017.03
'''

import os
import cv2
import ipdb

########################### Global Parameters ###################################
trainFolder = 'train'
testFolder = 'test'
trainPrefix = 'mnist_train'
testPrefix = 'mnist_test'
postfix = '.jpg'
sideLength = 28
########################### Global Parameters ###################################

############################ Initialization #####################################
ROOT = os.getcwd() # MUST run in the directory of this very script
############################ Initialization #####################################

# Extract & Save each single-number image of MNIST
def MNIST_extract(folder, prefix):
    print 'Category:', folder, prefix
    # For each number from 0 to 9
    for i in xrange(0, 10):
        print 'Class:', str(i)
        # Read over-all image of each class
        allImage = cv2.imread(os.path.join(ROOT, folder, prefix + str(i) + postfix))
        print 'Shape:', allImage.shape[0 : 2]

        count = 0
        print 'Processing ...'
        for corY in xrange(0, allImage.shape[1] / sideLength):
            for corX in xrange(0, allImage.shape[0] / sideLength):
                count += 1
                # Cropped image of single-number
                singleImage = allImage[corX * sideLength : (corX + 1) * sideLength,
                                       corY * sideLength : (corY + 1) * sideLength,
                                       :]

                ''' Show
                cv2.imshow('Single Number', singleImage)
                cv2.waitKey(1)
                # '''

                # ''' Save
                saveLocation = os.path.join(ROOT, folder, str(i), prefix + str(i) + '_' + str(count) + postfix)
                cv2.imwrite(saveLocation, singleImage)
                # ipdb.set_trace()
                # '''
        print 'Count:', count, 'All Saved.'
    cv2.destroyAllWindows()

##########################
if __name__ == '__main__':
    # ''' SWITCH/ : train OR test
    MNIST_extract(trainFolder, trainPrefix)
    ''' # Division/
    MNIST_extract(testFolder, testPrefix)
    # ''' # END/

注意事项

  1. 程序须在代码源文件目录运行(包含train和test目录)
  2. 分割出的单个数字图片存储在train和test目录中的子文件夹中,子文件夹名对应数字类别(0~9),单个数字的文件名也具有一定的格式,便于后续调用
  3. 以上参数均可根据需要自行修改
  4. 程序代码亦包含在数据集的下载链接中:Link

Reference


[1] THE MNIST DATABASE of handwritten digits
[2] MNIST数据库介绍及转换 - fengbingchun

希望能够对大家有所帮助~

最后

以上就是精明百褶裙为你收集整理的【MNIST/Python】手写体数字训练/测试数据集(图片格式)下载及分割预处理MNIST手写体数字数据集单个数字分割预处理的全部内容,希望文章能够帮你解决【MNIST/Python】手写体数字训练/测试数据集(图片格式)下载及分割预处理MNIST手写体数字数据集单个数字分割预处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部