示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
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)