コード例 #1
0
def batch_predict(configfile, targets):

    config = ConfigParser.ConfigParser()
    config.read(configfile)

    model_name = config.get("net", "net")
    model_def = os.path.join(model_dir, "%s.prototxt" % model_name)
    pretrained = os.path.join(model_dir, "%s.caffemodel" % model_name)
    mean = config.get("net", "mean")
    dim = int(config.get("net", "image_dim"))
    raw_scale = int(config.get("net", "raw_scale"))

    net = caffe.Classifier(model_def, pretrained, channel_swap=(2,1,0), mean=np.load(mean), raw_scale=raw_scale, image_dims=(dim, dim), batch=1)
    caffe.set_phase_test()
    caffe.set_mode_gpu()

    net2 = caffe.Net(config.get("train", "target_test"), config.get("train", "target_model"), 1)
    with open(config.get("train", "target_list"), "rb") as f:
        reverse_index = pickle.load(f)

    layer_name = config.get("train", "target_layer")
   
    count = 0
    exec_times = []
    prepare_times = []
    for cur_idx, image_path in enumerate(targets):
        im = caffe.io.load_image(image_path)
        tic = time.time() 
        prepared = face_input_prepare_n(net, [im], False)
        out = net.forward(end=layer_name, **{net.inputs[0]: prepared})
        out2 = net2.forward_all(**{net2.inputs[0]: out[layer_name]})[net2.outputs[0]]
        toc = time.time()
        exec_times += [(toc - tic)]
        i = out2[0].argmax()
        if i == len(reverse_index):
            print -1
        else:
            print reverse_index[i]

    print 'Execution time(ms) mean:', np.mean(exec_times),'std:', np.std(exec_times, ddof = 1)
コード例 #2
0
def batch_predict_accuracy(configfile, net, net2, video_name, _vgg_data, turker_labels):

    config = ConfigParser.ConfigParser()
    config.read(configfile)

    layer_name = config.get("train", "target_layer")
    with open(config.get("train", "target_list"), "rb") as f:
        reverse_index = pickle.load(f)

    wnidtotrace = wnid_traces_dict()
    wptownid = word_prefix_to_wnid_dict()
    wnidtolabel = wnid_to_label_dict()
    # get the ancestors the word
    label_to_trace = {}
    for target_label in reverse_index:
        caffe_wnid = getwnid(target_label)
        trace = wnidtotrace[caffe_wnid]
        label_to_trace[target_label] = trace

    ## Finish loading necessary models ##
    print label_to_trace    
    top_5_vgg_count = 0
    top_1_vgg_count = 0
    top_1_sp_count = 0
    exec_time = []
    for keyframe_name in turker_labels:
        keyframe_path = os.path.join('/mnt/frames/', video_name, keyframe_name)
        
        # get accuracy for vgg
        vgg_data = filter(lambda x: int(x['img_path'].split('/')[-1].split('.')[0]) == int(keyframe_name.split('.')[0]), _vgg_data)
        vgg_words = vgg_data[0]['pred']['text']
   
        # get vgg_word trace
        top_1_vgg_labels = []
        top_5_vgg_labels = []
        for k, w in enumerate(vgg_words):
            wnid = wptownid[w]

            label = wnidtolabel[wnid]
            if not (label in reverse_index):
                label = -1
             
            if k == 0:
                top_1_vgg_labels += [label]
            
            top_5_vgg_labels += [label]

        #print vgg_words
        #print turker_labels[keyframe_name]
        #print top_1_vgg_labels
        #print top_5_vgg_labels
        vgg_top1_is_match = is_match_splabel(top_1_vgg_labels, label_to_trace, reverse_index, turker_labels[keyframe_name])

        vgg_top5_is_match = is_match_splabel(top_5_vgg_labels, label_to_trace, reverse_index, turker_labels[keyframe_name])

        if vgg_top1_is_match:
            top_1_vgg_count += 1

        if vgg_top5_is_match:
            top_5_vgg_count += 1

        #print turker_labels[keyframe_name]
        #print 'top_5_vgg:', top_5_vgg_trace
        #print 'top_1_vgg:', top_1_vgg_trace
        
        # predict using specialized
        im = caffe.io.load_image(keyframe_path)
        layer_name = config.get("train", "target_layer")
        tic = time.time()
        prepared = face_input_prepare_n(net, [im], False)
        out = net.forward(end=layer_name, **{net.inputs[0]: prepared})
        out2 = net2.forward_all(**{net2.inputs[0]: out[layer_name]})[net2.outputs[0]]
        toc = time.time()
        exec_time += [toc - tic]
        i = out2[0].argmax()

        sp_labels = []
        if i == len(reverse_index):
            sp_labels += [-1]
        else:
            sp_labels += [reverse_index[i]]

        #print sp_labels
        sp_top1_is_match = is_match_splabel(sp_labels, label_to_trace, reverse_index, turker_labels[keyframe_name]) 

        print vgg_top1_is_match, vgg_top5_is_match, sp_top1_is_match        
        if sp_top1_is_match:
            top_1_sp_count += 1
        #print vgg_top1_is_match, vgg_top5_is_match, sp_top1_is_match
    print 'Top 5 vgg:', top_5_vgg_count/(len(turker_labels) * 1.0)         
    print 'Top 1 vgg:', top_1_vgg_count/(len(turker_labels) * 1.0)         
    print 'Top 1 sp:', top_1_sp_count/(len(turker_labels) * 1.0)
    print 'SP exec time (ms):', np.mean(exec_time) * 1000, '+-', np.std(exec_time, ddof = 1)  * 1000
    return top_5_vgg_count, top_1_vgg_count, top_1_sp_count, len(turker_labels)