ubyte 数据集的制作【2月更文挑战第07天】

简介: 【2月更文挑战第07天】

image.png
t10k-images-idx3-ubyte
将文件夹中的图片处理成二进制数据集(如 MNIST 数据集的格式)是一个常见的需求,特别是在需要将数据集用于某些特定的框架或工具时。以下是一个详细的步骤指南,展示如何将文件夹中的图片和对应的标签转换为二进制格式。
步骤 1:准备数据
假设你的数据集结构如下:
复制
dataset/
├── train/
│ ├── 0/
│ ├── 1/
│ ├── 2/
│ └── ...
└── val/
├── 0/
├── 1/
├── 2/
└── ...
每个文件夹中的图片对应一个类别。
步骤 2:读取图片和标签
使用 Python 的 PIL 或 OpenCV 库读取图片,并将图片和标签存储到内存中。
Python复制
import os
from PIL import Image
import numpy as np

def load_images_and_labels(data_dir, target_size=(28, 28)):
images = []
labels = []
for label, folder in enumerate(sorted(os.listdir(data_dir))):
folder_path = os.path.join(data_dir, folder)
if not os.path.isdir(folder_path):
continue
for filename in os.listdir(folder_path):
if filename.endswith('.png') or filename.endswith('.jpg'):
image_path = os.path.join(folder_path, filename)
image = Image.open(image_path).convert('L') # 转换为灰度图
image = image.resize(target_size) # 调整大小
images.append(np.array(image, dtype=np.uint8))
labels.append(label)
return np.array(images), np.array(labels)

示例

train_images, train_labels = load_images_and_labels('dataset/train')
val_images, val_labels = load_images_and_labels('dataset/val')
步骤 3:保存为二进制文件
将图片和标签保存为二进制文件,格式类似于 MNIST 数据集。
Python复制
import struct

def save_mnist(images, labels, image_file_path, label_file_path):
with open(image_file_path, 'wb') as image_file, open(label_file_path, 'wb') as label_file:

    # 写入图片文件头
    image_file.write(struct.pack('>IIII', 2051, len(images), images.shape[1], images.shape[2]))
    # 写入标签文件头
    label_file.write(struct.pack('>II', 2049, len(labels)))
    # 写入图片数据
    for image in images:
        image_file.write(image.tobytes())
    # 写入标签数据
    label_file.write(labels.tobytes())

示例

save_mnist(train_images, train_labels, 'train-images-idx3-ubyte', 'train-labels-idx1-ubyte')
save_mnist(val_images, val_labels, 't10k-images-idx3-ubyte', 't10k-labels-idx1-ubyte')
步骤 4:验证保存的文件
你可以使用之前提到的读取 MNIST 数据集的代码来验证保存的文件是否正确。
Python复制
def read_mnist_images(file_path):
with open(file_path, 'rb') as f:
magic, num, rows, cols = struct.unpack(">IIII", f.read(16))
images = np.frombuffer(f.read(), dtype=np.uint8).reshape(num, rows, cols)
return images

def read_mnist_labels(file_path):
with open(file_path, 'rb') as f:
magic, num = struct.unpack(">II", f.read(8))
labels = np.frombuffer(f.read(), dtype=np.uint8)
return labels

示例

train_images = read_mnist_images('train-images-idx3-ubyte')
train_labels = read_mnist_labels('train-labels-idx1-ubyte')
val_images = read_mnist_images('t10k-images-idx3-ubyte')
val_labels = read_mnist_labels('t10k-labels-idx1-ubyte')

print(train_images.shape, train_labels.shape)
print(val_images.shape, val_labels.shape)

6个月前
t10k-labels-idx1-ubyte

6个月前
train-images-idx3-ubyte

6个月前
train-labels-idx1-ubyte

6个月前
t10k-images.idx3-ubyte

7.84MB
6个月前
下载
t10k-labels.idx1-ubyte

10.01KB
6个月前
下载
train-images.idx3-ubyte

目录
相关文章
|
机器学习/深度学习 人工智能
48小时封镜!这是一部完全由AI制作的科幻电影
在伦敦科幻电影节的“48小时电影挑战”,导演Oscar Sharp和AI研究员Ross Goodwin带来一部全部制作过程由AI导演的实验性影片《Zone Out》。影片采用“换脸”技术,使用神经网络生成的对话和配音等,整个制作过程都由被称为Benjamin的AI进行处理。
2407 0
|
2月前
|
人工智能 Serverless 调度
|
2月前
|
人工智能 智能设计 数据处理
|
5月前
|
设计模式 缓存 Java
从源码学习Java动态代理|8月更文挑战
从源码学习Java动态代理|8月更文挑战
|
10月前
|
人工智能
Sora对电影制作的影响
【2月更文挑战第9天】Sora对电影制作的影响
97 2
Sora对电影制作的影响
|
10月前
|
人工智能 搜索推荐 算法
|
10月前
|
机器学习/深度学习 编解码 算法
宣传技能培训2——《图片后期处理与制作》光影魔术师:一小时速成Lightroom图片后期软件 + 案例分析
宣传技能培训2——《图片后期处理与制作》光影魔术师:一小时速成Lightroom图片后期软件 + 案例分析
171 0
|
人工智能 开发者
人人当导演 | 魔搭社区一站式电影短片制作
人人当导演 | 魔搭社区一站式电影短片制作
|
人工智能 区块链
聊聊学习制作游戏的方法,以及最近大火的ChatGPT
先跟着入门课程把基础知识掌握好,把工具使用熟练,学习做游戏最重要的是动手做,尽可能完成每节课程后面的实践练习,只有做的多了,知识才能掌握的扎实,才能更快的入门。
235 0
|
定位技术
3D游戏建模教程:游戏角色制作——赏金猎人,超逼真
Hello~大家好,今天给大家带来一篇游戏角色的制作的教程图文。
434 0
3D游戏建模教程:游戏角色制作——赏金猎人,超逼真