MindSpore迁移学习(图片分类)数据集解析报错无法生成ms模型的解决方案
一 运行环境
MindSpore 版本号:1.1.0
硬件平台:CPU;
Python版本号:3.7.5;
操作系统:Windows10
二 问题现象&报错信息:利用MindSpore进行图像分类的时候,从网站上下载下来的某些数据集有可能格式损坏,比如说gif暴力转换成png/jpg等格式,由于MindSpore只支持png、jpg等常用格式,对gif格式并不支持,所以在数据集解析时会报错,报错信息如下:
Traceback (most recent call last):
File "model_create.py", line 1248, in <module>
main2(FLAGS)
File "model_create.py", line 765, in main2
train_dataset, eval_dataset = extract_features(data_path, FLAGS)
File "model_create.py", line 667, in extract_features
for i, data in enumerate(train_dataset.create.create_dict_iterator()):
File "C:\Python37\lib\site-packages\mindspore\dataset\engine\iterators.py", line 263, in _next_
data = self.get_next()
File "C:\Python37\lib\site-packages\mindspore\dataset\engine\iterators.py", line 344, in get_next
return (k: Tensor(v.as_array()) for k, v in self.depipeline.GetNextAsMap().items())
RuntimeError: Thread ID 841 UCnexpected error. Error in decoding
Line of code: 148
三 解决办法: 由于数据集的图片数量庞大,开发者诸葛查看并手动修改难度极大,需要编写脚本对数据集中非法的数据图片格式(尽管表面看起来是正确的)进行批量处理;
四 脚本信息:
import os
import cv2
dataset_dir = "myDataset"
for d in os.listdir(dataset_dir):
for file in os.listdir(os.path.join(dataset_dir, d)):
path = os.path.join(dataset_dir, d, file)
img = cv2.imread(path)
if img is None:
gif = cv2.VideoCapture(path)
ret, frame = gif.read()
cv2.imwrite(path, frame)
五 总结: 在基于MindSpore进行图片分类时, 如果刅数据集解析错误,利用上述脚本对非法格式图片进行修复, 减少人工排查所耗费的时间,省时高效。