python - 错误:(-4:内存不足)无法在函数 'cv::OutOfMemoryError' 中分配 36578304 字节
问题描述
介绍
我想训练一个卷积神经网络来预测一张张贴到 r/art 的图片作为个人项目会在 Reddit 上获得多少赞。
我已经下载了 30000 张图片 -> 18648 张有效图片,并使用他们的分数和帖子 ID 为它们命名,这样相同分数的帖子就不会发生冲突(例如,0_k0un69.jpg,对代码片段只有轻微的重要性)
问题
我正在尝试创建 X(输入图片数组)和 Y(用于神经网络训练的分数数组)。大约 5.8% 的时候,我得到了标题错误:
error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-6sxsq0tp\opencv\modules\core\src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 36578304 bytes in function 'cv::OutOfMemoryError'
创建此错误的代码如下:
path = "pics/"
#Get all file names
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
numpics = len(files)
#Store all image arrays and image names in a list
X = []
Y = []
counter = 0
for file in files:
#Progress bar
sys.stdout.write('\r')
sys.stdout.write("Reading images into DataSets: {:.1f}%".format((100/(numpics-1)*counter)))
sys.stdout.flush()
counter+=1
X.append(cv2.imread(f'{path}{file}'))
Y.append(file.split(".")[0].split("_")[0]
对我来说很明显问题在于我要处理多少张大图片。尽管如此,我想知道是否有什么办法可以避免将我的图片变成灰度/缩小它们,或者我的代码是否只是内存泄漏或问题。如果它有帮助,我正在研究使用全局池来处理可变图像尺寸,因为这个中型帖子和堆栈交换帖子建议。如果事实证明缩放不会改变全局池后的分辨率,请告诉我,因为我不知道。
尝试的解决方案
我听说从 32 位 -> 64 位会有所帮助,但我不确定我正在做的事情是什么样的。我在 Pycharm 的 Jupyter 笔记本中运行它,我检查了 Pycharm 是 64 位可执行文件。
我有一些额外的问题需要理解:
- 该错误消息似乎出现在 Pycharm 或类似的 Java 虚拟机上,因为 appveyor 不是我 PC 上的用户。那,或者它与opencv有关。在没有 Pycharm 的情况下运行它可能会有所帮助吗?
- 这个内存问题是 RAM 问题还是存储问题?我觉得奇怪的是图片本身只占用了大约 22 GB 的存储空间,但其中有 6% 的人遇到了这个错误。
解决方案
推荐阅读
- javascript - 将数据从html表导出到csv文件时如何删除列?
- python-3.x - 根据条件计算 pandas 数据框中的 sumproduct(Excel)
- javascript - Angular 9 - Select 中的嵌套和分组选项
- python-3.x - 非二值图像的有效轮廓
- java - 如何在 Android 中实现自定义文本编码?
- java - 有没有办法向 Quarkus 注册 Hibernate Interceptor?
- elasticsearch - 带有 AND 运算符的 Elasticsearch 多匹配查询,用于 Hyphenation_decompounder 令牌过滤器生成的令牌
- java - Java程序编译错误:“int无法转换为Toolbar”
- javascript - 在浏览器文件中使用 import 或 require
- html - CSS 加载器到中心