* Compute keyInterior according to the updated algorithm for computing
cell offset key.
* Update unittest of avg_pooling/max_pooling for cases that requires
auto_padding = True. Previous test cases cover only those that do not
need padding.
* ONNX supports similar op ReduceLogSumExp. Conversions are added when
exporting.
* Refactored CNTKToONNXHelper::BroadcastInputsIfNeeded to support more
generalized cases.
Previously, to resolve issue of gather producing incorrect gradient
values, validity mask check was added to ensure we don't count non-valid
cells as 0.
However, this check is needed only for input that has dynamic axis, i.e.
inputs that have MBLayout.
- Previous implementation has the assumption that (0 <= dk < width).
This assumption doesn't stand when lo >(kernel - 1) / 2.
The updated calculation supports arbitrary lo & hi non-negative
integer value. The new calculation has dk in range (0, width + hi +
lo].
- Enables onnx backend test {averagepool_2d_pads, maxpool_2d_pads} to
pass.
- Refactor function CalcPaddingForSameLowerOrUpperAutoPad in conv/pool import,
changing parameter "const Variable& input" to "const NDShape& inputWithBatchAxisShape",
to specify the required shape format as [N x C x H x W].
pad values are explicitly computed based on ONNX spec equations during import in the following cases:
- case 1: when auto_pad is SAME_UPPER | SAME_LOWER for convolution, convolution transpose and pooling.
- case 2: when output_shape is explicitly set for convolution transpose.
note: output_shape in ONNX spec can have the two below format:
1. [X1 * X2 * ... * Xn]
2. [N * O * X1 * X2 * ... * Xn]
- Update exporting of conv/pooling to always export pad values.
- Enable correct exporting of multiple pretrained models (ResNet50/ResNet101/ResNet152_ImageNet_Caffe, etc).
- Overhaul convtranspose pads exporting
- Support conv weight export with omitted out channel axis (LRN).
- Add tests in onnx_op_test to cover the above changes