示例#1
0
 def _createLayers(self, num_actions):
     # create network
     init_xavier_conv = Xavier(local=True)
     init_xavier_affine = Xavier(local=False)
     # init_uniform_conv = Uniform(low=-.01, high=.01)
     # init_uniform_affine = Uniform(low=-.01, high=.01)
     layers = []
     # The first hidden layer convolves 32 filters of 8x8 with stride 4 with the input image and applies a rectifier nonlinearity.
     # layers.append(Conv((8, 8, 32), strides=4, init=init_xavier_conv, activation=Rectlin(), batch_norm=self.batch_norm))
     layers.append(
         Conv((5, 5, 32),
              strides=2,
              init=init_xavier_conv,
              activation=Rectlin(),
              batch_norm=self.batch_norm))
     # The second hidden layer convolves 64 filters of 4x4 with stride 2, again followed by a rectifier nonlinearity.
     # layers.append(Conv((4, 4, 64), strides=2, init=init_xavier_conv, activation=Rectlin(), batch_norm=self.batch_norm))
     layers.append(
         Conv((5, 5, 32),
              strides=2,
              init=init_xavier_conv,
              activation=Rectlin(),
              batch_norm=self.batch_norm))
     # This is followed by a third convolutional layer that convolves 64 filters of 3x3 with stride 1 followed by a rectifier.
     # layers.append(Conv((3, 3, 64), strides=1, init=init_xavier_conv, activation=Rectlin(), batch_norm=self.batch_norm))
     # The final hidden layer is fully-connected and consists of 512 rectifier units.
     layers.append(
         Affine(nout=512,
                init=init_xavier_affine,
                activation=Rectlin(),
                batch_norm=self.batch_norm))
     # The output layer is a fully-connected linear layer with a single output for each valid action.
     layers.append(Affine(nout=num_actions, init=init_xavier_affine))
     return layers
示例#2
0
 def _createLayers(self, num_actions):
     init_xavier_conv = Xavier(local=True)
     init_xavier_affine = Xavier(local=False)
     layers = []
     layers.append(
         Conv((8, 8, 32),
              strides=4,
              init=init_xavier_conv,
              activation=Rectlin(),
              batch_norm=self.batch_norm))
     layers.append(
         Conv((4, 4, 64),
              strides=2,
              init=init_xavier_conv,
              activation=Rectlin(),
              batch_norm=self.batch_norm))
     layers.append(
         Conv((2, 2, 128),
              strides=1,
              init=init_xavier_conv,
              activation=Rectlin(),
              batch_norm=self.batch_norm))
     layers.append(
         Affine(nout=256,
                init=init_xavier_affine,
                activation=Rectlin(),
                batch_norm=self.batch_norm))
     layers.append(Affine(nout=num_actions, init=init_xavier_affine))
     return layers
示例#3
0
    def generate_leafs(self, layer):
        """
        Given a key to the ssd_config, generate the leafs
        """
        config = self.ssd_config[layer]

        leaf_params = {
            'strides': 1,
            'padding': 1,
            'init': Xavier(local=True),
            'bias': Constant(0)
        }

        # to match caffe layer's naming
        if config['normalize']:
            layer += '_norm'

        priorbox_args = self.get_priorbox_args(config)
        mbox_prior = PriorBox(**priorbox_args)
        num_priors = mbox_prior.num_priors_per_pixel

        loc_name = layer + '_mbox_loc'
        mbox_loc = Conv((3, 3, 4 * num_priors), name=loc_name, **leaf_params)

        conf_name = layer + '_mbox_conf'
        mbox_conf = Conv((3, 3, self.num_classes * num_priors),
                         name=conf_name,
                         **leaf_params)

        return {
            'mbox_prior': mbox_prior,
            'mbox_loc': mbox_loc,
            'mbox_conf': mbox_conf
        }
示例#4
0
 def get_initializer(self, input_size):
     dnnInit = self.args.dnn_initializer
     if dnnInit == 'xavier':
         initializer = Xavier()
     elif dnnInit == 'fan_in':
         std_dev = 1.0 / math.sqrt(input_size)
         initializer = Uniform(low=-std_dev, high=std_dev)
     else:
         initializer = Gaussian(0, 0.01)
     return initializer
示例#5
0
def fit_model(train_set, val_set, num_epochs=50):
    relu = Rectlin()
    conv_params = {
        'strides': 1,
        'padding': 1,
        'init': Xavier(local=True),  # Xavier sqrt(3)/num_inputs [CHECK THIS]
        'bias': Constant(0),
        'activation': relu
    }

    layers = []
    layers.append(Conv((3, 3, 128), **conv_params))  # 3x3 kernel * 128 nodes
    layers.append(Pooling(2))
    layers.append(Conv((3, 3, 128), **conv_params))
    layers.append(Pooling(2))  # Highest value from 2x2 window.
    layers.append(Conv((3, 3, 128), **conv_params))
    layers.append(
        Dropout(keep=0.5)
    )  # Flattens Convolution into a flat array, with probability 0.5 sets activation values to 0
    layers.append(
        Affine(nout=128,
               init=GlorotUniform(),
               bias=Constant(0),
               activation=relu)
    )  # 1 value per conv kernel - Linear Combination of layers
    layers.append(Dropout(keep=0.5))
    layers.append(
        Affine(nout=2,
               init=GlorotUniform(),
               bias=Constant(0),
               activation=Softmax(),
               name="class_layer"))

    # initialize model object
    cnn = Model(layers=layers)
    cost = GeneralizedCost(costfunc=CrossEntropyMulti())

    optimizer = Adam()

    # callbacks = Callbacks(cnn)
    #    out_fname = 'yarin_fdl_out_data.h5'
    callbacks = Callbacks(cnn, eval_set=val_set,
                          eval_freq=1)  # , output_file=out_fname

    cnn.fit(train_set,
            optimizer=optimizer,
            num_epochs=num_epochs,
            cost=cost,
            callbacks=callbacks)

    return cnn
示例#6
0
def add_vgg_layers():

    # setup layers
    init1_vgg = Xavier(local=True)
    relu = Rectlin()

    conv_params = {
        'strides': 1,
        'padding': 1,
        'init': init1_vgg,
        'bias': Constant(0),
        'activation': relu
    }

    # Set up the model layers
    vgg_layers = []

    # set up 3x3 conv stacks with different feature map sizes
    vgg_layers.append(Conv((3, 3, 64), **conv_params))
    vgg_layers.append(Conv((3, 3, 64), **conv_params))
    vgg_layers.append(Pooling(2, strides=2))
    vgg_layers.append(Conv((3, 3, 128), **conv_params))
    vgg_layers.append(Conv((3, 3, 128), **conv_params))
    vgg_layers.append(Pooling(2, strides=2))
    vgg_layers.append(Conv((3, 3, 256), **conv_params))
    vgg_layers.append(Conv((3, 3, 256), **conv_params))
    vgg_layers.append(Conv((3, 3, 256), **conv_params))
    vgg_layers.append(Pooling(2, strides=2))
    vgg_layers.append(Conv((3, 3, 512), **conv_params))
    vgg_layers.append(Conv((3, 3, 512), **conv_params))
    vgg_layers.append(Conv((3, 3, 512), **conv_params))
    vgg_layers.append(Pooling(2, strides=2))
    vgg_layers.append(Conv((3, 3, 512), **conv_params))
    vgg_layers.append(Conv((3, 3, 512), **conv_params))
    vgg_layers.append(Conv((3, 3, 512), **conv_params))
    # not used after this layer
    # vgg_layers.append(Pooling(2, strides=2))
    # vgg_layers.append(Affine(nout=4096, init=initfc, bias=Constant(0), activation=relu))
    # vgg_layers.append(Dropout(keep=0.5))
    # vgg_layers.append(Affine(nout=4096, init=initfc, bias=Constant(0), activation=relu))
    # vgg_layers.append(Dropout(keep=0.5))
    # vgg_layers.append(Affine(nout=1000, init=initfc, bias=Constant(0), activation=Softmax()))

    return vgg_layers
示例#7
0
    type="image,localization",
    image=image_config,
    localization=localization_config,
    manifest_filename="train_json.csv",
    cache_directory="/home/auto-114/PycharmProjects/neon_study_10/cache",
    minibatch_size=1,
    macrobatch_size=1)

train = DataLoader(config, be)

# weight initialization
init_norm = Gaussian(loc=0.0, scale=0.01)

# setup model layers

init1_vgg = Xavier(local=True)
relu = Rectlin()

conv_params = {
    'strides': 1,
    'padding': 1,
    'init': init1_vgg,
    'bias': Constant(0),
    'activation': relu
}

# Set up the model layers
layers = []

# set up 3x3 conv stacks with different feature map sizes
layers.append(Conv((3, 3, 64), name="skip", **conv_params))
示例#8
0
    batch_size = 32 * 8  # for some reason bs 128 does not work with bias layers
else:
    batch_size = 32

# subset pct is set to make sure that every epoch has the same mb count
img_set_options = dict(repo_dir=args.data_dir,
                       inner_size=224,
                       dtype=np.float32,
                       subset_pct=0.09990891117239205)
train = ImageLoader(set_name='train',
                    scale_range=(256, 256),
                    shuffle=False,
                    do_transforms=False,
                    **img_set_options)

init1 = Xavier(local=False)
initx = Xavier(local=True)
bias = Constant(val=0.20)
relu = Rectlin()

common = dict(activation=relu, init=initx, bias=bias)
commonp1 = dict(activation=relu, init=initx, bias=bias, padding=1)
commonp2 = dict(activation=relu, init=initx, bias=bias, padding=2)
pool3s1p1 = dict(fshape=3, padding=1, strides=1)
pool3s2p1 = dict(fshape=3, padding=1, strides=2, op='max')


def inception(kvals, name):
    (p1, p2, p3, p4) = kvals

    branch1 = [Conv((1, 1, p1[0]), name=name + '1x1', **common)]
示例#9
0
parser.add_argument('--vgg_version', default='D', choices=['D', 'E'],
                    help='vgg model type')
parser.add_argument('--subset_pct', type=float, default=100,
                    help='subset of training dataset to use (percentage)')
parser.add_argument('--test_only', action='store_true',
                    help='skip fitting - evaluate metrics on trained model weights')
args = parser.parse_args()

img_set_options = dict(repo_dir=args.data_dir, inner_size=224,
                       subset_pct=args.subset_pct)
train = ImageLoader(set_name='train', scale_range=(256, 384),
                    shuffle=True, **img_set_options)
test = ImageLoader(set_name='validation', scale_range=(256, 256), do_transforms=False,
                   shuffle=False, **img_set_options)

init1 = Xavier(local=True)
initfc = GlorotUniform()

relu = Rectlin()
conv_params = {'init': init1,
               'strides': 1,
               'padding': 1,
               'bias': Constant(0),
               'activation': relu}

# Set up the model layers
layers = []

# set up 3x3 conv stacks with different feature map sizes
for nofm in [64, 128, 256, 512, 512]:
    layers.append(Conv((3, 3, nofm), **conv_params))
示例#10
0
              manifest_filename='manifest_subset2_augmented.csv',
              minibatch_size=args.batch_size,
              subset_fraction=1.0)
test_set = DataLoader(config, be)
test_set = TypeCast(test_set, index=0, dtype=np.float32)  # cast image to float
#test_set = OneHot(test_set, index=1, nclasses=2)

#init_uni = Gaussian(scale=0.05)
init_uni = GlorotUniform()
#opt_gdm = Adam(learning_rate=args.learning_rate, beta_1=0.9, beta_2=0.999)
opt_gdm = Adadelta(decay=0.95, epsilon=1e-6)

relu = Rectlin()
conv_params = {'strides': 1,
               'padding': 1,
               'init': Xavier(local=True),
               'bias': Constant(0),
               'activation': relu,
               'batch_norm': False}

# Set up the model layers
vgg_layers = []

# set up 3x3 conv stacks with different number of filters
vgg_layers.append(Conv((3, 3, 64), **conv_params))
vgg_layers.append(Conv((3, 3, 64), **conv_params))
vgg_layers.append(Pooling(2, strides=2))
vgg_layers.append(Conv((3, 3, 128), **conv_params))
vgg_layers.append(Conv((3, 3, 128), **conv_params))
vgg_layers.append(Pooling(2, strides=2))
vgg_layers.append(Conv((3, 3, 256), **conv_params))
示例#11
0
    def generate_layers(self):
        conv_params = {
            'strides': 1,
            'padding': 1,
            'init': Xavier(local=True),
            'bias': Constant(0),
            'activation': Rectlin()
        }

        params = {
            'init': Xavier(local=True),
            'bias': Constant(0),
            'activation': Rectlin()
        }

        # Set up the model layers
        trunk_layers = []

        # set up 3x3 conv stacks with different feature map sizes
        # use same names as Caffe model for comparison purposes
        trunk_layers.append(Conv((3, 3, 64), name='conv1_1',
                                 **conv_params))  # conv1_1
        trunk_layers.append(Conv((3, 3, 64), name='conv1_2', **conv_params))
        trunk_layers.append(Pooling(2, strides=2))
        trunk_layers.append(Conv((3, 3, 128), name='conv2_1',
                                 **conv_params))  # conv2_1
        trunk_layers.append(Conv((3, 3, 128), name='conv2_2', **conv_params))
        trunk_layers.append(Pooling(2, strides=2))
        trunk_layers.append(Conv((3, 3, 256), name='conv3_1',
                                 **conv_params))  # conv3_1
        trunk_layers.append(Conv((3, 3, 256), name='conv3_2', **conv_params))
        trunk_layers.append(Conv((3, 3, 256), name='conv3_3', **conv_params))
        trunk_layers.append(Pooling(2, strides=2))
        trunk_layers.append(Conv((3, 3, 512), name='conv4_1',
                                 **conv_params))  # conv4_1
        trunk_layers.append(Conv((3, 3, 512), name='conv4_2', **conv_params))
        trunk_layers.append(Conv((3, 3, 512), name='conv4_3', **conv_params))

        trunk_layers.append(Pooling(2, strides=2))
        trunk_layers.append(Conv((3, 3, 512), name='conv5_1',
                                 **conv_params))  # conv5_1
        trunk_layers.append(Conv((3, 3, 512), name='conv5_2', **conv_params))
        trunk_layers.append(Conv((3, 3, 512), name='conv5_3', **conv_params))
        trunk_layers.append(Pooling(3, strides=1, padding=1))
        trunk_layers.append(
            Conv((3, 3, 1024), dilation=6, padding=6, name='fc6',
                 **params))  # fc6
        trunk_layers.append(
            Conv((1, 1, 1024), dilation=1, padding=0, name='fc7',
                 **params))  # fc7

        trunk_layers.append(
            Conv((1, 1, 256), strides=1, padding=0, name='conv6_1', **params))
        trunk_layers.append(
            Conv((3, 3, 512), strides=2, padding=1, name='conv6_2', **params))

        trunk_layers.append(
            Conv((1, 1, 128), strides=1, padding=0, name='conv7_1', **params))
        trunk_layers.append(
            Conv((3, 3, 256), strides=2, padding=1, name='conv7_2', **params))

        # append conv8, conv9, conv10, etc. (if needed)
        matches = [re.search('conv(\d+)_2', key) for key in self.ssd_config]
        layer_nums = [
            int(m.group(1)) if m is not None else -1 for m in matches
        ]
        max_layer_num = np.max(layer_nums)

        if max_layer_num is not None:
            for layer_num in range(8, max_layer_num + 1):
                trunk_layers.append(
                    Conv((1, 1, 128),
                         strides=1,
                         padding=0,
                         name='conv{}_1'.format(layer_num),
                         **params))
                trunk_layers.append(
                    Conv((3, 3, 256),
                         strides=1,
                         padding=0,
                         name='conv{}_2'.format(layer_num),
                         **params))

        layers = []
        output_config = OrderedDict()
        mbox_index = 1

        for layer in self.ssd_config:

            index = self.find_insertion_index(trunk_layers, layer)
            conv_layer = self.get_conv_layer(trunk_layers, index)

            branch_node = BranchNode(name=layer + '_branch')
            trunk_layers.insert(index, branch_node)

            leafs = self.generate_leafs(layer)
            is_terminal = layer == 'conv{}_2'.format(max_layer_num)

            # append leafs to layers
            # mbox_loc_index and mbox_conf_index map to locations
            # in the output list of the model.

            if self.ssd_config[layer]['normalize']:
                branch = self.create_normalize_branch(leafs, branch_node,
                                                      layer)
                layers.append(branch)
                mbox_loc_index = (mbox_index, 0)
                mbox_conf_index = (mbox_index, 1)
                mbox_index += 1

            else:
                if is_terminal:
                    trunk_layers.append(leafs['mbox_loc'])
                    mbox_loc_index = (0, )
                else:
                    layers.append([branch_node, leafs['mbox_loc']])
                    mbox_loc_index = (mbox_index, )
                    mbox_index += 1

                layers.append([branch_node, leafs['mbox_conf']])
                mbox_conf_index = (mbox_index, )
                mbox_index += 1

            output_config[layer] = {
                'layers': leafs,
                'conv_layer': conv_layer,
                'index': {
                    'mbox_conf': mbox_conf_index,
                    'mbox_loc': mbox_loc_index
                }
            }

        layers.insert(0, trunk_layers)

        return layers, output_config
示例#12
0
    train_data, valid_data, train_label, valid_label = gene.load_data(
        ip_file_path, filename, names, validation_size=0.20)

    train_iter = ArrayIterator(train_data,
                               train_label,
                               nclass=nclass,
                               lshape=(1, 4),
                               name='train')
    val_iter = ArrayIterator(valid_data,
                             valid_label,
                             nclass=nclass,
                             lshape=(1, 4),
                             name='valid')

    # weight
    w = Xavier()

    # bias
    b = Constant()

    # setup model layers
    # fc1, Relu, dropout
    # fc2, Relu, dropout
    # fc3, Softmax, dropout
    layers = [
        Affine(nout=50, init=w, bias=b, activation=Rectlin()),
        Dropout(keep=0.5),
        Affine(nout=50, init=w, bias=b, activation=Rectlin()),
        Dropout(keep=0.4),
        Affine(nout=3, init=w, bias=b, activation=Softmax()),
        Dropout(keep=0.3)