因此,我一直在尝试基于卷积神经网络为背景减影生成图像数据集。首先,我正在尝试对300帧视频进行背景减法,目前我停留的过程是我尝试从300 266x346灰度图像和300 266x346灰度图像的堆叠图像中提取一组27x27图像补丁。但是我不断收到内存错误,如下图所示: 这是我的代码:
import cv2
import numpy as np
import statistics
import os
from sklearn.feature_extraction import image
from matplotlib import pyplot as plt
def rgb2gray(img):
temp=np.zeros((len(img),len(img[0])),dtype=np.uint8)
for row in range(len(img)):
for col in range(len(img[0])):
temp[row][col]=img[row][col][0]*0.299+img[row][col][1]*0.587+img[row][col][2]*0.114
return temp
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder,filename))
if img is not None:
images.append(img)
return images
def tdataset_gen(img):
temp=[]
ret=True
c=0
while ret:
c+=1
print(c)
ret,frame=img.read()
if frame is None:
return temp
else:
frame=frame/255
gray = rgb2gray(frame)
temp.append(gray)
def zpad(datas,xleft,xtop,xright,xbot):
return np.pad(datas,((xtop,xbot),(xleft,xright)),'constant')
def concat(img1,img2):
temp=np.zeros((img1.shape[0],img1.shape[1],2))
temp[:,:,0]=img1
temp[:,:,1]=img2
return temp
def scene_spec_genx(datas,backgrounds):
backgrounds=zpad(backgrounds,13,13,13,13)
temp=[]
for i in range(len(datas)):
print(i)
temp2=zpad(datas[i],13,13,13,13)
temp2=concat(temp2,backgrounds)
temp2=image.extract_patches_2d(temp2,(27,27))
temp.append(temp2)
# temp.append(image.extract_patches_2d(concat(zpad(datas[i],13,13,13,13),backgrounds),(27,27)))
return temp
def bg_init(dataset,fr,cntr):
bg=np.zeros((len(dataset[0]),len(dataset[0][0])),dtype=np.uint8)
for row in range(len(bg)):
for col in range(len(bg[0])):
tempv=[]
cntr=0
while cntr!=fr:
tempv.append(dataset[cntr][row][col])
cntr+=1
bg[row][col]=statistics.median(tempv)
return bg
img = cv2.VideoCapture("D:\playground\\background subtraction\\reduced\\input\\reduced.mp4")
datasets=tdataset_gen(img)
interval=300
background=bg_init(datasets,interval,interval)
trainx=scene_spec_genx(datasets,background)
我的代码有什么问题吗?如果没有,除了使它在更高内存/ RAM的计算机上运行之外,是否还有其他解决方案,例如可以使代码的内存使用效率更高?因为我还尝试了Google Collab,但是内核不断崩溃。我还检查了补丁提取崩溃的时间,当它已经提取40-42个数据(共300个)时,它似乎总是在我的计算机中崩溃。因此,这实际上可能是内存错误问题。请询问问题是否明确。