def generate_secure_vgg(num_class): input_img_hw = 32 input_channel = 3 input_shape = [input_channel, input_img_hw, input_img_hw] input_layer = InputSecureLayer(input_shape, "input_layer") conv1 = Conv2dSecureLayer(3, 64, 3, "conv1", padding=1) pool1 = Maxpool2x2SecureLayer("pool1") relu1 = ReluSecureLayer("relu1") trun1 = TruncSecureLayer("trun1") conv2 = Conv2dSecureLayer(64, 128, 3, "conv2", padding=1) pool2 = Maxpool2x2SecureLayer("pool2") relu2 = ReluSecureLayer("relu2") trun2 = TruncSecureLayer("trun2") conv3 = Conv2dSecureLayer(128, 256, 3, "conv3", padding=1) relu3 = ReluSecureLayer("relu3") trun3 = TruncSecureLayer("trun3") conv4 = Conv2dSecureLayer(256, 256, 3, "conv4", padding=1) pool3 = Maxpool2x2SecureLayer("pool3") relu4 = ReluSecureLayer("relu4") trun4 = TruncSecureLayer("trun4") conv5 = Conv2dSecureLayer(256, 512, 3, "conv5", padding=1) relu5 = ReluSecureLayer("relu5") trun5 = TruncSecureLayer("trun5") conv6 = Conv2dSecureLayer(512, 512, 3, "conv6", padding=1) pool4 = Maxpool2x2SecureLayer("pool4") relu6 = ReluSecureLayer("relu6") trun6 = TruncSecureLayer("trun6") conv7 = Conv2dSecureLayer(512, 512, 3, "conv7", padding=1) relu7 = ReluSecureLayer("relu7") trun7 = TruncSecureLayer("trun7") conv8 = Conv2dSecureLayer(512, 512, 3, "conv8", padding=1) relu8 = ReluSecureLayer("relu8") trun8 = TruncSecureLayer("trun8") pool5 = Maxpool2x2SecureLayer("pool5") flatten = FlattenSecureLayer("flatten") fc1 = FcSecureLayer(512, "fc1") relu_fc_1 = ReluSecureLayer("relu_fc_1") trun_fc_1 = TruncSecureLayer("trun_fc_1") fc2 = FcSecureLayer(512, "fc2") relu_fc_2 = ReluSecureLayer("relu_fc_2") trun_fc_2 = TruncSecureLayer("trun_fc_2") fc3 = FcSecureLayer(num_class, "fc3") output_layer = OutputSecureLayer("output_layer") layers = [ input_layer, conv1, pool1, relu1, trun1, conv2, pool2, relu2, trun2, conv3, relu3, trun3, conv4, pool3, relu4, trun4, conv5, relu5, trun5, conv6, relu6, pool4, trun6, conv7, relu7, trun7, conv8, relu8, pool5, trun8, flatten, fc1, relu_fc_1, trun_fc_1, fc2, relu_fc_2, trun_fc_2, fc3, output_layer ] secure_nn = SecureNnFramework("vgg") secure_nn.load_layers(layers) return secure_nn
def generate_fc(): num_input_unit = 1024 num_output_unit = 128 input_shape = [num_input_unit] input_layer = InputSecureLayer(input_shape, "input_layer") fc1 = FcSecureLayer(num_output_unit, "fc1") output_layer = OutputSecureLayer("output_layer") layers = [input_layer, fc1, output_layer] secure_nn = SecureNnFramework("fc") secure_nn.load_layers(layers) return secure_nn
def generate_conv2d(): input_img_hw = 16 input_channel = 128 input_shape = [input_channel, input_img_hw, input_img_hw] input_layer = InputSecureLayer(input_shape, "input_layer") conv1 = Conv2dSecureLayer(128, 128, 3, "conv1", padding=1) output_layer = OutputSecureLayer("output_layer") layers = [input_layer, conv1, output_layer] secure_nn = SecureNnFramework("conv2d") secure_nn.load_layers(layers) return secure_nn
def generate_secure_minionn(pooling_type_name): input_img_hw = 32 input_channel = 3 input_shape = [input_channel, input_img_hw, input_img_hw] if pooling_type_name == "maxpool": pool = Maxpool2x2SecureLayer elif pooling_type_name == "avgpool": pool = Avgpool2x2SecureLayer else: raise Exception(f"Unknown Pooling Type Name: {pooling_type_name}") input_layer = InputSecureLayer(input_shape, "input_layer") conv1 = Conv2dSecureLayer(3, 64, 3, "conv1", padding=1) relu1 = ReluSecureLayer("relu1") trun1 = TruncSecureLayer("trun1") conv2 = Conv2dSecureLayer(64, 64, 3, "conv2", padding=1) relu2 = ReluSecureLayer("relu2") pool1 = pool("pool1") trun2 = TruncSecureLayer("trun2") conv3 = Conv2dSecureLayer(64, 64, 3, "conv3", padding=1) relu3 = ReluSecureLayer("relu3") trun3 = TruncSecureLayer("trun3") conv4 = Conv2dSecureLayer(64, 64, 3, "conv4", padding=1) pool2 = pool("pool2") relu4 = ReluSecureLayer("relu4") trun4 = TruncSecureLayer("trun4") conv5 = Conv2dSecureLayer(64, 64, 3, "conv5", padding=1) relu5 = ReluSecureLayer("relu5") trun5 = TruncSecureLayer("trun5") conv6 = Conv2dSecureLayer(64, 64, 3, "conv6", padding=1) relu6 = ReluSecureLayer("relu6") trun6 = TruncSecureLayer("trun6") conv7 = Conv2dSecureLayer(64, 16, 3, "conv7", padding=1) relu8 = ReluSecureLayer("relu8") flatten = FlattenSecureLayer("flatten") trun7 = TruncSecureLayer("trun7") fc1 = FcSecureLayer(10, "fc1") # fc1 = FcSecureLayer(2, "fc1") output_layer = OutputSecureLayer("output_layer") layers = [ input_layer, conv1, relu1, trun1, conv2, pool1, relu2, trun2, conv3, relu3, trun3, conv4, pool2, relu4, trun4, conv5, relu5, trun5, conv6, relu6, trun6, conv7, relu8, trun7, flatten, fc1, output_layer ] secure_nn = SecureNnFramework("minionn_avgpool") secure_nn.load_layers(layers) return secure_nn
def generate_maxpool2x2(): num_elem = 2 ** 17 input_img_hw = 16 input_channel = num_elem // (input_img_hw ** 2) assert(input_img_hw * input_img_hw * input_channel == num_elem) input_shape = [input_channel, input_img_hw, input_img_hw] input_layer = InputSecureLayer(input_shape, "input_layer") pool1 = Maxpool2x2SecureLayer("pool1") output_layer = OutputSecureLayer("output_layer") layers = [input_layer, pool1, output_layer] secure_nn = SecureNnFramework("maxpool2x2") secure_nn.load_layers(layers) return secure_nn
def generate_relu_only_nn(): num_elem = 2 ** 17 input_img_hw = 16 input_channel = num_elem // (input_img_hw ** 2) assert(input_img_hw * input_img_hw * input_channel == num_elem) input_shape = [input_channel, input_img_hw, input_img_hw] input_layer = InputSecureLayer(input_shape, "input_layer") relu1 = ReluSecureLayer("relu1") output_layer = OutputSecureLayer("output_layer") layers = [input_layer, relu1, output_layer] secure_nn = SecureNnFramework("relu_only_nn") secure_nn.load_layers(layers) return secure_nn
def generate_small_nn(): input_img_hw = 16 input_channel = 3 input_shape = [input_channel, input_img_hw, input_img_hw] input_layer = InputSecureLayer(input_shape, "input_layer") conv1 = Conv2dSecureLayer(3, 5, 3, "conv1", padding=1) relu1 = ReluSecureLayer("relu1") pool1 = Maxpool2x2SecureLayer("pool1") conv2 = Conv2dSecureLayer(5, 10, 3, "conv2", padding=1) flatten = FlattenSecureLayer("flatten") fc1 = FcSecureLayer(512, "fc1") output_layer = OutputSecureLayer("output_layer") layers = [input_layer, conv1, pool1, relu1, conv2, flatten, fc1, output_layer] secure_nn = SecureNnFramework("small_nn") secure_nn.load_layers(layers) return secure_nn
def generate_minionn_mnist(): input_img_hw = 28 input_channel = 1 input_shape = [input_channel, input_img_hw, input_img_hw] input_layer = InputSecureLayer(input_shape, "input_layer") conv1 = Conv2dSecureLayer(input_channel, 16, 5, "conv1", padding=0) pool1 = Maxpool2x2SecureLayer("pool1") relu1 = ReluSecureLayer("relu1") conv2 = Conv2dSecureLayer(16, 16, 5, "conv2", padding=0) pool2 = Maxpool2x2SecureLayer("pool2") relu2 = ReluSecureLayer("relu2") flatten = FlattenSecureLayer("flatten") fc1 = FcSecureLayer(100, "fc1") relu3 = ReluSecureLayer("relu3") fc2 = FcSecureLayer(10, "fc2") output_layer = OutputSecureLayer("output_layer") layers = [input_layer, conv1, pool1, relu1, conv2, pool2, relu2, flatten, fc1, relu3, fc2, output_layer] secure_nn = SecureNnFramework("minionn_mnist") secure_nn.load_layers(layers) return secure_nn
def generate_minionn_cifar10(): input_img_hw = 32 input_channel = 3 input_shape = [input_channel, input_img_hw, input_img_hw] input_layer = InputSecureLayer(input_shape, "input_layer") conv1 = Conv2dSecureLayer(3, 64, 3, "conv1", padding=1) relu1 = ReluSecureLayer("relu1") conv2 = Conv2dSecureLayer(64, 64, 3, "conv2", padding=1) pool1 = Maxpool2x2SecureLayer("pool1") relu2 = ReluSecureLayer("relu2") conv3 = Conv2dSecureLayer(64, 64, 3, "conv3", padding=1) relu3 = ReluSecureLayer("relu3") conv4 = Conv2dSecureLayer(64, 64, 3, "conv4", padding=1) pool2 = Maxpool2x2SecureLayer("pool2") relu4 = ReluSecureLayer("relu4") conv5 = Conv2dSecureLayer(64, 64, 3, "conv5", padding=1) relu5 = ReluSecureLayer("relu5") conv6 = Conv2dSecureLayer(64, 64, 3, "conv6", padding=1) relu6 = ReluSecureLayer("relu6") conv7 = Conv2dSecureLayer(64, 16, 3, "conv7", padding=1) relu8 = ReluSecureLayer("relu8") flatten = FlattenSecureLayer("flatten") fc1 = FcSecureLayer(10, "fc1") output_layer = OutputSecureLayer("output_layer") layers = [input_layer, conv1, relu1, conv2, pool1, relu2, conv3, relu3, conv4, pool2, relu4, conv5, relu5, conv6, relu6, conv7, relu8, flatten, fc1, output_layer] secure_nn = SecureNnFramework("minionn_cifar10") secure_nn.load_layers(layers) return secure_nn