高校集群训练模型时cv2.imread()读取图片报错求助
FER-2013情感识别CNN模型迁移集群后cv2.imread报错的解决方法
以下是针对你遇到的问题的排查和解决思路:
1. 修复路径拼接的错误
你的代码中存在路径拼接的隐藏bug:
train_folder_path = os.path.join(data_path, "/train")
os.path.join如果第二个参数以斜杠/开头,会直接忽略前面的data_path,返回/train而非预期的{data_path}/train。这会导致程序访问错误的目录,即使你确认数据集路径正确,实际读取的路径已经偏离。
解决方式:去掉train前的斜杠,修改为:
train_folder_path = os.path.join(data_path, "train")
2. 检查OpenCV安装与版本适配
集群环境的OpenCV可能存在安装不完整或版本差异问题(Colab使用预配置的稳定版本,集群可能缺少依赖或使用无图形界面环境):
- 先检查当前OpenCV版本:
对比Colab中的版本,若差异过大,重新安装适配集群的版本:import cv2 print(cv2.__version__)pip uninstall opencv-python -y pip install opencv-python-headless # 集群无图形界面时优先用headless版本
3. 验证文件读取权限
即使路径正确,集群的文件系统权限可能限制了你读取数据集文件:
- 用终端命令检查目标文件的权限:
若当前用户无读取权限,执行:ls -l /path/to/your/image.jpg
或联系集群管理员批量设置数据集目录的读取权限。chmod +r /path/to/your/image.jpg
4. 排查损坏的数据集文件
迁移数据集到集群时可能出现文件丢失或损坏,导致cv2.imread返回None,进而触发后续resize报错。建议添加错误检查代码定位问题文件:
image_path = os.path.join(emotion_folder_path, image_filename) image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) # 添加检查逻辑 if image is None: print(f"无法读取文件:{image_path}") continue # 跳过损坏文件 image = cv2.resize(image, (48, 48))
根据输出的错误路径,重新传输对应的文件或重新同步整个数据集。
内容的提问来源于stack exchange,提问作者AlexNazemi
相关产品推荐
相关产品推荐

