def plot_image(self, index): px = index - self.start_index gpath = self.gpath_list[index] if self.vizkw is None: _vizkw = {} else: _vizkw = self.vizkw.copy() _vizkw.update({ 'fnum': self.fnum, 'pnum': self.pnum_(px), }) if ut.is_funclike(gpath): showfunc = gpath # HACK # override of plot image function showfunc(**_vizkw) import plottool as pt ax = pt.gca() else: if isinstance(gpath, six.string_types): img = vt.imread(gpath) else: img = gpath bbox_list = self.bboxes_list[index] #print('bbox_list %r in display for px: %r ' % (bbox_list, px)) theta_list = self.thetas_list[index] label_list = [ix + 1 for ix in range(len(bbox_list))] #Add true values for every bbox to display sel_list = [True for ix in range(len(bbox_list))] _vizkw.update({ #title should always be the image number 'title': str(index), 'bbox_list': bbox_list, 'theta_list': theta_list, 'sel_list': sel_list, 'label_list': label_list, }) #print(utool.dict_str(_vizkw)) #print('vizkw = ' + utool.dict_str(_vizkw)) _, ax = viz_image2.show_image(img, **_vizkw) if self.xlabel_list is not None: import plottool as pt pt.set_xlabel(self.xlabel_list[index]) #print(index) ph.set_plotdat(ax, 'bbox_list', bbox_list) ph.set_plotdat(ax, 'gpath', gpath) ph.set_plotdat(ax, 'px', str(px)) ph.set_plotdat(ax, 'index', index)
def plot_image(self, index): px = index - self.start_index gpath = self.gpath_list[index] if self.vizkw is None: _vizkw = {} else: _vizkw = self.vizkw.copy() _vizkw.update({ 'fnum': self.fnum, 'pnum': self.pnum_(px), }) if ut.is_funclike(gpath): showfunc = gpath # HACK # override of plot image function showfunc(**_vizkw) import plottool as pt ax = pt.gca() else: if isinstance(gpath, six.string_types): img = vt.imread(gpath) else: img = gpath bbox_list = self.bboxes_list[index] #print('bbox_list %r in display for px: %r ' % (bbox_list, px)) theta_list = self.thetas_list[index] label_list = [ix + 1 for ix in range(len(bbox_list))] #Add true values for every bbox to display sel_list = [True for ix in range(len(bbox_list))] _vizkw.update({ #title should always be the image number 'title': str(index), 'bbox_list' : bbox_list, 'theta_list' : theta_list, 'sel_list' : sel_list, 'label_list' : label_list, }) #print(utool.dict_str(_vizkw)) #print('vizkw = ' + utool.dict_str(_vizkw)) _, ax = viz_image2.show_image(img, **_vizkw) if self.xlabel_list is not None: import plottool as pt pt.set_xlabel(self.xlabel_list[index]) #print(index) ph.set_plotdat(ax, 'bbox_list', bbox_list) ph.set_plotdat(ax, 'gpath', gpath) ph.set_plotdat(ax, 'px', str(px)) ph.set_plotdat(ax, 'index', index)
def find_opt_ratio(pblm): """ script to help find the correct value for the ratio threshold >>> from ibeis.algo.verif.vsone import * # NOQA >>> pblm = OneVsOneProblem.from_empty('PZ_PB_RF_TRAIN') >>> pblm = OneVsOneProblem.from_empty('GZ_Master1') """ # Find best ratio threshold pblm.load_samples() infr = pblm.infr edges = ut.emap(tuple, pblm.samples.aid_pairs.tolist()) task = pblm.samples['match_state'] pos_idx = task.class_names.tolist().index(POSTV) config = {'ratio_thresh': 1.0, 'sv_on': False} matches = infr._exec_pairwise_match(edges, config) import plottool as pt pt.qtensure() thresholds = np.linspace(0, 1.0, 100) pos_truth = task.y_bin.T[pos_idx] ratio_fs = [m.local_measures['ratio'] for m in matches] aucs = [] # Given the current correspondences: Find the optimal # correspondence threshold. for thresh in ut.ProgIter(thresholds, 'computing thresh'): scores = np.array([fs[fs < thresh].sum() for fs in ratio_fs]) roc = sklearn.metrics.roc_auc_score(pos_truth, scores) aucs.append(roc) aucs = np.array(aucs) opt_auc = aucs.max() opt_thresh = thresholds[aucs.argmax()] if True: pt.plt.plot(thresholds, aucs, 'r-', label='') pt.plt.plot(opt_thresh, opt_auc, 'ro', label='L opt=%r' % (opt_thresh, )) pt.set_ylabel('auc') pt.set_xlabel('ratio threshold') pt.legend()
def show_name_matches(ibs, qaid, name_daid_list, name_fm_list, name_fs_list, name_H1_list, name_featflag_list, qreq_=None, **kwargs): """ Called from chip_match.py Args: ibs (IBEISController): ibeis controller object qaid (int): query annotation id name_daid_list (list): name_fm_list (list): name_fs_list (list): name_H1_list (list): name_featflag_list (list): qreq_ (QueryRequest): query request object with hyper-parameters(default = None) Kwargs: draw_fmatches, name_rank, fnum, pnum, colorbar_, nonvote_mode, fastmode, show_matches, fs, fm_norm, lbl1, lbl2, rect, draw_border, cmap, H1, H2, scale_factor1, scale_factor2, draw_pts, draw_ell, draw_lines, show_nMatches, all_kpts, in_image, show_query, draw_lbl, name_annot_scores, score, rawscore, aid2_raw_rank, show_name, show_nid, show_aid, show_annot_score, show_truth, name_score, show_name_score, show_name_rank, show_timedelta CommandLine: python -m ibeis.viz.viz_matches --exec-show_name_matches python -m ibeis.viz.viz_matches --test-show_name_matches --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.viz.viz_matches import * # NOQA >>> from ibeis.algo.hots import chip_match >>> from ibeis.algo.hots import name_scoring >>> import vtool as vt >>> from ibeis.algo.hots import _pipeline_helpers as plh # NOQA >>> import numpy as np >>> func = chip_match.ChipMatch.show_single_namematch >>> sourcecode = ut.get_func_sourcecode(func, stripdef=True, stripret=True, >>> strip_docstr=True) >>> setup = ut.regex_replace('viz_matches.show_name_matches', '#', sourcecode) >>> homog = False >>> print(ut.indent(setup, '>>> ')) >>> ibs, qreq_, cm_list = plh.testdata_post_sver('PZ_MTEST', qaid_list=[1]) >>> cm = cm_list[0] >>> cm.score_nsum(qreq_) >>> dnid = ibs.get_annot_nids(cm.qaid) >>> # +--- COPIED SECTION >>> locals_ = locals() >>> var_list = ut.exec_func_src( >>> func, locals_=locals_, >>> sentinal='name_annot_scores = cm.annot_score_list.take(sorted_groupxs') >>> exec(ut.execstr_dict(var_list)) >>> # L___ COPIED SECTION >>> kwargs = {} >>> show_name_matches(ibs, qaid, name_daid_list, name_fm_list, >>> name_fs_list, name_h1_list, name_featflag_list, >>> qreq_=qreq_, **kwargs) >>> ut.quit_if_noshow() >>> ut.show_if_requested() """ #print("SHOW NAME MATCHES") #print(ut.repr2(kwargs, nl=True)) #from ibeis import constants as const from ibeis import tag_funcs draw_fmatches = kwargs.pop('draw_fmatches', True) rchip1, kpts1 = get_query_annot_pair_info(ibs, qaid, qreq_, draw_fmatches) rchip2_list, kpts2_list = get_data_annot_pair_info(ibs, name_daid_list, qreq_, draw_fmatches) fm_list = name_fm_list fs_list = name_fs_list featflag_list = name_featflag_list offset_list, sf_list, bbox_list = show_multichip_match( rchip1, rchip2_list, kpts1, kpts2_list, fm_list, fs_list, featflag_list, **kwargs) aid_list = [qaid] + name_daid_list annotate_matches3(ibs, aid_list, bbox_list, offset_list, name_fm_list, name_fs_list, qreq_=None, **kwargs) ax = pt.gca() title = vh.get_query_text(ibs, None, name_daid_list, False, qaid=qaid, **kwargs) pt.set_title(title, ax) # Case tags annotmatch_rowid_list = ibs.get_annotmatch_rowid_from_superkey( [qaid] * len(name_daid_list), name_daid_list) annotmatch_rowid_list = ut.filter_Nones(annotmatch_rowid_list) tags_list = ibs.get_annotmatch_case_tags(annotmatch_rowid_list) if not ut.get_argflag('--show'): # False: tags_list = tag_funcs.consolodate_annotmatch_tags(tags_list) tag_list = ut.unique_ordered(ut.flatten(tags_list)) name_rank = kwargs.get('name_rank', None) truth = get_multitruth(ibs, aid_list) xlabel = {1: 'Correct ID', 0: 'Incorrect ID', 2: 'Unknown ID'}[truth] if False: if name_rank is None: xlabel = {1: 'Genuine', 0: 'Imposter', 2: 'Unknown'}[truth] #xlabel = {1: 'True', 0: 'False', 2: 'Unknown'}[truth] else: if name_rank == 0: xlabel = { 1: 'True Positive', 0: 'False Positive', 2: 'Unknown' }[truth] else: xlabel = { 1: 'False Negative', 0: 'True Negative', 2: 'Unknown' }[truth] if len(tag_list) > 0: xlabel += '\n' + ', '.join(tag_list) pt.set_xlabel(xlabel) return ax
def show_name_matches(ibs, qaid, name_daid_list, name_fm_list, name_fs_list, name_H1_list, name_featflag_list, qreq_=None, **kwargs): """ Called from chip_match.py Args: ibs (IBEISController): ibeis controller object qaid (int): query annotation id name_daid_list (list): name_fm_list (list): name_fs_list (list): name_H1_list (list): name_featflag_list (list): qreq_ (QueryRequest): query request object with hyper-parameters(default = None) Kwargs: draw_fmatches, name_rank, fnum, pnum, colorbar_, nonvote_mode, fastmode, show_matches, fs, fm_norm, lbl1, lbl2, rect, draw_border, cmap, H1, H2, scale_factor1, scale_factor2, draw_pts, draw_ell, draw_lines, show_nMatches, all_kpts, in_image, show_query, draw_lbl, name_annot_scores, score, rawscore, aid2_raw_rank, show_name, show_nid, show_aid, show_annot_score, show_truth, name_score, show_name_score, show_name_rank, show_timedelta CommandLine: python -m ibeis.viz.viz_matches --exec-show_name_matches python -m ibeis.viz.viz_matches --test-show_name_matches --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.viz.viz_matches import * # NOQA >>> from ibeis.algo.hots import chip_match >>> from ibeis.algo.hots import name_scoring >>> import vtool as vt >>> from ibeis.algo.hots import _pipeline_helpers as plh # NOQA >>> import numpy as np >>> func = chip_match.ChipMatch.show_single_namematch >>> sourcecode = ut.get_func_sourcecode(func, stripdef=True, stripret=True, >>> strip_docstr=True) >>> setup = ut.regex_replace('viz_matches.show_name_matches', '#', sourcecode) >>> homog = False >>> print(ut.indent(setup, '>>> ')) >>> ibs, qreq_, cm_list = plh.testdata_post_sver('PZ_MTEST', qaid_list=[1]) >>> cm = cm_list[0] >>> cm.score_nsum(qreq_) >>> dnid = ibs.get_annot_nids(cm.qaid) >>> # +--- COPIED SECTION >>> locals_ = locals() >>> var_list = ut.exec_func_src( >>> func, locals_=locals_, >>> sentinal='name_annot_scores = cm.annot_score_list.take(sorted_groupxs') >>> exec(ut.execstr_dict(var_list)) >>> # L___ COPIED SECTION >>> kwargs = {} >>> show_name_matches(ibs, qaid, name_daid_list, name_fm_list, >>> name_fs_list, name_h1_list, name_featflag_list, >>> qreq_=qreq_, **kwargs) >>> ut.quit_if_noshow() >>> ut.show_if_requested() """ #print("SHOW NAME MATCHES") #print(ut.repr2(kwargs, nl=True)) #from ibeis import constants as const from ibeis import tag_funcs draw_fmatches = kwargs.pop('draw_fmatches', True) rchip1, kpts1 = get_query_annot_pair_info(ibs, qaid, qreq_, draw_fmatches) rchip2_list, kpts2_list = get_data_annot_pair_info(ibs, name_daid_list, qreq_, draw_fmatches) fm_list = name_fm_list fs_list = name_fs_list featflag_list = name_featflag_list offset_list, sf_list, bbox_list = show_multichip_match(rchip1, rchip2_list, kpts1, kpts2_list, fm_list, fs_list, featflag_list, **kwargs) aid_list = [qaid] + name_daid_list annotate_matches3(ibs, aid_list, bbox_list, offset_list, name_fm_list, name_fs_list, qreq_=None, **kwargs) ax = pt.gca() title = vh.get_query_text(ibs, None, name_daid_list, False, qaid=qaid, **kwargs) pt.set_title(title, ax) # Case tags annotmatch_rowid_list = ibs.get_annotmatch_rowid_from_superkey( [qaid] * len(name_daid_list), name_daid_list) annotmatch_rowid_list = ut.filter_Nones(annotmatch_rowid_list) tags_list = ibs.get_annotmatch_case_tags(annotmatch_rowid_list) if not ut.get_argflag('--show'): # False: tags_list = tag_funcs.consolodate_annotmatch_tags(tags_list) tag_list = ut.unique_ordered(ut.flatten(tags_list)) name_rank = kwargs.get('name_rank', None) truth = get_multitruth(ibs, aid_list) xlabel = {1: 'Correct ID', 0: 'Incorrect ID', 2: 'Unknown ID'}[truth] if False: if name_rank is None: xlabel = {1: 'Genuine', 0: 'Imposter', 2: 'Unknown'}[truth] #xlabel = {1: 'True', 0: 'False', 2: 'Unknown'}[truth] else: if name_rank == 0: xlabel = { 1: 'True Positive', 0: 'False Positive', 2: 'Unknown'}[truth] else: xlabel = { 1: 'False Negative', 0: 'True Negative', 2: 'Unknown'}[truth] if len(tag_list) > 0: xlabel += '\n' + ', '.join(tag_list) pt.set_xlabel(xlabel) return ax
def shadowform_probability(): """ its hearthstone, but whatev probability of raza + no shadowform on turn 5 + probability of raza + shadowform on turn 5 + probability of kazakus turn 4, raza turn 5, + no shadowform """ from scipy.stats import hypergeom def p_badstuff_shadowform(turn=5, hand_size=3): deck_size = 30 num_shadowform = 2 def prob_nohave_card_never_mulled(copies=2, hand_size=3): deck_size = 30 prb = hypergeom(deck_size, copies, hand_size) # P(initial_miss) p_none_premul = prb.cdf(0) # GIVEN that we mul our first 3 what is prob we still are unlucky # P(miss_turn0 | initial_miss) prb = hypergeom(deck_size - hand_size, copies, hand_size) p_none_in_mul = prb.cdf(0) # TODO: add constraints about 2 drops # P(miss_turn0) = P(miss_turn0 | initial_miss) * P(initial_miss) p_none_at_start = p_none_in_mul * p_none_premul return p_none_at_start def prob_nohave_card_always_mulled(copies=2, hand_size=3): # probability of getting the card initially p_none_premul = hypergeom(deck_size, copies, hand_size).cdf(0) # probability of getting the card if everything is thrown away # (TODO: factor in the probability that you need to keep something) # for now its fine because if we keep shadowform the end calculation is fine p_nohave_postmul_given_nohave = hypergeom(deck_size - hand_size, copies, hand_size).cdf(0) # not necessary, but it shows the theory p_nohave_postmul_given_had = 1 p_nohave_turn0 = ( p_nohave_postmul_given_nohave * p_none_premul + (1 - p_none_premul) * p_nohave_postmul_given_had ) return p_nohave_turn0 def prob_nohave_by_turn(p_none_turn0, turn, copies, hand_size): # P(miss_turnN | miss_mul) p_none_turnN_given_mulmis = hypergeom(deck_size - hand_size, copies, turn).cdf(0) # P(miss_turnN) = P(miss_turnN | miss_mul) P(miss_mul) p_none_turnN = p_none_turnN_given_mulmis * p_none_turn0 return p_none_turnN p_no_shadowform_on_turn0 = prob_nohave_card_never_mulled(copies=num_shadowform, hand_size=hand_size) no_shadowform_turnN = prob_nohave_by_turn(p_no_shadowform_on_turn0, turn, num_shadowform, hand_size) # Assume you always mul raza p_noraza_initial = prob_nohave_card_always_mulled(copies=1, hand_size=hand_size) p_noraza_turnN = prob_nohave_by_turn(p_noraza_initial, turn, copies=1, hand_size=hand_size) p_raza_turnN = 1 - p_noraza_turnN # probability that you have raza and no shadowform by turn 5 p_raza_and_noshadowform_turnN = p_raza_turnN * no_shadowform_turnN return p_raza_and_noshadowform_turnN import plottool as pt # NOQA turns = list(range(0, 26)) probs = [p_badstuff_shadowform(turn, hand_size=3) for turn in turns] pt.plot(turns, probs, label="on play") probs = [p_badstuff_shadowform(turn, hand_size=4) for turn in turns] pt.plot(turns, probs, label="with coin") pt.set_xlabel("turn") pt.set_ylabel("probability") pt.set_title("Probability of Having Raza without a Shadowform") pt.legend() pt.gca().set_ylim(0, 1)