ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

DeepMind Lab 接入 CIFAR-10 数据集全指南:下载安装、二进制格式与 Lua 加载器源码解析

DeepMind Lab 接入 CIFAR-10 数据集全指南:下载安装、二进制格式与 Lua 加载器源码解析 人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载CIFAR-10 是机器学习中最经典的图像分类基准数据集之一。在 DeepMind Lab即本仓库lab一个可定制的 3D 智能体 AI 研究平台中它被用作视觉任务中的图像素材来源研究者可以把真实世界图像贴入 3D 环境用于记忆、识别、任意刺激—反应映射visuomotor mapping等实验。本文以仓库内 data/cifar10/README.md 为骨架完整讲解 CIFAR-10 数据集的下载步骤、路径配置方法并结合 game_scripts/datasets/cifar10.lua 源码逐行剖析其二进制文件格式与读取原理让你能在自己的实验环境中正确接入并使用这一数据集。CIFAR-10 数据集概览CIFAR-10 数据集由 Alex Krizhevsky、Vinod Nair 与 Geoffrey Hinton 收集整理原始出处为 Toronto 大学 CIFAR 页面。其基本构成如下规模共 60000 张 32×32 彩色图像类别10 个类别每类 6000 张图像划分50000 张训练图像 10000 张测试图像格式本仓库使用官方二进制版本binary version而非 Python pickle 版本。这 50000/10000 的划分与 game_scripts/datasets/cifar10.lua 中cifar10Train/cifar10Test返回的getSize()完全一致见下文源码解析。数据集最终存放于仓库的data/cifar10/目录该目录同时也是下载指令文档所在地。安装步骤下载、解压与清理原文档给出了完整的 Shell 操作序列。操作前提是先进入data/cifar10目录即 README 所在目录然后依次执行curl https://www.cs.toronto.edu/\~kriz/cifar-10-binary.tar.gz -o cifar-10-binary.tar.gz tar -xvzf cifar-10-binary.tar.gz mv cifar-10-batches-bin/*.* ./ rm -rf cifar-10-batches-bin cifar-10-binary.tar.gz echo Dataset directory: pwd各步骤作用说明命令作用curl ... -o cifar-10-binary.tar.gz从 Toronto 大学服务器下载官方二进制压缩包约 170 MB\~用于转义用户目录符号避免 shell 将其展开为 HOME 路径tar -xvzf cifar-10-binary.tar.gz解压压缩包得到cifar-10-batches-bin/目录内含 5 个训练批文件、1 个测试批文件与标签说明文件mv cifar-10-batches-bin/*.* ./将解压出的所有文件移动到data/cifar10当前目录rm -rf cifar-10-batches-bin cifar-10-binary.tar.gz清理已无用的解压中间目录与压缩包节省磁盘空间echo Dataset directory; pwd打印当前目录的绝对路径该路径将用于下一步的DATASET_PATH配置完成以上步骤后data/cifar10/目录下应包含data_batch_1.bindata_batch_5.bin5 个训练批每批 10000 张图像共 50000 张test_batch.bin10000 张测试图像batches.meta.txt类别名称说明文件非图像数据。配置 DATASET_PATH指向数据目录下载完成后需要把上一步pwd打印出的绝对路径写入数据集加载脚本。原文档要求将game_scripts/datasets/cfar10.lua中的DATASET_PATH设置为上面打印的目录。需要特别注意README 中写的文件名cfar10.lua是笔误仓库中实际存在的文件名为 game_scripts/datasets/cifar10.lua。正确的操作是编辑该文件第 24 行附近的模块级常量local DATASET_PATH -- ← 改为下载后 pwd 打印的绝对路径 local LOAD_CONTENT_FIRST false该路径会作为cifarImage(path, batch, row)的第一个参数传入用于拼接出二进制文件的完整路径helpers.pathJoin(path, batch)。在 cifar10.lua 的cifar()函数中路径解析遵循以下优先级local function cifar(kwargs) local path setting_overrides:settings().datasetPath or -- ① 运行时参数优先 if path dummy then return color_dataset(32, 32, kwargs.test and 10000 or 50000) -- ② dummy 回退 end if path then path DATASET_PATH -- ③ 脚本内置常量兜底 end assert(path ~ , ...) -- ④ 仍未配置则报错 ... end即运行时传入的datasetPath参数优先级最高若为dummy则使用程序化生成的纯色图像数据集否则回退到脚本内硬编码的DATASET_PATH若两者都为空则触发 assert 报错提示先阅读数据集下载说明并更新DATASET_PATH代码内提示文案引用的data/cifar/README.md同样为历史笔误实际文档路径是data/cifar10/README.md。通过运行时参数配置Python API 场景除了修改脚本常量更推荐在创建环境时通过参数注入路径。在 setting_overrides.lua 的PARAMS_WHITELIST中datasetPath是白名单参数之一会被init(params)解析并写入apiParams第 121 行apiParams.datasetPath apiParams.datasetPath or 。因此在使用 Python API 时可直接在Lab构造函数的config字典中传入import deepmind_lab env deepmind_lab.Lab(psychlab/arbitrary_visuomotor_mapping, [RGB], config{datasetPath: /data/web/disk1/git_repo/gh_mirrors/la/lab/data/cifar10})依据 docs/users/python_api.md 的说明config中未被识别的选项会原样传给关卡脚本的init函数而datasetPath这类白名单参数则由setting_overrides装饰器统一处理。这种方式的好处是无需修改仓库内的 Lua 文件不同实验可以使用不同数据集路径。源码深度解析CIFAR-10 二进制格式与读取原理官方二进制文件布局CIFAR-10 二进制文件采用逐图像行式存储每张图像占固定 3073 字节[1 字节类别标签][1024 字节 R 平面][1024 字节 G 平面][1024 字节 B 平面]即每张图像的数据顺序为 1 个类别字节 32×32 的红色通道 32×32 的绿色通道 32×32 的蓝色通道颜色通道是平面planar存储而非交错interlaced。对应 cifar10.lua 中的常量定义local WIDTH 32 local HEIGHT 32 local SIZE 3 * HEIGHT * WIDTH -- 3072三个颜色通道的像素总数 local HEADER 1 -- 类别标签字节 local ROW_SIZE HEADER SIZE -- 3073单张图像的完整字节数cifarImage按字节偏移读取单张图像cifarImage是核心读取函数它利用 DeepMind Lab 的tensor.ByteTensor直接从文件指定偏移处读取像素数据完全避开逐字节解析的繁琐local function cifarImage(path, batch, row) local result tensor.ByteTensor{ file { name helpers.pathJoin(path, batch), byteOffset ROW_SIZE * row HEADER, -- 跳过 row 张图像 类别字节 numElements SIZE } } -- 将 RGB Planar 转换为 RGB 交错格式。 return result:reshape{3, HEIGHT, WIDTH}: transpose(1, 2):transpose(2, 3):clone() end关键点拆解byteOffset ROW_SIZE * row HEADER第row张图像0 索引的像素数据起始偏移 3073 × row 1其中 1 是为了跳过该图像的类别标签字节numElements SIZE只读取 3072 个字节的像素数据不含标签reshape{3, HEIGHT, WIDTH}把扁平数据重排为[3, 32, 32]即通道平面在前transpose(1, 2):transpose(2, 3)两次转置将[通道, 高, 宽]变为[高, 宽, 通道]完成平面 RGB 到交错 RGB 的转换末尾的:clone()确保返回独立内存副本避免转置视图与文件缓冲区共享底层存储。最终返回的是一个形状为32×32×3的ByteTensor图像可直接用于环境的贴图或观察生成。训练集与测试集对象cifar10Train与cifar10Test分别构造数据集对象二者都只暴露两个接口——getImage(imageIndex)与getSize()function cifar10Train(path) ... function dataset:getImage(imageIndex) local imageIndex imageIndex - 1 -- 转为 0 索引 local batch math.floor(imageIndex / 10000) local row imageIndex - batch * 10000 return cifarImage(path, data_batch_ .. batch 1 .. .bin, row) end function dataset:getSize() return 50000 end ... end训练集按每 10000 张一个文件切分imageIndex / 10000的整数部分决定落在哪个data_batch_N.bin余数决定文件内行号。测试集更简单全部 10000 张都在test_batch.bin中function dataset:getImage(imageIndex) local row imageIndex - 1 return cifarImage(path, test_batch.bin, row) end function dataset:getSize() return 10000 end这种{getImage, getSize}接口约定是 DeepMind Lab 数据集模块的统一规范可参考同目录下的 mnist.luaMNIST 数据集、brady_konkle_oliva2008.lua另一图像数据集使用 reader.lua 按 PNG 文件索引读取以及 selector.lua按名称分发数据集的选择器其中loadDataset(cifar10)即返回cifar10{}训练集对象。dummy 模式无数据集时的程序化回退在开发调试阶段如果不想下载约 170 MB 的数据可以把datasetPath设为字符串dummy。此时cifar()会回退到 color_dataset.lua 生成的纯色图像数据集return color_dataset(32, 32, kwargs.test and 10000 or 50000)color_dataset通过 HSL 色彩空间按图像索引确定性生成颜色色相按 60 色细分、饱和度区间 [0.3, 1.0]、亮度区间 [0.2, 0.8]保证每张图像与索引一一对应且尺寸同样是 32×32×3。这让数据集加载、模型通道测试等流程可以在没有真实数据的情况下完整跑通是仓库刻意设计的开发辅助机制color_dataset.lua 注释明确写道Maybe used in place of missing datasets。测试验证加载器的正确性保障仓库为 CIFAR-10 加载器提供了专门的单元测试 lua_tests/dataset_cifar10_test.lua测试断言如下cifar10TraingetSize()等于 50000第 1 张与最后一张图像的 shape 均为{32, 32, 3}两张图像内容不同asserts.NEcifar10TestgetSize()等于 10000同样校验首尾图像 shape 与差异性。这两个测试直接印证了上文源码解析中训练集 50000 / 测试集 10000 / 图像形状 32×32×3的全部关键数值也说明图像读取的字节偏移计算与通道转置逻辑是经过验证的。运行这些测试需要数据目录已配置完毕测试默认使用cifar10{}即依赖DATASET_PATH或运行时datasetPath。在实验中消费数据集psychlab 场景参考数据集对象最终服务于 3D 环境中的视觉实验。以 game_scripts/factories/psychlab/arbitrary_visuomotor_mapping_factory.lua 为例其典型的消费模式为通过brady_konkle_oliva2008(opts)之类的构造器获得数据集对象CIFAR-10 可通过selector.loadDataset(cifar10)或直接require datasets.cifar10获取在每轮试次trial中用dataset:getSize()初始化关联数组把图像索引与目标响应建立映射在渲染阶段调用self.dataset:getImage(trialId)取回 32×32×3 图像将其作为目标图像贴入 3D 场景。这一模式说明数据集模块与实验逻辑解耦——无论是 CIFAR-10、MNIST 还是程序化颜色数据集只要实现了getImage/getSize接口就能无缝替换使用。常见问题与排查建议assert 报错提示Follow instructions to download datasets说明datasetPath与DATASET_PATH均为空。先完成下载步骤再二选一配置路径。路径配置后仍找不到文件确认路径是绝对路径pwd的输出且data_batch_*.bin/test_batch.bin直接位于该目录下不要在路径中残留cifar-10-batches-bin子目录。图像显示颜色异常或错位确认使用的确实是二进制版压缩包cifar-10-binary.tar.gz若误用 Python pickle 版cifar-10-python.tar.gzcifarImage的字节偏移计算将不适用。README 文件名笔误配置说明中提到的cfar10.lua实际应为cifar10.lua编辑时以 game_scripts/datasets/cifar10.lua 为准。开发调试想跳过下载将datasetPath设置为dummy即可使用纯色回退数据集便于先行打通环境与模型通道。按照上述流程完成下载、配置与验证后CIFAR-10 即可作为真实图像素材源接入 DeepMind Lab 的各类感知与记忆实验中与仓库内其他数据集MNIST、Brady-Konkle-Oliva 2008、程序化颜色集共同构成可插拔的图像素材体系。赞分享人工智能强化学习机器学习【免费下载链接】labA customisable 3D platform for agent-based AI research项目地址https://gitcode.com/gh_mirrors/la/lab点击查看免费下载相关推荐Eclipse Mosquitto 2.0.14 下载与安装全指南源码、Windows、macOS、Linux 二进制安装详解Eclipse Mosquitto 2.0.14 下载与安装全指南源码、Windows、macOS、Linux 二进制安装详解 Eclipse Mosquit物联网消息队列后端网络/通信ManiSkill 演示数据集完全指南下载、格式解析与 PyTorch 加载实战ManiSkill 演示数据集完全指南下载、格式解析与 PyTorch 加载实战 本指南系统讲解 ManiSkill 演示Demonstration数据集机器人具身智能人工智能强化学习深度学习SeaTunnel 下载与安装包制作全指南二进制包获取、连接器插件安装与 shade 依赖解析SeaTunnel 下载与安装包制作全指南二进制包获取、连接器插件安装与 shade 依赖解析 本指南完整讲解 SeaTunnel 从零开始获取安装环境、下载数据集成ETL大数据批处理流处理变更数据捕获上一篇Falcon Player (FPP) 项目推荐下一篇GitlHEVCAnalyzer 项目推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表