Как сформировать данные для задачи классификации видео - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу использовать методы глубокого обучения для решения проблемы классификации видео.

Мои входные данные - видео различной длины, максимум 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?

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