def Conv()

in mmdnn/conversion/onnx/shape_inference.py [0:0]


def Conv(shapeX, shapeW, auto_pad = None, dilations = None, group = None, kernel_shape = None, pads = None, strides = None):
    #Don't support auto_pad current!
    #                             2018-02-28
    #if group is None:
    #    group = 1
    #  group is not support yet too.
    kernelDim = len(shapeX) - 2
    if kernel_shape is None:
        kernel_shape = shapeW[2:] #[[1 for _ in range(kernelDimSize)] for _ in range(kernelDimSize)]
    if pads is None:
        [0 for _ in range(kernelDim * 2)]
    if strides is None:
        [1 for _ in range(kernelDim)]
    if pads is None:
        pads = [0 for _ in range(kernelDim * 2)]
    if strides is None:
        strides = [1 for _ in range(kernelDim)]
    if dilations is None:
        dilations = [1 for _ in range(kernelDim)]
 
    retShape = [shapeX[0], shapeW[0]]  
    dimIdx = 0
    for dimSize in shapeX[2:]:
        padUpper = pads[dimIdx * 2]
        padLower = pads[dimIdx * 2 + 1]
        stride = strides[dimIdx]
        dilation = dilations[dimIdx]
        kernelDimSize = (kernel_shape[dimIdx] - 1) // 2 * dilation * 2 + 1
        retShape.append((dimSize + padUpper + padLower - kernelDimSize) // stride + 1)
        dimIdx = dimIdx + 1
    return retShape