【功能模块】
使用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)试试能不能正常解码,确认是不是图片本身的问题。