Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / tests / unit / opencv_test_gapi / cpu / gapi_core_tests_fluid.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include "gapi_core_tests.hpp"
6
7 #include "ie_preprocess_gapi_kernels.hpp"
8
9 #include <opencv2/opencv.hpp>
10
11 #include <gtest/gtest.h>
12
13 namespace opencv_test
14 {
15
16 #define CORE_FLUID InferenceEngine::gapi::preprocKernels()
17
18 #define TEST_SIZES        \
19     cv::Size(3840, 2160), \
20     cv::Size(1920, 1080), \
21     cv::Size(1280,  720), \
22     cv::Size(1280,  960), \
23     cv::Size( 960,  720), \
24     cv::Size( 640,  480), \
25     cv::Size( 320,  200), \
26     cv::Size( 113,   71)
27
28 #define TEST_RESIZE_DOWN \
29     std::make_pair(cv::Size(3840, 2160), cv::Size(1920, 1080)), \
30     std::make_pair(cv::Size(3840, 2160), cv::Size(1280,  720)), \
31     std::make_pair(cv::Size(1920, 1080), cv::Size(1280,  720)), \
32     std::make_pair(cv::Size(1920, 1080), cv::Size( 640,  480)), \
33     std::make_pair(cv::Size(1280,  720), cv::Size( 640,  480)), \
34     std::make_pair(cv::Size(1280,  720), cv::Size( 320,  200)), \
35     std::make_pair(cv::Size( 640,  480), cv::Size( 320,  200)), \
36     std::make_pair(cv::Size( 640,  480), cv::Size( 113,   71)), \
37     std::make_pair(cv::Size( 320,  200), cv::Size( 113,   71))
38
39 #define TEST_RESIZE_UP \
40     std::make_pair(cv::Size(1920, 1080), cv::Size(3840, 2160)), \
41     std::make_pair(cv::Size(1280,  720), cv::Size(3840, 2160)), \
42     std::make_pair(cv::Size(1280,  720), cv::Size(1920, 1080)), \
43     std::make_pair(cv::Size( 640,  480), cv::Size(1920, 1080)), \
44     std::make_pair(cv::Size( 640,  480), cv::Size(1280,  720)), \
45     std::make_pair(cv::Size( 320,  200), cv::Size(1280,  720)), \
46     std::make_pair(cv::Size( 320,  200), cv::Size( 640,  480)), \
47     std::make_pair(cv::Size( 113,   71), cv::Size( 640,  480)), \
48     std::make_pair(cv::Size( 113,   71), cv::Size( 320,  200))
49
50 #define TEST_RESIZE_HORZ \
51     std::make_pair(cv::Size(3840, 2160), cv::Size(1920, 2160)), \
52     std::make_pair(cv::Size(1920, 1080), cv::Size(3840, 1080)), \
53     std::make_pair(cv::Size(1920, 1080), cv::Size(1280, 1080)), \
54     std::make_pair(cv::Size(1280,  720), cv::Size(1920,  720)), \
55     std::make_pair(cv::Size(1280,  720), cv::Size( 640,  720)), \
56     std::make_pair(cv::Size( 640,  480), cv::Size(1280,  480)), \
57     std::make_pair(cv::Size( 640,  480), cv::Size( 320,  480)), \
58     std::make_pair(cv::Size( 320,  200), cv::Size( 640,  200)), \
59     std::make_pair(cv::Size( 320,  200), cv::Size( 113,  200)), \
60     std::make_pair(cv::Size( 113,   71), cv::Size( 320,   71))
61
62 #define TEST_RESIZE_VERT \
63     std::make_pair(cv::Size(3840, 2160), cv::Size(3840, 1080)), \
64     std::make_pair(cv::Size(1920, 1080), cv::Size(1920, 2160)), \
65     std::make_pair(cv::Size(1920, 1080), cv::Size(1920,  720)), \
66     std::make_pair(cv::Size(1280,  720), cv::Size(1280, 1080)), \
67     std::make_pair(cv::Size(1280,  720), cv::Size(1280,  480)), \
68     std::make_pair(cv::Size( 640,  480), cv::Size( 640,  720)), \
69     std::make_pair(cv::Size( 640,  480), cv::Size( 640,  200)), \
70     std::make_pair(cv::Size( 320,  200), cv::Size( 320,  480)), \
71     std::make_pair(cv::Size( 320,  200), cv::Size( 320,   71)), \
72     std::make_pair(cv::Size( 113,   71), cv::Size( 113,  200))
73
74 #define TEST_RESIZE_COPY \
75     std::make_pair(cv::Size(3840, 2160), cv::Size(3840, 2160)), \
76     std::make_pair(cv::Size(1920, 1080), cv::Size(1920, 1080)), \
77     std::make_pair(cv::Size(1280,  720), cv::Size(1280,  720)), \
78     std::make_pair(cv::Size( 640,  480), cv::Size( 640,  480)), \
79     std::make_pair(cv::Size( 320,  200), cv::Size( 320,  200)), \
80     std::make_pair(cv::Size( 113,   71), cv::Size( 113,   71))
81
82 #define TEST_RESIZE_SPECIAL \
83     std::make_pair(cv::Size(300, 300), cv::Size(300, 199)), \
84     std::make_pair(cv::Size(300, 300), cv::Size(199, 300)), \
85     std::make_pair(cv::Size(300, 300), cv::Size(199, 199)), \
86     std::make_pair(cv::Size(199, 199), cv::Size(300, 300)), \
87     std::make_pair(cv::Size(199, 300), cv::Size(300, 300)), \
88     std::make_pair(cv::Size(300, 199), cv::Size(300, 300))
89
90 #define TEST_RESIZE_PAIRS \
91     TEST_RESIZE_DOWN, \
92     TEST_RESIZE_UP, \
93     TEST_RESIZE_HORZ, \
94     TEST_RESIZE_VERT, \
95     TEST_RESIZE_COPY, \
96     TEST_RESIZE_SPECIAL
97
98 using namespace testing;
99
100 INSTANTIATE_TEST_CASE_P(ResizeTestFluid_U8, ResizeTestGAPI,
101                         Combine(Values(CV_8UC1, CV_8UC3),
102                                 Values(cv::INTER_LINEAR, cv::INTER_AREA),
103                                 Values(TEST_RESIZE_PAIRS),
104                                 Values(1))); // error not more than 1 unit
105
106 INSTANTIATE_TEST_CASE_P(ResizeTestFluid_F32, ResizeTestGAPI,
107                         Combine(Values(CV_32FC1, CV_32FC3),
108                                 Values(cv::INTER_LINEAR, cv::INTER_AREA),
109                                 Values(TEST_RESIZE_PAIRS),
110                                 Values(0.015))); // accuracy like ~1.5%
111
112 INSTANTIATE_TEST_CASE_P(SplitTestFluid, SplitTestGAPI,
113                         Combine(Values(2, 3, 4),
114                                 Values(CV_8U, CV_32F),
115                                 Values(TEST_SIZES)));
116
117 INSTANTIATE_TEST_CASE_P(MergeTestFluid, MergeTestGAPI,
118                         Combine(Values(2, 3, 4),
119                                 Values(CV_8U, CV_32F),
120                                 Values(TEST_SIZES)));
121
122 //----------------------------------------------------------------------
123
124 INSTANTIATE_TEST_CASE_P(ResizeTestFluid_U8, ResizeTestIE,
125                         Combine(Values(CV_8UC1, CV_8UC3),
126                                 Values(cv::INTER_LINEAR, cv::INTER_AREA),
127                                 Values(TEST_RESIZE_PAIRS),
128                                 Values(1))); // error not more than 1 unit
129
130 INSTANTIATE_TEST_CASE_P(ResizeTestFluid_F32, ResizeTestIE,
131                         Combine(Values(CV_32FC1, CV_32FC3),
132                                 Values(cv::INTER_LINEAR, cv::INTER_AREA),
133                                 Values(TEST_RESIZE_PAIRS),
134                                 Values(0.05))); // error within 0.05 units
135
136 INSTANTIATE_TEST_CASE_P(SplitTestFluid, SplitTestIE,
137                         Combine(Values(CV_8UC2, CV_8UC3, CV_8UC4,
138                                        CV_32FC2, CV_32FC3, CV_32FC4),
139                                 Values(TEST_SIZES)));
140
141 INSTANTIATE_TEST_CASE_P(MergeTestFluid, MergeTestIE,
142                         Combine(Values(CV_8UC2, CV_8UC3, CV_8UC4,
143                                        CV_32FC2, CV_32FC3, CV_32FC4),
144                                 Values(TEST_SIZES)));
145
146 //------------------------------------------------------------------------------
147
148 namespace IE = InferenceEngine;
149
150 static const auto FRAME_SIZES =
151    Values(std::make_pair(cv::Size(1920,1080),
152                          cv::Size(1024,1024)), // person-vehicle-bike-detection-crossroad-0078
153           std::make_pair(cv::Size(1024, 768),
154                          cv::Size( 992, 544)), // person-detection-retail-0001
155           std::make_pair(cv::Size(1280, 720),
156                          cv::Size( 896, 512)), // road-segmentation-adas-0001
157           std::make_pair(cv::Size(3840, 2160),
158                          cv::Size(2048, 1024)), // semantic-segmentation-adas-0001
159           std::make_pair(cv::Size(1270, 720),
160                          cv::Size(2048, 1024)), // semantic-segmentation-adas-0001 (UPSCALE)
161           std::make_pair(cv::Size( 640, 480),
162                          cv::Size( 544, 320)));  // 320 - face-person-detection-retail-0002,
163                                                  // 320 - person-detection-retail-10013
164                                                  // 300 - face-detection-retail-0004
165
166 static const auto PATCH_SIZES =
167     Values(std::make_pair(cv::Size(200,400),
168                           cv::Size(128,384)),  // person-reidentification-retail-0076
169            std::make_pair(cv::Size( 96,256),
170                           cv::Size(128,384)),  // person-reidentification-retail-0076 (UPSCALE)
171            std::make_pair(cv::Size(340,340),
172                           cv::Size(320,256)),  // vehicle-license-plate-detection-barrier-0007
173            std::make_pair(cv::Size(256,256),
174                           cv::Size( 72,72)),   // vehicle-attributes-recognition-barrier-0039
175            std::make_pair(cv::Size(96,96),
176                           cv::Size(64,64)),    // 60 - head-pose-estimation-adas-0001
177                                                // 62 - age-gender-recognition-retail-0013
178                                                // 64 - emotions-recognition-retail-0003
179            std::make_pair(cv::Size(128,48),
180                           cv::Size( 94,24)),   // license-plate-recognition-barrier-0001
181            std::make_pair(cv::Size(120,200),
182                           cv::Size(80, 160))); // 80 - person-attributes-recognition-crossroad-0031
183                                                // 64 - person-reidentification-retail-0079
184
185 INSTANTIATE_TEST_CASE_P(ReorderResize_Frame, PreprocTest,
186                         Combine(Values(IE::Precision::U8, IE::Precision::FP32),
187                                 Values(IE::ResizeAlgorithm::RESIZE_BILINEAR), // AREA is not there yet
188                                 Values(IE::Layout::NHWC),
189                                 Values(IE::Layout::NCHW),
190                                 Values(1, 3),
191                                 FRAME_SIZES));
192
193 INSTANTIATE_TEST_CASE_P(Scale3ch_Frame, PreprocTest,
194                         Combine(Values(IE::Precision::U8, IE::Precision::FP32),
195                                 Values(IE::ResizeAlgorithm::RESIZE_BILINEAR), // AREA is not there yet
196                                 Values(IE::Layout::NHWC),
197                                 Values(IE::Layout::NHWC),
198                                 Values(3),
199                                 FRAME_SIZES));
200
201 INSTANTIATE_TEST_CASE_P(ReorderResize_Patch, PreprocTest,
202                         Combine(Values(IE::Precision::U8, IE::Precision::FP32),
203                                 Values(IE::ResizeAlgorithm::RESIZE_BILINEAR), // AREA is not there yet
204                                 Values(IE::Layout::NHWC),
205                                 Values(IE::Layout::NCHW, IE::Layout::NCHW),
206                                 Values(1, 3),
207                                 PATCH_SIZES));
208
209 INSTANTIATE_TEST_CASE_P(Everything, PreprocTest,
210                         Combine(Values(IE::Precision::U8, IE::Precision::FP32),
211                                 Values(IE::ResizeAlgorithm::RESIZE_BILINEAR, IE::ResizeAlgorithm::RESIZE_AREA),
212                                 Values(IE::Layout::NHWC, IE::Layout::NCHW),
213                                 Values(IE::Layout::NHWC, IE::Layout::NCHW),
214                                 Values(1, 2, 3, 4),
215                                 Values(std::make_pair(cv::Size(1920, 1080), cv::Size(1024,1024)),
216                                        std::make_pair(cv::Size(1280, 720), cv::Size(544,320)),
217                                        std::make_pair(cv::Size(640, 480), cv::Size(896, 512)),
218                                        std::make_pair(cv::Size(200, 400), cv::Size(128, 384)),
219                                        std::make_pair(cv::Size(256, 256), cv::Size(72, 72)),
220                                        std::make_pair(cv::Size(96, 256), cv::Size(128, 384)))));
221
222 }