예제 #1
0
def show_low_support_classes(dset):
    """
    dset = merged
    coarse = merged
    """
    # aid = list(dset.anns.values())[0]['id']
    # dset.show_annotation(aid)
    dset._remove_keypoint_annotations()
    gids = sorted([gid for gid, aids in dset.gid_to_aids.items() if aids])

    catfreq = dset.category_annotation_frequency()
    inspect_cids = []
    for name, freq in catfreq.items():
        if freq > 0 and freq < 50:
            cid = dset.name_to_cat[name]['id']
            inspect_cids.append(cid)
    inspect_gids = list(
        set(ub.flatten(ub.take(dset.cid_to_gids, inspect_cids))))
    # inspect_gids = [gid for gid in inspect_gids if 'habcam' not in dset.imgs[gid]['file_name']]

    import utool as ut
    if ut.inIPython():
        import IPython
        IPython.get_ipython().magic('pylab qt5 --no-import-all')

    print('inspect_gids = {!r}'.format(inspect_gids))
    from matplotlib import pyplot as plt
    for gid in ut.InteractiveIter(inspect_gids):
        img = dset.imgs[gid]
        print('img = {}'.format(ub.repr2(img)))
        aids = dset.gid_to_aids[gid]
        primary_aid = None
        anns = list(ub.take(dset.anns, aids))
        for ann in anns:
            ann = ann.copy()
            ann['category'] = dset.cats[ann['category_id']]['name']
            print('ann = {}'.format(ub.repr2(ann)))
            if primary_aid is None:
                if ann['category_id'] in inspect_cids:
                    primary_aid = ann['id']

        try:
            fig = plt.figure(1)
            fig.clf()
            dset.show_annotation(primary_aid, gid=gid)
            fig.canvas.draw()
        except Exception:
            print('cannot draw')
예제 #2
0
def qtensure():
    import wbia.guitool as gt

    if ut.inIPython():
        import IPython

        ipython = IPython.get_ipython()
        if ipython is None:
            # we must have exited ipython at some point
            return
        if gt.__PYQT__.GUITOOL_PYQT_VERSION == 5:
            """
            sudo apt-get install python3-pyqt5.qtsvg
            """
            # import os
            # os.environ['QT_API'] = 'pyqt5'
            # import matplotlib
            # matplotlib.use('Qt5Agg')
            # IPython.get_ipython().magic('matplotlib qt5')
            # IPython.get_ipython().magic('pylab qt4')
            ipython.magic('pylab qt5 --no-import-all')
        else:
            # IPython.get_ipython().magic('pylab qt4')
            ipython.magic('pylab qt4 --no-import-all')
예제 #3
0
#!/usr/bin/env python2.7
# TODO: ADD COPYRIGHT TAG
from __future__ import absolute_import, division, print_function
import utool
import ibeis
import multiprocessing
from ibeis.model.detect import randomforest
# IBEIS
print, print_, printDBG, rrr, profile = utool.inject(__name__, '[TEST_DETECT]')

SPECIAL = utool.get_flag('--special') or utool.inIPython()


def TEST_DETECT(ibs):
    # Create a HotSpotter API (hs) and GUI backend (back)
    print('get_valid_ANNOTATIONS')
    gid_list = ibs.get_valid_gids()[0:1]
    if SPECIAL:
        gid_list = utool.safe_slice(ibs.get_valid_gids(), 3)
    #gid_list.extend(ibs.add_images([utool.unixpath('~/Dropbox/Chuck/detect_testimg/testgrevy.jpg')]))
    species = 'zebra_grevys'
    detectkw = {
        'quick': True,
        'save_detection_images': SPECIAL,
        'save_scales': SPECIAL,
    }
    detect_gen = randomforest.generate_detections(ibs, gid_list, species, **detectkw)
    gid_list2 = []
    bbox_list2 = []
    for gid, bboxes, confidences, img_conf in detect_gen:
        for bbox in bboxes:
예제 #4
0
def iupdate():
    if VERBOSE:
        print('[pt] iupdate')
    if ut.inIPython():
        update()
예제 #5
0
def ensure_pylab_qt4():
    if ut.inIPython():
        import IPython
        IPython.get_ipython().magic('pylab qt4')
예제 #6
0
def show_keypoint_annots():
    merged = read_fine_merged()

    def images_with_keypoints():
        keypoint_gids = set()
        for aid, ann in merged.anns.items():
            if ann['roi_shape'] == 'keypoints':
                keypoint_gids.add(ann['image_id'])

        relevant = ub.dict_subset(merged.gid_to_aids, keypoint_gids)
        relevant = {
            gid:
            [a for a in aids if merged.anns[a]['roi_shape'] == 'keypoints']
            for gid, aids in relevant.items()
        }

        gid_list = ub.argsort(ub.map_vals(len, relevant))[::-1]
        return gid_list

    def sort_gids_by_nannots(gids):
        return ub.argsort(
            ub.map_vals(len,
                        ub.dict_subset(merged.gid_to_aids, gids,
                                       default=[])))[::-1]

    def images_with_keypoints_and_boxes():
        keypoint_gids = set()
        for aid, ann in merged.anns.items():
            if ann['roi_shape'] == 'keypoints':
                keypoint_gids.add(ann['image_id'])

        gid_list = []
        for gid in keypoint_gids:
            aids = merged.gid_to_aids[gid]
            types = set()
            for ann in ub.take(merged.anns, aids):
                types.add(ann['roi_shape'])
            if len(types) > 1:
                gid_list.append(gid)

        gid_list = sort_gids_by_nannots(gid_list)
        return gid_list

    def image_from_each_dataset():
        groups = ub.ddict(list)
        for gid, img in merged.imgs.items():
            groups[os.path.dirname(img['file_name'])].append(gid)

        gid_groups = []
        for gids in groups.values():
            gids = sort_gids_by_nannots(gids)
            gid_groups.append(gids)

        # round robin sample
        datas = [gid for x in zip(*gid_groups) for gid in x]
        return datas

    # gid_list = images_with_keypoints()
    gid_list = images_with_keypoints_and_boxes()
    gid_list = image_from_each_dataset()

    # gid = gid_list[2]
    # import matplotlib.pyplot as plt
    # plt.gcf().clf()
    # merged.show_annotation(gid=gid)

    import utool as ut
    if ut.inIPython():
        import IPython
        IPython.get_ipython().magic('pylab qt5 --no-import-all')

    from matplotlib import pyplot as plt
    for gid in ut.InteractiveIter(gid_list):
        try:
            fig = plt.figure(1)
            fig.clf()
            merged.show_annotation(gid=gid)
            name = os.path.basename(
                os.path.dirname(merged.imgs[gid]['file_name']))
            ax = plt.gca()
            plt.gca().set_title(name)
            ax.set_xticks([])
            ax.set_yticks([])
            plt.gca().grid('off')
            fig.canvas.draw()
        except Exception:
            print('cannot draw')
예제 #7
0
def parse_args():
    ds_default = None
    arch_default = 'siaml2_128'
    weights_tag_default = None
    # Test values
    if False:
        ds_default = 'liberty'
        weights_tag_default = 'current'
        assert ut.inIPython()

    # Parse commandline args
    ds_tag      = ut.get_argval(('--dataset', '--ds'), type_=str,
                                default=ds_default)
    datatype    = ut.get_argval(('--datatype', '--dt'), type_=str,
                                default='siam-patch')
    arch_tag    = ut.get_argval(('--arch', '-a'), default=arch_default)
    weights_tag = ut.get_argval(('--weights', '+w'), type_=str,
                                default=weights_tag_default)

    # Incorporate new config stuff?
    #NEW = False
    #if NEW:
    #    default_dstag_cfg = {
    #        'ds': 'PZ_MTEST',
    #        'mode': 'patches',
    #        'arch': arch_default
    #    }
    #    named_defaults_dict = {
    #        '': default_dstag_cfg
    #    }
    #    ut.parse_argv_cfg('dstag', named_defaults_dict=named_defaults_dict)

    hyperparams = ut.argparse_dict(
        {
            #'batch_size': 128,
            'batch_size': 256,
            #'learning_rate': .0005,
            'learning_rate': .1,
            'momentum': .9,
            #'weight_decay': 0.0005,
            'weight_decay': 0.0001,
        },
        alias_dict={
            'weight_decay': ['decay'],
            'learning_rate': ['learn_rate'],
        }
    )
    requests = ut.argparse_dict(
        {
            'train': False,
            'test': False,
            'testall': False,
            'publish': False,
            'ensuredata': False,
        }
    )
    requests['test'] = requests['test'] or requests['testall']

    # breakup weights tag into extern_ds and checkpoint
    if weights_tag is not None and ':' in weights_tag:
        extern_ds_tag, checkpoint_tag = weights_tag.split(':')
    else:
        extern_ds_tag = None
        checkpoint_tag = weights_tag
    # resolve aliases
    ds_tag = DS_TAG_ALIAS2.get(ds_tag, ds_tag)
    extern_ds_tag = DS_TAG_ALIAS2.get(extern_ds_tag, extern_ds_tag)
    checkpoint_tag = CHECKPOINT_TAG_ALIAS.get(checkpoint_tag, checkpoint_tag)
    tags = {
        'ds_tag': ds_tag,
        'extern_ds_tag': extern_ds_tag,
        'checkpoint_tag': checkpoint_tag,
        'arch_tag': arch_tag,
        'datatype': datatype,
    }
    ut.colorprint('[netrun] * ds_tag=%r' % (ds_tag,), 'lightgray')
    ut.colorprint('[netrun] * arch_tag=%r' % (arch_tag,), 'lightgray')
    ut.colorprint('[netrun] * extern_ds_tag=%r' % (extern_ds_tag,), 'lightgray')
    ut.colorprint('[netrun] * checkpoint_tag=%r' % (checkpoint_tag,), 'lightgray')
    return requests, hyperparams, tags
예제 #8
0
def iupdate():
    if VERBOSE:
        print('[pt] iupdate')
    if ut.inIPython():
        update()
예제 #9
0
def ensure_pylab_qt4():
    if ut.inIPython():
        import IPython
        IPython.get_ipython().magic('pylab qt4')