opencv/modules/dnn/perf
Yuantao Feng 0521a3a384
Merge pull request #24476 from fengyuentau:attention_layer
dnn: add attention layer #24476

Resolves #24609

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

Attention operator spec from onnxruntime: https://github.com/microsoft/onnxruntime/blob/v1.16.1/docs/ContribOperators.md#com.microsoft.Attention.

TODO:
- [x] benchmark (before this PR vs. with this PR vs. ORT).
- [x] Layer fusion: Take care Slice with end=INT64_MAX.
- [x] Layer fusion: match more potential attention (VIT) patterns.
    - [x] Single-head attention is supported.
- [x] Test AttentionSubgraph fusion.
- [x] Add acc tests for VIT_B_32 and VitTrack
- [x] Add perf tests for VIT_B_32 and VitTrack

## Benchmarks

Platform: Macbook Air M1.

### Attention Subgraph

Input scale: [1, 197, 768].

|                        | mean (ms) | median (ms) | min (ms) |
| ---------------------- | --------- | ----------- | -------- |
| w/ Attention (this PR) | 3.75      | 3.68        | 3.22     |
| w/o Attention          | 9.06      | 9.01        | 8.24     |
| ORT (python)           | 4.32      | 2.63        | 2.50     |

### ViTs

All data in millisecond (ms).

| ViTs     | With Attention | Without Attention | ORT    |
| -------- | -------------- | ----------------- | ------ |
| vit_b_16 | 302.77         | 365.35            | 109.70 |
| vit_b_32 | 89.92          | 116.22            | 30.36  |
| vit_l_16 | 1593.32        | 1730.74           | 419.92 |
| vit_l_32 | 468.11         | 577.41            | 134.12 |
| VitTrack | 3.80           | 3.87              | 2.25   |

### 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-12-20 19:35:07 +03:00
..
perf_caffe.cpp Merge pull request #24120 from dkurt:actualize_dnn_links 2023-08-16 15:46:11 +03:00
perf_common.cpp cmake: fix build of dnn tests with shared common code 2019-03-31 08:52:25 +00:00
perf_convolution1d.cpp Merge pull request #18783 from sl-sergei:fix_conv1d 2020-11-13 22:22:10 +00:00
perf_convolution3d.cpp Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2020-11-13 22:29:14 +00:00
perf_convolution.cpp Merge pull request #24547 from WanliZhong:refactor_conv_perf_test 2023-12-11 21:35:33 +03:00
perf_einsum.cpp Merge pull request #24509 from Abdurrahheem:ash/dev_einsum_fast_gemm 2023-11-16 16:20:17 +03:00
perf_gemm.cpp Merge pull request #24694 from fengyuentau:matmul_refactor 2023-12-19 19:36:41 +03:00
perf_layer.cpp Merge pull request #24476 from fengyuentau:attention_layer 2023-12-20 19:35:07 +03:00
perf_main.cpp Merge pull request #11897 from Jakub-Golinowski:hpx_backend 2018-08-31 16:23:26 +03:00
perf_net.cpp Merge pull request #24476 from fengyuentau:attention_layer 2023-12-20 19:35:07 +03:00
perf_precomp.hpp dnn(perf): fix and merge Convolution tests 2018-08-31 15:02:19 +03:00
perf_recurrent.cpp Merge pull request #20658 from smbz:lstm_optimisation 2021-11-29 21:43:00 +00:00