-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcoco.py
44 lines (39 loc) · 2.23 KB
/
coco.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from mxnet_vqa.data.coco_answers import get_answers_matrix
from mxnet_vqa.data.coco_questions import get_questions_matrix
from mxnet_vqa.data.coco_images import get_coco_2014_val_image_features
import os
import mxnet as mx
from mxnet import nd
import numpy as np
import logging
def train_test_split(data_dir_path, question_mode='add', answer_mode='int',
batch_size=64, max_lines_retrieved=100000,
max_sequence_length=-1,
ctx=mx.cpu(),
test_size=0.2):
answers = get_answers_matrix(data_dir_path=data_dir_path,
mode=answer_mode, split='val',
max_lines_retrieved=max_lines_retrieved)
questions = get_questions_matrix(data_dir_path=data_dir_path,
mode=question_mode, split='val',
max_sequence_length=max_sequence_length,
max_lines_retrieved=max_lines_retrieved)
image_feats = get_coco_2014_val_image_features(data_dir_path=data_dir_path, ctx=ctx,
coco_images_dir_path=os.path.join(data_dir_path, 'val2014'),
max_lines_retrieved=max_lines_retrieved)
record_count = answers.shape[0]
indices = np.random.permutation(record_count)
training_record_count = record_count - int(record_count * test_size)
train_idx, test_idx = indices[:training_record_count], indices[training_record_count:]
meta = dict()
meta['questions_matrix_shape'] = questions.shape[1:]
meta['answers_matrix_shape'] = answers.shape[1:]
meta['img_feats_matrix_shape'] = image_feats.shape[1:]
logging.debug('train test meta: %s', meta)
return mx.io.NDArrayIter(data=[nd.array(image_feats[train_idx]),
nd.array(questions[train_idx])],
label=[nd.array(answers[train_idx])], batch_size=batch_size), \
mx.io.NDArrayIter(data=[nd.array(image_feats[test_idx]),
nd.array(questions[test_idx])],
label=[nd.array(answers[test_idx])], batch_size=batch_size), \
meta