mnist格式(ubyte)数据与jpg、png格式数据的相互转化

2023-11-06

在学习深度学习的过程中,会发现教程中的模型大多都是用mnist和cifar这两个数据集来演示的。想要使用这些模型在自己的数据上看一下效果,就想到将自己的数据做成与mnist或者cifar格式一样的数据。这里,主要是总结一下自已通过一番百度和学习,如何实现mnist格式数据与jpg、png格式数据的相互转化。

一、MNIST数据集

MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 它包含了四个部分:
Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解压后 47 MB, 包含 60,000 个样本)
Training set labels: train-labels-idx1-ubyte.gz (29 KB, 解压后 60 KB, 包含 60,000 个标签)
Test set images: t10k-images-idx3-ubyte.gz (1.6 MB, 解压后 7.8 MB, 包含 10,000 个样本)
Test set labels: t10k-labels-idx1-ubyte.gz (5KB, 解压后 10 KB, 包含 10,000 个标签)

TEST SET IMAGE FILE (t10k-images-idx3-ubyte):
[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  10000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel

这是MNIST官网上对数据集的介绍,用8-bit (1 byte ) 来表示一个pixel 的灰度,0 表示纯白色,255表示纯黑色,共256个灰度级别。每张图片有28 * 28个pixel,所以每张图片占用 28 * 28=784个bytes。

第一个32-bit 是 magic number, 00 00 08 03 = 8 * 16^2 + 3 * 16^0=2051
前两个bytes 均为0, 第三个byte 表名数据类型, 0x08 表示 unsigned byte,第四个byte 是数据的维度信息,0x03 表示测试集有3 dimensions, 图片 * 图片行 * 图片列=10000 * 28 * 28。

第二个32-bit 是样本数量,10000。

第三个32-bit 是行数, 28。

第四个32-bit 是列数, 28。

后面每 28*28=784 bytes 为一张图片的二进制信息。

二、将mnist数据集转化成图片(matlab 实现)

(1)main.m
首先,将mnist格式数据转化成.mat文件,然后将.mat文件转化成jpg格式。

clear
clc
%% 首先将ubyte格式文件转化成常用的.mat文件格式

filename = './train-images.idx3-ubyte';
savename = './test_x'; 
FID = fopen(filename,'r');

MagicNumber=readint32(FID);
NumberofImages=readint32(FID);
rows=readint32(FID);
colums=readint32(FID);
savePath = [savename,'.mat'];
test_x = zeros(NumberofImages,rows*colums);
for i = 1:NumberofImages
            temp = fread(FID,(rows*colums), 'uchar');
            test_x(i,:) = temp';
end
save(savePath,'test_x')
 
%%.mat文件转化为jpg格式
for j = 1:1:NumberofImages
      b = test_x(j,:); %每次读取一行数据
      D = reshape(b,28,28);
      sc=strcat('C:\Users\ouc\Desktop\demo\',sprintf('%d',j));  %命名保存
      Sc=strcat(sc,'.jpg');
      imwrite(D,Sc);
end

(2)readint32.m

function [getdata]=readint32(FID)
    data = [];
    for i = 1:4
            f=fread(FID,1);
            data = strcat(data,num2str(dec2base(f,2,8)));
    end
    getdata = bin2dec(data);

end

最终可以得到jpg格式的图片。
在这里插入图片描述

三、将图片转化成mnist格式数据(python 实现)

这部分百度到了别人的代码,附代码地址:https://github.com/gskielian/JPG-PNG-to-MNIST-NN-Format,
亲试有效,感谢作者~

import os
from PIL import Image
from array import *
from random import shuffle

# Load from and save to
Names = [['./training-images','train'], ['./test-images','test']]

for name in Names:
	
	data_image = array('B')
	data_label = array('B')

	FileList = []
	for dirname in os.listdir(name[0])[1:]: # [1:] Excludes .DS_Store from Mac OS
		path = os.path.join(name[0],dirname)
		for filename in os.listdir(path):
			if filename.endswith(".png"):
				FileList.append(os.path.join(name[0],dirname,filename))

	shuffle(FileList) # Usefull for further segmenting the validation set

	for filename in FileList:

		label = int(filename.split('/')[2])

		Im = Image.open(filename)

		pixel = Im.load()

		width, height = Im.size

		for x in range(0,width):
			for y in range(0,height):
				data_image.append(pixel[y,x])

		data_label.append(label) # labels start (one unsigned byte each)

	hexval = "{0:#0{1}x}".format(len(FileList),6) # number of files in HEX

	# header for label array

	header = array('B')
	header.extend([0,0,8,1,0,0])
	header.append(int('0x'+hexval[2:][:2],16))
	header.append(int('0x'+hexval[2:][2:],16))
	
	data_label = header + data_label

	# additional header for images array
	
	if max([width,height]) <= 256:
		header.extend([0,0,0,width,0,0,0,height])
	else:
		raise ValueError('Image exceeds maximum size: 256x256 pixels');

	header[3] = 3 # Changing MSB for image data (0x00000803)
	
	data_image = header + data_image

	output_file = open(name[1]+'-images-idx3-ubyte', 'wb')
	data_image.tofile(output_file)
	output_file.close()

	output_file = open(name[1]+'-labels-idx1-ubyte', 'wb')
	data_label.tofile(output_file)
	output_file.close()

# gzip resulting files

for name in Names:
	os.system('gzip '+name[1]+'-images-idx3-ubyte')
	os.system('gzip '+name[1]+'-labels-idx1-ubyte')

最终可以得到mnist格式的数据。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mnist格式(ubyte)数据与jpg、png格式数据的相互转化 的相关文章

  • 本地真机调试小程序

    1 查出电脑本地ip地址 gt ipconfig 无线局域网适配器 WLAN 连接特定的 DNS 后缀 本地链接 IPv6 地址 xxxxx IPv4 地址 192 168 0 99 子网掩码 255 255 255 0 默认网关 192
  • winxp MySQL 5.6.35 免安装版 简单配置

    Links MySQL 5 6 35 MySQL 5 6 35 32位 下载地址 Reference MySQL 5 6 13免安装版配置方法 Steps 1 解压文件 放到任意一个路径 好像不要有中文 下面 如 D iTom MySQL
  • 09 TypeError: Descriptors cannot not be created directly.

    1 问题 import yaml ModuleNotFoundError No module named yaml yaml模块的pip工具包名称不是yaml 而是pyyaml 所以不是直接pip install yaml 而是 pip i
  • 专治机器学习面试:机器学习各个算法的优缺点!

    今天有朋友聊起来 机器学习算法繁多 各个算法有各个算法的特点 以及在不同场景下 不同算法模型能够发挥各自的优点 今天呢 我把常见的 常用的算法模型进行了一个大概的总结 包括其分支以及各分支的优缺点 涉及到的算法有 回归 正则化算法 集成算法
  • 关于驱动和设备的相关的注册表键的位置,和相关信息

    关于驱动和设备的相关的注册表键的位置 和相关信息 MSDN上有了 https msdn microsoft com en us library windows hardware ff549815 v vs 85 aspx 下面是大概翻译整理
  • kettle-记录集连接(可实现左、右、全、内连接)

    连接前需先排序 记录连接集控件设置 结果 以左连接为例 连接前的两个数据源 连接后
  • 如何让input框中的值不被用户修改

    1 最常用的disabled 被禁用的 input 元素 不可编辑 不可复制 不可选择 不能接收焦点 后台也不会接收到传值 设置后文字的颜色会变成灰色 EP disabled 属性无法与 一起使用 2 readonly unselectab
  • 20220722_使用Element UI写html页面

    Element官网component资源点击这里 结构图 element ui自行下载复制到一致路径 第一个html div div
  • AES加密,128-192-256,方案二

    与方案一对比 方案二要简洁很多 看代码 package com xiao aes util import java security NoSuchAlgorithmException import javax crypto Cipher i
  • 计算机视觉应用(二)疲劳识别

    疲劳识别一度是热门 在疲劳驾驶 疲劳加班熬夜 学生上课打瞌睡等方面都得到了应用 很多刚入门的AI学子是用把疲劳图像进行分类 和正常状态做区分 这种分类方式往往会误检 这是由于这类属于细粒度分类 类外差距小 不打瞌睡和打瞌睡 类内差距大 不同
  • WIN10系统运行CE缺失hhctrl.ocx的解决方法

    高级版本的WIN10系统会缺少这个文件 网上只能找到32位 但是需要的却是64位的 这里直接提供2个版本 链接 https pan baidu com s 1DJ7U2wLqRreLKhafOFC8jA 提取码 xg7u
  • 一个启动U盘装多系统引导,无需反复格式化,ISO/WIM等文件拷贝到U盘即可启动

    想做一个可以有很多系统的启动U盘 把PE linux windows都装进去 系统启动U盘制作倒是非常简单 遍地是老毛桃 大白菜 U启通等工具 那么如何使用一个U盘装多个系统呢 找到一个非常好用的东西 使用Ventoy就无需反复地格式化U盘
  • 1 后端开发基础-Tomcat

    Tomcat 1 1 Web知识概述 Web 互联网总称 Java Web 是用Java技术来解决相关web互联网领域的技术总和 通俗的说 将编写好的代码 发布到互联网 可以让所有用户都访问到 1 1 1 软件架构 网络中有很多的计算机 它
  • python怎么读取txt文件并统计其字数-python文件读取失败怎么处理

    在读取文件时候比如读取 xxx csv 时候 可能报编码错误 类似于 xxx codec can t decode byte 0xac in position 211 illegal multibyte sequen id list wit
  • python实现火车票查询_Python 实现火车票查询工具

    一 实验简介 本课程使用 Python3 抓取 12306 网站信息提供一个命令行的火车票查询工具 通过该项目的实现 可以熟悉 Python3 基础及网络编程 以及 docopt requests prettytable 等库的使用 课程教
  • Spark 将 MySQL 数据同步到 Elasticsearch

    使用 Spark 将 MySQL 数据同步到 Elasticsearch 需要使用 Spark 提供的 Elasticsearch Hadoop 库和 JDBC 数据源 以下是大致的步骤 首先 需要在 Spark 中创建一个 JDBC 数据
  • 【STM32】启动流程分析

    在面试的时候 我遇到一个提问 单片机上电之后都做了些什么 那么STM32上电之后都做了些啥呐 可以配合起来看 单片机启动文件分析 三种启动模式 简而言之就是根据启动模式决定0x0000 0000重映射到下图哪个地址 那么当单片机开始执行的时
  • 密码算法学习

    密码学算法分三大类 1 对称算法 使用同一个密钥 常见的对称加密算法 DES 3DES DESX Blowfish IDEA RC4 RC5 RC6和AES 优点 加解密的高速性和当使用长密钥时的难解性 缺点 当需要密钥的数量多时 密钥的生
  • Python-数据类型转换

    当涉及数据类型转换时 Python提供了多种内置函数来执行不同类型之间的转换 以下是每个方法的详细说明和示例案例 整数和浮点数转换 int x base 10 将给定的参数x转换为整数 x可以是一个整数 浮点数或字符串 如果x是字符串 则可
  • 获取网页标签图标favicon

    想要获取网页标签图标 首先要了解favicon有哪几种 1 像这种favicon ico图标可以直接用 window location protocol window location host favicon ico 获取 2 像这种图标

随机推荐

  • 郭律: 论机器学习平台与人工智能的关系

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯云AI中心发表于云 社区专栏 郭律 腾讯高级产品经理 腾讯云AI基础产品中心高级产品经理 解决方案架构师 主导腾讯智能钛TI ONE 可视化机器学习平台 和TI S 自动机
  • 【华为OD机试】乘坐保密电梯(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • Flowable工作流引擎的使用3(task审批节点的接受与使用)

    BPMN task节点 节点介绍 task节点是和业务最贴切的节点 表示一次审批 除了id name inComingFlows outGoingFlows这些属性以外 还有一些权限信息 用于区分一个任务哪些人可以审核的 flowable自
  • shiro反序列化漏洞的原理和复现

    一 shiro简介 Shiro是一个强大的简单易用的Java安全框架 主要用来更便捷的认证 授权 加密 会话管理 Shiro首要的和最重要的目标就是容易使用并且容易理解 二 shiro的身份认证工作流程 通过前端传入的值 获取remembe
  • 【电气专业知识问答】问:什么是安全自动装置?它在电力系统上的作用、配置指导策略及要求是什么?

    电气专业知识问答 问 什么是安全自动装置 它在电力系统上的作用 配置指导策略及要求是什么 答 1 定义 电力系统安全自动装置是指在电力网中发生故障或异常运行时起控制作用的自动装置 安全自动装置可以防止系统稳定破坏或事故扩大 避免造成大面积停
  • euler欧拉系统尝试用yum、源码安装pacemaker失败

    euler欧拉系统尝试用yum 源码安装pacemaker失败 用yum安装pacemaker root euler uname rp 3 10 0 862 14 1 0 h209 eulerosv2r7 x86 64 x86 64 不能自
  • pip install下载报网络错误、pip报错,以及module ‘serial‘ has no attribute ‘Serial‘报错

    pip install下载报网络错误 下载pip install serial时报错如图 这是由于下载的pip官网是国外网站 下载速度会比较慢 解决办法 从国内镜像去下载 pip install serial i https pypi tu
  • 如何重载前置++和后置++

    前置 即 运算符位于操作数的前面 例如 i 后置 即 运算符位于操作数后面 例如 i 注意一下几点 1 前置 重载时没有参数 而后置 重载时有参数 不会使用其参数 仅仅是区分用 可以理解为前置 后面有参数了 所以不需要参数 2 前置 需要返
  • XP能访问samba,WIN7不能访问解决方案

    win7无法访问Samba 转自 http hi baidu com t byz item b2ee893e52ca885981f1a79e 默认情况下 Windows 7无法正常访问NAS或者Samba服务器上的共享文件夹 原因在于从Vi
  • JavaWeb练习题

    JavaWeb练习题 JavaWeb试题解析链接 https blog csdn net Lvruoyu article details 124440007 关注拂晓DayBreak公众号 回复javaweb练习题 便捷观看 题干 选项A
  • stm32三相逆变程序,pcb,以及板子。stm32输出三相spwm波驱动6个mos管实现三相逆变

    逆变器本身可稳压 可任意设定输出电压 pid参数可用电脑通过串口调节 输入12 40 v 自动生成辅助电源供电 资料齐全 程序注释详细 稳定可靠 适合新手学习以及项目应用 stm32三相逆变开环驱动程序 stm32三相逆变闭环程序 modb
  • Git学习之将不空的文件夹关联到远程仓库

    昨天和今天在将 本地不空的文件夹关联到远程Git仓库 的时候遇到了很多瓶颈 主要方法一般都是在本地创建一个空的文件夹 然后 仓库化 再关联到远程仓库 或者是将远程仓库直接克隆到本地 下面说说将不空的文件夹关联到远程仓库的方法 因为我试了好多
  • 学习UI设计有哪些figma插件

    自2016年推出以来 Figma已发展成为市场领先者UI设计工具之一 因为它不仅简单易用 功能优秀 而且基于云服务 可以实时编辑 节省大量手动下载或复制文件的时间 不仅如此 Figma还提供合作功能 让您和您的团队同时处理文件 避免许多潜在
  • 反诈题库---合计100道(解析版最新)

    反诈题库一合计100 一 判断题 40题 1 小A在淘宝购物 商家发了一条非淘宝的商品链接让其拍下 小A直接点击链接付款 X 解析 淘宝购物坚持按担保交易流程下单 如果卖家要求通过陌生链接或二维码要求付款 100 是骗子 请到安全中心举报
  • postgresql客户端连接错误的解决方法

    今天在重新设置postgresql服务器以后却发现启动不了服务器 错误如下 psql
  • 为什么机油使用后变红_上汽大众为什么开始使用低粘度机油

    2020年注定是一个不平凡的年份 年初的新冠疫情打乱了所有中国人的生活 现在疫情已经一步一步的趋向平缓 所有人的生活也正在回归正常 复工后收到上汽大众总部发来的通知 要求所有新款EA211和EA888国六发动机必须使用符合大众VW50800
  • python小记(2)

    目录 一 安装 问题 二 题目 代码 三 结果 一 安装 问题 Pycharm中File gt setting gt Python Interpreter添加opencv python及opencv contrib python 调用时直接
  • 2023蓝桥杯省赛出成绩时间

    看看各年蓝桥杯出成绩的时间吧 2018年 4 1 4 9 8天 2019年 3 24 3 31 7天 2020年 10 17 10 26 9天 2021年 4 18 4 28 10天 2022年 4 9 4 28 19天 2023年 4 8
  • 卷积操作的过程、参数说明、用CNN实现分类任务的代码

    因为自己初学时候混淆过CNN中图像尺寸变化与通道数变化 本文从理论 gt 使用 根据自己遇到的问题对相关概念作出说明 卷积 相关理论 笼统地说 卷积操作是通过滤波器对原图像进行特征提取的过程 其中涉及卷积核 kernel 步长 stride
  • mnist格式(ubyte)数据与jpg、png格式数据的相互转化

    在学习深度学习的过程中 会发现教程中的模型大多都是用mnist和cifar这两个数据集来演示的 想要使用这些模型在自己的数据上看一下效果 就想到将自己的数据做成与mnist或者cifar格式一样的数据 这里 主要是总结一下自已通过一番百度和