【MindSpore】【ImageFolderDataset】加载图片时报错无法解码图片

【功能模块】

使用mindspore.dataset库的ImageFolderDataset函数时显示无法解码图片

【操作步骤&问题现象】

1、通过split-folders分割数据集后读取测试集的图片和标签

【日志信息】(可选,上传日志内容或者附件)

代码如下

import splitfolders
splitfolders.ratio('taobao', output="taobao1", seed=8203, ratio=(.8, .0, .2))
import mindspore.dataset as ds # 数据集载入
import mindspore.nn as nn # 各类网络层都在nn里面
from mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitor, TimeMonitor # 回调函数
from mindspore.train import Model # 承载网络结构
from mindspore import load_checkpoint # 读取最佳参数
from mindspore import context # 设置mindspore运行的环境

from easydict import EasyDict as ed # 超参数保存
import numpy as np # numpy
import matplotlib.pyplot as plt # 可视化

# 文件处理相关
import os
device_target = context.get_context('device_target') 
# 获取运行装置(CPU,GPU,Ascend)
dataset_sink_mode = True if device_target in ['Ascend','GPU'] else False 
# 是否将数据通过pipeline下发到装置上
context.set_context(mode = context.GRAPH_MODE, device_target = device_target) 
# 设置运行环境,静态图context.GRAPH_MODE指向静态图模型,即在运行之前会把全部图建立编译完毕
# 数据路径
train_path = os.path.join('taobao1', 'train')
test_path = os.path.join('taobao1', 'test')

# 超参数
config = ed({
    # 训练参数
    'batch_size': 32,
    'epochs': 10,
    
    #网络参数
    'class_num': 2,

    # 动态学习率调节
    'warmup_epochs': 5,
    'lr_init': 0.01,
    'lr_max': 0.1,

    # 优化器参数
    'momentum': 0.9,
    'weight_decay': 4e-5}) 

# 创建图像标签列表
category_dict = {0:'girl',1:'phone'}

# 载入展示用数据
demo_ds = ds.ImageFolderDataset(test_path,num_samples=9,decode=True)

# 设置图像大小
plt.figure(figsize=(6, 6))

# 打印9张子图
i = 1
for dic in demo_ds.create_dict_iterator():
    plt.subplot(3,3,i)
    plt.imshow(dic['image'].asnumpy()) # asnumpy:将 MindSpore tensor 转换成 numpy
    plt.axis('off')
    plt.title(category_dict[dic['label'].asnumpy().item()])
    i +=1
    if i > 9 :
        break

plt.show() 

新出的错误

 1. 调用ImageFolderDataset时,可以把参数shuffle显示设置为False,方便后续复现问题。 2. 不知道你用的具体哪个版本,我看1.7.0版本里面的源码显示是图片解码失败(无权限或图片损坏),可以先用其他库(OpenCV,PIllow)试试能不能正常解码,确认是不是图片本身的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值