private Layer ConvertPool2d(paddle.OpDesc op) { var type = GetAttr(op, "pooling_type").S; var ksize = GetAttr(op, "ksize").Ints; var strides = GetAttr(op, "strides").Ints; var x = op.Inputs[0].Arguments[0]; var output = op.Outputs[0].Arguments[0]; if (GetAttr(op, "global_pooling").B) { var shape = GetVarShape(x); ksize[0] = shape[2]; ksize[1] = shape[3]; } if (type == "avg") { var layer = new AveragePool2d(GetVarShape(x), Padding.Valid, ksize[1], ksize[0], strides[1], strides[0], ActivationFunctionType.Linear); _inputs.Add(layer.Input, x); _outputs.Add(output, layer.Output); return(layer); } else if (type == "max") { var layer = new MaxPool2d(GetVarShape(x), Padding.Valid, ksize[1], ksize[0], strides[1], strides[0], ActivationFunctionType.Linear); _inputs.Add(layer.Input, x); _outputs.Add(output, layer.Output); return(layer); } else { throw new NotSupportedException(); } }
public void Infer(AveragePool2d layer, AveragePool2dLayerArgument argument, InferenceContext context) { var inputAlloc = context.MainMemoryMap[layer.Input.Connection.From]; var outputAlloc = context.MainMemoryMap[layer.Output]; argument.Flags = K210LayerFlags.MainMemoryOutput; argument.MainMemoryInputAddress = inputAlloc.GetAddress(); argument.MainMemoryOutputAddress = outputAlloc.GetAddress(); }
private Layer ConvertAveragePool2d(tflite.Operator op) { var inputs = op.GetInputsArray(); var input = _graph.Tensors(inputs[0]).Value; var options = op.BuiltinOptions <tflite.Pool2DOptions>().Value; var layer = new AveragePool2d(input.GetShapeArray().ToNCHW(), options.Padding.ToPadding(), options.FilterWidth, options.FilterHeight, options.StrideW, options.StrideH, options.FusedActivationFunction.ToActivationFunction()); _inputs.Add(layer.Input, inputs[0]); _outputs.Add(op.Outputs(0), layer.Output); return(layer); }
public AveragePool2dLayerArgument Convert(AveragePool2d layer, ConvertContext context) { return(new AveragePool2dLayerArgument { InputWidth = (uint)layer.Input.Dimensions[3], InputHeight = (uint)layer.Input.Dimensions[2], InputChannels = (uint)layer.Input.Dimensions[1], OutputWidth = (uint)layer.Output.Dimensions[3], OutputHeight = (uint)layer.Output.Dimensions[2], OutputChannels = (uint)layer.Output.Dimensions[1], KernelWidth = (uint)layer.FilterWidth, KernelHeight = (uint)layer.FilterHeight, StrideWidth = (uint)layer.StrideWidth, StrideHeight = (uint)layer.StrideHeight, PaddingWidth = (uint)Layer.GetPadding(layer.Input.Dimensions[3], layer.Output.Dimensions[3], layer.StrideWidth, 1, layer.FilterWidth), PaddingHeight = (uint)Layer.GetPadding(layer.Input.Dimensions[2], layer.Output.Dimensions[2], layer.StrideHeight, 1, layer.FilterHeight), Activation = layer.FusedActivationFunction }); }
private Layer ConvertPooling(LayerParameter layerParam) { var input = _outputs[layerParam.Bottom[0]]; var param = layerParam.PoolingParam; var ksizes = GetCaffeSize(param.KernelH, param.KernelW, param.KernelSize); var strides = GetCaffeSize(param.StrideH, param.StrideW, param.Stride); var paddings = GetCaffeSize(param.PadH, param.PadW, param.Pad); if (param.GlobalPooling) { ksizes[0] = (uint)input.Dimensions[2]; ksizes[1] = (uint)input.Dimensions[3]; strides[0] = strides[1] = 1; paddings[0] = paddings[1] = 0; } if (paddings[0] != paddings[1] || (paddings[0] != 0 && paddings[0] != 1)) { throw new NotSupportedException("Custom paddings are not supprted."); } Padding padding = paddings[0] == 0 ? Padding.Valid : Padding.Same; if (param.Pool == PoolingParameter.Types.PoolMethod.Ave) { var layer = new AveragePool2d(input.Dimensions, padding, (int)ksizes[1], (int)ksizes[0], (int)strides[1], (int)strides[0], ActivationFunctionType.Linear); layer.Input.SetConnection(input); _outputs[layerParam.Top[0]] = layer.Output; return(layer); } else if (param.Pool == PoolingParameter.Types.PoolMethod.Max) { var layer = new MaxPool2d(input.Dimensions, padding, (int)ksizes[1], (int)ksizes[0], (int)strides[1], (int)strides[0], ActivationFunctionType.Linear); layer.Input.SetConnection(input); _outputs[layerParam.Top[0]] = layer.Output; return(layer); } else { throw new LayerNotSupportedException(param.Pool.ToString()); } }