如何检查Pickle文件内容数量?确认8752张图片是否完整
排查Pickle文件中是否包含全部8752张图片
1. 先拆解Pickle加载后的完整结构
别只盯着shape看,先逐层确认数据的真实结构:
import pickle import numpy as np # 加载目标Pickle文件 with open("你的文件路径.pkl", "rb") as f: data = pickle.load(f) # 打印核心信息 print(f"数据类型: {type(data)}") if isinstance(data, np.ndarray): print(f"数组形状: {data.shape}") elif isinstance(data, (list, tuple)): print(f"元素总数: {len(data)}") if len(data) > 0: print(f"单个元素形状: {np.array(data[0]).shape}")
你当前得到的(1080,1420,3)数组,大概率是保存时维度被错误压缩/拼接了——正常图片集合的数组格式应该是(N, 高度, 宽度, 3),而这个结构完全不符合多图存储的常规形态。
2. 通过文件大小快速验证
对比预期和实际文件大小:
假设单张图是常见的224×224×3的uint8格式,8752张的文件大小大概在1.3GB左右;而1080×1420×3的数组仅约4.5MB,两者差距极大。如果你的Pickle文件远小于预期大小,那肯定没存入全部图片。
3. 回溯保存代码的逻辑错误
问题90%出在保存环节,检查你当初写的保存代码:
- 是不是循环中覆盖了变量,最后只存了最后1080条数据?
- 是不是误将多图数组做了错误的
reshape/转置,导致维度坍塌? - 是不是本来要存图片列表,结果存成了某个中间处理的数组?
比如典型错误示例:
# 假设imgs是(8752, H, W, 3)的目标数组,结果误存了切片后的错误维度 pickle.dump(imgs[:1080].reshape(1080, -1, 3), f)
4. 尝试从当前数组恢复图片验证
如果想确认当前数组是不是图片数据,可以拿切片尝试转存:
from PIL import Image # 取第一个数组切片 img_slice = data[0].astype(np.uint8) # 尝试不同的形状重塑(根据你预期的图片尺寸调整) try: # 比如假设单张图是355×4?显然不合理,仅作示例 img = Image.fromarray(img_slice.reshape(355, 4, 3)) img.save("test.jpg") except Exception as e: print(f"转存失败: {e},当前数组不是标准图片格式")
如果出来的是乱码图,说明这个数组根本不是正确的图片集合。
结论:当前加载的Pickle文件绝对不包含8752张图片,数据结构和长度完全不符合预期,问题根源在保存阶段的逻辑错误。
内容的提问来源于stack exchange,提问作者RedSean
相关产品推荐
相关产品推荐

