Source code for wbia_cnn.models.viewpoint

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
import six
import random
from Lasagne.lasagne import layers, nonlinearities

from wbia_cnn.models import abstract_models
import utool as ut

print, rrr, profile = ut.inject2(__name__)


[docs]@six.add_metaclass(ut.ReloadingMetaclass) class ViewpointModel(abstract_models.AbstractCategoricalModel): def __init__( model, autoinit=False, batch_size=128, data_shape=(96, 96, 3), arch_tag='viewpoint', **kwargs ): super(ViewpointModel, model).__init__( batch_size=batch_size, data_shape=data_shape, arch_tag=arch_tag, **kwargs ) if autoinit: model.init_arch()
[docs] def augment(model, Xb, yb=None): # Invert label function def _invert_label(label): label = label.replace('LEFT', '^L^') label = label.replace('RIGHT', '^R^') label = label.replace('^R^', 'LEFT') label = label.replace('^L^', 'RIGHT') return label # Map points, channels, height, width = Xb.shape for index in range(points): if random.uniform(0.0, 1.0) <= 0.5: Xb[index] = Xb[index, :, ::-1] if yb is not None: yb[index] = _invert_label(yb[index]) return Xb, yb
[docs] def label_order_mapping(model, category_list): r""" Args: category_list (list): Returns: ?: category_mapping CommandLine: python -m wbia_cnn.models.viewpoint --exec-label_order_mapping Example: >>> # DISABLE_DOCTEST >>> from wbia_cnn.models.viewpoint import * # NOQA >>> model = ViewpointModel() >>> category_list = ['LEFT', 'FRONT_LEFT', 'FRONT', 'FRONT_RIGHT', 'RIGHT', 'BACK_RIGHT', 'BACK', 'BACK_LEFT'] >>> category_mapping = model.label_order_mapping(category_list) >>> result = ('category_mapping = %s' % (str(category_mapping),)) >>> print(result) """ if len(category_list) == 8: species_list = [ 'ZEBRA_PLAINS', ] else: species_list = [ 'ZEBRA_PLAINS', 'ZEBRA_GREVYS', 'ELEPHANT_SAVANNA', 'GIRAFFE_RETICULATED', 'GIRAFFE_MASAI', ] viewpoint_mapping = { 'LEFT': 0, 'FRONT_LEFT': 1, 'FRONT': 2, 'FRONT_RIGHT': 3, 'RIGHT': 4, 'BACK_RIGHT': 5, 'BACK': 6, 'BACK_LEFT': 7, } viewpoint_mapping = {} viewpoints = len(viewpoint_mapping.keys()) category_mapping = {} for index, species in enumerate(species_list): for viewpoint, value in six.iteritems(viewpoint_mapping): key = '%s:%s' % ( species, viewpoint, ) base = viewpoints * index category_mapping[key] = base + value return category_mapping
[docs] def learning_rate_update(model, x): return x / 2.0
[docs] def learning_rate_shock(model, x): return x * 2.0
# def build_model(model, batch_size, input_width, input_height, input_channels, output_dims):
[docs] def init_arch(model): from wbia_cnn import custom_layers Conv2DLayer = custom_layers.Conv2DLayer MaxPool2DLayer = custom_layers.MaxPool2DLayer (_, input_channels, input_width, input_height) = model.input_shape output_dims = model.output_dims _CaffeNet = abstract_models.PretrainedNetwork('caffenet') l_in = layers.InputLayer( # variable batch size (None), channel, width, height # shape=(None, input_channels, input_width, input_height) shape=model.input_shape, ) l_noise = layers.GaussianNoiseLayer( l_in, ) l_conv0 = Conv2DLayer( l_noise, num_filters=32, filter_size=(11, 11), # nonlinearity=nonlinearities.rectify, nonlinearity=nonlinearities.LeakyRectify(leakiness=(1.0 / 10.0)), W=_CaffeNet.get_pretrained_layer(0), ) l_conv0_dropout = layers.DropoutLayer(l_conv0, p=0.10) l_conv1 = Conv2DLayer( l_conv0_dropout, num_filters=32, filter_size=(5, 5), # nonlinearity=nonlinearities.rectify, nonlinearity=nonlinearities.LeakyRectify(leakiness=(1.0 / 10.0)), W=_CaffeNet.get_pretrained_layer(2), ) l_pool1 = MaxPool2DLayer( l_conv1, pool_size=(2, 2), stride=(2, 2), ) l_conv2_dropout = layers.DropoutLayer(l_pool1, p=0.10) l_conv2 = Conv2DLayer( l_conv2_dropout, num_filters=64, filter_size=(3, 3), # nonlinearity=nonlinearities.rectify, nonlinearity=nonlinearities.LeakyRectify(leakiness=(1.0 / 10.0)), # W=init.Orthogonal(), ) l_pool2 = MaxPool2DLayer( l_conv2, pool_size=(2, 2), stride=(2, 2), ) l_conv3_dropout = layers.DropoutLayer(l_pool2, p=0.30) l_conv3 = Conv2DLayer( l_conv3_dropout, num_filters=128, filter_size=(3, 3), # nonlinearity=nonlinearities.rectify, nonlinearity=nonlinearities.LeakyRectify(leakiness=(1.0 / 10.0)), # W=init.Orthogonal(), ) l_pool3 = MaxPool2DLayer( l_conv3, pool_size=(2, 2), stride=(2, 2), ) l_conv4_dropout = layers.DropoutLayer(l_pool3, p=0.30) l_conv4 = Conv2DLayer( l_conv4_dropout, num_filters=128, filter_size=(3, 3), # nonlinearity=nonlinearities.rectify, nonlinearity=nonlinearities.LeakyRectify(leakiness=(1.0 / 10.0)), # W=init.Orthogonal(), ) l_pool4 = MaxPool2DLayer( l_conv4, pool_size=(2, 2), stride=(2, 2), ) l_hidden1 = layers.DenseLayer( l_pool4, num_units=512, # nonlinearity=nonlinearities.rectify, nonlinearity=nonlinearities.LeakyRectify(leakiness=(1.0 / 10.0)), # W=init.Orthogonal(), ) l_hidden1_maxout = layers.FeaturePoolLayer( l_hidden1, pool_size=2, ) l_hidden1_dropout = layers.DropoutLayer(l_hidden1_maxout, p=0.5) l_hidden2 = layers.DenseLayer( l_hidden1_dropout, num_units=512, # nonlinearity=nonlinearities.rectify, nonlinearity=nonlinearities.LeakyRectify(leakiness=(1.0 / 10.0)), # W=init.Orthogonal(), ) l_hidden2_maxout = layers.FeaturePoolLayer( l_hidden2, pool_size=2, ) l_hidden2_dropout = layers.DropoutLayer(l_hidden2_maxout, p=0.5) l_out = layers.DenseLayer( l_hidden2_dropout, num_units=output_dims, nonlinearity=nonlinearities.softmax, # W=init.Orthogonal(), ) model.output_layer = l_out return l_out
if __name__ == '__main__': """ CommandLine: python -m wbia_cnn.models.dummy python -m wbia_cnn.models.dummy --allexamples python -m wbia_cnn.models.dummy --allexamples --noface --nosrc """ import multiprocessing multiprocessing.freeze_support() # for win32 import utool as ut # NOQA ut.doctest_funcs()