def intra_encounter_matching(): import numpy as np from scipy.sparse import coo_matrix, csgraph qreq_, cm_list = testdata_workflow() # qaids = [cm.qaid for cm in cm_list] # top_aids = [cm.get_top_aids(5) for cm in cm_list] aid_pairs = np.array([(cm.qaid, daid) for cm in cm_list for daid in cm.get_top_aids(5)]) top_scores = ut.flatten([cm.get_top_scores(5) for cm in cm_list]) N = aid_pairs.max() + 1 mat = coo_matrix((top_scores, aid_pairs.T), shape=(N, N)) csgraph.connected_components(mat) tree = csgraph.minimum_spanning_tree(mat) # NOQA import plottool as pt dense = mat.todense() pt.imshow(dense / dense.max() * 255) pt.show_if_requested() # baseline jobid import opengm # https://github.com/opengm/opengm/blob/master/src/interfaces/python/examples/tutorial/OpenGM%20tutorial.ipynb numVar = 10 unaries = np.ones([numVar, 3], dtype=opengm.value_type) gm = opengm.gm(np.ones(numVar, dtype=opengm.label_type) * 3) unary_fids = gm.addFunctions(unaries) gm.addFactors(unary_fids, np.arange(numVar)) infParam = opengm.InfParam( workflow=ut.ensure_ascii('(IC)(TTC-I,CC-I)'), ) inf = opengm.inference.Multicut(gm, parameter=infParam) visitor = inf.verboseVisitor(printNth=1, multiline=False) inf.infer(visitor) arg = inf.arg() # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) # regularizer = opengm.pottsFunction([3, 3], 0.0, beta) # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) unaries = np.random.rand(10, 10, 2) potts = opengm.PottsFunction([2, 2], 0.0, 0.4) gm = opengm.grid2d2Order(unaries=unaries, regularizer=potts) inf = opengm.inference.GraphCut(gm) inf.infer() arg = inf.arg() # NOQA """
def intra_encounter_matching(): import numpy as np from scipy.sparse import coo_matrix, csgraph qreq_, cm_list = testdata_workflow() # qaids = [cm.qaid for cm in cm_list] # top_aids = [cm.get_top_aids(5) for cm in cm_list] aid_pairs = np.array([(cm.qaid, daid) for cm in cm_list for daid in cm.get_top_aids(5)]) top_scores = ut.flatten([cm.get_top_scores(5) for cm in cm_list]) N = aid_pairs.max() + 1 mat = coo_matrix((top_scores, aid_pairs.T), shape=(N, N)) csgraph.connected_components(mat) tree = csgraph.minimum_spanning_tree(mat) # NOQA import plottool as pt dense = mat.todense() pt.imshow(dense / dense.max() * 255) pt.show_if_requested() # baseline jobid import opengm # https://github.com/opengm/opengm/blob/master/src/interfaces/python/examples/tutorial/OpenGM%20tutorial.ipynb numVar = 10 unaries = np.ones([numVar, 3], dtype=opengm.value_type) gm = opengm.gm(np.ones(numVar, dtype=opengm.label_type) * 3) unary_fids = gm.addFunctions(unaries) gm.addFactors(unary_fids, np.arange(numVar)) infParam = opengm.InfParam(workflow=ut.ensure_ascii('(IC)(TTC-I,CC-I)'), ) inf = opengm.inference.Multicut(gm, parameter=infParam) visitor = inf.verboseVisitor(printNth=1, multiline=False) inf.infer(visitor) arg = inf.arg() # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) # regularizer = opengm.pottsFunction([3, 3], 0.0, beta) # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) unaries = np.random.rand(10, 10, 2) potts = opengm.PottsFunction([2, 2], 0.0, 0.4) gm = opengm.grid2d2Order(unaries=unaries, regularizer=potts) inf = opengm.inference.GraphCut(gm) inf.infer() arg = inf.arg() # NOQA """
import opengm import numpy #--------------------------------------------------------------- # MinSum with SelfFusion #--------------------------------------------------------------- numpy.random.seed(42) n=100 nl=100 unaries=numpy.random.rand(n , n, nl) potts=opengm.PottsFunction([nl,nl],0.0,0.5) gm=opengm.grid2d2Order(unaries=unaries,regularizer=potts) #--------------------------------------------------------------- # Minimize #--------------------------------------------------------------- #get an instance of the optimizer / inference-algorithm infParam = opengm.InfParam( generator='trws' ) inf=opengm.inference.SelfFusion(gm,parameter=infParam) # start inference (in this case verbose infernce) visitor=inf.verboseVisitor(printNth=1,multiline=True) inf.infer(visitor) # get the result states argmin=inf.arg() # print the argmin (on the grid) print argmin.reshape(n,n)
def crftest(): """ pip install pyqpbo pip install pystruct http://taku910.github.io/crfpp/#install cd ~/tmp #wget https://drive.google.com/folderview?id=0B4y35FiV1wh7fngteFhHQUN2Y1B5eUJBNHZUemJYQV9VWlBUb3JlX0xBdWVZTWtSbVBneU0&usp=drive_web#list 7z x CRF++-0.58.tar.gz 7z x CRF++-0.58.tar cd CRF++-0.58 chmod +x configure ./configure make """ import pystruct import pystruct.models inference_method_options = ['lp', 'max-product'] inference_method = inference_method_options[1] # graph = pystruct.models.GraphCRF( # n_states=None, # n_features=None, # inference_method=inference_method, # class_weight=None, # directed=False, # ) num_annots = 5 num_names = num_annots aids = np.arange(5) rng = np.random.RandomState(0) hidden_nids = rng.randint(0, num_names, num_annots) unique_nids, groupxs = ut.group_indices(hidden_nids) # Indicator vector indicating the name node_features = np.zeros((num_annots, num_names)) node_features[(aids, hidden_nids)] = 1 toy_params = {True: {'mu': 1.0, 'sigma': 2.2}, False: {'mu': 7.0, 'sigma': 0.9}} if False: import vtool as vt import wbia.plottool as pt pt.ensureqt() xdata = np.linspace(0, 100, 1000) tp_pdf = vt.gauss_func1d(xdata, **toy_params[True]) fp_pdf = vt.gauss_func1d(xdata, **toy_params[False]) pt.plot_probabilities([tp_pdf, fp_pdf], ['TP', 'TF'], xdata=xdata) def metric(aidx1, aidx2, hidden_nids=hidden_nids, toy_params=toy_params): if aidx1 == aidx2: return 0 rng = np.random.RandomState(int(aidx1 + aidx2)) same = hidden_nids[int(aidx1)] == hidden_nids[int(aidx2)] mu, sigma = ut.dict_take(toy_params[same], ['mu', 'sigma']) return np.clip(rng.normal(mu, sigma), 0, np.inf) pairwise_aidxs = list(ut.iprod(range(num_annots), range(num_annots))) pairwise_labels = np.array( # NOQA [hidden_nids[a1] == hidden_nids[a2] for a1, a2 in pairwise_aidxs] ) pairwise_scores = np.array([metric(*zz) for zz in pairwise_aidxs]) pairwise_scores_mat = pairwise_scores.reshape(num_annots, num_annots) # NOQA graph = pystruct.models.EdgeFeatureGraphCRF( # NOQA n_states=num_annots, n_features=num_names, n_edge_features=1, inference_method=inference_method, ) import opengm numVar = 10 unaries = np.ones([numVar, 3], dtype=opengm.value_type) gm = opengm.gm(np.ones(numVar, dtype=opengm.label_type) * 3) unary_fids = gm.addFunctions(unaries) gm.addFactors(unary_fids, np.arange(numVar)) infParam = opengm.InfParam(workflow=ut.ensure_ascii('(IC)(TTC-I,CC-I)')) inf = opengm.inference.Multicut(gm, parameter=infParam) visitor = inf.verboseVisitor(printNth=1, multiline=False) inf.infer(visitor) arg = inf.arg() # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) # regularizer = opengm.pottsFunction([3, 3], 0.0, beta) # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) unaries = np.random.rand(10, 10, 2) potts = opengm.PottsFunction([2, 2], 0.0, 0.4) gm = opengm.grid2d2Order(unaries=unaries, regularizer=potts) inf = opengm.inference.GraphCut(gm) inf.infer() arg = inf.arg() # NOQA
img=vigra.impex.readImage('118035.jpg') shape=img.shape imgLab=vigra.colors.transform_RGB2Lab(img) shape=(shape[0]*resizeFactor,shape[1]*resizeFactor) imgLab=vigra.sampling.resize(imgLab, shape,order=3) gradMag=vigra.filters.gaussianGradientMagnitude(imgLab,gradScale) unaries=numpy.zeros([shape[0],shape[1],2]) unaries[:,:,1]=numpy.exp(-1.0*gradMag[:,:,0]*sigma) unaries[:,:,0]=1.0-unaries[:,:,1] regularizer=opengm.PottsFunction(2,2,0.0,energyNotEqual) gm=opengm.grid2d2Order(unaries=unaries,regularizer=regularizer,order='numpy',operator='adder') inf=opengm.Inference(gm,alg='gc',impl='k') inf.infer() argmin=inf.arg().reshape(shape[0:2]) plt.figure(1) ax=plt.subplot(2,1,1) plt.imshow(unaries[:,:,1].T, interpolation="nearest") plt.set_cmap(cm.copper) plt.colorbar() ax.set_title('costs / unaries label=1') ax=plt.subplot(2,1,2) plt.imshow(argmin.T, interpolation="nearest")
import opengm import numpy #--------------------------------------------------------------- # MinSum with ICM #--------------------------------------------------------------- n = 10 nl = 10 unaries = numpy.random.rand(n, n, nl) potts = opengm.PottsFunction([nl, nl], 0.0, 0.05) gm = opengm.grid2d2Order(unaries=unaries, regularizer=potts) #--------------------------------------------------------------- # Minimize #--------------------------------------------------------------- #get an instance of the optimizer / inference-algorithm inf = opengm.inference.Icm(gm) # start inference (in this case verbose infernce) visitor = inf.verboseVisitor(printNth=10000, multiline=True) inf.infer(visitor) # get the result states argmin = inf.arg() # print the argmin (on the grid) print argmin.reshape(n, n)
shape=[3,3] numVar=shape[0]*shape[1] img=numpy.random.rand(shape[0],shape[1])*255.0 # unaries img1d=img.reshape(numVar) lrange=numpy.arange(0,256,1) unaries=numpy.repeat(lrange[:,numpy.newaxis], numVar, 1).T for l in xrange(256): unaries[:,l]=numpy.abs(img1d-l) unaries=unaries.reshape(shape+[256]) # higher order function def regularizer(labels): val=abs(float(labels[0])-float(labels[1])) return val*0.2 print "generate 2d grid gm" regularizer=opengm.PythonFunction(function=regularizer,shape=[256,256]) print "unaries shape ",unaries.shape print "reg shape ",regularizer.shape gm=opengm.grid2d2Order(unaries,regularizer=regularizer) icm=opengm.inference.Icm(gm) #icm.infer() arg=icm.arg() arg=arg.reshape(shape) print arg
img = vigra.impex.readImage('118035.jpg') shape = img.shape imgLab = vigra.colors.transform_RGB2Lab(img) shape = (shape[0] * resizeFactor, shape[1] * resizeFactor) imgLab = vigra.sampling.resize(imgLab, shape, order=3) gradMag = vigra.filters.gaussianGradientMagnitude(imgLab, gradScale) unaries = numpy.zeros([shape[0], shape[1], 2]) unaries[:, :, 1] = numpy.exp(-1.0 * gradMag[:, :, 0] * sigma) unaries[:, :, 0] = 1.0 - unaries[:, :, 1] regularizer = opengm.PottsFunction(2, 2, 0.0, energyNotEqual) gm = opengm.grid2d2Order(unaries=unaries, regularizer=regularizer, order='numpy', operator='adder') inf = opengm.inference.GraphCut(gm) inf.infer() argmin = inf.arg().reshape(shape[0:2]) plt.figure(1) ax = plt.subplot(2, 1, 1) plt.imshow(unaries[:, :, 1].T, interpolation="nearest") plt.set_cmap(cm.copper) plt.colorbar() ax.set_title('costs / unaries label=1') ax = plt.subplot(2, 1, 2) plt.imshow(argmin.T, interpolation="nearest")
def crftest(): """ pip install pyqpbo pip install pystruct http://taku910.github.io/crfpp/#install cd ~/tmp #wget https://drive.google.com/folderview?id=0B4y35FiV1wh7fngteFhHQUN2Y1B5eUJBNHZUemJYQV9VWlBUb3JlX0xBdWVZTWtSbVBneU0&usp=drive_web#list 7z x CRF++-0.58.tar.gz 7z x CRF++-0.58.tar cd CRF++-0.58 chmod +x configure ./configure make """ import pystruct import pystruct.models inference_method_options = ['lp', 'max-product'] inference_method = inference_method_options[1] #graph = pystruct.models.GraphCRF( # n_states=None, # n_features=None, # inference_method=inference_method, # class_weight=None, # directed=False, #) num_annots = 5 num_names = num_annots aids = np.arange(5) rng = np.random.RandomState(0) hidden_nids = rng.randint(0, num_names, num_annots) unique_nids, groupxs = ut.group_indices(hidden_nids) # Indicator vector indicating the name node_features = np.zeros((num_annots, num_names)) node_features[(aids, hidden_nids)] = 1 toy_params = { True: {'mu': 1.0, 'sigma': 2.2}, False: {'mu': 7.0, 'sigma': .9} } if False: import vtool as vt import plottool as pt pt.ensure_pylab_qt4() xdata = np.linspace(0, 100, 1000) tp_pdf = vt.gauss_func1d(xdata, **toy_params[True]) fp_pdf = vt.gauss_func1d(xdata, **toy_params[False]) pt.plot_probabilities([tp_pdf, fp_pdf], ['TP', 'TF'], xdata=xdata) def metric(aidx1, aidx2, hidden_nids=hidden_nids, toy_params=toy_params): if aidx1 == aidx2: return 0 rng = np.random.RandomState(int(aidx1 + aidx2)) same = hidden_nids[int(aidx1)] == hidden_nids[int(aidx2)] mu, sigma = ut.dict_take(toy_params[same], ['mu', 'sigma']) return np.clip(rng.normal(mu, sigma), 0, np.inf) pairwise_aidxs = list(ut.iprod(range(num_annots), range(num_annots))) pairwise_labels = np.array([hidden_nids[a1] == hidden_nids[a2] for a1, a2 in pairwise_aidxs]) pairwise_scores = np.array([metric(*zz) for zz in pairwise_aidxs]) pairwise_scores_mat = pairwise_scores.reshape(num_annots, num_annots) graph = pystruct.models.EdgeFeatureGraphCRF( n_states=num_annots, n_features=num_names, n_edge_features=1, inference_method=inference_method, ) import opengm numVar = 10 unaries = np.ones([numVar, 3], dtype=opengm.value_type) gm = opengm.gm(np.ones(numVar, dtype=opengm.label_type) * 3) unary_fids = gm.addFunctions(unaries) gm.addFactors(unary_fids, np.arange(numVar)) infParam = opengm.InfParam( workflow=ut.ensure_ascii('(IC)(TTC-I,CC-I)'), ) inf = opengm.inference.Multicut(gm, parameter=infParam) visitor = inf.verboseVisitor(printNth=1, multiline=False) inf.infer(visitor) arg = inf.arg() # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) # regularizer = opengm.pottsFunction([3, 3], 0.0, beta) # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) unaries = np.random.rand(10, 10, 2) potts = opengm.PottsFunction([2, 2], 0.0, 0.4) gm = opengm.grid2d2Order(unaries=unaries, regularizer=potts) inf = opengm.inference.GraphCut(gm) inf.infer() arg = inf.arg()
def intra_encounter_matching(): qreq_, cm_list = testdata_workflow() # qaids = [cm.qaid for cm in cm_list] # top_aids = [cm.get_top_aids(5) for cm in cm_list] import numpy as np from scipy.sparse import coo_matrix, csgraph aid_pairs = np.array([(cm.qaid, daid) for cm in cm_list for daid in cm.get_top_aids(5)]) top_scores = ut.flatten([cm.get_top_scores(5) for cm in cm_list]) N = aid_pairs.max() + 1 mat = coo_matrix((top_scores, aid_pairs.T), shape=(N, N)) csgraph.connected_components(mat) tree = csgraph.minimum_spanning_tree(mat) # NOQA import plottool as pt dense = mat.todense() pt.imshow(dense / dense.max() * 255) pt.show_if_requested() # load image and convert to LAB img_fpath = str(ut.grab_test_imgpath(str('lena.png'))) img = vigra.impex.readImage(img_fpath) imgLab = vigra.colors.transform_RGB2Lab(img) superpixelDiameter = 15 # super-pixel size slicWeight = 15.0 # SLIC color - spatial weight labels, nseg = vigra.analysis.slicSuperpixels(imgLab, slicWeight, superpixelDiameter) labels = vigra.analysis.labelImage(labels)-1 # get 2D grid graph and RAG gridGraph = graphs.gridGraph(img.shape[0:2]) rag = graphs.regionAdjacencyGraph(gridGraph, labels) nodeFeatures = rag.accumulateNodeFeatures(imgLab) nodeFeaturesImg = rag.projectNodeFeaturesToGridGraph(nodeFeatures) nodeFeaturesImg = vigra.taggedView(nodeFeaturesImg, "xyc") nodeFeaturesImgRgb = vigra.colors.transform_Lab2RGB(nodeFeaturesImg) #from sklearn.cluster import MiniBatchKMeans, KMeans from sklearn import mixture nCluster = 3 g = mixture.GMM(n_components=nCluster) g.fit(nodeFeatures[:,:]) clusterProb = g.predict_proba(nodeFeatures) import numpy #https://github.com/opengm/opengm/blob/master/src/interfaces/python/examples/tutorial/Irregular%20Factor%20Graphs.ipynb #https://github.com/opengm/opengm/blob/master/src/interfaces/python/examples/tutorial/Hard%20and%20Soft%20Constraints.ipynb clusterProbImg = rag.projectNodeFeaturesToGridGraph(clusterProb.astype(numpy.float32)) clusterProbImg = vigra.taggedView(clusterProbImg, "xyc") # strength of potts regularizer beta = 40.0 # graphical model with as many variables # as superpixels, each has 3 states gm = opengm.gm(numpy.ones(rag.nodeNum,dtype=opengm.label_type)*nCluster) # convert probabilites to energies probs = numpy.clip(clusterProb, 0.00001, 0.99999) costs = -1.0*numpy.log(probs) # add ALL unaries AT ONCE fids = gm.addFunctions(costs) gm.addFactors(fids,numpy.arange(rag.nodeNum)) # add a potts function regularizer = opengm.pottsFunction([nCluster]*2,0.0,beta) fid = gm.addFunction(regularizer) # get variable indices of adjacent superpixels # - or "u" and "v" node id's for edges uvIds = rag.uvIds() uvIds = numpy.sort(uvIds,axis=1) # add all second order factors at once gm.addFactors(fid,uvIds) # get super-pixels with slic on LAB image import opengm # Matching Graph cost_matrix = np.array([ [0.5, 0.6, 0.2, 0.4, 0.1], [0.0, 0.5, 0.2, 0.9, 0.2], [0.0, 0.0, 0.5, 0.1, 0.1], [0.0, 0.0, 0.0, 0.5, 0.1], [0.0, 0.0, 0.0, 0.0, 0.5], ]) cost_matrix += cost_matrix.T number_of_labels = 5 num_annots = 5 cost_matrix = (cost_matrix * 2) - 1 #gm = opengm.gm(number_of_labels) gm = opengm.gm(np.ones(num_annots) * number_of_labels) aids = np.arange(num_annots) aid_pairs = np.array([(a1, a2) for a1, a2 in ut.iprod(aids, aids) if a1 != a2], dtype=np.uint32) aid_pairs.sort(axis=1) # 2nd order function fid = gm.addFunction(cost_matrix) gm.addFactors(fid, aid_pairs) Inf = opengm.inference.BeliefPropagation #Inf = opengm.inference.Multicut parameter = opengm.InfParam(steps=10, damping=0.5, convergenceBound=0.001) parameter = opengm.InfParam() inf = Inf(gm, parameter=parameter) class PyCallback(object): def __init__(self,): self.labels=[] pass def begin(self,inference): print("begin of inference") pass def end(self,inference): self.labels.append(inference.arg()) pass def visit(self,inference): gm=inference.gm() labelVector=inference.arg() print("energy %r" % (gm.evaluate(labelVector),)) self.labels.append(labelVector) pass callback=PyCallback() visitor=inf.pythonVisitor(callback,visitNth=1) inf.infer(visitor) print(callback.labels) # baseline jobid # https://github.com/opengm/opengm/blob/master/src/interfaces/python/examples/tutorial/OpenGM%20tutorial.ipynb numVar = 10 unaries = np.ones([numVar, 3], dtype=opengm.value_type) gm = opengm.gm(np.ones(numVar, dtype=opengm.label_type) * 3) unary_fids = gm.addFunctions(unaries) gm.addFactors(unary_fids, np.arange(numVar)) infParam = opengm.InfParam( workflow=ut.ensure_ascii('(IC)(TTC-I,CC-I)'), ) inf = opengm.inference.Multicut(gm, parameter=infParam) visitor = inf.verboseVisitor(printNth=1, multiline=False) inf.infer(visitor) arg = inf.arg() # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) # regularizer = opengm.pottsFunction([3, 3], 0.0, beta) # gridVariableIndices = opengm.secondOrderGridVis(img.shape[0], img.shape[1]) # fid = gm.addFunction(regularizer) # gm.addFactors(fid, gridVariableIndices) unaries = np.random.rand(10, 10, 2) potts = opengm.PottsFunction([2, 2], 0.0, 0.4) gm = opengm.grid2d2Order(unaries=unaries, regularizer=potts) inf = opengm.inference.GraphCut(gm) inf.infer() arg = inf.arg() # NOQA """
# unaries img1d = img.reshape(numVar) lrange = numpy.arange(0, 256, 1) unaries = numpy.repeat(lrange[:, numpy.newaxis], numVar, 1).T for l in xrange(256): unaries[:, l] -= img1d unaries = numpy.abs(unaries) unaries = unaries.reshape(shape + [256]) # higher order function def regularizer(labels): val = abs(float(labels[0]) - float(labels[1])) return val * 0.4 print "generate 2d grid gm" regularizer = opengm.PythonFunction(function=regularizer, shape=[256, 256]) gm = opengm.grid2d2Order(unaries, regularizer=regularizer) icm = opengm.inference.Icm(gm) icm.infer() arg = icm.arg() arg = arg.reshape(shape) print numpy.round(img) print arg