如何将图像numpy数组与标题列表转为datasets.arrow_dataset.Dataset?
解决方法
你当前的问题出在字典结构错误:你把每个样本的索引作为字典的键,每个键对应单个样本的{'image': ..., 'text': ...}字典,这会让from_dict将每个索引视为独立列,导致列类型不统一(一部分列是图像数组,一部分是字符串),触发类型不匹配的报错。
正确的做法是构造以字段名为键、对应全量样本列表为值的字典,每个字段对应一列数据,每一行对应一个样本。具体代码如下:
from datasets import Dataset from PIL import Image # 将numpy图像数组转换为PIL图像列表(Stable Diffusion微调通常更兼容PIL格式) image_list = [Image.fromarray(img) for img in img_tensor] # 构造符合要求的字典:键是字段名,值是对应样本的列表 data_dict = { "image": image_list, "text": img_captions } # 创建Dataset对象 ds = Dataset.from_dict(data_dict)
补充说明
- 如果你的numpy数组已经是
uint8类型且形状为(512,512,3)(HWC格式),转成PIL图像不会有问题。 - 若不想转换为PIL,直接使用numpy数组也可以尝试,但部分微调代码可能需要额外处理图像格式,转PIL是更稳妥的选择。
- 验证是否成功:可以打印
ds[0],应该输出包含image和text字段的单个样本数据。
内容的提问来源于stack exchange,提问作者jskattt797
相关产品推荐
相关产品推荐

