Ошибка памяти при создании набора данных для обучения - PullRequest
0 голосов
/ 08 мая 2020

Итак, я пытался сгенерировать наборы данных изображений для вычитания фона с помощью сверточной нейронной сети на основе бумаги. Для начала, я пытаюсь выполнить вычитание фона на 300-кадровом видео, процесс, в котором я сейчас застрял, - это то, где я пытаюсь извлечь набор фрагментов изображения 27x27 из сложенного изображения 300 изображений в оттенках серого 266x346 и 300 изображений в оттенках серого 266x346. Но я продолжаю получать ошибку памяти, которая гласит, как на картинке ниже: enter image description here Вот мой код:

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)

Что-то не так с моим кодом? Если нет, есть ли любое решение, кроме запуска его на компьютере с большим объемом памяти / ОЗУ, например, сделать код более эффективным для памяти? Потому что я также пробовал Google Collab, но ядро ​​продолжает давать сбой. Я также проверил, когда извлекается патч cra sh, кажется, он всегда cra sh на моем компьютере, когда он уже извлекает 40-42 данных (из общего числа 300). Так что это действительно может быть проблема с памятью. Если вопрос непонятен, спрашивайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...