Esempio n. 1
0
def test_edge_type_graph_crf_energy_lp_integral():
    # same test as for graph crf above, using single edge type
    crf = EdgeTypeGraphCRF(n_states=2, inference_method="lp", n_edge_types=1)
    inf_res, energy_lp = crf.inference((x_1, [g_1]), w_sym, relaxed=True, return_energy=True)
    # integral solution
    assert_array_almost_equal(np.max(inf_res[0], axis=-1), 1)
    y = np.argmax(inf_res[0], axis=-1)
    # energy and psi check out
    assert_almost_equal(energy_lp, -np.dot(w_sym, crf.psi((x_1, [g_1]), y)))
Esempio n. 2
0
def test_edge_type_graph_crf_energy_lp_relaxed():
    # same test as for graph crf above, using single edge type
    crf = EdgeTypeGraphCRF(n_states=2, inference_method="lp", n_edge_types=1)
    for i in xrange(10):
        w_ = np.random.uniform(size=w_sym.shape)
        inf_res, energy_lp = crf.inference((x_1, [g_1]), w_, relaxed=True, return_energy=True)
        assert_almost_equal(energy_lp, -np.dot(w_, crf.psi((x_1, [g_1]), inf_res)))

    # now with fractional solution
    x = np.array([[0, 0], [0, 0], [0, 0]])
    inf_res, energy_lp = crf.inference((x, [g_1]), w_sym, relaxed=True, return_energy=True)
    assert_almost_equal(energy_lp, -np.dot(w_sym, crf.psi((x, [g_1]), inf_res)))
Esempio n. 3
0
def test_edge_type_graph_crf():
    # create two samples with different graphs
    # two states only, pairwise smoothing

    # all edges are of the first type. should do the same as GraphCRF
    # if we make w symmetric
    for inference_method in get_installed(['qpbo', 'lp', 'ad3', 'dai', 'ogm']):
        crf = EdgeTypeGraphCRF(n_states=2, inference_method=inference_method,
                               n_edge_types=1)
        assert_array_equal(crf.inference((x_1, [g_1]), w_sym), y_1)
        assert_array_equal(crf.inference((x_2, [g_2]), w_sym), y_2)

    # same, only with two edge types and no edges of second type
    w_sym_ = np.array([1, 0,    # unary
                      0, 1,
                      .22, 0,  # pairwise
                      0, .22,
                      2, -1,   # second edge type, doesn't exist
                      -1, 3])
    for inference_method in get_installed(['qpbo', 'lp', 'ad3', 'dai', 'ogm']):
        crf = EdgeTypeGraphCRF(n_states=2, inference_method=inference_method,
                               n_edge_types=2)
        assert_array_equal(crf.inference((x_1,
                                          [g_1, np.zeros((0, 2),
                                                         dtype=np.int)]),
                                         w_sym_), y_1)
        assert_array_equal(crf.inference((x_2, [g_2, np.zeros((0, 2),
                                                              dtype=np.int)]),
                                         w_sym_), y_2)

    print crf.get_pairwise_potentials((x_2, [g_2, np.zeros((0, 2),
                                                           dtype=np.int)]),
                                      w_sym_)
Esempio n. 4
0
def test_edge_type_graph_crf():
    # create two samples with different graphs
    # two states only, pairwise smoothing

    # all edges are of the first type. should do the same as GraphCRF
    # if we make w symmetric
    for inference_method in ["qpbo", "lp", "ad3", "dai"]:
        crf = EdgeTypeGraphCRF(n_states=2, inference_method=inference_method, n_edge_types=1)
        assert_array_equal(crf.inference((x_1, [g_1]), w_sym), y_1)
        assert_array_equal(crf.inference((x_2, [g_2]), w_sym), y_2)

    # same, only with two edge types and no edges of second type
    w_sym_ = np.array(
        [1, 0, 0, 1, 0.22, 0, 0, 0.22, 2, -1, -1, 3]  # unary  # pairwise  # second edge type, doesn't exist
    )
    for inference_method in ["qpbo", "lp", "ad3", "dai"]:
        crf = EdgeTypeGraphCRF(n_states=2, inference_method=inference_method, n_edge_types=2)
        assert_array_equal(crf.inference((x_1, [g_1, np.zeros((0, 2), dtype=np.int)]), w_sym_), y_1)
        assert_array_equal(crf.inference((x_2, [g_2, np.zeros((0, 2), dtype=np.int)]), w_sym_), y_2)
Esempio n. 5
0
 def loss_augmented_inference(self, x, y, w, relaxed=False,
                              return_energy=False):
     y_hat = EdgeTypeGraphCRF.loss_augmented_inference(
         self, x, y.ravel(), w, relaxed=relaxed,
         return_energy=return_energy)
     return self._reshape_y(y_hat, x[0].shape[0], return_energy)
Esempio n. 6
0
 def inference(self, x, w, relaxed=False, return_energy=False):
     y = EdgeTypeGraphCRF.inference(self, x, w, relaxed=relaxed,
                                    return_energy=return_energy)
     return self._reshape_y(y, x[0].shape[0], return_energy)