Example #1
0
def get_overfeat_features(imgs, weights_path, typ, layer=None, cache=None):
    """Returns features at layer for given image(s) from OverFeat model.

    Small (fast) network: 22 layers
    Large (accurate) network: 25 layers

    Args:
        imgs:         Iterable of images each of shape (h,w,c)
        weights_path: Path to the OverFeat weights
        typ:          0 for small, 1 for large version of OverFeat
        layer:        The layer to extract features from
        cache:        Dict containing descs/other cached values
    """
    if cache is None:
        cache = {}
    if 'overfeat_descs' not in cache:
        # Initialize network
        print('Loading OverFeat ({}) model...'.format(typ))
        overfeat.init(weights_path, typ)
        # Determine feature layer if none specified
        if layer is None:
            if overfeat.get_n_layers() == 22:  # small
                layer = 19  # 16 also recommended
            else:  # large
                # Layer used by Zhang et al.
                layer = 22
        # Determine resize dim
        if typ == 0:
            resize = 231  # small network
        else:
            resize = 221  # large network
        # Allocate for feature descriptors
        descs = []
        # Run images through network
        print('Running images through OverFeat, extracting features '
              'at layer {}.'.format(layer))

        for idx, img in enumerate(imgs):
            if (idx + 1) % 100 == 0:
                print('Processing image {}...'.format(idx + 1))
            # Preprocess image
            img = overfeat_preprocess(img, resize)
            # Run through model
            _ = overfeat.fprop(img)
            # Retrieve feature output
            desc = overfeat.get_output(layer)
            descs.append(desc)
        # Free network
        overfeat.free()
        # NumPy-ify
        descs = np.asarray(descs)
        cache.update(overfeat_descs=descs)
    else:
        descs = cache['overfeat_descs']
    return descs, cache
def run_overfeat(image, layer=None):
    '''
    runs an image through overfeat. returns the 1,000-length likelihoods 
    vector and N-length layer in the net as copied and formatted numpy arrays.
    layer
        None: means return 4,096-length feature vector just prior to the output layer.
        int:  return that layer instead.
    '''
    if not layer:
        # get layer just before output layer
        feature_layer = overfeat.get_n_layers() - 2

    overfeat_likelihoods = overfeat.fprop(image)
    overfeat_features = overfeat.get_output(feature_layer)

    # flatten and copy. NOTE: copy() is intentional, don't delete.
    formatted_features = copy(overfeat_features.flatten())
    formatted_likelihoods = copy(overfeat_likelihoods.flatten())
    return formatted_likelihoods, formatted_features
Example #3
0
def run_overfeat(image, layer=None):
    '''
    runs an image through overfeat. returns the 1,000-length likelihoods 
    vector and N-length layer in the net as copied and formatted numpy arrays.
    layer
        None: means return 4,096-length feature vector just prior to the output layer.
        int:  return that layer instead.
    '''
    if not layer:
        # get layer just before output layer
        feature_layer = overfeat.get_n_layers() - 2

    overfeat_likelihoods  = overfeat.fprop(image)
    overfeat_features     = overfeat.get_output(feature_layer)

    # flatten and copy. NOTE: copy() is intentional, don't delete.
    formatted_features    = copy(overfeat_features.flatten())
    formatted_likelihoods = copy(overfeat_likelihoods.flatten())
    return formatted_likelihoods, formatted_features
Example #4
0
def process_through_net(photo, feature_layer=None):
    if not feature_layer:
        feature_layer = overfeat.get_n_layers() - 2
    likelihoods = copy(overfeat.fprop(photo).flatten())
    features    = copy(overfeat.get_output(feature_layer).flatten())
    return likelihoods, features