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)
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)