def gpu_task(prototxt, caffemodel, layer, path_images, out, gpu=0):
    try:
        num_images = len(path_images)
        h5f = h5py.File(out, 'w')

        # set gpu card
        caffe.set_device(gpu)
        caffe.set_mode_gpu()

        # init NN
        net = caffe.Net(prototxt, caffemodel, caffe.TEST)
        net.forward()

        features = []
        image_names = []
        for i, path in enumerate(path_images):
            print "%d(%d), %s"%((i+1), num_images, os.path.basename(path))
            d = opencv_format_img_for_vgg(path, True)
            feat = extract_fc_features(net, layer, d)
            #features.append(feat.tolist())
            features.append(np.array(feat))
            image_names.append(os.path.basename(path))
        features = np.array(features)
        h5f['feats'] = features
        h5f['names'] = image_names
        h5f.close()
        print "gpu %d task has finished..." % (int(gpu))
    except:
        import traceback
        traceback.print_exc()
        raise
Example #2
0
def query_images(groundtruth_dir, image_dir, dataset, cropped=True):
    imgs = []
    query_names = []
    fake_query_names = []
    feats_crop = []

    modelDir = "./fc_retrieval/model"
    MODEL = "nueral.caffemodel"
    PROTO = "deploy.prototxt"
    caffemodel = os.path.join(modelDir, MODEL)
    prototxt = os.path.join(modelDir, PROTO)

    # set gpu card
    layer = 'fc6'
    caffe.set_device(7)
    caffe.set_mode_gpu()
    # init NN
    net = caffe.Net(prototxt, caffemodel, caffe.TEST)
    net.forward()

    for f in glob.iglob(os.path.join(groundtruth_dir, '*_query.txt')):
        fake_query_name = os.path.splitext(os.path.basename(f))[0].replace(
            '_query', '')
        fake_query_names.append(fake_query_name)

        query_name, x, y, w, h = open(f).read().strip().split(' ')

        if dataset == 'oxford':
            query_name = query_name.replace('oxc1_', '')
            query_names.append('%s.jpg' % query_name)
        img = cv2.imread(os.path.join(image_dir, '%s.jpg' % query_name),
                         1)  # BGR

        if cropped:
            x, y, w, h = map(float, (x, y, w, h))
            x, y, w, h = map(lambda d: int(round(d)), (x, y, w, h))
        else:
            x, y, w, h = (0, 0, img.shape[1], img.shape[0])
        img = img[y:y + h, x:x + w]
        img = cv2.resize(img, (224, 224), interpolation=cv2.INTER_LINEAR)
        d = np.float32(img)
        # VggNet
        d -= np.array((104.00698793, 116.66876762, 122.67891434))
        d = d.transpose((2, 0, 1))
        feat = extract_fc_features(net, layer, d)
        # L2-normalize feature
        feat = normalize(feat, copy=False)
        #feats_crop.append(feat.tolist())
        feats_crop.append(np.array(feat))
        imgs.append(img)
    return imgs, feats_crop, query_names, fake_query_names