opencv/modules/dnn/test
Yuantao Feng a478757483
Merge pull request #24544 from fengyuentau:layernorm_conformance
dnn test: move layer norm tests into conformance tests #24544

Merge with https://github.com/opencv/opencv_extra/pull/1122

## Motivation

Some ONNX operators, such as `LayerNormalization`, `BatchNormalization` and so on, produce outputs for training (mean, stdev). So they have reference outputs of conformance tests for those training outputs as well. However, when it comes to inference, we do not need and produce those outputs for training here in dnn. Hence, output size does not match if we use dnn to infer those conformance models. This has become the barrier if we want to test these operators using their conformance tests.

<!--
| Operator                | Inference needed                    | Outputs (required - total) | Optional outputs for training? |
| ----------------------- | ----------------------------------- | -------------------------- | ------------------------------ |
| BatchNormalization      | Yes                                 | 1 - 3                      | Yes                            |
| Dropout                 | Maybe, can be eliminated via fusion | 1 - 2                      | Yes                            |
| GRU                     | Yes                                 | 0 - 2                      | No                             |
| LSTM                    | Yes                                 | 0 - 3                      | No                             |
| LayerNormalization      | Yes                                 | 1 - 3                      | Yes                            |
| MaxPool                 | Yes                                 | 1 - 2                      | Yes                            |
| RNN                     | Yes                                 | 0 - 2                      | No                             |
| SoftmaxCrossEntropyLoss | No                                  | 1 - 2                      | --                             |
-->

**I checked all ONNX operators with optional outputs. Turns out there are only `BatchNormalization`, `Dropout`, `LayerNormalization` and `MaxPool` has optional outputs for training. All except `LayerNormalization` have models set for training mode and eval mode. Blame ONNX for that.**

## Solution

In this pull request, we remove graph outputs if the graph looks like the following:

```
    [X]   [Scale]  [Bias]                      [X]   [Scale]  [Bias]
      \      |      /         this patch         \      |      /
     LayerNormalization      ----------->       LayerNormalization
      /      |      \                                   |
    [Y]    [Mean]  [Stdev]                             [Y]
```

We can update conformance tests and turn on some cases as well if extending to more layers.

Notes:
1. This workaround does not solve expanded function operators if they are fused into a single operator, such as `$onnx/onnx/backend/test/data/node/test_layer_normalization_2d_axis1_expanded`, but they can be run without fusion. Note that either dnn or onnxruntime does not fuse those expanded function operators.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2023-11-20 11:19:24 +03:00
..
cityscapes_semsegm_test_enet.py Misc. modules/ typos 2018-02-12 07:09:43 -05:00
imagenet_cls_test_alexnet.py python: better Python 3 support 2018-05-11 17:32:04 +03:00
imagenet_cls_test_googlenet.py Misc. modules/ typos 2018-02-12 07:09:43 -05:00
imagenet_cls_test_inception.py fix 4.x links 2021-12-22 13:24:30 +00:00
npy_blob.cpp dnn: fix precomp.hpp usage 2018-02-28 17:06:26 +03:00
npy_blob.hpp dnn: fix precomp.hpp usage 2018-02-28 17:06:26 +03:00
pascal_semsegm_test_fcn.py Remove references to deprecated NumPy type aliases. 2022-12-23 13:53:49 +03:00
test_backends.cpp Merge pull request #24359 from asmorkalov:as/FastNeuralStyle_eccv16_tuning 2023-10-13 10:29:41 +03:00
test_caffe_importer.cpp Higher threshold for FasterRCNN_vgg16 2023-09-14 13:11:53 +03:00
test_common.cpp cmake: fix build of dnn tests with shared common code 2019-03-31 08:52:25 +00:00
test_common.hpp Merge pull request #22275 from zihaomu:fp16_support_conv 2023-05-17 09:38:33 +03:00
test_common.impl.hpp Merge pull request #22275 from zihaomu:fp16_support_conv 2023-05-17 09:38:33 +03:00
test_darknet_importer.cpp Merge pull request #24039 from dkurt:tflite_test_backends 2023-08-04 11:28:51 +03:00
test_googlenet.cpp Merge pull request #22275 from zihaomu:fp16_support_conv 2023-05-17 09:38:33 +03:00
test_graph_simplifier.cpp Merge pull request #24544 from fengyuentau:layernorm_conformance 2023-11-20 11:19:24 +03:00
test_ie_models.cpp Merge pull request #24072 from dkurt:openvino_cpu_tests 2023-08-02 14:39:11 +03:00
test_int8_layers.cpp Merge pull request #23987 from dkurt:openvino_int8_backend 2023-09-28 16:24:43 +03:00
test_layers.cpp Merge pull request #24372 from Kumataro:fix24369 2023-10-19 08:45:08 +03:00
test_main.cpp Merge pull request #23109 from seanm:misc-warnings 2023-10-06 13:33:21 +03:00
test_misc.cpp Merge pull request #21066 from andrewerf:21052-openvino-native-onnx 2023-10-20 11:49:27 +03:00
test_model.cpp Merge pull request #24120 from dkurt:actualize_dnn_links 2023-08-16 15:46:11 +03:00
test_nms.cpp batched nms impl 2022-11-29 15:32:34 +08:00
test_onnx_conformance_layer_filter__cuda_denylist.inl.hpp Merge pull request #24353 from alexlyulkov:al/fixed-cumsum-layer 2023-10-03 13:58:25 +03:00
test_onnx_conformance_layer_filter__halide_denylist.inl.hpp Merge pull request #24353 from alexlyulkov:al/fixed-cumsum-layer 2023-10-03 13:58:25 +03:00
test_onnx_conformance_layer_filter__openvino.inl.hpp Merge pull request #24544 from fengyuentau:layernorm_conformance 2023-11-20 11:19:24 +03:00
test_onnx_conformance_layer_filter__vulkan_denylist.inl.hpp Merge pull request #24092 from Aser-Abdelfatah:GSoC_Support_GatherElements_ONNX 2023-10-18 10:41:47 +03:00
test_onnx_conformance_layer_filter_opencv_all_denylist.inl.hpp Merge pull request #21865 from rogday:nary_eltwise_layers 2022-07-19 06:14:05 +03:00
test_onnx_conformance_layer_filter_opencv_cpu_denylist.inl.hpp Merge pull request #21865 from rogday:nary_eltwise_layers 2022-07-19 06:14:05 +03:00
test_onnx_conformance_layer_filter_opencv_denylist.inl.hpp move global skip out of if loop, and add opencv_deny_list 2023-03-13 22:16:51 +08:00
test_onnx_conformance_layer_filter_opencv_ocl_fp16_denylist.inl.hpp implementation of scatter and scatternd with conformance tests enabled 2022-10-17 11:30:32 +08:00
test_onnx_conformance_layer_filter_opencv_ocl_fp32_denylist.inl.hpp implementation of scatter and scatternd with conformance tests enabled 2022-10-17 11:30:32 +08:00
test_onnx_conformance_layer_parser_denylist.inl.hpp Merge pull request #24378 from fengyuentau:instance_norm 2023-11-07 12:59:10 +03:00
test_onnx_conformance.cpp Merge pull request #24544 from fengyuentau:layernorm_conformance 2023-11-20 11:19:24 +03:00
test_onnx_importer.cpp Merge pull request #24544 from fengyuentau:layernorm_conformance 2023-11-20 11:19:24 +03:00
test_precomp.hpp dnn: reduce set of ignored warnings 2018-11-15 13:15:59 +03:00
test_tf_importer.cpp Enable more tests for OpenVINO 2023.0 2023-10-05 12:51:55 +03:00
test_tflite_importer.cpp Merge pull request #23987 from dkurt:openvino_int8_backend 2023-09-28 16:24:43 +03:00
test_torch_importer.cpp Merge pull request #24409 from fengyuentau:norm_kernel 2023-11-01 14:33:57 +03:00