Esempio n. 1
0
    def test_mobile_exporter(self):
        model = ModelHelper(name="mobile_exporter_test_model")
        # Test LeNet
        brew.conv(model, 'data', 'conv1', dim_in=1, dim_out=20, kernel=5)
        brew.max_pool(model, 'conv1', 'pool1', kernel=2, stride=2)
        brew.conv(model, 'pool1', 'conv2', dim_in=20, dim_out=50, kernel=5)
        brew.max_pool(model, 'conv2', 'pool2', kernel=2, stride=2)
        brew.fc(model, 'pool2', 'fc3', dim_in=50 * 4 * 4, dim_out=500)
        brew.relu(model, 'fc3', 'fc3')
        brew.fc(model, 'fc3', 'pred', 500, 10)
        brew.softmax(model, 'pred', 'out')

        # Create our mobile exportable networks
        workspace.RunNetOnce(model.param_init_net)
        init_net, predict_net = mobile_exporter.Export(
            workspace, model.net, model.params
        )

        # Populate the workspace with data
        np_data = np.random.rand(1, 1, 28, 28).astype(np.float32)
        workspace.FeedBlob("data", np_data)

        workspace.CreateNet(model.net)
        workspace.RunNet(model.net)
        ref_out = workspace.FetchBlob("out")

        # Clear the workspace
        workspace.ResetWorkspace()

        # Populate the workspace with data
        workspace.RunNetOnce(init_net)
        # Fake "data" is populated by init_net, we have to replace it
        workspace.FeedBlob("data", np_data)

        # Overwrite the old net
        workspace.CreateNet(predict_net, True)
        workspace.RunNet(predict_net.name)
        manual_run_out = workspace.FetchBlob("out")
        np.testing.assert_allclose(
            ref_out, manual_run_out, atol=1e-10, rtol=1e-10
        )

        # Clear the workspace
        workspace.ResetWorkspace()

        # Predictor interface test (simulates writing to disk)
        predictor = workspace.Predictor(
            init_net.SerializeToString(), predict_net.SerializeToString()
        )

        # Output is a vector of outputs but we only care about the first and only result
        predictor_out = predictor.run([np_data])
        assert len(predictor_out) == 1
        predictor_out = predictor_out[0]

        np.testing.assert_allclose(
            ref_out, predictor_out, atol=1e-10, rtol=1e-10
        )
    def test_mobile_exporter(self):
        model = ModelHelper(name="mobile_exporter_test_model")
        # Test LeNet
        brew.conv(model, 'data', 'conv1', dim_in=1, dim_out=20, kernel=5)
        brew.max_pool(model, 'conv1', 'pool1', kernel=2, stride=2)
        brew.conv(model, 'pool1', 'conv2', dim_in=20, dim_out=50, kernel=5)
        brew.max_pool(model, 'conv2', 'pool2', kernel=2, stride=2)
        brew.fc(model, 'pool2', 'fc3', dim_in=50 * 4 * 4, dim_out=500)
        brew.relu(model, 'fc3', 'fc3')
        brew.fc(model, 'fc3', 'pred', 500, 10)
        brew.softmax(model, 'pred', 'out')

        # Create our mobile exportable networks
        workspace.RunNetOnce(model.param_init_net)
        init_net, predict_net = mobile_exporter.Export(workspace, model.net,
                                                       model.params)

        # Populate the workspace with data
        np_data = np.random.rand(1, 1, 28, 28).astype(np.float32)
        workspace.FeedBlob("data", np_data)

        workspace.CreateNet(model.net)
        workspace.RunNet(model.net)
        ref_out = workspace.FetchBlob("out")

        # Clear the workspace
        workspace.ResetWorkspace()

        # Populate the workspace with data
        workspace.RunNetOnce(init_net)
        # Fake "data" is populated by init_net, we have to replace it
        workspace.FeedBlob("data", np_data)

        # Overwrite the old net
        workspace.CreateNet(predict_net, True)
        workspace.RunNet(predict_net.name)
        manual_run_out = workspace.FetchBlob("out")
        np.testing.assert_allclose(ref_out,
                                   manual_run_out,
                                   atol=1e-10,
                                   rtol=1e-10)

        # Clear the workspace
        workspace.ResetWorkspace()

        # Predictor interface test (simulates writing to disk)
        predictor = workspace.Predictor(init_net.SerializeToString(),
                                        predict_net.SerializeToString())

        # Output is a vector of outputs but we only care about the first and only result
        predictor_out = predictor.run([np_data])
        assert len(predictor_out) == 1
        predictor_out = predictor_out[0]

        np.testing.assert_allclose(ref_out,
                                   predictor_out,
                                   atol=1e-10,
                                   rtol=1e-10)
Esempio n. 3
0
    def testShapeInferenceConvNet(self):
        model = model_helper.ModelHelper(name="convtest")
        model.NHWC2NCHW("data", "data_nchw")
        brew.conv(model,
                  "data_nchw",
                  'conv1',
                  3,
                  64,
                  weight_init=("MSRAFill", {}),
                  kernel=7,
                  stride=2,
                  pad=3,
                  no_bias=0)
        brew.spatial_bn(model,
                        'conv1',
                        'conv1_spatbn_relu',
                        64,
                        epsilon=1e-3,
                        is_test=False)
        brew.relu(model, 'conv1_spatbn_relu', 'conv1_spatbn_relu')
        brew.max_pool(model, 'conv1_spatbn_relu', 'pool1', kernel=3, stride=2)
        brew.fc(model, 'pool1', 'fc', dim_in=(64 * 56 * 56), dim_out=100)
        brew.dropout(model, 'fc', 'fc_drop', is_test=False)
        model.Sigmoid('fc_drop', 'fc_sigm')
        brew.softmax(model, 'fc_sigm', 'softmax')
        model.LabelCrossEntropy(['softmax', 'label'], 'xent')
        loss = model.AveragedLoss('xent', 'loss')

        model.AddGradientOperators([loss])

        LR = model.param_init_net.ConstantFill([], 'LR', shape=[1], value=0.1)

        for param in model.GetParams():
            param_grad = model.param_to_grad[param]
            param_momentum = model.param_init_net.ConstantFill([param],
                                                               param +
                                                               '_momentum',
                                                               value=0.0)
            model.net.MomentumSGDUpdate(
                [param_grad, param_momentum, LR, param],
                [param_grad, param_momentum, param],
            )

        workspace.FeedBlob(
            "data",
            np.random.rand(16, 227, 227, 3).astype(np.float32),
        )
        workspace.FeedBlob(
            "label",
            (100 * np.random.rand(16)).astype(np.int32),
        )
        workspace.FeedBlob(
            "label",
            (100 * np.random.rand(16)).astype(np.int32),
        )
        # Then do automatic comparison test: run the next once to
        # initialize everything
        self.InferTensorRunAndCompare(model)
Esempio n. 4
0
def model_build_fun_deploy(model, loss_scale):
    last_out = create_resnet(model=model,
                             data='data',
                             num_input_channels=config.IMG_CHANNELS,
                             num_groups=args.groups,
                             num_labels=config.CLASS_NUM,
                             is_test=True)
    brew.softmax(model, last_out, "softmax")
    return []
    def test_extract_simple(self):
        from caffe2.python import brew
        from caffe2.python.model_helper import ModelHelper, ExtractPredictorNet

        model = ModelHelper(name="test", arg_scope={'order': 'NCHW'})
        [data, label] = brew.image_input(
            model,
            "reader",
            ["xx/data", "label"],
            is_test=1,
        )
        cnv = brew.conv(model, data, 'cnv', 32, 32, 4)
        a = brew.fc(model, cnv, 'a', 100, 200)
        pred = brew.fc(model, a, 'pred', 200, 5)
        brew.softmax(model, [pred, label], "softmax")

        (predict_net, export_blobs) = ExtractPredictorNet(
            net_proto=model.net.Proto(),
            input_blobs=["xx/data"],
            output_blobs=["pred"],
            renames={"xx/data": "image"},
        )
        export_blobs = set(export_blobs)

        ops = list(predict_net.Proto().op)
        for op in ops:
            self.assertFalse(op.type == "Softmax")
            self.assertFalse("xx/data" in op.input)

        # Note: image input should not be included
        self.assertEquals(ops[0].type, "Conv")
        self.assertEquals(ops[1].type, "FC")
        self.assertEquals(ops[2].type, "FC")
        self.assertEquals(len(ops), 3)

        # test rename happened
        self.assertEquals(ops[0].input[0], "image")

        # Check export blobs
        self.assertTrue("image" not in export_blobs)
        self.assertTrue("xx/data" not in export_blobs)
        self.assertEqual(set([str(p) for p in model.params]), export_blobs)

        # Check external inputs/outputs
        self.assertTrue("image" in predict_net.Proto().external_input)
        self.assertEquals(set(["pred"]),
                          set(predict_net.Proto().external_output))
        self.assertEqual(
            set(predict_net.Proto().external_input) -
            set([str(p) for p in model.params]), set(["image"]))
Esempio n. 6
0
    def test_extract_simple(self):
        from caffe2.python import brew
        from caffe2.python.model_helper import ModelHelper, ExtractPredictorNet

        model = ModelHelper(name="test", arg_scope={'order': 'NCHW'})
        [data, label] = brew.image_input(
            model,
            "reader", ["xx/data", "label"],
            is_test=1,
        )
        cnv = brew.conv(model, data, 'cnv', 32, 32, 4)
        a = brew.fc(model, cnv, 'a', 100, 200)
        pred = brew.fc(model, a, 'pred', 200, 5)
        brew.softmax(model, [pred, label], "softmax")

        (predict_net, export_blobs) = ExtractPredictorNet(
            net_proto=model.net.Proto(),
            input_blobs=["xx/data"],
            output_blobs=["pred"],
            renames={"xx/data": "image"},
        )
        export_blobs = set(export_blobs)

        ops = list(predict_net.Proto().op)
        for op in ops:
            self.assertFalse(op.type == "Softmax")
            self.assertFalse("xx/data" in op.input)

        # Note: image input should not be included
        self.assertEquals(ops[0].type, "Conv")
        self.assertEquals(ops[1].type, "FC")
        self.assertEquals(ops[2].type, "FC")
        self.assertEquals(len(ops), 3)

        # test rename happened
        self.assertEquals(ops[0].input[0], "image")

        # Check export blobs
        self.assertTrue("image" not in export_blobs)
        self.assertTrue("xx/data" not in export_blobs)
        self.assertEqual(set([str(p) for p in model.params]), export_blobs)

        # Check external inputs/outputs
        self.assertTrue("image" in predict_net.Proto().external_input)
        self.assertEquals(set(["pred"]), set(predict_net.Proto().external_output))
        self.assertEqual(
            set(predict_net.Proto().external_input) -
            set([str(p) for p in model.params]), set(["image"])
        )
Esempio n. 7
0
    def add_head_nodes(self, model, v, dim_in, fc_name, loss_scale=1.0):
        """Adds dense and softmax head nodes.

        :param model_helper.ModelHelper model: Current model to use.
        :param obj v: Input blobs.
        :param int dim_in: Number of input features.
        :param str fc_name: Name of a fully connected operator.
        :param float loss_scale: For multi-GPU case.
        :return: List with one head node. A softmax node if `phase` is `inference`
                 else `loss`.
        """
        v = brew.fc(model, v, fc_name, dim_in=dim_in, dim_out=self.num_classes)
        if self.dtype == 'float16':
            print(
                "[INFO] Converting logits from float16 to float32 for softmax layer"
            )
            v = model.net.HalfToFloat(v, v + '_fp32')
        if self.phase == 'inference':
            softmax = brew.softmax(model, v, 'softmax')
            head_nodes = [softmax]
        else:
            softmax, loss = model.SoftmaxWithLoss([v, 'softmax_label'],
                                                  ['softmax', 'loss'])
            prefix = model.net.Proto().name
            loss = model.Scale(loss, prefix + "_loss", scale=loss_scale)
            head_nodes = [loss]
        return head_nodes
Esempio n. 8
0
def AddLeNetModel(model, data):
    '''
	This part is the standard LeNet model: from data to the softmax prediction.

	For each convolutional layer we specify dim_in - number of input channels
	and dim_out - number or output channels. Also each Conv and MaxPool layer changes the
	image size. For example, kernel of size 5 reduces each side of an image by 4.

	While when we have kernel and stride sizes equal 2 in a MaxPool layer, it divides
	each side in half.

	Para encadenar layers, la dimension de salida tiene que coincidir con a dimension de entrada
	de la siguiente layer (sin contar las pool, solo las conv)
	'''
    #Each layer is created using brew, which in turn is using its operator hooks to instantiate each Op.
    # Image size: 28 x 28 -> 24 x 24
    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=5)
    # Image size: 24 x 24 -> 12 x 12
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    # Image size: 12 x 12 -> 8 x 8
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=100, kernel=5)
    # Image size: 8 x 8 -> 4 x 4
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
    # 100 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=100 * 4 * 4, dim_out=500)

    #TODO: RELU despues de cada conv layer -> no mejora mucho la accuracy
    relu = brew.relu(model, fc3, fc3)
    pred = brew.fc(model, relu, 'pred', 500, 10)
    softmax = brew.softmax(model, pred, 'softmax')
    return softmax
Esempio n. 9
0
    def test_caffe2_simple_model(self):
        model = ModelHelper(name="mnist")
        # how come those inputs don't break the forward pass =.=a
        workspace.FeedBlob("data", np.random.randn(1, 3, 64, 64).astype(np.float32))
        workspace.FeedBlob("label", np.random.randn(1, 1000).astype(np.int))

        with core.NameScope("conv1"):
            conv1 = brew.conv(model, "data", 'conv1', dim_in=1, dim_out=20, kernel=5)
            # Image size: 24 x 24 -> 12 x 12
            pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
            # Image size: 12 x 12 -> 8 x 8
            conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=100, kernel=5)
            # Image size: 8 x 8 -> 4 x 4
            pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
        with core.NameScope("classifier"):
            # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
            fc3 = brew.fc(model, pool2, 'fc3', dim_in=100 * 4 * 4, dim_out=500)
            relu = brew.relu(model, fc3, fc3)
            pred = brew.fc(model, relu, 'pred', 500, 10)
            softmax = brew.softmax(model, pred, 'softmax')
            xent = model.LabelCrossEntropy([softmax, "label"], 'xent')
            # compute the expected loss
            loss = model.AveragedLoss(xent, "loss")
        model.net.RunAllOnMKL()
        model.param_init_net.RunAllOnMKL()
        model.AddGradientOperators([loss], skip=1)
        blob_name_tracker = {}
        graph = c2_graph.model_to_graph_def(
            model,
            blob_name_tracker=blob_name_tracker,
            shapes={},
            show_simplified=False,
        )
        compare_proto(graph, self)
Esempio n. 10
0
def AddLeNetModel(model, data):
    '''
    This part is the standard LeNet model: from data to the softmax prediction.

    For each convolutional layer we specify dim_in - number of input channels
    and dim_out - number or output channels. Also each Conv and MaxPool layer changes the
    image size. For example, kernel of size 5 reduces each side of an image by 4.

    While when we have kernel and stride sizes equal 2 in a MaxPool layer, it divides
    each side in half.
    '''
    # Image size: 28 x 28 -> 24 x 24 / 350 x 350 -> 346 x 346
    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=3)
    # Image size: 346 x 346 -> 173 x 173
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    # Image size: 174 x 174
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    # Image size: 174 x 174 -> 87 x 87
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)

    # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
    # Here, the data is flattened from a tensor of dimension 50x4x4 to a vector of length 50*4*4
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 87 * 87, dim_out=500)
    relu3 = brew.relu(model, fc3, 'relu3')
    # Last FC Layer
    pred = brew.fc(model, relu3, 'pred', dim_in=500, dim_out=10)
    # Softmax Layer
    softmax = brew.softmax(model, pred, 'softmax')

    return softmax
Esempio n. 11
0
def AddLeNetModel(model, data):
    '''
    This part is the standard LeNet model: from data to the softmax prediction.

    For each convolutional layer we specify dim_in - number of input channels
    and dim_out - number or output channels. Also each Conv and MaxPool layer changes the
    image size. For example, kernel of size 5 reduces each side of an image by 4.

    While when we have kernel and stride sizes equal 2 in a MaxPool layer, it divides
    each side in half.
    '''
    # Image size: 28 x 28 -> 24 x 24
    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=5)
    # Image size: 24 x 24 -> 12 x 12
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    # Image size: 12 x 12 -> 8 x 8
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    # Image size: 8 x 8 -> 4 x 4
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
    # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)
    fc3 = brew.relu(model, fc3, fc3)
    pred = brew.fc(model, fc3, 'pred', 500, 10)
    softmax = brew.softmax(model, pred, 'softmax')
    return softmax
def AddLeNetModel(model, data, num_classes, image_height, image_width,
                  image_channels):
    # Image size: 28 x 28 -> 24 x 24
    ############# Change dim_in value if images are more than 1 color channel
    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=5)
    h, w = update_dims(height=image_height,
                       width=image_width,
                       kernel=5,
                       stride=1,
                       pad=0)
    # Image size: 24 x 24 -> 12 x 12
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    h, w = update_dims(height=h, width=w, kernel=2, stride=2, pad=0)
    # Image size: 12 x 12 -> 8 x 8
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    h, w = update_dims(height=h, width=w, kernel=5, stride=1, pad=0)
    # Image size: 8 x 8 -> 4 x 4
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
    h, w = update_dims(height=h, width=w, kernel=2, stride=2, pad=0)
    # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
    ############# Change dim_in value if images are not 28x28
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * h * w, dim_out=500)
    fc3 = brew.relu(model, fc3, fc3)
    pred = brew.fc(model, fc3, 'pred', 500, num_classes)
    softmax = brew.softmax(model, pred, 'softmax')
    return softmax
def AddLeNetModel(model, data):
    conv1 = brew.conv(model,
                      data,
                      'conv1',
                      dim_in=1,
                      dim_out=32,
                      kernel=3,
                      pad=1)
    conv1 = brew.relu(model, conv1, conv1)
    conv2 = brew.conv(model,
                      conv1,
                      'conv2',
                      dim_in=32,
                      dim_out=128,
                      kernel=3,
                      pad=1)
    conv2 = brew.relu(model, conv2, conv2)
    conv3 = brew.conv(model,
                      conv2,
                      'conv3',
                      dim_in=128,
                      dim_out=256,
                      kernel=3,
                      pad=1)
    conv3 = brew.relu(model, conv3, conv3)
    fc3 = brew.fc(model, conv3, 'fc3', dim_in=256 * 28 * 28, dim_out=512)
    fc3 = brew.relu(model, fc3, fc3)
    pred = brew.fc(model, fc3, 'pred', 512, 10)
    softmax = brew.softmax(model, pred, 'softmax')
    return softmax
Esempio n. 14
0
def add_lenet_fc_topk(model, data, **kwargs):
    '''
    Based on original LeNet structure, according to meProp, we add topk
    gradient selecting layer for fc layers
    '''
    # resolving arguments
    k = kwargs.get('k', 10)

    # Image size: 28 x 28 -> 24 x 24
    conv1 = brew.conv(model, data, 'conv1', dim_in=3, dim_out=20, kernel=5)
    # Image size: 24 x 24 -> 12 x 12
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    # Image size: 12 x 12 -> 8 x 8
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    # Image size: 8 x 8  -> 4 x 4
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)

    # DEBUG PRINT
    model.net.Print(pool2, [])

    # set topkgradhook for the hidden fc layers
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)
    fc3_hook = model.net.TopKGradHook(fc3, 'fc3_hook', k=k)
    relu = brew.relu(model, fc3_hook, fc3_hook)

    # don't set topkgradhook for the output fc layer
    pred = brew.fc(model, relu, 'pred', 500, 10)
    softmax = brew.softmax(model, pred, 'softmax')

    return softmax
Esempio n. 15
0
def add_lenet_conv_topk(model, data, **kwargs):
    '''
    Based on original LeNet structure, according to meProp, we add topk
    gradient selecting layer for conv layers
    '''
    # resolving arguments
    config = kwargs.get('config', {})
    k = kwargs.get('k', 10)

    # Image size: 28 x 28 -> 24 x 24
    conv1 = brew.conv(model, data, 'conv1', dim_in=3, dim_out=20, kernel=5)
    conv1_hook = model.net.TopKGradHook(conv1, 'conv1_hook', k=k)

    # Image size: 24 x 24 -> 12 x 12
    pool1 = brew.max_pool(model, conv1_hook, 'pool1', kernel=2, stride=2)

    # Image size: 12 x 12 -> 8 x 8
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    conv2_hook = model.net.TopKGradHook(conv2, 'conv2_hook', k=k)

    # Image size: 8 x 8  -> 4 x 4
    pool2 = brew.max_pool(model, conv2_hook, 'pool2', kernel=2, stride=2)

    # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)
    relu = brew.relu(model, fc3, fc3)
    pred = brew.fc(model, relu, 'pred', 500, config['model_arch']['num_classes'])
    softmax = brew.softmax(model, pred, 'softmax')

    return softmax
Esempio n. 16
0
        def AddModel(model, data):
            conv1 = brew.conv(model,
                              data,
                              'conv1',
                              dim_in=input_channels,
                              dim_out=10,
                              kernel=3,
                              stride=1,
                              pad=1,
                              training_mode=1)
            deconv1 = brew.conv_transpose(model,
                                          conv1,
                                          'deconv1',
                                          dim_in=10,
                                          dim_out=10,
                                          kernel=2,
                                          stride=2,
                                          pad=0,
                                          training_mode=1)
            fc1 = brew.fc(model,
                          deconv1,
                          'fc1',
                          dim_in=10 * 56 * 56,
                          dim_out=3)
            softmax = brew.softmax(model, fc1, 'softmax')

            return softmax
def ScaffoldModelCNN_AlexNet(model, classCount, data, imageDimension, amountOfChannels):
	brew.conv(model, data, 'conv1', amountOfChannels, 96, 11, stride=4, pad=0)
	brew.relu(model, 'conv1', 'conv1')
	brew.max_pool(model, 'norm1', 'pool1', kernel=3, stride=2, pad=0)

	brew.conv(model, 'pool1', 'conv2', 48, 256, 5, stride=1, pad=2)
	brew.relu(model, 'conv2', 'conv2')
	brew.max_pool(model, 'norm2', 'pool2', kernel=3, stride=2, pad=0)

	brew.conv(model, 'pool2', 'conv3', 256, 384, 3, stride=1, pad=1)
	brew.relu(model, 'conv3', 'conv3')

	brew.conv(model, 'conv3', 'conv4', 192, 384, 3, stride=1, pad=1)
	brew.relu(model, 'conv4', 'conv4')

	brew.conv(model, 'conv4', 'conv5', 192, 256, 3, stride=1, pad=1)
	brew.relu(model, 'conv5', 'conv5')
	brew.max_pool(model, 'conv5', 'pool5', kernel=3, stride=2, pad=1)

	brew.fc(model, 'pool5', 'fc6', 9216, 4096)
	brew.relu(model, 'fc6', 'fc6')
	brew.fc(model, 'fc6', 'fc7', 4096, 4096)
	brew.relu(model, 'fc7', 'fc7')
	brew.fc(model, 'fc7', 'fc8', 4096, 1000)

	return brew.softmax(model, 'fc8', 'softmax')
Esempio n. 18
0
def add_layers(model, data):
    # Image size: 32 x 32 x 3 -> 30 x 30 x 60
    conv1 = brew.conv(model, data, 'conv1', dim_in=3, dim_out=64, kernel=3)
    #add relu
    conv1 = brew.relu(model, conv1, conv1)
    # Image size: 30 x 30 -> 15 x 15
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    # Image size: 15 x 15 -> 12 x 12
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=64, dim_out=128, kernel=3)
    #add relu
    conv2 = brew.relu(model, conv2, conv2)
    # Image size: 12 x 12 -> 6 x 6
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
    # 32 * 6 * 6 stands for dim_out from previous layer multiplied by the image size
    # Hidden layer
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=128 * 6 * 6, dim_out=512)
    #add relu
    fc3 = brew.relu(model, fc3, fc3)
    #CO = model.param_init_net.ConstantFill([], "CO", shape=[1], value=0.18)
    #fc3 = brew.prelu(model, fc3, fc3)
    #output layer
    pred = brew.fc(model, fc3, 'pred', 512, 10)
    #add softmax
    probs = brew.softmax(model, pred, 'probs')
    return probs
Esempio n. 19
0
File: test.py Progetto: hbhbts/test
def AddNet(model, data):
    # image size: 28x28 -> 24x24
    conv1 = brew.conv(model,
                      data,
                      "conv1",
                      dim_in=1,
                      dim_out=20,
                      kernel=5,
                      stride=1)
    # image size: 24x24 -> 12x12
    pool1 = brew.max_pool(model, conv1, "pool1", kernel=2, stride=2)
    # image size: 12x12 -> 8x8
    conv2 = brew.conv(model,
                      pool1,
                      "conv2",
                      dim_in=20,
                      dim_out=100,
                      kernel=5,
                      stride=1)
    # image size: 8x8 -> 4x4
    pool2 = brew.max_pool(model, conv2, "pool2", kernel=2, stride=2)
    # image size: 100x4x4 -> 500
    fc3 = brew.fc(model, pool2, "fc3", dim_in=100 * 4 * 4, dim_out=500)
    relu = brew.relu(model, fc3, fc3)
    # image size: 500 -> 10
    fc4 = brew.fc(model, fc3, "fc4", dim_in=500, dim_out=10)
    # softmax
    softmax = brew.softmax(model, fc4, "softmax")
    return softmax
Esempio n. 20
0
def AddMLP_BN(model, data):
    '''
    Implement MLP model on MNIST
    '''
    # number of nuerons in fc layer
    num_units = 4096

    # NCHW: 64 x 1 x 28 x 28 -> 64 x 1 x 28 x 28
    drop1 = brew.dropout(model, data, 'drop1', ratio=0.5, is_test=0)

    # NCHW: 64 x 1 x 28 x 28 -> 64 x 4096
    fc2 = brew.fc(model, drop1, 'fc2', dim_in=1 * 28 * 28, dim_out=num_units)

    fc2_reshaped = model.Reshape([fc2], ['fc2_reshaped'], shape=(4, 2))

    # bn2 = brew.spatial_bn(model, fc2, 'bn2', num_units, epsilon=1e-3, momentum=0.9, is_test=is_test)
    #relu2 = brew.relu(model, fc2, 'relu2')

    #fc3 = brew.fc(model, relu2, 'fc3', dim_in=num_units, dim_out=num_units)
    # bn3 = brew.spatial_bn(model, fc3, 'bn3', bn_units, epsilon=1e-3, momentum=0.9, is_test=is_test)
    #relu3 = brew.relu(model, fc3, 'relu3')

    #fc4 = brew.fc(model, relu3, 'fc4', dim_in=num_units, dim_out=num_units)
    # bn4 = brew.spatial_bn(model, fc4, 'bn4', bn_units, epsilon=1e-3, momentum=0.9, is_test=is_test)
    #relu4 = brew.relu(model, fc4, 'relu4')

    #fc5 = brew.fc(model, relu4, 'fc5', dim_in=num_units, dim_out=10) # 10 for 10-classes
    # bn5 = brew.spatial_bn(model, fc5, 'bn5', 10, epsilon=1e-3, momentum=0.9, is_test=is_test)
    softmax = brew.softmax(model, fc2, 'softmax')
    return softmax
Esempio n. 21
0
def AddLeNetModel(model, data):
    '''
    This part is the standard LeNet model: from data to the softmax prediction.
    
    For each convolutional layer we specify dim_in - number of input channels
    and dim_out - number or output channels. Also each Conv and MaxPool layer changes the
    image size. For example, kernel of size 5 reduces each side of an image by 4.

    While when we have kernel and stride sizes equal 2 in a MaxPool layer, it divides
    each side in half.
    '''
    # Image size: 28 x 28 -> 24 x 24
    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=5)
    # Image size: 24 x 24 -> 12 x 12
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    # Image size: 12 x 12 -> 8 x 8
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    # Image size: 8 x 8 -> 4 x 4
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
    # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)
    fc3 = brew.relu(model, fc3, fc3)
    pred = brew.fc(model, fc3, 'pred', 500, 10)
    softmax = brew.softmax(model, pred, 'softmax')
    return softmax
Esempio n. 22
0
def AddLeNetModel(model, data, save_png=True):
    """This part is the standard LeNet model: from data to the softmax prediction.
    For each convolutional layer we specify dim_in - number of input channels
    and dim_out - number or output channels. Also each Conv and MaxPool layer changes the
    image size. For example, kernel of size 5 reduces each side of an image by 4.

    While when we have kernel and stride sizes equal 2 in a MaxPool layer, it divides
    each side in half.
    """
    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=5)
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)

    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)

    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)
    relu3 = brew.relu(model, fc3, 'relu3')

    pred = brew.fc(model, relu3, 'pred', dim_in=500, dim_out=10)
    softmax = brew.softmax(model, pred, 'softmax')

    if save_png:
        graph = net_drawer.GetPydotGraph(model.net)
        graph.write_png("LeNet.png")

    return softmax
Esempio n. 23
0
    def testShapeInferenceConvNet(self):
        model = model_helper.ModelHelper(name="convtest")
        model.NHWC2NCHW("data", "data_nchw")
        brew.conv(model, "data_nchw", 'conv1', 3, 64,
                   weight_init=("MSRAFill", {}), kernel=7,
                   stride=2, pad=3, no_bias=0)
        brew.spatial_bn(model, 'conv1', 'conv1_spatbn_relu', 64, epsilon=1e-3, is_test=False)
        brew.relu(model, 'conv1_spatbn_relu', 'conv1_spatbn_relu')
        brew.max_pool(model, 'conv1_spatbn_relu', 'pool1', kernel=3, stride=2)
        brew.fc(model, 'pool1', 'fc', dim_in=(64 * 56 * 56), dim_out=100)
        brew.dropout(model, 'fc', 'fc_drop', is_test=False)
        model.Sigmoid('fc_drop', 'fc_sigm')
        brew.softmax(model, 'fc_sigm', 'softmax')
        model.LabelCrossEntropy(['softmax', 'label'], 'xent')
        loss = model.AveragedLoss('xent', 'loss')

        model.AddGradientOperators([loss])

        LR = model.param_init_net.ConstantFill(
            [], 'LR', shape=[1], value=0.1
        )

        for param in model.GetParams():
            param_grad = model.param_to_grad[param]
            param_momentum = model.param_init_net.ConstantFill(
                [param], param + '_momentum', value=0.0
            )
            model.net.MomentumSGDUpdate(
                [param_grad, param_momentum, LR, param],
                [param_grad, param_momentum, param],
            )

        workspace.FeedBlob(
            "data",
            np.random.rand(16, 227, 227, 3).astype(np.float32),
        )
        workspace.FeedBlob(
            "label",
            (100 * np.random.rand(16)).astype(np.int32),
        )
        workspace.FeedBlob(
            "label",
            (100 * np.random.rand(16)).astype(np.int32),
        )
        # Then do automatic comparison test: run the next once to
        # initialize everything
        self.InferTensorRunAndCompare(model)
Esempio n. 24
0
def OverFeat(order, cudnn_ws, mkl):
    my_arg_scope = {
        'order': order,
        'use_cudnn': True,
        'cudnn_exhaustive_search': True,
        'ws_nbytes_limit': str(cudnn_ws)
    }
    model = ModelHelper(name='overfeat', arg_scope=my_arg_scope)
    conv1 = brew.conv(model,
                      "data",
                      "conv1",
                      3,
                      96,
                      11, ('XavierFill', {}), ('ConstantFill', {}),
                      stride=4)
    relu1 = brew.relu(model, conv1, "conv1")
    pool1 = brew.max_pool(model, relu1, "pool1", kernel=2, stride=2)
    conv2 = brew.conv(model, pool1, "conv2", 96, 256, 5, ('XavierFill', {}),
                      ('ConstantFill', {}))
    relu2 = brew.relu(model, conv2, "conv2")
    pool2 = brew.max_pool(model, relu2, "pool2", kernel=2, stride=2)
    conv3 = brew.conv(model,
                      pool2,
                      "conv3",
                      256,
                      512,
                      3, ('XavierFill', {}), ('ConstantFill', {}),
                      pad=1)
    relu3 = brew.relu(model, conv3, "conv3")
    conv4 = brew.conv(model,
                      relu3,
                      "conv4",
                      512,
                      1024,
                      3, ('XavierFill', {}), ('ConstantFill', {}),
                      pad=1)
    relu4 = brew.relu(model, conv4, "conv4")
    conv5 = brew.conv(model,
                      relu4,
                      "conv5",
                      1024,
                      1024,
                      3, ('XavierFill', {}), ('ConstantFill', {}),
                      pad=1)
    relu5 = brew.relu(model, conv5, "conv5")
    pool5 = brew.max_pool(model, relu5, "pool5", kernel=2, stride=2)
    fc6 = brew.fc(model, pool5, "fc6", 1024 * 6 * 6, 3072, ('XavierFill', {}),
                  ('ConstantFill', {}))
    relu6 = brew.relu(model, fc6, "fc6")
    fc7 = brew.fc(model, relu6, "fc7", 3072, 4096, ('XavierFill', {}),
                  ('ConstantFill', {}))
    relu7 = brew.relu(model, fc7, "fc7")
    fc8 = brew.fc(model, relu7, "fc8", 4096, 1000, ('XavierFill', {}),
                  ('ConstantFill', {}))
    pred = brew.softmax(model, fc8, "pred")
    xent = model.LabelCrossEntropy([pred, "label"], "xent")
    if not mkl:
        loss = model.AveragedLoss(xent, "loss")
    return model, 231
Esempio n. 25
0
 def test_simple_model(self):
     model = model_helper.ModelHelper(name="mnist")
     data, label = brew.image_input(model, ["db"], ["data", "label"],
                                    order="NCHW",
                                    use_gpu_transform=False,
                                    is_test=0)
     with core.NameScope("conv1"):
         conv1 = brew.conv(model,
                           data,
                           'conv1',
                           dim_in=1,
                           dim_out=20,
                           kernel=5)
         # Image size: 24 x 24 -> 12 x 12
         pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
         # Image size: 12 x 12 -> 8 x 8
         conv2 = brew.conv(model,
                           pool1,
                           'conv2',
                           dim_in=20,
                           dim_out=100,
                           kernel=5)
         # Image size: 8 x 8 -> 4 x 4
         pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
     with core.NameScope("classifier"):
         # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
         fc3 = brew.fc(model, pool2, 'fc3', dim_in=100 * 4 * 4, dim_out=500)
         relu = brew.relu(model, fc3, fc3)
         pred = brew.fc(model, relu, 'pred', 500, 10)
         softmax = brew.softmax(model, pred, 'softmax')
         xent = model.LabelCrossEntropy([softmax, label], 'xent')
         # compute the expected loss
         loss = model.AveragedLoss(xent, "loss")
     model.net.RunAllOnGPU()
     model.param_init_net.RunAllOnGPU()
     model.AddGradientOperators([loss], skip=1)
     blob_name_tracker = {}
     graph = tb.model_to_graph_def(
         model,
         blob_name_tracker=blob_name_tracker,
         shapes={},
         show_simplified=False,
     )
     self.assertEqual(
         blob_name_tracker['GRADIENTS/conv1/conv1_b_grad'],
         'conv1/conv1_b_grad',
     )
     self.maxDiff = None
     # We can't guarantee the order in which they appear, so we sort
     # both before we compare them
     sep = "node {"
     expected = "\n".join(
         sorted(sep + "\n  " + part.strip()
                for part in EXPECTED_MNIST.strip().split(sep)
                if part.strip()))
     actual = "\n".join(
         sorted(sep + "\n  " + part.strip()
                for part in str(graph).strip().split(sep) if part.strip()))
     self.assertMultiLineEqual(actual, expected)
def AddLeNetModel(model, data):
    fc1 = brew.fc(model, data, 'fc1', dim_in=784, dim_out=1000)
    fc1 = brew.relu(model, fc1, fc1)
    fc2 = brew.fc(model, fc1, 'fc2', dim_in=1000, dim_out=1000)
    fc2 = brew.relu(model, fc2, fc2)
    pred = brew.fc(model, fc2, 'fc3', dim_in=1000, dim_out=10)
    softmax = brew.softmax(model, pred, 'softmax')
    return softmax
Esempio n. 27
0
def Add_Original_CIFAR10_Model(model,
                               data,
                               num_classes,
                               image_height,
                               image_width,
                               image_channels,
                               save_png=True):
    conv1 = brew.conv(model,
                      data,
                      'conv1',
                      dim_in=image_channels,
                      dim_out=32,
                      kernel=5,
                      stride=1,
                      pad=2)
    h, w = update_dims(height=image_height,
                       width=image_width,
                       kernel=5,
                       stride=1,
                       pad=2)
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=3, stride=2)
    h, w = update_dims(height=h, width=w, kernel=3, stride=2, pad=0)
    relu1 = brew.relu(model, pool1, 'relu1')

    conv2 = brew.conv(model,
                      relu1,
                      'conv2',
                      dim_in=32,
                      dim_out=32,
                      kernel=5,
                      stride=1,
                      pad=2)
    h, w = update_dims(height=h, width=w, kernel=5, stride=1, pad=2)
    relu2 = brew.relu(model, conv2, 'relu2')
    pool2 = brew.average_pool(model, relu2, 'pool2', kernel=3, stride=2)
    h, w = update_dims(height=h, width=w, kernel=3, stride=2, pad=0)

    conv3 = brew.conv(model,
                      pool2,
                      'conv3',
                      dim_in=32,
                      dim_out=64,
                      kernel=5,
                      stride=1,
                      pad=2)
    h, w = update_dims(height=h, width=w, kernel=5, stride=1, pad=2)
    relu3 = brew.relu(model, conv3, 'relu3')
    pool3 = brew.average_pool(model, relu3, 'pool3', kernel=3, stride=2)
    h, w = update_dims(height=h, width=w, kernel=3, stride=2, pad=0)

    fc1 = brew.fc(model, pool3, 'fc1', dim_in=64 * h * w, dim_out=64)
    fc2 = brew.fc(model, fc1, 'fc2', dim_in=64, dim_out=num_classes)

    softmax = brew.softmax(model, fc2, 'softmax')
    if save_png:
        graph = net_drawer.GetPydotGraph(model.net, rankdir="LR")
        graph.write_png("CIFAR10_Model.png")
    return softmax
Esempio n. 28
0
def AddMLPModel(model, data):
    size = INPUT_WIDTH * INPUT_HEIGHT * INPUT_LAYERS
    sizes = [INPUT_WIDTH, INPUT_HEIGHT * 2, size * 2, CLASSES]
    layer = data
    for i in range(len(sizes) - 1):
        layer = brew.fc(model, layer, 'dense_{}'.format(i), dim_in=sizes[i], dim_out=sizes[i + 1])
        layer = brew.relu(model, layer, 'relu_{}'.format(i))
    softmax = brew.softmax(model, layer, 'softmax')
    return softmax
Esempio n. 29
0
def AddMLPModel(model, data):
    size = 28 * 28 * 1
    sizes = [size, size * 2, size * 2, 10]
    layer = data
    for i in range(len(sizes) - 1):
        layer = brew.fc(model, layer, 'dense_{}'.format(i), dim_in=sizes[i], dim_out=sizes[i + 1])
        layer = brew.relu(model, layer, 'relu_{}'.format(i))
    softmax = brew.softmax(model, layer, 'softmax')
    return softmax
Esempio n. 30
0
def AddLeNetModel(model, data):
    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=5)
    pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)
    pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)
    fc3 = brew.relu(model, fc3, fc3)
    pred = brew.fc(model, fc3, 'pred', 500, 10)
    softmax = brew.softmax(model, pred, 'softmax')
Esempio n. 31
0
 def add_softmax(self, prev_blob, label=None):
     if label is not None:
         (softmax, loss) = self.model.SoftmaxWithLoss(
             [prev_blob, label],
             ['softmax', 'loss'],
         )
         return (softmax, loss)
     else:
         return brew.softmax(self.model, prev_blob, 'softmax')
Esempio n. 32
0
def AddAlexNet(model, data):

    conv1 = brew.conv(model,
                      data,
                      "conv1",
                      3,
                      64,
                      11, ('XavierFill', {}), ('ConstantFill', {}),
                      stride=4,
                      pad=2)
    relu1 = brew.relu(model, conv1, "conv1")
    pool1 = brew.max_pool(model, relu1, "pool1", kernel=3, stride=2)
    conv2 = brew.conv(model,
                      pool1,
                      "conv2",
                      64,
                      192,
                      5, ('XavierFill', {}), ('ConstantFill', {}),
                      pad=2)
    relu2 = brew.relu(model, conv2, "conv2")
    pool2 = brew.max_pool(model, relu2, "pool2", kernel=3, stride=2)
    conv3 = brew.conv(model,
                      pool2,
                      "conv3",
                      192,
                      384,
                      3, ('XavierFill', {}), ('ConstantFill', {}),
                      pad=1)
    relu3 = brew.relu(model, conv3, "conv3")
    conv4 = brew.conv(model,
                      relu3,
                      "conv4",
                      384,
                      256,
                      3, ('XavierFill', {}), ('ConstantFill', {}),
                      pad=1)
    relu4 = brew.relu(model, conv4, "conv4")
    conv5 = brew.conv(model,
                      relu4,
                      "conv5",
                      256,
                      256,
                      3, ('XavierFill', {}), ('ConstantFill', {}),
                      pad=1)
    relu5 = brew.relu(model, conv5, "conv5")
    pool5 = brew.max_pool(model, relu5, "pool5", kernel=3, stride=2)
    fc6 = brew.fc(model, pool5, "fc6", 256 * 6 * 6, 4096, ('XavierFill', {}),
                  ('ConstantFill', {}))
    relu6 = brew.relu(model, fc6, "fc6")
    fc7 = brew.fc(model, relu6, "fc7", 4096, 4096, ('XavierFill', {}),
                  ('ConstantFill', {}))
    relu7 = brew.relu(model, fc7, "fc7")
    fc8 = brew.fc(model, relu7, "fc8", 4096, 10, ('XavierFill', {}),
                  ('ConstantFill', {}))
    pred = brew.softmax(model, fc8, "pred")
    return pred
def AddLeNetModel(model, data, device_opts):
    '''
    This part is the standard LeNet model: from data to the softmax prediction.

    For each convolutional layer we specify dim_in - number of input channels
    and dim_out - number or output channels. Also each Conv and MaxPool layer changes the
    image size. For example, kernel of size 5 reduces each side of an image by 4.

    While when we have kernel and stride sizes equal 2 in a MaxPool layer, it divides
    each side in half.
    '''
    with core.DeviceScope(device_opts):
        ############# Change dim_in value if images are more than 1 color channel
        # Image size: 64x64
        conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=32, kernel=5)
        h, w = update_dims(height=image_height,
                           width=image_width,
                           kernel=5,
                           stride=1,
                           pad=0)
        # Image size: 60x60
        pool1 = brew.max_pool(model, conv1, 'pool1', kernel=2, stride=2)
        h, w = update_dims(height=h, width=w, kernel=2, stride=2, pad=0)
        relu1 = brew.relu(model, pool1, 'relu1')
        # Image size: 30x30
        conv2 = brew.conv(model,
                          relu1,
                          'conv2',
                          dim_in=32,
                          dim_out=64,
                          kernel=5)
        h, w = update_dims(height=h, width=w, kernel=5, stride=1, pad=0)
        # Image size: 26x26
        pool2 = brew.max_pool(model, conv2, 'pool2', kernel=2, stride=2)
        h, w = update_dims(height=h, width=w, kernel=2, stride=2, pad=0)
        relu2 = brew.relu(model, pool2, 'relu2')
        # Image size: 13x13
        conv3 = brew.conv(model,
                          relu2,
                          'conv3',
                          dim_in=64,
                          dim_out=64,
                          kernel=5)
        h, w = update_dims(height=h, width=w, kernel=5, stride=1, pad=0)
        # Image size: 9x9
        pool3 = brew.max_pool(model, conv3, 'pool3', kernel=2, stride=2)
        h, w = update_dims(height=h, width=w, kernel=2, stride=2, pad=0)
        relu3 = brew.relu(model, pool3, 'relu3')
        # Image size: 4x4
        # 50 * 4 * 4 stands for dim_out from previous layer multiplied by the image size
        ############# Change dim_in value if images are not 28x28
        fc3 = brew.fc(model, relu3, 'fc3', dim_in=64 * h * w, dim_out=500)
        fc3 = brew.relu(model, fc3, fc3)
        pred = brew.fc(model, fc3, 'pred', 500, num_classes)
        softmax = brew.softmax(model, pred, 'softmax')
        return softmax
Esempio n. 34
0
    def test_get_complete_net(self):
        model = model_helper.ModelHelper("test_orig")
        conv = brew.conv(
            model,
            "input",
            "conv",
            dim_in=3,
            dim_out=16,
            weight_init=("MSRAFill", {}),
            kernel=3,
            stride=1,
            pad=0,
        )
        conv = brew.spatial_bn(model,
                               conv,
                               "conv_bn",
                               16,
                               epsilon=1e-3,
                               is_test=False)
        conv = brew.relu(model, conv, "conv_relu")
        pred = brew.fc(model, conv, "pred", dim_in=16 * 3 * 3, dim_out=10)
        brew.softmax(model, pred, "softmax")
        net = model.GetCompleteNet()
        model2 = model_helper.ModelHelper("test_new")
        model2.ConstructInitTrainNetfromNet(net)

        net = model.param_init_net
        net2 = model2.param_init_net
        for op1, op2 in zip(net.Proto().op, net2.Proto().op):
            op1.debug_info = op1.debug_info + "/param_init_net"
            self.assertEqual(
                op1, op2, "op mismatch between {}\n and {}\n".format(op1, op2))
        net = model.net
        net2 = model2.net
        for op1, op2 in zip(net.Proto().op, net2.Proto().op):
            self.assertEqual(
                op1, op2, "op mismatch between {}\n and {}\n".format(op1, op2))
        # this is not guaranteed in other situations where user define own net
        self.assertEqual(
            sorted(map(str, net.external_inputs)),
            sorted(map(str, net2.external_inputs)),
        )
Esempio n. 35
0
    def test_tensorboard_graphs(self):
        model = model_helper.ModelHelper(name="overfeat")
        data, label = brew.image_input(
            model, ["db"], ["data", "label"], is_test=0
        )
        with core.NameScope("conv1"):
            conv1 = brew.conv(model, data, "conv1", 3, 96, 11, stride=4)
            relu1 = brew.relu(model, conv1, conv1)
            pool1 = brew.max_pool(model, relu1, "pool1", kernel=2, stride=2)
        with core.NameScope("classifier"):
            fc = brew.fc(model, pool1, "fc", 4096, 1000)
            pred = brew.softmax(model, fc, "pred")
            xent = model.LabelCrossEntropy([pred, label], "xent")
            loss = model.AveragedLoss(xent, "loss")
        model.AddGradientOperators([loss], skip=1)

        c2_dir = tempfile.mkdtemp()
        tf_dir = tempfile.mkdtemp()

        with open(os.path.join(c2_dir, "init"), "w") as f:
            f.write(str(model.param_init_net.Proto()))
        with open(os.path.join(c2_dir, "net"), "w") as f:
            f.write(str(model.net.Proto()))
        runner = click.testing.CliRunner()
        result = runner.invoke(
            tb.cli,
            ["tensorboard-graphs",
             "--c2-netdef", os.path.join(c2_dir, "init"),
             "--c2-netdef", os.path.join(c2_dir, "net"),
             "--tf-dir", tf_dir])
        self.assertEqual(result.exit_code, 0)
        entries = list(os.walk(tf_dir))
        self.assertEqual(len(entries), 1)
        ((d, _, (fname,)),) = entries
        self.assertEqual(tf_dir, d)
        events = list(tf.train.summary_iterator(os.path.join(tf_dir, fname)))
        self.assertEqual(len(events), 3)
        events = events[1:]
        nets = [model.param_init_net, model.net]
        for i, (event, net) in enumerate(zip(events, nets), start=1):
            self.assertEqual(event.step, i)
            self.assertEqual(event.wall_time, i)
            g = tf.GraphDef()
            g.ParseFromString(event.graph_def)
            self.assertMultiLineEqual(
                str(g),
                str(tb_exporter.nets_to_graph_def([net])))
Esempio n. 36
0
def _calc_attention_weights(
    model,
    attention_logits_transposed,
    scope,
    encoder_lengths=None,
):
    if encoder_lengths is not None:
        attention_logits_transposed = model.net.SequenceMask(
            [attention_logits_transposed, encoder_lengths],
            ['masked_attention_logits'],
            mode='sequence',
        )

    # [batch_size, encoder_length, 1]
    attention_weights_3d = brew.softmax(
        model,
        attention_logits_transposed,
        s(scope, 'attention_weights_3d'),
        engine='CUDNN',
        axis=1,
    )
    return attention_weights_3d
Esempio n. 37
0
def create_resnet_32x32(
    model, data, num_input_channels, num_groups, num_labels, is_test=False
):
    '''
    Create residual net for smaller images (sec 4.2 of He et. al (2015))
    num_groups = 'n' in the paper
    '''
    # conv1 + maxpool
    brew.conv(
        model, data, 'conv1', num_input_channels, 16, kernel=3, stride=1
    )
    brew.spatial_bn(
        model, 'conv1', 'conv1_spatbn', 16, epsilon=1e-3, is_test=is_test
    )
    brew.relu(model, 'conv1_spatbn', 'relu1')

    # Number of blocks as described in sec 4.2
    filters = [16, 32, 64]

    builder = ResNetBuilder(model, 'relu1', is_test=is_test)
    prev_filters = 16
    for groupidx in range(0, 3):
        for blockidx in range(0, 2 * num_groups):
            builder.add_simple_block(
                prev_filters if blockidx == 0 else filters[groupidx],
                filters[groupidx],
                down_sampling=(True if blockidx == 0 and
                               groupidx > 0 else False))
        prev_filters = filters[groupidx]

    # Final layers
    brew.average_pool(
        model, builder.prev_blob, 'final_avg', kernel=8, stride=1
    )
    brew.fc(model, 'final_avg', 'last_out', 64, num_labels)
    softmax = brew.softmax(model, 'last_out', 'softmax')
    return softmax
Esempio n. 38
0
def _calc_attention_weights(
    model,
    attention_logits_transposed,
    scope,
    encoder_lengths=None,
):
    if encoder_lengths is not None:
        attention_logits = model.net.Squeeze(
            [attention_logits_transposed],
            [attention_logits_transposed],
            dims=[2],
        )
        flat_attention_logits = model.net.UnpackSegments(
            [encoder_lengths, attention_logits],
            'flat_attention_logits',
        )
        masked_attention_logits = model.net.PackSegments(
            [encoder_lengths, flat_attention_logits],
            'masked_attention_logits',
            pad_minf=True,
        )
        attention_logits_transposed = model.net.ExpandDims(
            [masked_attention_logits],
            [masked_attention_logits],
            dims=[2],
        )

    # [batch_size, encoder_length, 1]
    attention_weights_3d = brew.softmax(
        model,
        attention_logits_transposed,
        s(scope, 'attention_weights_3d'),
        engine='CUDNN',
        axis=1,
    )
    return attention_weights_3d
Esempio n. 39
0
 def Softmax(self, *args, **kwargs):
     return brew.softmax(self, *args, use_cudnn=self.use_cudnn, **kwargs)
Esempio n. 40
0
def AlexNet(order, cudnn_ws):
    my_arg_scope = {
        'order': order,
        'use_cudnn': True,
        'cudnn_exhaustive_search': True,
    }
    if cudnn_ws:
        my_arg_scope['ws_nbytes_limit'] = cudnn_ws
    model = model_helper.ModelHelper(
        name="alexnet",
        arg_scope=my_arg_scope,
    )
    conv1 = brew.conv(
        model,
        "data",
        "conv1",
        3,
        64,
        11, ('XavierFill', {}), ('ConstantFill', {}),
        stride=4,
        pad=2
    )
    relu1 = brew.relu(model, conv1, "conv1")
    pool1 = brew.max_pool(model, relu1, "pool1", kernel=3, stride=2)
    conv2 = brew.conv(
        model,
        pool1,
        "conv2",
        64,
        192,
        5,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=2
    )
    relu2 = brew.relu(model, conv2, "conv2")
    pool2 = brew.max_pool(model, relu2, "pool2", kernel=3, stride=2)
    conv3 = brew.conv(
        model,
        pool2,
        "conv3",
        192,
        384,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu3 = brew.relu(model, conv3, "conv3")
    conv4 = brew.conv(
        model,
        relu3,
        "conv4",
        384,
        256,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu4 = brew.relu(model, conv4, "conv4")
    conv5 = brew.conv(
        model,
        relu4,
        "conv5",
        256,
        256,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu5 = brew.relu(model, conv5, "conv5")
    pool5 = brew.max_pool(model, relu5, "pool5", kernel=3, stride=2)
    fc6 = brew.fc(
        model,
        pool5, "fc6", 256 * 6 * 6, 4096, ('XavierFill', {}),
        ('ConstantFill', {})
    )
    relu6 = brew.relu(model, fc6, "fc6")
    fc7 = brew.fc(
        model, relu6, "fc7", 4096, 4096, ('XavierFill', {}), ('ConstantFill', {})
    )
    relu7 = brew.relu(model, fc7, "fc7")
    fc8 = brew.fc(
        model, relu7, "fc8", 4096, 1000, ('XavierFill', {}), ('ConstantFill', {})
    )
    pred = brew.softmax(model, fc8, "pred")
    xent = model.net.LabelCrossEntropy([pred, "label"], "xent")
    model.net.AveragedLoss(xent, "loss")
    return model, 224
Esempio n. 41
0
def OverFeat(order, cudnn_ws, device):
    my_arg_scope = {'order': order, 'use_cudnn': True,
                    'cudnn_exhaustive_search': True,
                    'ws_nbytes_limit': str(cudnn_ws)}
    model = ModelHelper(name='overfeat', arg_scope=my_arg_scope)
    conv1 = brew.conv(
        model,
        "data",
        "conv1",
        3,
        96,
        11,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        stride=4
    )
    relu1 = brew.relu(model, conv1, "conv1")
    pool1 = brew.max_pool(model, relu1, "pool1", kernel=2, stride=2)
    conv2 = brew.conv(
        model, pool1, "conv2", 96, 256, 5, ('XavierFill', {}), ('ConstantFill', {})
    )
    relu2 = brew.relu(model, conv2, "conv2")
    pool2 = brew.max_pool(model, relu2, "pool2", kernel=2, stride=2)
    conv3 = brew.conv(
        model,
        pool2,
        "conv3",
        256,
        512,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu3 = brew.relu(model, conv3, "conv3")
    conv4 = brew.conv(
        model,
        relu3,
        "conv4",
        512,
        1024,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu4 = brew.relu(model, conv4, "conv4")
    conv5 = brew.conv(
        model,
        relu4,
        "conv5",
        1024,
        1024,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu5 = brew.relu(model, conv5, "conv5")
    pool5 = brew.max_pool(model, relu5, "pool5", kernel=2, stride=2)
    fc6 = brew.fc(
        model, pool5, "fc6", 1024 * 6 * 6, 3072, ('XavierFill', {}),
        ('ConstantFill', {})
    )
    relu6 = brew.relu(model, fc6, "fc6")
    fc7 = brew.fc(
        model, relu6, "fc7", 3072, 4096, ('XavierFill', {}), ('ConstantFill', {})
    )
    relu7 = brew.relu(model, fc7, "fc7")
    fc8 = brew.fc(
        model, relu7, "fc8", 4096, 1000, ('XavierFill', {}), ('ConstantFill', {})
    )
    pred = brew.softmax(model, fc8, "pred")
    xent = model.LabelCrossEntropy([pred, "label"], "xent")
    if device != 'MKL':
        loss = model.AveragedLoss(xent, "loss")
    return model, 231
Esempio n. 42
0
def VGGA(order, cudnn_ws, device):
    my_arg_scope = {'order': order, 'use_cudnn': True,
                    'cudnn_exhaustive_search': True,
                    'ws_nbytes_limit': str(cudnn_ws)}
    model = ModelHelper(name='vgg-a', arg_scope=my_arg_scope)
    conv1 = brew.conv(
        model,
        "data",
        "conv1",
        3,
        64,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu1 = brew.relu(model, conv1, "conv1")
    pool1 = brew.max_pool(model, relu1, "pool1", kernel=2, stride=2)
    conv2 = brew.conv(
        model,
        pool1,
        "conv2",
        64,
        128,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu2 = brew.relu(model, conv2, "conv2")
    pool2 = brew.max_pool(model, relu2, "pool2", kernel=2, stride=2)
    conv3 = brew.conv(
        model,
        pool2,
        "conv3",
        128,
        256,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu3 = brew.relu(model, conv3, "conv3")
    conv4 = brew.conv(
        model,
        relu3,
        "conv4",
        256,
        256,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu4 = brew.relu(model, conv4, "conv4")
    pool4 = brew.max_pool(model, relu4, "pool4", kernel=2, stride=2)
    conv5 = brew.conv(
        model,
        pool4,
        "conv5",
        256,
        512,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu5 = brew.relu(model, conv5, "conv5")
    conv6 = brew.conv(
        model,
        relu5,
        "conv6",
        512,
        512,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu6 = brew.relu(model, conv6, "conv6")
    pool6 = brew.max_pool(model, relu6, "pool6", kernel=2, stride=2)
    conv7 = brew.conv(
        model,
        pool6,
        "conv7",
        512,
        512,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu7 = brew.relu(model, conv7, "conv7")
    conv8 = brew.conv(
        model,
        relu7,
        "conv8",
        512,
        512,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu8 = brew.relu(model, conv8, "conv8")
    pool8 = brew.max_pool(model, relu8, "pool8", kernel=2, stride=2)

    fcix = brew.fc(
        model, pool8, "fcix", 512 * 7 * 7, 4096, ('XavierFill', {}),
        ('ConstantFill', {})
    )
    reluix = brew.relu(model, fcix, "fcix")
    fcx = brew.fc(
        model, reluix, "fcx", 4096, 4096, ('XavierFill', {}), ('ConstantFill', {})
    )
    relux = brew.relu(model, fcx, "fcx")
    fcxi = brew.fc(
        model, relux, "fcxi", 4096, 1000, ('XavierFill', {}), ('ConstantFill', {})
    )
    pred = brew.softmax(model, fcxi, "pred")
    xent = model.LabelCrossEntropy([pred, "label"], "xent")
    if device != 'MKL':
        loss = model.AveragedLoss(xent, "loss")
    return model, 231
Esempio n. 43
0
def create_resnet50(
    model,
    data,
    num_input_channels,
    num_labels,
    label=None,
    is_test=False,
    no_loss=False,
    no_bias=0,
    conv1_kernel=7,
    conv1_stride=2,
    final_avg_kernel=7,
):
    # conv1 + maxpool
    brew.conv(
        model,
        data,
        'conv1',
        num_input_channels,
        64,
        weight_init=("MSRAFill", {}),
        kernel=conv1_kernel,
        stride=conv1_stride,
        pad=3,
        no_bias=no_bias
    )

    brew.spatial_bn(
        model,
        'conv1',
        'conv1_spatbn_relu',
        64,
        epsilon=1e-3,
        momentum=0.1,
        is_test=is_test
    )
    brew.relu(model, 'conv1_spatbn_relu', 'conv1_spatbn_relu')
    brew.max_pool(model, 'conv1_spatbn_relu', 'pool1', kernel=3, stride=2)

    # Residual blocks...
    builder = ResNetBuilder(model, 'pool1', no_bias=no_bias,
                            is_test=is_test, spatial_bn_mom=0.1)

    # conv2_x (ref Table 1 in He et al. (2015))
    builder.add_bottleneck(64, 64, 256)
    builder.add_bottleneck(256, 64, 256)
    builder.add_bottleneck(256, 64, 256)

    # conv3_x
    builder.add_bottleneck(256, 128, 512, down_sampling=True)
    for _ in range(1, 4):
        builder.add_bottleneck(512, 128, 512)

    # conv4_x
    builder.add_bottleneck(512, 256, 1024, down_sampling=True)
    for _ in range(1, 6):
        builder.add_bottleneck(1024, 256, 1024)

    # conv5_x
    builder.add_bottleneck(1024, 512, 2048, down_sampling=True)
    builder.add_bottleneck(2048, 512, 2048)
    builder.add_bottleneck(2048, 512, 2048)

    # Final layers
    final_avg = brew.average_pool(
        model,
        builder.prev_blob,
        'final_avg',
        kernel=final_avg_kernel,
        stride=1,
    )

    # Final dimension of the "image" is reduced to 7x7
    last_out = brew.fc(
        model, final_avg, 'last_out_L{}'.format(num_labels), 2048, num_labels
    )

    if no_loss:
        return last_out

    # If we create model for training, use softmax-with-loss
    if (label is not None):
        (softmax, loss) = model.SoftmaxWithLoss(
            [last_out, label],
            ["softmax", "loss"],
        )

        return (softmax, loss)
    else:
        # For inference, we just return softmax
        return brew.softmax(model, last_out, "softmax")
Esempio n. 44
0
def Inception(order, cudnn_ws, device):
    my_arg_scope = {'order': order, 'use_cudnn': True,
                    'cudnn_exhaustive_search': True,
                    'ws_nbytes_limit': str(cudnn_ws)}
    model = ModelHelper(name="inception", arg_scope=my_arg_scope)
    conv1 = brew.conv(
        model,
        "data",
        "conv1",
        3,
        64,
        7,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        stride=2,
        pad=3
    )
    relu1 = brew.relu(model, conv1, "conv1")
    pool1 = brew.max_pool(model, relu1, "pool1", kernel=3, stride=2, pad=1)
    conv2a = brew.conv(
        model, pool1, "conv2a", 64, 64, 1,
        ('XavierFill', {}), ('ConstantFill', {})
    )
    conv2a = brew.relu(model, conv2a, conv2a)
    conv2 = brew.conv(
        model,
        conv2a,
        "conv2",
        64,
        192,
        3,
        ('XavierFill', {}),
        ('ConstantFill', {}),
        pad=1
    )
    relu2 = brew.relu(model, conv2, "conv2")
    pool2 = brew.max_pool(model, relu2, "pool2", kernel=3, stride=2, pad=1)
    # Inception modules
    inc3 = _InceptionModule(
        model, pool2, 192, "inc3", 64, [96, 128], [16, 32], 32
    )
    inc4 = _InceptionModule(
        model, inc3, 256, "inc4", 128, [128, 192], [32, 96], 64
    )
    pool5 = brew.max_pool(model, inc4, "pool5", kernel=3, stride=2, pad=1)
    inc5 = _InceptionModule(
        model, pool5, 480, "inc5", 192, [96, 208], [16, 48], 64
    )
    inc6 = _InceptionModule(
        model, inc5, 512, "inc6", 160, [112, 224], [24, 64], 64
    )
    inc7 = _InceptionModule(
        model, inc6, 512, "inc7", 128, [128, 256], [24, 64], 64
    )
    inc8 = _InceptionModule(
        model, inc7, 512, "inc8", 112, [144, 288], [32, 64], 64
    )
    inc9 = _InceptionModule(
        model, inc8, 528, "inc9", 256, [160, 320], [32, 128], 128
    )
    pool9 = brew.max_pool(model, inc9, "pool9", kernel=3, stride=2, pad=1)
    inc10 = _InceptionModule(
        model, pool9, 832, "inc10", 256, [160, 320], [32, 128], 128
    )
    inc11 = _InceptionModule(
        model, inc10, 832, "inc11", 384, [192, 384], [48, 128], 128
    )
    pool11 = brew.average_pool(model, inc11, "pool11", kernel=7, stride=1)
    fc = brew.fc(
        model, pool11, "fc", 1024, 1000,
        ('XavierFill', {}), ('ConstantFill', {})
    )
    # It seems that Soumith's benchmark does not have softmax on top
    # for Inception. We will add it anyway so we can have a proper
    # backward pass.
    pred = brew.softmax(model, fc, "pred")
    xent = model.LabelCrossEntropy([pred, "label"], "xent")
    if device != 'MKL':
        loss = model.AveragedLoss(xent, "loss")
    return model, 224
Esempio n. 45
0
 def _MiniAlexNetNoDropout(self, order):
     # First, AlexNet using the cnn wrapper.
     model = model_helper.ModelHelper(name="alexnet")
     conv1 = brew.conv(
         model,
         "data",
         "conv1",
         3,
         16,
         11,
         ("XavierFill", {}),
         ("ConstantFill", {}),
         stride=4,
         pad=0
     )
     relu1 = brew.relu(model, conv1, "relu1")
     norm1 = brew.lrn(model, relu1, "norm1", size=5, alpha=0.0001, beta=0.75)
     pool1 = brew.max_pool(model, norm1, "pool1", kernel=3, stride=2)
     conv2 = brew.group_conv(
         model,
         pool1,
         "conv2",
         16,
         32,
         5,
         ("XavierFill", {}),
         ("ConstantFill", {"value": 0.1}),
         group=2,
         stride=1,
         pad=2
     )
     relu2 = brew.relu(model, conv2, "relu2")
     norm2 = brew.lrn(model, relu2, "norm2", size=5, alpha=0.0001, beta=0.75)
     pool2 = brew.max_pool(model, norm2, "pool2", kernel=3, stride=2)
     conv3 = brew.conv(
         model,
         pool2,
         "conv3",
         32,
         64,
         3,
         ("XavierFill", {'std': 0.01}),
         ("ConstantFill", {}),
         pad=1
     )
     relu3 = brew.relu(model, conv3, "relu3")
     conv4 = brew.group_conv(
         model,
         relu3,
         "conv4",
         64,
         64,
         3,
         ("XavierFill", {}),
         ("ConstantFill", {"value": 0.1}),
         group=2,
         pad=1
     )
     relu4 = brew.relu(model, conv4, "relu4")
     conv5 = brew.group_conv(
         model,
         relu4,
         "conv5",
         64,
         32,
         3,
         ("XavierFill", {}),
         ("ConstantFill", {"value": 0.1}),
         group=2,
         pad=1
     )
     relu5 = brew.relu(model, conv5, "relu5")
     pool5 = brew.max_pool(model, relu5, "pool5", kernel=3, stride=2)
     fc6 = brew.fc(
         model, pool5, "fc6", 1152, 1024, ("XavierFill", {}),
         ("ConstantFill", {"value": 0.1})
     )
     relu6 = brew.relu(model, fc6, "relu6")
     fc7 = brew.fc(
         model, relu6, "fc7", 1024, 1024, ("XavierFill", {}),
         ("ConstantFill", {"value": 0.1})
     )
     relu7 = brew.relu(model, fc7, "relu7")
     fc8 = brew.fc(
         model, relu7, "fc8", 1024, 5, ("XavierFill", {}),
         ("ConstantFill", {"value": 0.0})
     )
     pred = brew.softmax(model, fc8, "pred")
     xent = model.LabelCrossEntropy([pred, "label"], "xent")
     loss = model.AveragedLoss([xent], ["loss"])
     model.AddGradientOperators([loss])
     return model