def test_rpn_hog(): """ HOG+RPN for panel label recognition :return: """ parser = OptionParser() parser.add_option("-p", "--path", dest="test_path", help="Path to test data.", default='/Users/jie/projects/PanelSeg/ExpPython/eval.txt') parser.add_option("-n", "--num_rois", type="int", dest="num_rois", help="Number of ROIs per iteration. Higher means more memory use.", default=32) parser.add_option("--config_filename", dest="config_filename", help="Location to read the metadata related to the training (generated when training).", default="config.pickle") parser.add_option("--network", dest="network", help="Base network to use. Supports nn_cnn_3_layer.", default='nn_cnn_3_layer') parser.add_option("--rpn_weight_path", dest="rpn_weight_path", default='./model_rpn.hdf5') # default='/Users/jie/projects/PanelSeg/ExpPython/models/label+bg_rpn_3_layer_color-0.0374.hdf5') parser.add_option("--classify_model_path", dest="classify_model_path", default='/Users/jie/projects/PanelSeg/ExpPython/models/label50+bg_cnn_3_layer_color-0.9910.h5') parser.add_option("--result_folder", dest="result_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/rpn_cpu_0.116') (options, args) = parser.parse_args() if not options.test_path: # if filename is not given parser.error('Error: path to test data must be specified. Pass --path to command line') rpn_c, rpn_model_rpn, rpn_model_classifier, hog = rpn_hog_initialize(options) with open(options.test_path) as f: lines = f.readlines() for idx, filepath in enumerate(lines): print(str(idx) + ': ' + filepath) # if 'PMC3664797_gkt198f2p' not in filepath: # continue # if idx < 243: # continue filepath = filepath.strip() figure = Figure(filepath) figure.load_image() st = time.time() figure.fg_rois, figure.fg_scores, figure.fg_labels = rpn_hog_detect(figure, rpn_c, rpn_model_rpn, rpn_model_classifier, hog, RPN_ONLY) print('Elapsed time = {}'.format(time.time() - st)) # Save detection results figure.save_annotation(options.result_folder)
def test_lstm(): parser = OptionParser() parser.add_option("--eval_path", dest="eval_path", help="Path to eval data.", default='/Users/jie/projects/PanelSeg/ExpPython/eval.txt') parser.add_option("--eval_auto_folder", dest="eval_auto_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/rpn') parser.add_option("--classify_model_path", dest="classify_model_path", default='/Users/jie/projects/PanelSeg/ExpPython/models/label50+bg_cnn_3_layer_color-0.9910.h5') # parser.add_option("--svm_model_path", dest="svm_model_path", # default='/Users/jie/projects/PanelSeg/Exp/LabelClassifySvmTrain/SVMModel-51classes-with-neg/svm_model_rbf_8.0_0.125') parser.add_option("--lstm_model_path", dest="lstm_model_path", default='/Users/jie/projects/PanelSeg/ExpPython/models/lstm_model_train_0.25eval_epoch_9.h5') parser.add_option("--result_folder", dest="result_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog_lstm/eval') (options, args) = parser.parse_args() # model_classifier = load_model(options.classify_model_path) # model_classifier.summary() # model_svm = svmutil.svm_load_model(options.svm_model_path) model_svm = None model_lstm = load_model(options.lstm_model_path) model_lstm.summary() with open(options.eval_path) as f: lines = f.readlines() for idx, filepath in enumerate(lines): print(str(idx) + ': ' + filepath) # if '1757-1626-0002-0000008402-001' not in filepath: # continue # if idx < 37: # continue filepath = filepath.strip() figure = Figure(filepath) figure.load_image() st = time.time() # load detection results by RPN rois = load_auto_annotation(figure, options.eval_auto_folder) # sort auto annotation with respect to distances to left-up corner (0, 0) distances = [roi[0] + roi[1] for roi in rois] indexes = np.argsort(distances) rois = rois[indexes] x = feature_extraction(figure, rois) if rois.size == 0: figure.fg_rois, figure.fg_scores, figure.fg_labels = None, None, None else: # x = x.tolist() # y = np.zeros(len(x)).tolist() # p_label, p_acc, p_val = svmutil.svm_predict(y, x, model_svm, '-b 1') # x = np.array(p_val) _x = np.expand_dims(x, axis=0) y_hat = model_lstm.predict(_x) # figure.fg_rois, figure.fg_scores, figure.fg_labels = max_y_hat(rois, y_hat[0]) figure.fg_rois, figure.fg_scores, figure.fg_labels = beam_search_with_neg(rois, y_hat[0], 5) print('Elapsed time = {}'.format(time.time() - st)) # Save detection results figure.save_annotation(options.result_folder)
def combine_hog_rpn(): """ Load results from HOG and RPN methods and then combine them :return: """ parser = OptionParser() parser.add_option("-p", "--path", dest="test_path", help="Path to test data.", default='/Users/jie/projects/PanelSeg/ExpPython/eval.txt') parser.add_option("--hog_folder", dest="hog_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/hog') parser.add_option("--rpn_folder", dest="rpn_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/rpn_cpu_0.0374') parser.add_option("--result_folder", dest="result_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/hog_rpn') (options, args) = parser.parse_args() with open(options.test_path) as f: lines = f.readlines() for idx, filepath in enumerate(lines): print(str(idx) + ': ' + filepath) # if 'PMC3664797_gkt198f2p' not in filepath: # continue # if idx < 243: # continue filepath = filepath.strip() figure = Figure(filepath) figure.load_image() # Load HOG result hog_file_path = os.path.join(options.hog_folder, figure.file).replace('.jpg', '_data.xml') figure.load_annotation(hog_file_path) hog_rois = np.empty([len(figure.panels), 4], dtype=int) for i in range(len(figure.panels)): hog_rois[i] = figure.panels[i].label_rect hog_rois[:, 0] += Figure.PADDING hog_rois[:, 1] += Figure.PADDING hog_labels = np.full(hog_rois.shape[0], Panel.LABEL_ALL) hog_scores = np.full(hog_rois.shape[0], 1.0) # Load RPN result rpn_file_path = os.path.join(options.rpn_folder, figure.file).replace('.jpg', '_data.xml') figure.load_annotation(rpn_file_path) rpn_rois = np.empty([len(figure.panels), 4], dtype=int) for i in range(len(figure.panels)): rpn_rois[i] = figure.panels[i].label_rect rpn_rois[:, 0] += Figure.PADDING rpn_rois[:, 1] += Figure.PADDING rpn_labels = np.full(rpn_rois.shape[0], Panel.LABEL_ALL) rpn_scores = np.full(rpn_rois.shape[0], 1.0) # Keep all regions detected by both RPN and HOG methods. # rois, scores, labels = rpn_hog_combine_all(hog_rois, hog_scores, hog_labels, rpn_rois, rpn_scores, rpn_labels) # Keep only regions agreed by both methods. IOU > 25% rois, scores, labels = rpn_hog_combine_agreed(hog_rois, hog_scores, hog_labels, rpn_rois, rpn_scores, rpn_labels, 0.125) figure.fg_rois, figure.fg_scores, figure.fg_labels = rois, scores, labels # Save detection results figure.save_annotation(options.result_folder)
def test_lstm(): parser = OptionParser() parser.add_option( "--eval_path", dest="eval_path", help="Path to eval data.", default='/Users/jie/projects/PanelSeg/ExpPython/eval.txt') parser.add_option( "--eval_auto_folder", dest="eval_auto_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/rpn') parser.add_option( "--classify_model_path", dest="classify_model_path", default= '/Users/jie/projects/PanelSeg/ExpPython/models/label50+bg_cnn_3_layer_color-0.9910.h5' ) # parser.add_option("--svm_model_path", dest="svm_model_path", # default='/Users/jie/projects/PanelSeg/Exp/LabelClassifySvmTrain/SVMModel-51classes-with-neg/svm_model_rbf_8.0_0.125') parser.add_option( "--lstm_model_path", dest="lstm_model_path", default= '/Users/jie/projects/PanelSeg/ExpPython/models/lstm_model_train_0.25eval_epoch_9.h5' ) parser.add_option( "--result_folder", dest="result_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog_lstm/eval' ) (options, args) = parser.parse_args() # model_classifier = load_model(options.classify_model_path) # model_classifier.summary() # model_svm = svmutil.svm_load_model(options.svm_model_path) model_svm = None model_lstm = load_model(options.lstm_model_path) model_lstm.summary() with open(options.eval_path) as f: lines = f.readlines() for idx, filepath in enumerate(lines): print(str(idx) + ': ' + filepath) # if '1757-1626-0002-0000008402-001' not in filepath: # continue # if idx < 37: # continue filepath = filepath.strip() figure = Figure(filepath) figure.load_image() st = time.time() # load detection results by RPN rois = load_auto_annotation(figure, options.eval_auto_folder) # sort auto annotation with respect to distances to left-up corner (0, 0) distances = [roi[0] + roi[1] for roi in rois] indexes = np.argsort(distances) rois = rois[indexes] x = feature_extraction(figure, rois) if rois.size == 0: figure.fg_rois, figure.fg_scores, figure.fg_labels = None, None, None else: # x = x.tolist() # y = np.zeros(len(x)).tolist() # p_label, p_acc, p_val = svmutil.svm_predict(y, x, model_svm, '-b 1') # x = np.array(p_val) _x = np.expand_dims(x, axis=0) y_hat = model_lstm.predict(_x) # figure.fg_rois, figure.fg_scores, figure.fg_labels = max_y_hat(rois, y_hat[0]) figure.fg_rois, figure.fg_scores, figure.fg_labels = beam_search_with_neg( rois, y_hat[0], 5) print('Elapsed time = {}'.format(time.time() - st)) # Save detection results figure.save_annotation(options.result_folder)
def combine_hog_rpn(): """ Load results from HOG and RPN methods and then combine them :return: """ parser = OptionParser() parser.add_option( "-p", "--path", dest="test_path", help="Path to test data.", default='/Users/jie/projects/PanelSeg/ExpPython/eval.txt') parser.add_option( "--hog_folder", dest="hog_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/hog') parser.add_option( "--rpn_folder", dest="rpn_folder", default= '/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/rpn_cpu_0.0374') parser.add_option( "--result_folder", dest="result_folder", default='/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/hog_rpn') (options, args) = parser.parse_args() with open(options.test_path) as f: lines = f.readlines() for idx, filepath in enumerate(lines): print(str(idx) + ': ' + filepath) # if 'PMC3664797_gkt198f2p' not in filepath: # continue # if idx < 243: # continue filepath = filepath.strip() figure = Figure(filepath) figure.load_image() # Load HOG result hog_file_path = os.path.join(options.hog_folder, figure.file).replace('.jpg', '_data.xml') figure.load_annotation(hog_file_path) hog_rois = np.empty([len(figure.panels), 4], dtype=int) for i in range(len(figure.panels)): hog_rois[i] = figure.panels[i].label_rect hog_rois[:, 0] += Figure.PADDING hog_rois[:, 1] += Figure.PADDING hog_labels = np.full(hog_rois.shape[0], Panel.LABEL_ALL) hog_scores = np.full(hog_rois.shape[0], 1.0) # Load RPN result rpn_file_path = os.path.join(options.rpn_folder, figure.file).replace('.jpg', '_data.xml') figure.load_annotation(rpn_file_path) rpn_rois = np.empty([len(figure.panels), 4], dtype=int) for i in range(len(figure.panels)): rpn_rois[i] = figure.panels[i].label_rect rpn_rois[:, 0] += Figure.PADDING rpn_rois[:, 1] += Figure.PADDING rpn_labels = np.full(rpn_rois.shape[0], Panel.LABEL_ALL) rpn_scores = np.full(rpn_rois.shape[0], 1.0) # Keep all regions detected by both RPN and HOG methods. # rois, scores, labels = rpn_hog_combine_all(hog_rois, hog_scores, hog_labels, rpn_rois, rpn_scores, rpn_labels) # Keep only regions agreed by both methods. IOU > 25% rois, scores, labels = rpn_hog_combine_agreed(hog_rois, hog_scores, hog_labels, rpn_rois, rpn_scores, rpn_labels, 0.125) figure.fg_rois, figure.fg_scores, figure.fg_labels = rois, scores, labels # Save detection results figure.save_annotation(options.result_folder)
def test_rpn_hog(): """ HOG+RPN for panel label recognition :return: """ parser = OptionParser() parser.add_option( "-p", "--path", dest="test_path", help="Path to test data.", default='/Users/jie/projects/PanelSeg/ExpPython/eval.txt') parser.add_option( "-n", "--num_rois", type="int", dest="num_rois", help="Number of ROIs per iteration. Higher means more memory use.", default=32) parser.add_option( "--config_filename", dest="config_filename", help= "Location to read the metadata related to the training (generated when training).", default="config.pickle") parser.add_option("--network", dest="network", help="Base network to use. Supports nn_cnn_3_layer.", default='nn_cnn_3_layer') parser.add_option("--rpn_weight_path", dest="rpn_weight_path", default='./model_rpn.hdf5') # default='/Users/jie/projects/PanelSeg/ExpPython/models/label+bg_rpn_3_layer_color-0.0374.hdf5') parser.add_option( "--classify_model_path", dest="classify_model_path", default= '/Users/jie/projects/PanelSeg/ExpPython/models/label50+bg_cnn_3_layer_color-0.9910.h5' ) parser.add_option( "--result_folder", dest="result_folder", default= '/Users/jie/projects/PanelSeg/ExpPython/eval/rpn_hog/rpn_cpu_0.116') (options, args) = parser.parse_args() if not options.test_path: # if filename is not given parser.error( 'Error: path to test data must be specified. Pass --path to command line' ) rpn_c, rpn_model_rpn, rpn_model_classifier, hog = rpn_hog_initialize( options) with open(options.test_path) as f: lines = f.readlines() for idx, filepath in enumerate(lines): print(str(idx) + ': ' + filepath) # if 'PMC3664797_gkt198f2p' not in filepath: # continue # if idx < 243: # continue filepath = filepath.strip() figure = Figure(filepath) figure.load_image() st = time.time() figure.fg_rois, figure.fg_scores, figure.fg_labels = rpn_hog_detect( figure, rpn_c, rpn_model_rpn, rpn_model_classifier, hog, RPN_ONLY) print('Elapsed time = {}'.format(time.time() - st)) # Save detection results figure.save_annotation(options.result_folder)