将列表转换为numpy数组时发生内存错误

时间:2022-04-29 20:20:11

I've got a total of around 7000 images from which I'm extracted HoG features. I then want to convert the list into an np array for further processing. But I get a memory error during the convertion.

我总共有大约7000张图片从中提取HoG特征。然后,我希望将列表转换为一个np数组以进行进一步处理。但是在转换过程中我得到了一个内存错误。

Here's the relevant part of my code:

以下是我代码的相关部分:

from skimage import data, io, filter, color, exposure
from skimage.feature import hog
from skimage.transform import resize
import matplotlib.pyplot as plt
import numpy as np

tmp_hogs = [] # this is the list I need to convert into a numpy array
for group in samplegroups:
    for myimg in group:
        curr_img = np.array(myimg, dtype=float)
        imgs.append(curr_img)
        fd, hog_image = hog(curr_img, orientations=8, pixels_per_cell=(4, 4),
                 cells_per_block=(1, 1), visualise=True, normalise=True)
        tmp_hogs.append(fd)

img_hogs = np.array(tmp_hogs, dtype =float) 

The error I get is:

我得到的错误是:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\app\anacondasoftware\lib\threading.py", line 810, in __bootstrap_inner
    self.run()
  File "C:\Users\app\anacondasoftware\lib\site-packages\spyderlib\widgets\externalshell\monitor.py", line 582, in run
    already_pickled=True)
  File "C:\Users\app\anacondasoftware\lib\site-packages\spyderlib\utils\bsdsocket.py", line 45, in write_packet
    nsend -= temp_fail_retry(socket.error, sock.send, sent_data)
  File "C:\Users\app\anacondasoftware\lib\site-packages\spyderlib\utils\bsdsocket.py", line 25, in temp_fail_retry
    return fun(*args)
error: [Errno 10054] An existing connection was forcibly closed by the remote host

Traceback (most recent call last):
  File "C:\Users\app\Documents\Python Scripts\gbc_carclassify.py", line 63, in <module>
    img_hogs = np.array(tmp_hogs, dtype =float) 
MemoryError

How can I fix it?

我怎样才能修好它呢?

1 个解决方案

#1


4  

For RGB or RGBA images you need only 8 bits per value, and when using float you are alocating 64 bits per value. Try using np.uint8 instead:

对于RGB或RGBA图像,您只需要8位/值,当使用浮点数时,您将每值计算64位。试着用np。uint8相反:

img_hogs = np.array(tmp_hogs, dtype=np.uint8)

#1


4  

For RGB or RGBA images you need only 8 bits per value, and when using float you are alocating 64 bits per value. Try using np.uint8 instead:

对于RGB或RGBA图像,您只需要8位/值,当使用浮点数时,您将每值计算64位。试着用np。uint8相反:

img_hogs = np.array(tmp_hogs, dtype=np.uint8)