public static ConvolutionLayer convNxN(int reduceSize, int outputSize, int kernelSize, int kernelStride, boolean padding) { int pad = padding ? ((int) Math.floor(kernelStride / 2) * 2) : 0; return new ConvolutionLayer.Builder(new int[] {kernelSize, kernelSize}, new int[] {kernelStride, kernelStride}, new int[] {pad, pad}).nIn(reduceSize).nOut(outputSize).biasInit(0.2) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(); }
new ConvolutionLayer.Builder(new int[] {7, 7}, new int[] {2, 2}, new int[] {3, 3}).nIn(inputShape[0]).nOut(64) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), "input1") .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-lrn1") .addLayer("inception-2-batch1", new BatchNormalization.Builder(false).nIn(64).nOut(64).build(), new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {1, 1}, new int[] {1, 1}).nIn(64).nOut(192) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), "inception-2-activation1") .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "inception-3b") .addLayer("3c-1x1-norm", FaceNetHelper.batchNorm(128, 128), "3c-1x1") .addLayer("3c-3x3", new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {2, 2}).nIn(128) .nOut(256).cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), "3c-transfer1") .nOut(32).cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), "inception-3b")
new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {2, 2}) .nIn(inputShape[0]).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), input) .addLayer("stem-batch1", .addLayer("stem-cnn2", new ConvolutionLayer.Builder(new int[] {3, 3}).nIn(32).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-batch1") .addLayer("stem-batch2", new ConvolutionLayer.Builder(new int[] {3, 3}) .convolutionMode(ConvolutionMode.Same).nIn(32).nOut(64) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-batch2") .addLayer("stem-batch3", new BatchNormalization.Builder(false).decay(0.995).eps(0.001).nIn(64) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-pool4") .addLayer("stem-batch5", .addLayer("stem-cnn6", new ConvolutionLayer.Builder(new int[] {3, 3}).nIn(80).nOut(128) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(), "stem-batch5") .addLayer("stem-batch6", .addLayer("stem-cnn7",
new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), previousBlock) new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), previousBlock) new ConvolutionLayer.Builder(new int[] {3, 3}) .convolutionMode(ConvolutionMode.Same).nIn(32).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "batch2", i)) new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), previousBlock) new ConvolutionLayer.Builder(new int[] {3, 3}) .convolutionMode(ConvolutionMode.Same).nIn(32).nOut(32) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "batch4", i))
new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(576).nOut(128) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), previousBlock) new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(576).nOut(128) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), previousBlock) new ConvolutionLayer.Builder(new int[] {1, 3}) .convolutionMode(ConvolutionMode.Same).nIn(128).nOut(128) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "batch2", i)) new ConvolutionLayer.Builder(new int[] {3, 1}) .convolutionMode(ConvolutionMode.Same).nIn(128).nOut(128) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "batch3", i)) new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(256).nOut(576) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "merge1", i))
new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(1344).nOut(192) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), previousBlock) new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(1344).nOut(192) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), previousBlock) new ConvolutionLayer.Builder(new int[] {1, 3}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(192) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "batch2", i)) new ConvolutionLayer.Builder(new int[] {3, 1}) .convolutionMode(ConvolutionMode.Same).nIn(192).nOut(192) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "batch3", i)) new ConvolutionLayer.Builder(new int[] {1, 1}) .convolutionMode(ConvolutionMode.Same).nIn(384).nOut(1344) .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE) .build(), nameLayer(blockName, "merge1", i))
.cudnnAlgoMode(cudnnAlgoMode).build()) .layer(1, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(64).cudnnAlgoMode( cudnnAlgoMode) .build()) .padding(1, 1).nOut(128).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(4, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(128).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(5, new SubsamplingLayer.Builder() .poolingType(SubsamplingLayer.PoolingType.MAX).kernelSize(2, 2) .padding(1, 1).nOut(256).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(7, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(256).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(8, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(256).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(9, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(256).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(10, new SubsamplingLayer.Builder() .poolingType(SubsamplingLayer.PoolingType.MAX).kernelSize(2, 2) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(12, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(13, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(14, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build())
.cudnnAlgoMode(cudnnAlgoMode).build()) .layer(1, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(64).cudnnAlgoMode( cudnnAlgoMode) .build()) .padding(1, 1).nOut(128).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(4, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(128).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(5, new SubsamplingLayer.Builder() .poolingType(SubsamplingLayer.PoolingType.MAX).kernelSize(2, 2) .padding(1, 1).nOut(256).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(7, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(256).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(8, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(256).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(9, new SubsamplingLayer.Builder() .poolingType(SubsamplingLayer.PoolingType.MAX).kernelSize(2, 2) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(11, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(12, new ConvolutionLayer.Builder().kernelSize(3, 3).stride(1, 1) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build()) .layer(13, new SubsamplingLayer.Builder() .poolingType(SubsamplingLayer.PoolingType.MAX).kernelSize(2, 2) .padding(1, 1).nOut(512).cudnnAlgoMode(cudnnAlgoMode).build())
new ConvolutionLayer.Builder(new int[] {11, 11}, new int[] {4, 4}, new int[] {2, 2}).name("cnn1") .cudnnAlgoMode(ConvolutionLayer.AlgoMode.PREFER_FASTEST) .convolutionMode(ConvolutionMode.Truncate) .nIn(inputShape[0]).nOut(64).build()) .layer(2, new ConvolutionLayer.Builder(new int[] {5, 5}, new int[] {2, 2}, new int[] {2, 2}) // TODO: fix input and put stride back to 1,1 .convolutionMode(ConvolutionMode.Truncate).name("cnn2") .cudnnAlgoMode(ConvolutionLayer.AlgoMode.PREFER_FASTEST).nOut(192) .biasInit(nonZeroBias).build()) .layer(3, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[] {3, 3}, new int[] {2, 2}).name("maxpool2").build()) .layer(4, new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {1, 1}, new int[] {1, 1}) .name("cnn3").cudnnAlgoMode(ConvolutionLayer.AlgoMode.PREFER_FASTEST).nOut(384) .build()) .layer(5, new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {1, 1}, new int[] {1, 1}) .name("cnn4").cudnnAlgoMode(ConvolutionLayer.AlgoMode.PREFER_FASTEST).nOut(256) .biasInit(nonZeroBias).build()) .layer(6, new ConvolutionLayer.Builder(new int[] {3, 3}, new int[] {1, 1}, new int[] {1, 1}) .name("cnn5").cudnnAlgoMode(ConvolutionLayer.AlgoMode.PREFER_FASTEST).nOut(256) .biasInit(nonZeroBias).build()) .layer(7, new SubsamplingLayer.Builder(SubsamplingLayer.PoolingType.MAX, new int[] {3, 3},
new ConvolutionLayer.Builder(new int[] {1, 1}).nOut(filters[0]).cudnnAlgoMode(cudnnAlgoMode) .build(), input) .cudnnAlgoMode(cudnnAlgoMode).convolutionMode(ConvolutionMode.Same).build(), activationName + "2a") .addLayer(batchName + "2b", new BatchNormalization(), convName + "2b") .cudnnAlgoMode(cudnnAlgoMode).build(), activationName + "2b") .addLayer(batchName + "2c", new BatchNormalization(), convName + "2c")
public static ConvolutionLayer convNxNreduce(int inputSize, int reduceSize, int reduceStride) { return new ConvolutionLayer.Builder(new int[] {1, 1}, new int[] {reduceStride, reduceStride}).nIn(inputSize) .nOut(reduceSize).biasInit(0.2).cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(); }
public static ConvolutionLayer conv7x7(int in, int out, double bias) { return new ConvolutionLayer.Builder(new int[] {7, 7}, new int[] {2, 2}, new int[] {3, 3}).nIn(in).nOut(out) .biasInit(bias).cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(); }
public static ConvolutionLayer conv1x1(int in, int out, double bias) { return new ConvolutionLayer.Builder(new int[] {1, 1}, new int[] {1, 1}, new int[] {0, 0}).nIn(in).nOut(out) .biasInit(bias).cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(); }
public static ConvolutionLayer conv5x5(int in, int out, double bias) { return new ConvolutionLayer.Builder(new int[] {5, 5}, new int[] {1, 1}, new int[] {2, 2}).nIn(in).nOut(out) .biasInit(bias).cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE).build(); }