def add_conv_layer(net_msg,name,bottom,num_output,pad,kernel_size,stride,bias_term=True,learn_depth=False,input_channel=1,connectivity_mode=0):
    conv_layer = net_msg.layer.add()
    conv_layer.name = name
    conv_layer.type = 'Convolution'
    conv_layer.bottom._values.append(bottom)
    conv_layer.top._values.append(conv_layer.name)
    if 1==connectivity_mode:
        conv_layer.connectivity_mode = caffe_pb2.LayerParameter.DISCONNECTED_ELTWISE
    elif 2==connectivity_mode:
        conv_layer.connectivity_mode = caffe_pb2.LayerParameter.DISCONNECTED_GRPWISE
    # param info for weight and bias
    lr_param = caffe_pb2.ParamSpec()
    lr_param.lr_mult = 1
    if learn_depth:
        blk_param = caffe_pb2.BlockGroupLassoSpec()
        blk_param.xdimen = kernel_size*kernel_size*input_channel
        blk_param.ydimen = num_output
        lr_param.block_group_lasso._values.append(blk_param)
    conv_layer.param._values.append(lr_param)
    if bias_term:
        lr_param = caffe_pb2.ParamSpec()
        lr_param.lr_mult = 2
        conv_layer.param._values.append(lr_param)
    # conv parameters
    conv_layer.convolution_param.num_output = num_output
    conv_layer.convolution_param.pad._values.append(pad)
    conv_layer.convolution_param.kernel_size._values.append(kernel_size)
    conv_layer.convolution_param.stride._values.append(stride)
    conv_layer.convolution_param.weight_filler.type = 'msra'
    conv_layer.convolution_param.bias_term = bias_term
    if bias_term:
        conv_layer.convolution_param.bias_filler.type = 'constant'
예제 #2
0
    prototxt_file = args.net
    caffe.set_device(0)
    caffe.set_mode_gpu()

    net_parser = caffeparser.CaffeProtoParser(prototxt_file)
    net_msg = net_parser.readProtoNetFile()
    loop_layers = net_msg.layer[:]  #adding : implicitly makes a copy to avoid being modified in the loop
    for cur_layer in loop_layers:
        if 'Convolution' == cur_layer.type:
            if len(cur_layer.param) == 0:
                lr_param = caffe_pb2.ParamSpec()
                lr_param.lr_mult = 1.0
                lr_param.decay_mult = 1.0
                cur_layer.param._values.append(lr_param)
            kernel_size = cur_layer.convolution_param.kernel_size._values[0]
            blk_param = caffe_pb2.BlockGroupLassoSpec()
            blk_param.xdimen = kernel_size * kernel_size
            blk_param.ydimen = 1
            blk_param.block_decay_mult = 1.0
            cur_layer.param._values[0].block_group_lasso._values.append(
                blk_param)
            cur_layer.param._values[0].breadth_decay_mult = 1.0
            cur_layer.param._values[0].kernel_shape_decay_mult = 1.0

    file_split = os.path.splitext(prototxt_file)
    filepath = file_split[0] + '_ssl' + file_split[1]
    file = open(filepath, "w")
    if not file:
        raise IOError("ERROR (" + filepath + ")!")
    file.write(str(net_msg))
    file.close()