Source code for wbia_cnn.models.quality

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
import utool as ut
from Lasagne.lasagne import layers, nonlinearities

from wbia_cnn.models import abstract_models

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


[docs]@ut.reloadable_class class QualityModel(abstract_models.AbstractCategoricalModel): def __init__(self): super(QualityModel, self).__init__()
[docs] def label_order_mapping(self, category_list): quality_mapping = { 'JUNK': 0, 'POOR': 1, 'GOOD': 2, 'OK': 3, 'EXCELLENT': 4, } return quality_mapping
[docs] def learning_rate_update(self, x): return x / 2.0
[docs] def learning_rate_shock(self, x): return x * 2.0
[docs] def build_model( self, batch_size, input_width, input_height, input_channels, output_dims ): from wbia_cnn import custom_layers Conv2DLayer = custom_layers.Conv2DLayer MaxPool2DLayer = custom_layers.MaxPool2DLayer _CaffeNet = abstract_models.PretrainedNetwork('caffenet') l_in = layers.InputLayer( # variable batch size (None), channel, width, height shape=(None, input_channels, input_width, input_height) ) 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(), ) self.output_layer = l_out return l_out
if __name__ == '__main__': """ CommandLine: python -m wbia_cnn.models.quality python -m wbia_cnn.models.quality --allexamples python -m wbia_cnn.models.quality --allexamples --noface --nosrc """ import multiprocessing multiprocessing.freeze_support() # for win32 import utool as ut # NOQA ut.doctest_funcs()