尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

学习图片数据如何处理为MindSpore自定义数据集
📅 发布时间:2026/6/21 21:58:38

概述

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

相关新闻

  • Java程序员该如何快速上手LLM应用开发呢?
  • 经典欧拉角与泰特布莱恩角
  • 详细介绍:识别含地理信息的 PDF作为底图在 Mapbox GL项目中使用

最新新闻

  • 嵌入式调试利器MMDS0508:实时总线分析与非侵入式仿真实战
  • 保定卖多拉拉货车的官方授权店,货拉拉在河北省的省级总代理,核心业务与特色服务 - 企业品牌
  • 2026年漯河合同纠纷律师选对=省心 张骁隆律师值得推荐(附联系方式) - 本地品牌推荐
  • 保定哪里有卖多拉3米8,卖货拉拉货车官方授权店,货拉拉新能源汽车河北省省级总代理 - 企业品牌
  • Seedance 2.0:结构化视频生成引擎与分层可控架构解析
  • R3nzSkin英雄联盟换肤工具:免费体验全皮肤的终极指南

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号