Я хочу использовать методы глубокого обучения для решения проблемы классификации видео.
Мои входные данные - видео различной длины, максимум 3 минуты.
Для каждого видео я понижал частоту дискретизации каждого кадра, чтобы иметь форму = (112,112,3) высоты, ширины и каналов соответственно:
# maxFrame is the number of frames of the longest video, dir is a list of directory where video are stored
X = []
for i in dir:
for filename in os.listdir(i):
cap = cv2.VideoCapture(i + filename)
vid = []
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
vid.append(frame)
else:
break
cap.release()
cv2.destroyAllWindows()
gc.collect()
#vid = np.asarray(vid)
reshape_frames = reshapeVid(vid)
reshape_frames = np.asarray(reshape_frames)
X.append(np.asarray(reshape_frames))
X = np.asarray(X)
X = sequence.pad_sequences(X, maxlen=maxFrame)
def reshapeVid(frames):
width = 112
height = 112
channel = 3
dim = ( width,height)
reshape_frames = np.zeros((len(frames), height, width, channel))
for i, img in enumerate(frames):
resized = cv2.resize(img, dim, interpolation = cv2.INTER_CUBIC)
reshape_frames[i,:,:,:] = resized
return reshape_frames
У меня возникают проблемы с памятью, когда я X = np.asarray(X)
или X = sequence.pad_sequences(X, maxlen=maxFrame)
Я попытался уменьшить количество кадров: vid = vid [: 100], и предварительная обработка работает, но все еще сталкивается с проблемой памяти, когда подходит модель keras.
Как я могу представить видео целиком в массиве numpy, чтобы передать его модели keras?