gpt4 book ai didi

python - 无法分配ndarray

转载 作者:行者123 更新时间:2023-12-02 17:58:12 24 4
gpt4 key购买 nike

我遇到内存问题,无法解释原因。我试图遍历一些图像,检测面部,并使用python包(DeepFace)确定图像中所有面部的某些属性并将其保存下来。我注意到,我的Ram几乎会立即达到很高的使用率(15/16 GB),并在整个运行过程中徘徊在那儿,然后通常在经过约20张图像后崩溃。那是当我收到错误“无法分配ndarray”时。下面是我的代码。

import os
import cv2
import pandas as pd
from deepface import DeepFace
import gc

path="Documents/test images 2"
saved_path = "Documents/faces2"
valid_images =[".png"]
face_cascade = cv2.CascadeClassifier('Documents/haarcascade_frontalface_default.xml')

# Create empty dataframe to save results to
all_image_objects = pd.DataFrame(columns = ['Image','Age','Gender','Race','Emotion'])

for f in os.listdir(path):
ext= os.path.splitext(f)[1]
if ext.lower() not in valid_images:
continue
img_name=os.path.basename(f)
img_name=os.path.splitext(img_name)[0]
img = cv2.imread(os.path.join(path,f))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
for (x, y, w, h) in faces:
ROI = img[y-20:y+h+20,x-20:x+w+20]
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
try:
demography = DeepFace.analyze(ROI, actions = ['age', 'gender', 'race', 'emotion'])
# handling the case where no face is detetected
except ValueError:

continue
face_dict = {'Image':img_name,
'Age':demography["age"],
'Gender':demography["gender"],
'Emotion':demography["dominant_emotion"],
'Race':demography["dominant_race"]}
index = [0]
face_df = pd.DataFrame(face_dict, index=index)
all_image_objects=all_image_objects.append(face_df,ignore_index=True)
cv2.imwrite(os.path.join(saved_path,f),img)
gc.collect()
我尝试控制内存使用的方法之一是根据我所做的一些读取将结果添加到gc.collect()函数中,但这似乎没有任何效果。有什么方法可以帮助您了解正在占用的内存吗?每个图像约为200-400 KB,我的理解是我一次只能加载一个,因此我对于如何为此消耗大量内存感到困惑。
编辑:我一直在尝试使用guppy进行更多故障排除,但是每当我尝试分析内存使用情况时,内核就会崩溃。下面是我正在尝试的。
from guppy import hpy
h=hpy()
h.heap()
导致
Restarting kernel... 

[SpyderKernelApp] WARNING | No such comm: ba39c2f6076211eb91367085c2f42d08
[SpyderKernelApp] WARNING | No such comm: 9b49877e076411eb8c3e7085c2f42d08

最佳答案

我能够找到某种程度减轻这种情况的方法,但是还远远不够完美。仍然会发生相同的错误,但是现在它不是发生在20张图像之后,而是发生在大约2000年之后。从keras中,我引入了以下内容

from keras import backend as K
在循环的每次迭代之后,我运行以下命令。
K.clear_session()

关于python - 无法分配ndarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64217368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com