Example #1
0
def vg_make_meta_hdf():
    train_stats = zl.load('output/train_stats.pkl')
    test_stats = zl.load('output/test_stats.pkl')
    #train_stats = zl.sort_dict_by_val(train_stats)
    obj_names_sorted = sorted(train_stats.keys())
    classes = ('__background__', )  # always index 0
    for i in xrange(len(obj_names_sorted)):
        classes += (obj_names_sorted[i], )

    train_pre_stats = zl.load('output/train_pre_stats.pkl')
    test_pre_stats = zl.load('output/test_pre_stats.pkl')

    pre_names_sorted = sorted(train_pre_stats.keys())
    predicates = ()
    for i in range(len(pre_names_sorted)):
        predicates += (pre_names_sorted[i], )

    h5f = 'data/vg1_2_meta.h5'
    h5f = h5py.File(h5f)
    for i in range(201):
        h5f['meta/cls/name2idx/' + classes[i]] = str(i)
        h5f['meta/cls/idx2name/' + str(i)] = classes[i]

    for i in range(100):
        h5f['meta/pre/name2idx/' + predicates[i]] = str(i)
        h5f['meta/pre/idx2name/' + str(i)] = predicates[i]
Example #2
0
def test_sparse_coder():
    db = coco.COCO('/media/zawlin/ssd/coco/annotations/captions_train2014.json')
    ilsvrc_word2vec = zl.load('ilsvrc_word2vec')
    test_word2vec = zl.load('test_word2vec')
    D = []
    idx2word = []
    for i in xrange(len(ilsvrc_word2vec.keys())):
        idx2word.append(ilsvrc_word2vec.keys()[i])
        D.append(ilsvrc_word2vec[ilsvrc_word2vec.keys()[i]])
    idx2word = np.array(idx2word)
    D = np.array(D)
    print 'loading word2vec'
    model = gensim.models.Word2Vec.load_word2vec_format('./GoogleNews-vectors-negative300.bin', binary=True)
    coder = SparseCoder(dictionary=D, transform_n_nonzero_coefs=5,
                            transform_alpha=None, transform_algorithm='lasso_cd')
    #random.shuffle(db.anns)
    for k in db.anns:
        cap = db.anns[k]['caption']
        splited = cap.split(' ')
        for s in splited:
            if s.lower() in model:
                y = model[s.lower()]
                x  = coder.transform(y.reshape(1,-1))[0]
                print '%s = %s'%(s.lower(),idx2word[np.argsort(x)[::-1]])
                print x[np.argsort(x)[::-1]]
        c = raw_input('press q to quit')
        if c== 'q':
            exit(0)
Example #3
0
    def setup(self, bottom, top):
        """Setup the RoIDataLayer."""

        self._cur_idx = 0
        self.gt_labels = {}
        self.meta = h5py.File('/home/zawlin/Dropbox/proj/sg_vrd_meta.h5', 'r')
        self.cache = h5py.File('output/sg_vrd_cache.h5','r')
        self.cache_mem = {}
        if os.path.exists('output/cache/sg_vrd_gt.pkl'):
            self.gt_labels = zl.load('output/cache/sg_vrd_gt.pkl')
            glog.info('loaded gt data from cache')
        else:
            glog.info( 'Preloading gt')
            zl.tic()
            for k in self.meta['gt/train'].keys():
                rlp_labels = self.meta['gt/train/%s/rlp_labels'%k][...]
                sub_boxes = self.meta['gt/train/%s/sub_boxes'%k][...].astype(np.float)
                obj_boxes = self.meta['gt/train/%s/obj_boxes'%k][...].astype(np.float)
                if sub_boxes.shape[0]>0:
                    zeros = np.zeros((sub_boxes.shape[0],1), dtype=np.float)
                    # first index is always zero since we do one image by one image
                    sub_boxes = np.concatenate((zeros, sub_boxes),axis=1)
                    obj_boxes = np.concatenate((zeros, obj_boxes),axis=1)
                self.gt_labels[k] = {}
                self.gt_labels[k]['rlp_labels']=rlp_labels
                self.gt_labels[k]['sub_boxes']=sub_boxes
                self.gt_labels[k]['obj_boxes']=obj_boxes
            glog.info('done preloading gt %f'%zl.toc())
            zl.save('output/cache/sg_vrd_gt.pkl',self.gt_labels)

        self.imids = []
        for k in self.gt_labels.keys():
            self.imids.append(k)
        self.imidx =0
        random.shuffle(self.imids)
        # parse the layer parameter string, which must be valid YAML
        layer_params = yaml.load(self.param_str)

        self._num_classes = layer_params['num_classes']
        self._name_to_top_map = {}

        # data blob: holds a batch of N images, each with 3 channels
        idx = 0
        top[idx].reshape(cfg.TRAIN.IMS_PER_BATCH, 1024,
                         50,50)
        self._name_to_top_map['conv_new_1'] = idx
        idx += 1

        top[idx].reshape(1, 5, 1, 1)
        self._name_to_top_map['sub_boxes'] = idx
        idx += 1

        top[idx].reshape(1, 5, 1, 1)
        self._name_to_top_map['obj_boxes'] = idx
        idx += 1
        # labels blob: R categorical labels in [0, ..., K] for K foreground
        # classes plus background
        top[idx].reshape(1, 1, 1, 1)
        self._name_to_top_map['labels'] = idx
Example #4
0
def vg_data_prep2():
    objects_all = zl.load('output/objects_all.pkl')
    objects = zl.load('output/objects.pkl')
    subjects = zl.load('output/subjects.pkl')
    predicate = zl.load('output/predicate.pkl')

    objects_all_sorted = sorted(objects_all.items(),
                                key=operator.itemgetter(1),
                                reverse=True)
    objects_sorted = sorted(objects.items(),
                            key=operator.itemgetter(1),
                            reverse=True)
    subjects_sorted = sorted(subjects.items(),
                             key=operator.itemgetter(1),
                             reverse=True)
    predicate_sorted = sorted(predicate.items(),
                              key=operator.itemgetter(1),
                              reverse=True)

    wnl = WordNetLemmatizer()
    spl = SpellingReplacer()
    cnt = 0
    print objects_all_sorted[:100]
Example #5
0
def merge_pickled_files():
    import os
    h5f = h5py.File(C.coco_eb_h5_path, 'w')
    cnt = 0
    zl.tick()
    for path, subdirs, files in os.walk(C.coco_eb_dir):
        for name in files:
            cnt += 1
            if cnt % 1000 == 0:
                print cnt, zl.tock()
                zl.tick()
            fpath = os.path.join(path, name)
            fid = name.replace('.eb', '')
            bbs = np.array(zl.load(fpath)).astype(np.float16)
            h5f[fid] = bbs
Example #6
0
    def setup(self, bottom, top):
        self._cur_idx = 0
        self.vgg_data = {}
        vgg_h5 = h5py.File(
            "output/precalc/vg1_2_2016_predicate_exp_train.hdf5", 'r')
        layer_params = yaml.load(self.param_str_)

        self.imids = []
        for k in vgg_h5.keys():
            self.imids.append(k)
        self.imidx = 0

        if os.path.exists('output/cache/vg1_2_2016_pre_train_concat.pkl'):
            self.vgg_data = zl.load(
                'output/cache/vg1_2_2016_pre_train_concat.pkl')
            print 'loaded train data from cache'
        else:
            print 'Preloading training data'
            zl.tick()
            for k in vgg_h5.keys():
                sub_visual = vgg_h5[k]['sub_visual'][...]
                obj_visual = vgg_h5[k]['obj_visual'][...]
                pre_label = vgg_h5[k]['pre_label'][...]
                self.vgg_data[k] = {}
                self.vgg_data[k]['sub_visual'] = sub_visual
                self.vgg_data[k]['obj_visual'] = obj_visual
                self.vgg_data[k]['pre_label'] = pre_label
            print 'done preloading training data %f' % zl.tock()
            zl.save('output/cache/vg1_2_2016_pre_train_concat.pkl',
                    self.vgg_data)
            vgg_h5.close()

        self._batch_size = layer_params['batch_size']
        self.train_data = []
        self._name_to_top_map = {}

        # data blob: holds a batch of N images, each with 3 channels
        # top[0].reshape(self._batch_size, 4096 * 2 )

        top[0].reshape(self._batch_size, 2 * 4096)
        top[1].reshape(self._batch_size)
        self._name_to_top_map['visual'] = 0
        self._name_to_top_map['label'] = 1
Example #7
0
def prep_train():
    cnt = 0
    root = '/media/zawlin/ssd/iccv2017/data/voc/gen_eb/train'
    h5path = '/media/zawlin/ssd/iccv2017/data/voc/gen_eb.h5'
    h5f = h5py.File(h5path)
    for path, subdirs, files in os.walk(root):
        for name in files:
            cnt += 1
            if cnt % 100 == 0:
                print cnt
            fpath = os.path.join(path, name)
            fname = name[:-3]

            eb_data = zl.load(fpath)
            eb_data = np.array(eb_data).astype(np.float16)

            # h5f.create_dataset('train/%s'%fname,dtype='float1', data=eb_data)
            # exit(0)
            h5f['train/%s' % fname] = eb_data
Example #8
0
def prep_train():
    cnt = 0
    root = 'data/sg_vrd_2016/EB/sg_train_images'
    h5path = 'data/sg_vrd_2016/EB/eb2.h5'
    h5f = h5py.File(h5path, driver='core')
    data = {}
    for path, subdirs, files in os.walk(root):
        for name in files:
            cnt += 1
            if cnt % 100 == 0:
                print cnt
            fpath = os.path.join(path, name)
            fname = name[:-3]

            eb_data = zl.load(fpath)
            eb_data = np.array(eb_data).astype(np.float16)
            data[fname] = eb_data
            # h5f.create_dataset('train/%s'%fname,dtype='float1', data=eb_data)
            # exit(0)
    for fname in data.keys():
        h5f['train/%s' % fname] = data[fname]
Example #9
0
def vg_choose_final_set():
    objects_all = zl.load('output/objects_all.pkl')
    objects = zl.load('output/objects.pkl')
    subjects = zl.load('output/subjects.pkl')
    predicate = zl.load('output/predicate.pkl')

    objects_all_sorted = sorted(objects_all.items(),
                                key=operator.itemgetter(1),
                                reverse=True)
    objects_sorted = sorted(objects.items(),
                            key=operator.itemgetter(1),
                            reverse=True)
    subjects_sorted = sorted(subjects.items(),
                             key=operator.itemgetter(1),
                             reverse=True)
    predicate_sorted = sorted(predicate.items(),
                              key=operator.itemgetter(1),
                              reverse=True)
    # for pre in predicate_sorted:
    # print pre[0],pre[1]
    # exit(0)
    #objects_all_sorted = objects_all_sorted[:300]
    #predicate_sorted = predicate_sorted[:100]
    objects_final = {i[0]: i[1] for i in objects_all_sorted[:202]}
    del objects_final['woman']
    del objects_final['background']
    # print len(sorted(objects_final.keys()))
    # exit(0)
    #predicate_final = {i[0]:i[1] for i in predicate_sorted[:100]}
    predicate_final = {}
    mappings_p = make_p_mappings()
    for k in mappings_p.keys():
        if mappings_p[k] in predicate:
            predicate_final[mappings_p[k]] = predicate[mappings_p[k]]
    client = MongoClient("mongodb://localhost:27017")
    db = client.visual_genome_1_2
    db_results = db.relationships_cannon.find(no_cursor_timeout=True)

    cnt = 0
    start = time.time()
    last = time.time()

    subjects = {}
    objects = {}
    objects_all = {}
    predicate = {}
    cnt = 0
    docs = []
    for doc in db_results:
        if cnt % 10000 == 0:
            print cnt
        docs.append(doc)
        cnt += 1
    cnt = 0
    random.shuffle(docs)
    for doc in docs:
        cnt += 1
        if cnt % 10000 == 0:
            print cnt
        rcnt = 0
        doc_object = dict(doc)
        doc_relationship = dict(doc)
        doc_object.pop('relationships', None)
        doc_relationship.pop('relationships', None)
        doc_object['objects'] = []
        doc_relationship['relationships'] = []
        for r in doc['relationships']:
            #doc_object['objects'].append()
            pre = r['predicate']

            obj = r['object']['name']
            sub = r['subject']['name']
            if sub in objects_final: doc_object['objects'].append(r['subject'])
            if obj in objects_final: doc_object['objects'].append(r['object'])
            if sub in objects_final and obj in objects_final and pre in predicate_final:
                doc_relationship['relationships'].append(r)
        if cnt <= 80000:
            db.relationships_all_train.insert(doc_relationship)
            db.relationships_objects_train.insert(doc_object)
        else:
            db.relationships_all_test.insert(doc_relationship)
            db.relationships_objects_test.insert(doc_object)
Example #10
0
def relation_make_meta():
    spo_info = zl.load('output/spo_info_vg.pkl')
    spo_list = []
    spo_dict = {}
    for k in spo_info.keys():
        if spo_info[k] >= 5:
            spo_list.append(k)
    for spo in spo_list:
        spo_dict[spo] = 0
    spo_list = spo_dict
    blacklist = [
        'VG_100K/2363098',
        'VG_100K_2/2402233',
        'VG_100K/2365839',
        'VG_100K_2/2398948',
        'VG_100K/2315697',
        'VG_100K_2/2403354',
    ]

    client = MongoClient("mongodb://localhost:27017")
    db = client.visual_genome_1_2
    imdatas = {}
    for imdata in db.image_data.find(no_cursor_timeout=True):
        imid = imdata['image_id']
        imdatas[imid] = imdata
    db_results_train = db.relationships_all_train.find(no_cursor_timeout=True)
    m = h5py.File('data/vg1_2_meta.h5')
    cnt = 0
    for doc in db_results_train:
        if cnt % 1000 == 0:
            print cnt
        cnt += 1
        imid = doc['image_id']
        im_data = imdatas[imid]
        if im_data['width'] < 100 or im_data['height'] < 100: continue
        im_path_full = im_data['url'].replace(
            'https://cs.stanford.edu/people/rak248/', '')
        im_path_folder = im_path_full.split('/')[0]
        im_path_file = im_path_full.split('/')[1]
        im_index = im_path_folder + '/' + im_path_file.replace('.jpg', '')
        if im_index in blacklist: continue
        obj_boxes = []
        sub_boxes = []
        rlp_labels = []
        imid = doc['image_id']
        imdata = imdatas[imid]
        for r in doc['relationships']:
            pre = r['predicate']
            sub_name = r['subject']['name']
            obj_name = r['object']['name']
            spo = sub_name + '_' + pre + '_' + obj_name
            if spo in spo_list:
                sidx = zl.name2idx_cls(m, sub_name)
                oidx = zl.name2idx_cls(m, obj_name)
                pidx = zl.name2idx_pre(m, pre)
                ox1, oy1, ow, oh = r['object']['x'], r['object']['y'], r[
                    'object']['w'], r['object']['h']
                sx1, sy1, sw, sh = r['subject']['x'], r['subject']['y'], r[
                    'subject']['w'], r['subject']['h']
                ox2, oy2 = ox1 + ow, oy1 + oh
                sx2, sy2 = sx1 + sw, sy1 + sh
                rlp_labels.append([sidx, pidx, oidx])
                sub_boxes.append([sx1, sy1, sx2, sy2])
                obj_boxes.append([ox1, oy1, ox2, oy2])
        m.create_dataset('gt/train/%s/rlp_labels' % imid,
                         data=np.array(rlp_labels).astype(np.int16))
        m.create_dataset('gt/train/%s/sub_boxes' % imid,
                         data=np.array(sub_boxes).astype(np.int16))
        m.create_dataset('gt/train/%s/obj_boxes' % imid,
                         data=np.array(obj_boxes).astype(np.int16))

    db_results_test = db.relationships_all_test.find(no_cursor_timeout=True)
    for doc in db_results_test:
        if cnt % 1000 == 0:
            print cnt
        cnt += 1
        imid = doc['image_id']
        im_data = imdatas[imid]
        if im_data['width'] < 100 or im_data['height'] < 100: continue
        im_path_full = im_data['url'].replace(
            'https://cs.stanford.edu/people/rak248/', '')
        im_path_folder = im_path_full.split('/')[0]
        im_path_file = im_path_full.split('/')[1]
        im_index = im_path_folder + '/' + im_path_file.replace('.jpg', '')
        if im_index in blacklist: continue
        obj_boxes = []
        sub_boxes = []
        rlp_labels = []
        imid = doc['image_id']
        imdata = imdatas[imid]
        for r in doc['relationships']:
            pre = r['predicate']
            sub_name = r['subject']['name']
            obj_name = r['object']['name']
            spo = sub_name + '_' + pre + '_' + obj_name
            if spo in spo_list:
                sidx = zl.name2idx_cls(m, sub_name)
                oidx = zl.name2idx_cls(m, obj_name)
                pidx = zl.name2idx_pre(m, pre)
                ox1, oy1, ow, oh = r['object']['x'], r['object']['y'], r[
                    'object']['w'], r['object']['h']
                sx1, sy1, sw, sh = r['subject']['x'], r['subject']['y'], r[
                    'subject']['w'], r['subject']['h']
                ox2, oy2 = ox1 + ow, oy1 + oh
                sx2, sy2 = sx1 + sw, sy1 + sh
                rlp_labels.append([sidx, pidx, oidx])
                sub_boxes.append([sx1, sy1, sx2, sy2])
                obj_boxes.append([ox1, oy1, ox2, oy2])
        m.create_dataset('gt/test/%s/rlp_labels' % imid,
                         data=np.array(rlp_labels).astype(np.int16))
        m.create_dataset('gt/test/%s/sub_boxes' % imid,
                         data=np.array(sub_boxes).astype(np.int16))
        m.create_dataset('gt/test/%s/obj_boxes' % imid,
                         data=np.array(obj_boxes).astype(np.int16))
Example #11
0
    def setup(self, bottom, top):
        self._cur_idx = 0
        self.vgg_data = {}
        self.gt_labels = {}
        vgg_h5 = h5py.File("output/precalc/vg1_2_2016_train.hdf5", 'r')
        if os.path.exists('output/cache/vg1_2_2016_train.pkl'):
            self.vgg_data = zl.load('output/cache/vg1_2_2016_train.pkl')
            print 'loaded train data from cache'
        else:
            print 'Preloading training data'
            zl.tick()
            for k in vgg_h5.keys():
                classemes = vgg_h5[k]['classemes'][...]
                visuals = vgg_h5[k]['visuals'][...]
                locations = vgg_h5[k]['locations'][...]
                cls_confs = vgg_h5[k]['cls_confs'][...]
                self.vgg_data[k] = {}
                self.vgg_data[k]['classemes'] = classemes
                self.vgg_data[k]['visuals'] = visuals
                self.vgg_data[k]['cls_confs'] = cls_confs
                self.vgg_data[k]['locations'] = locations
            print 'done preloading training data %f' % zl.tock()
            zl.save('output/cache/vg1_2_2016_train.pkl', self.vgg_data)
            vgg_h5.close()

        self.meta = h5py.File('/home/zawlin/Dropbox/proj/vg1_2_meta.h5', 'r')
        if os.path.exists('output/cache/vg1_2_2016_gt.pkl'):
            self.gt_labels = zl.load('output/cache/vg1_2_2016_gt.pkl')
            print 'loaded gt data from cache'
        else:
            print 'Preloading gt'
            zl.tick()
            for k in self.meta['gt/train'].keys():
                rlp_labels = self.meta['gt/train/%s/rlp_labels' % k][...]
                sub_boxes = self.meta['gt/train/%s/sub_boxes' % k][...].astype(
                    np.float)
                obj_boxes = self.meta['gt/train/%s/obj_boxes' % k][...].astype(
                    np.float)
                self.gt_labels[k] = {}
                self.gt_labels[k]['rlp_labels'] = rlp_labels
                self.gt_labels[k]['sub_boxes'] = sub_boxes
                self.gt_labels[k]['obj_boxes'] = obj_boxes
            print 'done preloading gt %f' % zl.tock()
            zl.save('output/cache/vg1_2_2016_gt.pkl', self.gt_labels)

        self.imids = []
        for k in self.vgg_data.keys():
            self.imids.append(k)
        self.imidx = 0
        random.shuffle(self.imids)
        layer_params = yaml.load(self.param_str_)

        self._batch_size = layer_params['batch_size']
        self.train_data = []
        self._name_to_top_map = {}

        # top[0].reshape(self._batch_size, 201*2)
        top[0].reshape(self._batch_size, 4096 * 2)
        # top[0].reshape(self._batch_size, 4*2)
        top[1].reshape(self._batch_size)

        # self._name_to_top_map['classeme'] = 0
        self._name_to_top_map['visual'] = 0
        # self._name_to_top_map['location'] = 0
        self._name_to_top_map['label'] = 1
Example #12
0
def run_retrieval_vp():
    h5f = h5py.File('output/precalc/ours_retr.hdf5')
    retr_meta = zl.load('output/pkl/vr_retr_meta.pkl')
    # print h5f[h5f.keys()[0]].keys()
    # exit(0)
    #h5f = h5py.file('output/results/lu_method_results.hdf5')
    # data_root='/home/zawlin/g/py-faster-rcnn/data/vg1_2_2016/Data/test/'
    m = h5py.File('/home/zawlin/Dropbox/proj/sg_vrd_meta.h5', 'r', 'core')
    thresh = 0.0
    filters = []
    rois = []
    images = {}
    imids = h5f.keys()
    results = {}
    cnt = 0
    pre = 'teddy bear_sit on_blanket'
    # pre = 'paw_in front of_cat'
    # pre = 'racket_hold by_player'
    r_idx = zl.name2idx_tri(m_vp, pre)
    # sub_lbl = pre.split('_')[0]
    # pre_lbl = pre.split('_')[1]
    # obj_lbl = pre.split('_')[2]
    # sub_idx = zl.name2idx_cls(m,sub_lbl)
    # pre_idx = zl.name2idx_pre(m,pre_lbl)
    # obj_idx = zl.name2idx_cls(m,obj_lbl)
    # rlp_label = np.array([sub_idx,pre_idx,obj_idx]).astype(np.int16)
    results = {}

    for imid in imids:
        if cnt % 100 == 0:
            print cnt, zl.toc()
            zl.tic()
        cnt += 1
        # rlp_labels = h5f[imid+'/labels'][...]
        rlp_confs = h5f[imid + '/confs'][:, r_idx]
        ind = np.argsort(rlp_confs)[::-1]
        rlp_confs = rlp_confs[ind[:5]]
        results[imid] = np.average(rlp_confs)
        if rlp_confs.shape[0] == 0:
            results[imid] = 0.0
            continue
        zl.tic()
        indexor = np.arange(rlp_labels.shape[0])
        # ind = indexor[np.all(rlp_labels==rlp_label,axis=1)]
        ind = np.where(rlp_labels == r_idx)[0]
        if ind.shape[0] == 0:
            results[imid] = 0.0
            continue
        confs = rlp_confs[ind]
        results[imid] = np.average(confs)
    results_sorted = zl.sort_dict_by_val(results)
    example_folder = 'output/examples_retr_vg_vp/%s/' % pre
    zl.make_dirs(example_folder)
    cnt = 0
    for imid, v in results_sorted[:200]:
        boxes = h5f[imid + '/boxes'][...]
        rlp_labels = h5f[imid + '/labels'][...]
        rlp_confs = h5f[imid + '/confs'][...]

        # indexor = np.arange(rlp_labels.shape[0])
        # ind = indexor[np.all(rlp_labels==rlp_label,axis=1)]
        ind = np.where(rlp_labels == r_idx)[0]
        if ind.shape[0] != 0:
            boxes = boxes[ind]
            sb = boxes[0]
            # ob = obj_boxes[0]
            im = cv2.imread(data_root + zl.imid2path(m, imid))
            cv2.rectangle(im, (sb[0], sb[1]), (sb[2], sb[3]), (0, 200, 0), 1)
            # cv2.rectangle(im,(ob[0],ob[1]),(ob[2],ob[3]),(0,0,200),1)
            cv2.imwrite(example_folder + str(cnt) + '_%s.jpg' % imid, im)
            #cv2.imshow('im',im)
            cnt += 1
Example #13
0
def run_retrieval_vp_v2():
    # h5_path = 'output/sg_vrd_2016_result.classeme.hdf5'
    h5_path = 'output/precalc/vg1_2_vp2016_test_nms2_.4.hdf5'
    m = h5py.File('/home/zawlin/Dropbox/proj/vg1_2_meta.h5', 'r', 'core')
    m_vp = h5py.File('/home/zawlin/Dropbox/proj/vg1_2_vp_meta.h5', 'r', 'core')
    cache_path = 'output/cache/%s.pkl' % h5_path.split('/')[-1]
    data_root = '/home/zawlin/data/data_vrd/vg_1.2/'
    rlp_map = []
    for i in xrange(1, len(m_vp['meta/tri/idx2name'].keys())):
        tri = str(m_vp['meta/tri/idx2name'][str(i)][...])
        s_lbl = tri.split('_')[0]
        p_lbl = tri.split('_')[1]
        o_lbl = tri.split('_')[2]
        rlp_label = [
            zl.name2idx_cls(m, s_lbl),
            zl.name2idx_pre(m, p_lbl),
            zl.name2idx_cls(m, o_lbl)
        ]
        rlp_map.append(rlp_label)
    rlp_map = np.array(rlp_map)
    if os.path.exists(cache_path):
        print 'load from cache'
        h5f = zl.load(cache_path)
    else:
        h5_in = h5py.File(h5_path, 'r')
        h5f = {}
        print 'preloading data'
        for i in h5_in:
            h5f[i] = {}
            h5f[i]['labels'] = h5_in[i]['labels'][...]
            h5f[i]['confs'] = h5_in[i]['confs'][...]
            h5f[i]['boxes'] = h5_in[i]['boxes'][...]
        zl.save(cache_path, h5f)
        print 'preloading data done'
    retr_meta = zl.load('output/pkl/vg_retr_meta.pkl')
    thresh = 0.0
    images = {}
    imids = h5f.keys()
    results = {}
    cnt = 0
    r_acc_100 = 0
    r_acc_50 = 0

    tp_total = 0
    gt_total = 0
    median = []
    total = 0
    retr_meta = zl.load('output/pkl/vg_retr_meta.pkl')
    for k in xrange(len(retr_meta['rlp_labels'])):
        total += retr_meta['counts'][k]
        if k > 1000:
            print total / 1000.
            exit(0)
            break
        continue
        cnt += 1
        rlp_label = retr_meta['rlp_labels'][k]
        gt_files = retr_meta['files'][k]
        # print gt_files
        # exit(0)
        # for f in gt_files:
        # impath= zl.imid2path(m,f)
        # print impath
        # im= cv2.imread(data_root+impath)
        # cv2.imshow('im',im)
        # cv2.waitKey(0)
        results = {}
        zl.tick()
        ranks = []
        for imid in imids:
            labels = h5f[imid]['labels'] - 1
            rlp_confs = h5f[imid]['confs']
            rlp_labels = rlp_map[labels]
            if rlp_labels.shape[0] == 0:
                results[imid] = 0.0
                continue
            indexor = np.arange(rlp_labels.shape[0])
            ind = indexor[np.all(rlp_labels == rlp_label, axis=1)]
            if ind.shape[0] == 0:
                results[imid] = 0.0
                continue
            confs = rlp_confs[ind]
            results[imid] = np.average(confs)

        results_sorted = zl.sort_dict_by_val(results)
        total_gt = len(gt_files) + 0.0
        gt_total += total_gt + 0.0
        tp_50 = 0.
        tp_100 = 0.
        found = False
        s_lbl = zl.idx2name_cls(m, rlp_label[0])
        p_lbl = zl.idx2name_pre(m, rlp_label[1])
        o_lbl = zl.idx2name_cls(m, rlp_label[2])
        lbl_str = '%s_%s_%s' % (s_lbl, p_lbl, o_lbl)

        delay = 0
        for i in xrange(len(results_sorted)):
            imid, v = results_sorted[i]
            impath = zl.imid2path(m, imid)
            if found and i >= 5:
                break
            # print gt_files
            cor = imid in gt_files
            if cor:
                if not found:
                    found = True
                    median.append(i)
                if i < 5:
                    tp_100 += 1
                    tp_total += 1
                    if i < 50: tp_50 += 1
            # if True:
            # cor_or_not = str(cor)
            # if cor :delay=0
            # if delay ==0:
            # im = cv2.imread(data_root+impath)
            # cv2.putText(im, cor_or_not, (50, 50), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 1)
            # cv2.putText(im, lbl_str, (50, 80), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 1)
            # cv2.putText(im, str(i), (50, 100), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 1)
            # cv2.imshow('im',im)
            # c = cv2.waitKey(delay)&0xFF
            # if c ==27:
            # exit(0)
            # if c == ord('s'):
            # delay = 1-delay

            # if c == ord('c'):
            # delay = 1

        r_50 = tp_50 / 5  #total_gt
        r_100 = tp_100 / 5  #total_gt
        r_acc_50 += r_50
        r_acc_100 += r_100
        med = np.median(median)
        print '%d %f %f %f %f %d %f' % (cnt, r_50, r_100, r_acc_50 / cnt,
                                        r_acc_100 / cnt, med, zl.tock())
Example #14
0
def show_retrieval_results():
    results = zl.load('output/results/retr_ours.pkl')
    scores = {}

    rel = 'person_has_phone;1_2_50;12'
    # rel = 'bowl_on_table;64_0_6;13'
    # #rel = 'glasses_on_table;11_0_6;26'
    # #rel = 'person_carry_bag;1_36_27;17'
    # #rel = 'sunglasses_on_person;63_0_1;15'
    # rel = 'person_wear_tie;1_1_89;15'
    #rel = 'cat_sleep on_car;62_62_9;1'
    #rel = 'sunglasses_on_person;63_0_1;15'
    rel = 'car_above_wheel;9_9_22;5'
    rel = 'person_with_skis;1_30_78;3'
    rel = 'sofa_beneath_person;52_29_1;4'
    #rel = 'cat_watch_monitor;62_44_21;3'
    #rel = 'person_play with_laptop;1_61_29;3'
    #rel = 'trash can_below_trees;83_23_15;5'
    rel_str = rel.split(';')[1]
    rel_lbl_str = rel.split(';')[0]
    root = '/home/zawlin/g/py-faster-rcnn/data/sg_vrd_2016/Data/sg_test_images/'
    #h5f = h5py.File('output/results/lu_method_results.hdf5')
    h5f = h5py.File('output/results/ours_retr.hdf5')
    zl.tick()
    for i in results.keys():
        scores[i] = 0
        if rel_str in results[i]:
            scores[i] = results[i][rel_str]

    scores_sorted = sorted(scores.items(),
                           key=operator.itemgetter(1),
                           reverse=True)
    for i in xrange(0, 20):
        im_folder = 'output/results/examples_zeroshot_retr/ours/' + rel_lbl_str + '/'
        if not os.path.exists(im_folder):
            os.makedirs(im_folder)
        imid = scores_sorted[i][0]
        sub_boxes = h5f[imid + '/sub_boxes'][...]
        obj_boxes = h5f[imid + '/obj_boxes'][...]
        rlp_labels = h5f[imid + '/rlp_labels'][...]
        rlp_confs = h5f[imid + '/rlp_confs'][...]
        rlp_label = np.array([
            int(rel_str.split('_')[0]),
            int(rel_str.split('_')[1]),
            int(rel_str.split('_')[2])
        ])
        ind = np.all(rlp_labels == rlp_label, axis=1)
        sub_boxes = sub_boxes[ind]
        obj_boxes = obj_boxes[ind]
        rlp_labels = rlp_labels[ind]
        rlp_confs = rlp_confs[ind]
        ind_sorted = np.argsort(rlp_confs)[::-1]
        sub_boxes = sub_boxes[ind_sorted]
        obj_boxes = obj_boxes[ind_sorted]
        rlp_labels = rlp_labels[ind_sorted]
        rlp_confs = rlp_confs[ind_sorted]
        if sub_boxes.shape[0] == 0: continue
        im = cv2.imread(root + imid + '.jpg')
        sb = sub_boxes[0]
        ob = obj_boxes[0]
        cv2.rectangle(im, (sb[0], sb[1]), (sb[2], sb[3]), (0, 200, 0), 1)
        cv2.rectangle(im, (ob[0], ob[1]), (ob[2], ob[3]), (0, 0, 200), 1)
        cv2.imwrite(im_folder + str(i) + '_%s.jpg' % imid, im)
        cv2.imshow('im', im)
        cv2.waitKey(0)
Example #15
0
def run_relation(model_type, iteration):
    cache_h5 = h5py.File('output/sg_vrd_cache.h5')['test']
    result = h5py.File('output/sg_vrd_2016_result_' + model_type + '_' +
                       iteration + '.hdf5')
    m = h5py.File('data/sg_vrd_meta.h5')
    #--------------cache boxes-----------------
    h5_boxes = h5py.File('output/precalc/sg_vrd_objs.hdf5')
    cache_boxes = {}
    if os.path.exists('output/cache/sg_vrd_objs_test.pkl'):
        cache_boxes = zl.load('output/cache/sg_vrd_objs_test.pkl')
        glog.info('loaded obj data from cache')
    else:
        glog.info('Preloading obj')
        zl.tic()
        for k in h5_boxes['test'].keys():
            boxes = h5_boxes['test/%s/boxes' % k][...]
            cache_boxes[k] = boxes
        glog.info('done preloading obj %f' % zl.toc())
        zl.save('output/cache/sg_vrd_obj_test.pkl', cache_boxes)
    #--------------cache boxes-----------------

    #--------------cache old boxes-------------
    h5_boxes = h5py.File('output/sg_vrd_2016_test.hdf5')
    cache_old_boxes = {}
    if os.path.exists('output/cache/sg_vrd_objs_test_vgg.pkl'):
        cache_old_boxes = zl.load('output/cache/sg_vrd_objs_test_vgg.pkl')
        glog.info('loaded obj data from cache')
    else:
        glog.info('Preloading obj')
        zl.tic()
        for k in h5_boxes.keys():
            locations = h5_boxes['%s/locations' % k][...]
            cls_confs = h5_boxes['%s/cls_confs' % k][...]
            boxes = np.concatenate((locations, cls_confs[:, 1, np.newaxis],
                                    cls_confs[:, 0, np.newaxis]),
                                   axis=1)
            cache_old_boxes[k] = boxes
        glog.info('done preloading obj %f' % zl.toc())
        zl.save('output/cache/sg_vrd_obj_test_vgg.pkl', cache_old_boxes)

    #--------------cache old boxes-------------
    data_root = 'data/sg_vrd_2016/Data/sg_test_images/'
    keep = 100
    thresh = 0.0001
    prototxt = 'models/sg_vrd/rel_pre_iccv/test_' + model_type + '.prototxt'
    model_path = 'output/rel_iccv/' + model_type + '_iter_' + iteration + '.caffemodel'
    net = caffe.Net(prototxt, model_path, caffe.TEST)
    # sio.savemat('output/'+model_type+'.mat',{'params_'+model_type:net.params['relation'][0].data})
    # exit(0)
    #net = caffe.Net('models/sg_vrd/relation/test.prototxt','output/models/sg_vrd_relation_vgg16_iter_264000.caffemodel',caffe.TEST)
    cnt = 0
    for imid in cache_h5.keys():
        cnt += 1
        if cnt % 10 == 0:
            glog.info(cnt)
        obj_boxes_gt = m['gt/test'][imid]['obj_boxes'][...]
        sub_boxes_gt = m['gt/test'][imid]['sub_boxes'][...]
        rlp_labels_gt = m['gt/test'][imid]['rlp_labels'][...]
        rlp_labels = []
        rlp_confs = []
        sub_boxes = []
        obj_boxes = []
        #boxes = cache_boxes[imid]
        boxes = cache_old_boxes[imid]

        if boxes.shape[0] >= 2:
            for s in xrange(boxes[:20].shape[0]):
                for o in xrange(boxes[:20].shape[0]):
                    if s == o: continue
                    if boxes[s][4] < 0.01: continue
                    if boxes[o][4] < 0.01: continue
                    sbox = boxes[s][:4]
                    obox = boxes[o][:4]
                    rlp_labels.append([boxes[s, 5], -1, boxes[o, 5]])
                    rlp_confs.append(boxes[s, 4] + boxes[o, 4])
                    sub_boxes.append(sbox)
                    obj_boxes.append(obox)
            if len(sub_boxes) <= 0: continue

            #sub_box = np.array(sub_box)
            #obj_box = np.array(obj_box)
            im_path = C.get_sg_vrd_path_test(imid)
            im_detect(net, im_path, sub_boxes, obj_boxes)
            relation_prob = net.blobs['relation_prob'].data[...]
            for r in xrange(relation_prob.shape[0]):
                argmax = np.argmax(relation_prob[r, ...])
                rs = relation_prob[r, argmax].squeeze()

                rlp_labels[r][1] = argmax
                rlp_confs[r] = rlp_confs[r] + rs

        im = cv2.imread(data_root + imid + '.jpg')
        for i in xrange(len(sub_boxes)):
            sb = sub_boxes[i]
            cv2.rectangle(im, (int(sb[0]), int(sb[1])),
                          (int(sb[2]), int(sb[3])), (255, 0, 0), 2)
            pass
        cv2.imshow('im', im)
        #if cv2.waitKey(0)==27:
        #    exit(0)

        #rlp_confs.append(rlp_conf)
        #rlp_labels.append(rlp_label)
        #sub_boxes.append(sub_box)
        #obj_boxes.append(obj_box)
        # for i in xrange(70):
        # rs = relation_score[i]
        # if rs>0.0:
        # predicate =i
        # #print relation_score[predicate]
        # rlp_label = np.array([sub_cls[s],predicate,obj_cls[s]]).astype(np.int32)
        # #print '%s %s %s %f'%(m['meta/cls/idx2name/'+str(rlp_label[0])][...],m['meta/pre/idx2name/'+str(rlp_label[1])][...],m['meta/cls/idx2name/'+str(rlp_label[2])][...],rs)
        # rlp_conf = rs#+sub_score+obj_score#relation_score[predicate]

        # rlp_confs.append(rlp_conf)
        # rlp_labels.append(rlp_label)
        # sub_boxes.append(sub_boxes_gt[s])
        # obj_boxes.append(obj_boxes_gt[s])

        result.create_dataset(imid + '/rlp_confs',
                              dtype='float16',
                              data=np.array(rlp_confs).astype(np.float16))
        result.create_dataset(imid + '/sub_boxes',
                              dtype='float16',
                              data=np.array(sub_boxes).astype(np.float16))
        result.create_dataset(imid + '/obj_boxes',
                              dtype='float16',
                              data=np.array(obj_boxes).astype(np.float16))
        result.create_dataset(imid + '/rlp_labels',
                              dtype='float16',
                              data=np.array(rlp_labels).astype(np.float16))
Example #16
0
def run_retrieval_zeroshot():
    # h5_path = 'output/sg_vrd_2016_result_all_19500.hdf5'
    # h5_path = 'output/sg_vrd_2016_result_diff_all_5000.hdf5'
    # h5_path= 'output/results/lu_method_results.hdf5'
    # h5_path = 'output/sg_vrd_2016_result.hdf5.dd'
    # h5_path = 'output/results/lu_method_results_max.hdf5'
    h5_path = 'output/results/lu_visual_method_results.hdf5'

    data_root = 'data/sg_vrd_2016/Data/sg_test_images/'
    m = h5py.File('/home/zawlin/Dropbox/proj/sg_vrd_meta.h5', 'r', 'core')
    zeroshots = m['meta/zeroshots'][...]
    gt_cache_path = 'output/cache/sg_vrd_gt_cache.pkl'
    gt_h5f = {}
    np.random.seed(76)
    if os.path.exists(gt_cache_path):
        print 'load gt from cache'
        gt_h5f = zl.load(gt_cache_path)
    else:
        print 'cacheing gt'
        for k in m['gt/test']:
            gt_h5f[k] = {}
            sub_boxes = m['gt/test'][k]['sub_boxes'][...]
            rlp_labels = m['gt/test'][k]['rlp_labels'][...]
            obj_boxes = m['gt/test'][k]['obj_boxes'][...]
            gt_h5f[k]['sub_boxes'] = sub_boxes
            gt_h5f[k]['obj_boxes'] = obj_boxes
            gt_h5f[k]['rlp_labels'] = rlp_labels
        print 'caching gt done'
        zl.save(gt_cache_path, gt_h5f)
    cache_path = 'output/cache/%s.pkl' % h5_path.split('/')[-1]
    # h5f = h5py.File('output/sg_vrd_2016_result.classeme.hdf5')
    if os.path.exists(cache_path):
        print 'load from cache'
        h5f = zl.load(cache_path)
    else:
        h5_in = h5py.File(h5_path, 'r')
        h5f = {}
        print 'preloading data'
        for i in h5_in:
            h5f[i] = {}
            h5f[i]['rlp_labels'] = h5_in[i]['rlp_labels'][...]
            h5f[i]['rlp_confs'] = h5_in[i]['rlp_confs'][...]
            h5f[i]['sub_boxes'] = h5_in[i]['sub_boxes'][...]
            h5f[i]['obj_boxes'] = h5_in[i]['obj_boxes'][...]
        zl.save(cache_path, h5f)
        print 'preloading data done'
    #h5f = h5py.file('output/results/lu_method_results.hdf5')
    retr_meta = zl.load('output/pkl/vr_retr_meta.pkl')
    thresh = 0.0
    images = {}
    imids = h5f.keys()
    results = {}
    cnt = 0
    r_acc_100 = 0
    r_acc_50 = 0

    tp_total = 0
    gt_total = 0
    median = []
    for k in xrange(len(retr_meta['rlp_labels'])):
        # if k>1000:
        # break
        rlp_label = retr_meta['rlp_labels'][k]
        if not np.any(np.all(zeroshots == rlp_label, axis=1)): continue
        gt_files = retr_meta['files'][k]

        cnt += 1
        results = {}
        zl.tic()
        for imid in imids:
            rlp_labels = h5f[imid]['rlp_labels']
            rlp_confs = h5f[imid]['rlp_confs']
            if rlp_confs.shape[0] == 0:
                results[imid] = 0.0
                continue
            indexor = np.arange(rlp_labels.shape[0])
            ind = indexor[np.all(rlp_labels == rlp_label, axis=1)]
            if ind.shape[0] == 0:
                results[imid] = 0.0
                continue
            confs = rlp_confs[ind]
            results[imid] = np.random.uniform(-1, 1)  #np.average(confs)

        results_sorted = zl.sort_dict_by_val(results)
        total_gt = len(gt_files) + 0.0
        gt_total += total_gt + 0.0
        tp_50 = 0.
        tp_100 = 0.
        found = False
        delay = 0
        s_lbl = zl.idx2name_cls(m, rlp_label[0])
        p_lbl = zl.idx2name_pre(m, rlp_label[1])
        o_lbl = zl.idx2name_cls(m, rlp_label[2])
        lbl_str = '%s_%s_%s' % (s_lbl, p_lbl, o_lbl)
        r_at_k = 5
        for i in xrange(len(results_sorted)):
            imid, v = results_sorted[i]
            if found and i >= r_at_k:
                break
            cor = imid in gt_files
            if cor:
                if not found:
                    found = True
                    median.append(i)
                if i < r_at_k:
                    tp_100 += 1
                    tp_total += 1
                    if i < 50: tp_50 += 1
            # if True:
            # cor_or_not = str(cor)
            # if cor :delay=0
            # if delay ==0:
            # im = cv2.imread(data_root+imid+'.jpg')
            # cv2.putText(im, cor_or_not, (50, 50), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 1)
            # cv2.putText(im, lbl_str, (50, 80), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 1)
            # cv2.putText(im, str(i), (50, 100), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 1)
            # cv2.imshow('im',im)
            # c = cv2.waitKey(delay)&0xFF
            # if c ==27:
            # exit(0)
            # if c == ord('s'):
            # delay = 1-delay

            # if c == ord('c'):
            # delay = 1
        r_50 = tp_50 / r_at_k  #total_gt
        r_100 = tp_100 / r_at_k  #total_gt
        r_acc_50 += r_50
        r_acc_100 += r_100
        med = np.median(median)
        print '%d %f %f %f %f %d %f' % (cnt, r_50, r_100, r_acc_50 / cnt,
                                        r_acc_100 / cnt, med, zl.toc())
Example #17
0
def run_relation_batch(model_type, iteration):
    vgg_h5 = h5py.File('output/precalc/vg1_2_2016_test.hdf5')
    vgg_data = {}
    if os.path.exists('output/cache/vg1_2_2016_test.pkl'):
        vgg_data = zl.load('output/cache/vg1_2_2016_test.pkl')
        print 'loaded test data from cache'
    else:
        print 'Preloading testing data'
        zl.tick()
        for k in vgg_h5.keys():
            classemes = vgg_h5[k]['classemes'][...]
            visuals = vgg_h5[k]['visuals'][...]
            locations = vgg_h5[k]['locations'][...]
            cls_confs = vgg_h5[k]['cls_confs'][...]
            vgg_data[k] = {}
            vgg_data[k]['classemes'] = classemes
            vgg_data[k]['visuals'] = visuals
            vgg_data[k]['cls_confs'] = cls_confs
            vgg_data[k]['locations'] = locations
        print 'done preloading testing data %f' % zl.tock()
        zl.save('output/cache/vg1_2_2016_test.pkl', vgg_data)
        vgg_h5.close()
    result = h5py.File('output/vg_results/vg1_2_2016_result_' + model_type +
                       '_' + iteration + '.hdf5')
    m = h5py.File('data/vg1_2_meta.h5')
    data_root = 'data/vg1_2_2016/Data/test/'
    keep = 100
    thresh = 0.0001
    net = caffe.Net(
        'models/vg1_2/relation/test_' + model_type + '.prototxt',
        'output/relation/vg/relation_vgg16_' + model_type + '_iter_' +
        iteration + '.caffemodel', caffe.TEST)
    #net = caffe.Net('models/sg_vrd/relation/test.prototxt','output/models/sg_vrd_relation_vgg16_iter_264000.caffemodel',caffe.TEST)
    cnt = 1
    zl.tick()
    imids = sorted(vgg_data.keys())
    for imid in imids:
        if cnt % 100 == 0:
            print cnt, zl.tock()
            zl.tick()
        cnt += 1
        if imid in result: continue
        classemes = vgg_data[imid]['classemes']
        visuals = vgg_data[imid]['visuals']
        locations = vgg_data[imid]['locations']
        cls_confs = vgg_data[imid]['cls_confs']

        # im = cv2.imread(data_root+imid+'.jpg')
        # #print cls_confs
        # # for box in locations:
        # # b=box[:4].astype(np.int32)
        # # cv2.rectangle(im,(b[0],b[1]),(b[2],b[3]),(255,0,0))
        # w,h = im.shape[2],im.shape[1]

        rlp_labels = []
        rlp_confs = []
        sub_boxes = []
        obj_boxes = []
        relation_vectors = []

        classemes_in = []
        visuals_in = []
        locations_in = []
        cls_confs_in = []
        sub_cls_in = []
        obj_cls_in = []
        sub_score_in = []
        obj_score_in = []
        sub_boxes = []
        obj_boxes = []
        for s in xrange(len(locations)):
            for o in xrange(len(locations)):
                if s == o: continue
                sub = locations[s]
                obj = locations[o]
                sub_visual = visuals[s]
                obj_visual = visuals[o]
                sub_cls = cls_confs[s, 0]
                obj_cls = cls_confs[o, 0]
                sub_score = cls_confs[s, 1]
                obj_score = cls_confs[o, 1]
                sub_classme = classemes[s]
                obj_classme = classemes[o]
                sub_loc_encoded = bbox_transform(np.array([obj[:4]]),
                                                 np.array([sub[:4]]))[0]
                obj_loc_encoded = bbox_transform(np.array([sub[:4]]),
                                                 np.array([obj[:4]]))[0]

                visual = np.hstack((sub_visual, obj_visual)).reshape(8192)
                classeme = np.hstack((sub_classme, obj_classme)).reshape(402)
                loc = np.hstack((sub_loc_encoded, obj_loc_encoded)).reshape(8)

                classemes_in.append(classeme)
                visuals_in.append(visual)
                locations_in.append(loc)
                sub_cls_in.append(sub_cls)
                obj_cls_in.append(obj_cls)
                sub_score_in.append(sub_score)
                obj_score_in.append(obj_score)
                sub_boxes.append(sub[:4])
                obj_boxes.append(obj[:4])

        if 'all' in model_type:
            blob = {
                'classeme': np.array(classemes_in),
                'visual': np.array(visuals_in),
                'location': np.array(locations_in)
            }
            net.blobs['classeme'].reshape(*blob['classeme'].shape)
            net.blobs['visual'].reshape(*blob['visual'].shape)
            net.blobs['location'].reshape(*blob['location'].shape)
        elif 'visual' in model_type:
            blob = {
                'visual': np.array(visuals_in),
            }
            net.blobs['visual'].reshape(*blob['visual'].shape)
        elif 'classeme' in model_type:
            blob = {
                'classeme': np.array(classemes_in),
            }

            net.blobs['classeme'].reshape(*blob['classeme'].shape)
        elif 'location' in model_type:
            blob = {'location': np.array(locations_in)}
            #batch this
            net.blobs['location'].reshape(*blob['location'].shape)
        if len(locations_in) == 0:
            rlp_confs = []
            sub_boxes = []
            obj_boxes = []
            rlp_labels = []
        else:
            net.forward_all(**blob)
            relation_score = net.blobs['relation_prob'].data.copy()
            argmax = np.argmax(relation_score, axis=1)
            rs = relation_score[np.arange(relation_score.shape[0]), argmax]
            rlp_labels = np.vstack((sub_cls_in, argmax, obj_cls_in)).T
            rlp_confs = np.array(sub_score_in) + np.array(rs) + np.array(
                obj_score_in)
        result.create_dataset(imid + '/rlp_confs',
                              dtype='float16',
                              data=np.array(rlp_confs).astype(np.float16))
        result.create_dataset(imid + '/sub_boxes',
                              dtype='float16',
                              data=np.array(sub_boxes).astype(np.float16))
        result.create_dataset(imid + '/obj_boxes',
                              dtype='float16',
                              data=np.array(obj_boxes).astype(np.float16))
        result.create_dataset(imid + '/rlp_labels',
                              dtype='float16',
                              data=np.array(rlp_labels).astype(np.float16))
Example #18
0
    def setup(self, bottom, top):
        self._cur_idx = 0
        self.rdata = sio.loadmat('data/meta/vrd/annotation_train.mat',
                                 struct_as_record=False,
                                 squeeze_me=True)
        self.meta = h5py.File('data/sg_vrd_meta.h5', 'r')
        self.gt_labels = {}
        if os.path.exists('output/cache/sg_vrd_gt.pkl'):
            self.gt_labels = zl.load('output/cache/sg_vrd_gt.pkl')
            glog.info('loaded gt data from cache')
        else:
            glog.info('Preloading gt')
            zl.tic()
            for k in self.meta['gt/train'].keys():
                rlp_labels = self.meta['gt/train/%s/rlp_labels' % k][...]
                sub_boxes = self.meta['gt/train/%s/sub_boxes' % k][...].astype(
                    np.float)
                obj_boxes = self.meta['gt/train/%s/obj_boxes' % k][...].astype(
                    np.float)
                if sub_boxes.shape[0] > 0:
                    zeros = np.zeros((sub_boxes.shape[0], 1), dtype=np.float)
                    # first index is always zero since we do one image by one image
                    sub_boxes = np.concatenate((zeros, sub_boxes), axis=1)
                    obj_boxes = np.concatenate((zeros, obj_boxes), axis=1)
                self.gt_labels[k] = {}
                self.gt_labels[k]['rlp_labels'] = rlp_labels
                self.gt_labels[k]['sub_boxes'] = sub_boxes
                self.gt_labels[k]['obj_boxes'] = obj_boxes
            glog.info('done preloading gt %f' % zl.toc())
        vgg_h5 = h5py.File("output/sg_vrd_2016_train_predicate_exp_train.hdf5",
                           'r', 'core')

        if os.path.exists('output/cache/sg_vrd_2016_train.pkl'):
            self.vgg_data = zl.load('output/cache/sg_vrd_2016_train.pkl')
            glog.info('loaded train data from cache')
        else:
            glog.info('Preloading training data')
            zl.tic()
            self.vgg_data = {}
            for k in vgg_h5.keys():
                sub_visual = vgg_h5[k]['sub_classeme'][...]
                obj_visual = vgg_h5[k]['obj_classeme'][...]
                pre_label = vgg_h5[k]['pre_label'][...]
                self.vgg_data[k] = {}
                self.vgg_data[k]['sub_visual'] = sub_visual
                self.vgg_data[k]['obj_visual'] = obj_visual
                self.vgg_data[k]['pre_label'] = pre_label
            glog.info('done preloading training data %f' % zl.toc())
            zl.save('output/cache/sg_vrd_2016_train.pkl', self.vgg_data)
            vgg_h5.close()
        self.meta = h5py.File('data/sg_vrd_meta.h5', 'r', 'core')
        layer_params = yaml.load(self.param_str)

        self._batch_size = layer_params['batch_size']
        self.train_data = []
        self._name_to_top_map = {}

        # data blob: holds a batch of N images, each with 3 channels
        # top[0].reshape(self._batch_size, 4096 * 2 )

        top[0].reshape(self._batch_size, 2 * 101)
        top[1].reshape(self._batch_size)
        # self._name_to_top_map['visual'] = 0
        # self._name_to_top_map['classeme'] = 0
        self._name_to_top_map['visual'] = 0
        # self._name_to_top_map['location'] = 1
        self._name_to_top_map['label'] = 1