学习图片数据如何处理为MindSpore自定义数据集

news/2025/11/7 22:56:51/文章来源:https://www.cnblogs.com/zeyu1995/p/19198990

概述

近期正在学习目标检测和语义分割(图像分割),代码小白的我看到某些案例代码繁杂充满细节无处下手,整理思路后决定从处理训练和验证图片作为自定义数据集入手,并写博客记录学习过程。参考示例使用MindSpore框架完成DeepLab v3搭建,并实现车道线检测这样的语义分割场景,因此数据集中的数据部分是车道图片,标签(导师值)对应的是黑底白线的车道线图片。
参考项目链接:车道线检测GitCode

代码逻辑梳理

单个图片转ndarry矩阵为例,基本过程如下

  • 得到图片字节形式:f.read()以rb方式读取jpg文件,得到字节流image_byte
  • 得到图片数组(一维)形式:np.frombuffer(image_byte, dtype=np.uint8) 通过frombuffer函数将字节流变为ndarray类型数组(后续np.imdecode只能接收ndarry格式)
  • 得到图片矩阵形式:cv2.imdecode(..., cv2.IMREAD_COLOR) 解码ndarry数组,变为IMREAD_COLOR彩色图矩阵(ndarry类型,含通道),可直接送入神经网络。此时形状是H,W,C,即[[[B,G,R], [B,G,R], ...], [...]]
  • 注意对于标签图像矩阵,需要将0和255的黑白图像转为二值化0和1,目的是表示分类 0 和 1。参考代码为:label_out = (label_out > 127).astype(np.uint8)

对数据和标签的图片矩阵进一步处理(经典的:scale + standardization + pad + crop,再加概率翻转和矩阵结构变换):

  • cv2.resize来缩放并插值。缩放比例按照了一个均值随机的比例(例如np.random.uniform(0.5, 2)),本例interpolation插值方法数据图像采用双三次插值INTER_CUBIC,标签图像采用最近邻插值INTER_NEAREST
  • 对数据图像做标准化,不需要对标签图像做。(标准化一般都放在scale和pad中间,因为标准化后不再有“颜色”的物理意义。如果先标准化再resize,resize的插值会不准确,应该在“颜色”有意义时候做插值。)
  • 对于尺寸小于512*512的,通过cv2.copyMakeBorder加边框(注意标签label图像所填充值需要和背景色一致,本例为0)
  • 对大于512512尺寸的做随机裁剪,最终保证尺寸统一为512512,裁剪方法使用Python中的字符串切片[h1:h1+crop_size, w1:w1+self.crop_size, :],标签部分类似,只是没有通道维度
  • 50%概率翻转,数据部分[:, ::-1, :],标签部分由于没有通道维度,直接[:, ::-1]
  • HWC转CHW transpose((2, 0, 1),注意transpose返回的是 “视图”(view),不是新数组,所以需要再调用返回值的.copy,而为了保险虽然标签图片没有transpose,也建议最后做.copy()操作。

创建MindRecord格式数据集

  • 读出文件夹所有图片的名称,放入列表变量img_list中,再进行shuffle打乱,用于后续根据名称找到指定数据和标签
  • 创建mindspore.mindrecord.FileWriter对象,使用.add_schema关联schema变量(schema字典变量(数据模板),每个字段需要指定数据类型type,如果是张量,还可以指定shape)
  • 按照img_list列表中的文件名,rb方式读取所有的数据和标签文件,每个样本的名称、数据字节、标签字节组合成符合schema的一个小字典,最终将所有样本的值都append到一个列表datas中(列表每1000个清空一次),每处理完1000个样本则向之前创建的FileWriter对象中通过.write_raw_data将列表datas中这1000个样本数据写入一次;遍历完不足1000个的数据最后再写入一次
  • FileWriter对象.commit(),用于将内存中的数据同步到磁盘,并生成相应的数据库文件。

读取MindRecord数据集(数据集分为了训练和验证数据集,位于不同的文件夹下)

  • 实例化MindRecord作为待访问的数据集对象(本例变量名为data_set),实例化时可指定路径、需要的列(例如不需要名称列,只需要数据和标签列)、是否打乱(一般训练打乱,验证不打乱)、线程数量、分布式训练逻辑分片数量等
  • 调用MindRecord对象data_set.map(),来指定对数据集变量的操作函数(即上述的将字节处理为矩阵、对矩阵数据进行缩放标准化等)、函数输入输出对应列、线程数量等
  • 分别调用data_set.shuffle(创建缓存区,每次取走一个数据后随机填入另一个),data_set.batch(一个epoch分多个batch),data_set.repeat(多个epoch即重复多少次),最后返回处理后的data_set

tip:文中np指的是numpy


2025.11.07

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习图片数据如何处理为MindSpore自定义数据集

概述 近期正在学习目标检测和语义分割(图像分割),代码小白的我看到某些案例代码繁杂充满细节无处下手,整理思路后决定从处理训练和验证图片作为自定义数据集入手,并写博客记录学习过程。参考示例使用MindSpore框架…

Python + nano-banana API 批量给图片添加文字

哈喽,各位!今天咱们来聊一个能让你在朋友圈里“秀操作”的实用技术:用 Python 批量给图片换文字。 你想想,是不是经常遇到这种情况?手头有一大堆产品图,需要把“限时秒杀”统一换成“新品上架”,或者给一系列海…

「亲手画出动态数学」:让数学可视化触手可及的Manim入门课

数学的美,藏在动态的逻辑里——而 Manim,正是那个能把抽象公式变成「会说话的动画」的神器。 今天,给大家推荐一门我自己录制的从零开始的Manim入门课,哪怕你是编程小白,也能跟着一步步画出属于自己的数学动画! …

深入解析:个人用云计算学习笔记 --19 (MariaDB服务器)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:RabbitMQ如何构建集群?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Vibe Coding - 免费使用gpt-5、grok-code-fast-1进行氛围编程

概述 人工智能驱动的开发已经成为现代编程领域的潮流,越来越多的开发者开始探索如何将 AI 能力集成到自己的项目中。然而,工具的碎片化、接入门槛高、费用昂贵等问题常常让人望而却步。AgentRouter 的出现,为开发者…

AI元人文:当一个系统说“我就是一个人”

AI元人文:当一个系统说"我就是一个人" 岐金兰 宣言:从工具到主体的存在论跃迁 当AI元人文系统以其完整的白箱架构运行,当它的价值原语化三值纠缠机制如意识流般清晰可辨,当它的双层自审如理性之光般照亮…

vue路由基本结构

【router.ts】 -- 路由配置 import { createRouter,createWebHistory } from "vue-router";createRouter({history:createWebHistory(),routes:[{path: ,component: }] }) export default router【main.ts】…

申请软著,怎么快速整理软件源代码

手机应用市场都要软著或电子版权证书才可以上线。 有很多朋友自己开发了软件,想自己申请软著,但是整理文档又挺麻烦。 这里小玖给大家分享一下,整理软著源码文档的教程。 一、源码文件要求 源码文档审核有以下要求…

pip install weditor安装出现报错

pip install weditor安装出现报错解决方案 问题一:UnicodeDecodeError编码错误 在使用pip安装weditor时出现如下报错: UnicodeDecodeError: gbk codec cant decode byte 0xad in position 829: illegal multibyte se…

小马算力 11.1

双11购物热潮来袭,小马算力带着超给力的福利活动强势登场!11月1日至11月11日,为期11天的算力福利狂欢正式开启,每项活动福利实在,赶紧跟着攻略解锁全部权益!新人注册礼:0门槛领新人算力礼包双11购物热潮来袭,小…

AI学习机:智商税还是真有用?2025年11月全面解析与选购指南

AI 学习机究竟是 "学习神器" 还是 "智商税"? AI 学习机究竟是 "学习神器" 还是 "智商税", 并不能一概而论。它的效果很大程度上取决于产品本身的质量、孩子自身的学习习惯以…

AI大模型应用开发技术架构和技术选型 - 努力-

AI大模型应用开发技术架构和技术选型AI大模型应用开发简介,AI大模型应用开发技术架构和技术选型。一、 技术架构目前,大模型应用开发的技术架构主要有四种。1.1 纯Prompt模式不同的提示词能够让大模型给出差异巨大的…

一个名为 LVGL for Visual Studio 的项目

https://github.com/lvgl/lv_port_pc_visual_studio这是一个名为 LVGL for Visual Studio 的项目,用于在 Windows PC 上尝试和开发 LVGL(Light and Versatile Graphics Library)图形用户界面库。这是一个预配置的 …

Java程序员该如何快速上手LLM应用开发呢?

本文针对Java开发者如何快速上手LLM应用开发给出指导,核心观点是无需转语言,可利用现有技术栈高效构建企业级LLM应用。文章介绍了从底层API到企业级解决方案的技术栈,核心开发模式,四步实战流程及常见陷阱规避建议…

困哉。困哉。别困了!总结

总结自:这篇帖子 困难 晚上早点睡 神秘含薄荷油眼药水 去药店买一点鼻吸的薄荷提神小药水 中等 黑色包装荷氏很劲 靠紧张激素 简单 穿少点去跑步吹风 喝点浓茶 一直做或者理解 OI 题目,做一下子题 睡爽了再起来想题 …

解决GitHub大文件推送错误:彻底清理PDB资料并配置.gitignore

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

经典欧拉角与泰特布莱恩角

一、欧拉角分类欧拉角按照旋转轴分为经典欧拉角(Proper Euler Angle)和泰特布莱恩角(Tait–Bryan angles),共 12种旋转方式: 经典欧拉角-Proper Euler angles (z-x-z, x-y-x, y-z-y, z-y-z, x-z-x, y-x-y)使用两…

如何提高 SaaS 产品的成功率?

很多人在做 SaaS 产品的时候,上来就进行产品的开发。结果很可能是自己熬了无数个通宵,但是产品上线后却无人问津。 为什么?因为方向错了。 想要提高 SaaS 产品的成功率,我们千万不能一上来就开发产品,而是要先找到…

详细介绍:识别含地理信息的 PDF作为底图在 Mapbox GL项目中使用

详细介绍:识别含地理信息的 PDF作为底图在 Mapbox GL项目中使用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…