add sanity checks into the features2d gpu performance tests
authormarina.kolpakova <marina.kolpakova@itseez.com>
Wed, 10 Oct 2012 09:10:03 +0000 (13:10 +0400)
committermarina.kolpakova <marina.kolpakova@itseez.com>
Wed, 10 Oct 2012 12:13:25 +0000 (16:13 +0400)
modules/gpu/perf/perf_features2d.cpp
modules/gpu/perf/utility.hpp

index e7a497a..7b2be25 100644 (file)
@@ -17,7 +17,7 @@ PERF_TEST_P(Image, Features2D_SURF, Values<string>("gpu/perf/aloe.png"))
     cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE);\r
     ASSERT_FALSE(img.empty());\r
 \r
-    if (runOnGpu)\r
+    if (PERF_RUN_GPU())\r
     {\r
         cv::gpu::SURF_GPU d_surf;\r
 \r
@@ -30,6 +30,9 @@ PERF_TEST_P(Image, Features2D_SURF, Values<string>("gpu/perf/aloe.png"))
         {\r
             d_surf(d_img, cv::gpu::GpuMat(), d_keypoints, d_descriptors);\r
         }\r
+\r
+        GPU_SANITY_CHECK(d_descriptors, 1e-4);\r
+        GPU_SANITY_CHECK_KEYPOINTS(SURF, d_keypoints);\r
     }\r
     else\r
     {\r
@@ -45,6 +48,9 @@ PERF_TEST_P(Image, Features2D_SURF, Values<string>("gpu/perf/aloe.png"))
             keypoints.clear();\r
             surf(img, cv::noArray(), keypoints, descriptors);\r
         }\r
+\r
+        SANITY_CHECK_KEYPOINTS(keypoints);\r
+        SANITY_CHECK(descriptors, 1e-4);\r
     }\r
 }\r
 \r
@@ -56,7 +62,7 @@ PERF_TEST_P(Image, Features2D_FAST, Values<string>("gpu/perf/aloe.png"))
     cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE);\r
     ASSERT_FALSE(img.empty());\r
 \r
-    if (runOnGpu)\r
+    if (PERF_RUN_GPU())\r
     {\r
         cv::gpu::FAST_GPU d_fast(20);\r
 \r
@@ -69,6 +75,8 @@ PERF_TEST_P(Image, Features2D_FAST, Values<string>("gpu/perf/aloe.png"))
         {\r
             d_fast(d_img, cv::gpu::GpuMat(), d_keypoints);\r
         }\r
+\r
+        GPU_SANITY_CHECK_RESPONSE(FAST, d_keypoints);\r
     }\r
     else\r
     {\r
@@ -81,6 +89,8 @@ PERF_TEST_P(Image, Features2D_FAST, Values<string>("gpu/perf/aloe.png"))
             keypoints.clear();\r
             cv::FAST(img, keypoints, 20);\r
         }\r
+\r
+        SANITY_CHECK_KEYPOINTS(keypoints);\r
     }\r
 }\r
 \r
@@ -92,7 +102,7 @@ PERF_TEST_P(Image, Features2D_ORB, Values<string>("gpu/perf/aloe.png"))
     cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE);\r
     ASSERT_FALSE(img.empty());\r
 \r
-    if (runOnGpu)\r
+    if (PERF_RUN_GPU())\r
     {\r
         cv::gpu::ORB_GPU d_orb(4000);\r
 \r
@@ -105,6 +115,9 @@ PERF_TEST_P(Image, Features2D_ORB, Values<string>("gpu/perf/aloe.png"))
         {\r
             d_orb(d_img, cv::gpu::GpuMat(), d_keypoints, d_descriptors);\r
         }\r
+\r
+        GPU_SANITY_CHECK_KEYPOINTS(ORB, d_keypoints);\r
+        GPU_SANITY_CHECK(d_descriptors);\r
     }\r
     else\r
     {\r
@@ -120,6 +133,9 @@ PERF_TEST_P(Image, Features2D_ORB, Values<string>("gpu/perf/aloe.png"))
             keypoints.clear();\r
             orb(img, cv::noArray(), keypoints, descriptors);\r
         }\r
+\r
+        SANITY_CHECK_KEYPOINTS(keypoints);\r
+        SANITY_CHECK(descriptors);\r
     }\r
 }\r
 \r
@@ -143,7 +159,7 @@ PERF_TEST_P(DescSize_Norm, Features2D_BFMatch, Combine(Values(64, 128, 256), Val
     cv::Mat train(3000, desc_size, type);\r
     fillRandom(train);\r
 \r
-    if (runOnGpu)\r
+    if (PERF_RUN_GPU())\r
     {\r
         cv::gpu::BFMatcher_GPU d_matcher(normType);\r
 \r
@@ -157,6 +173,9 @@ PERF_TEST_P(DescSize_Norm, Features2D_BFMatch, Combine(Values(64, 128, 256), Val
         {\r
             d_matcher.matchSingle(d_query, d_train, d_trainIdx, d_distance);\r
         }\r
+\r
+        GPU_SANITY_CHECK(d_trainIdx);\r
+        GPU_SANITY_CHECK(d_distance);\r
     }\r
     else\r
     {\r
@@ -170,6 +189,8 @@ PERF_TEST_P(DescSize_Norm, Features2D_BFMatch, Combine(Values(64, 128, 256), Val
         {\r
             matcher.match(query, train, matches);\r
         }\r
+\r
+        SANITY_CHECK(matches);\r
     }\r
 }\r
 \r
@@ -197,7 +218,7 @@ PERF_TEST_P(DescSize_K_Norm, Features2D_BFKnnMatch, Combine(
     cv::Mat train(3000, desc_size, type);\r
     fillRandom(train);\r
 \r
-    if (runOnGpu)\r
+    if (PERF_RUN_GPU())\r
     {\r
         cv::gpu::BFMatcher_GPU d_matcher(normType);\r
 \r
@@ -211,6 +232,9 @@ PERF_TEST_P(DescSize_K_Norm, Features2D_BFKnnMatch, Combine(
         {\r
             d_matcher.knnMatchSingle(d_query, d_train, d_trainIdx, d_distance, d_allDist, k);\r
         }\r
+\r
+        GPU_SANITY_CHECK(d_trainIdx);\r
+        GPU_SANITY_CHECK(d_distance);\r
     }\r
     else\r
     {\r
@@ -224,6 +248,8 @@ PERF_TEST_P(DescSize_K_Norm, Features2D_BFKnnMatch, Combine(
         {\r
             matcher.knnMatch(query, train, matches, k);\r
         }\r
+\r
+        SANITY_CHECK(matches);\r
     }\r
 }\r
 \r
@@ -245,7 +271,7 @@ PERF_TEST_P(DescSize_Norm, Features2D_BFRadiusMatch, Combine(Values(64, 128, 256
     cv::Mat train(3000, desc_size, type);\r
     fillRandom(train, 0.0, 1.0);\r
 \r
-    if (runOnGpu)\r
+    if (PERF_RUN_GPU())\r
     {\r
         cv::gpu::BFMatcher_GPU d_matcher(normType);\r
 \r
@@ -259,6 +285,9 @@ PERF_TEST_P(DescSize_Norm, Features2D_BFRadiusMatch, Combine(Values(64, 128, 256
         {\r
             d_matcher.radiusMatchSingle(d_query, d_train, d_trainIdx, d_distance, d_nMatches, 2.0);\r
         }\r
+\r
+        GPU_SANITY_CHECK(d_trainIdx);\r
+        GPU_SANITY_CHECK(d_distance);\r
     }\r
     else\r
     {\r
@@ -272,6 +301,8 @@ PERF_TEST_P(DescSize_Norm, Features2D_BFRadiusMatch, Combine(Values(64, 128, 256
         {\r
             matcher.radiusMatch(query, train, matches, 2.0);\r
         }\r
+\r
+        SANITY_CHECK(matches);\r
     }\r
 }\r
 \r
index bb1ca76..7aaaa24 100644 (file)
@@ -64,4 +64,26 @@ namespace ts {
         SANITY_CHECK(cmat, ## __VA_ARGS__); \\r
     } while(0);\r
 \r
+#define GPU_SANITY_CHECK_KEYPOINTS(alg, dmat, ...)                                          \\r
+    do{                                                                                     \\r
+        cv::Mat d##dmat(dmat);                                                              \\r
+        cv::Mat __pt_x      = d##dmat.row(cv::gpu::alg##_GPU::X_ROW);                       \\r
+        cv::Mat __pt_y      = d##dmat.row(cv::gpu::alg##_GPU::Y_ROW);                       \\r
+        cv::Mat __angle     = d##dmat.row(cv::gpu::alg##_GPU::ANGLE_ROW);                   \\r
+        cv::Mat __octave    = d##dmat.row(cv::gpu::alg##_GPU::OCTAVE_ROW);                               \\r
+        cv::Mat __size      = d##dmat.row(cv::gpu::alg##_GPU::SIZE_ROW);                                 \\r
+        ::perf::Regression::add(this, std::string(#dmat) + "-pt-x-row",     __pt_x,     ## __VA_ARGS__); \\r
+        ::perf::Regression::add(this, std::string(#dmat) + "-pt-y-row",     __pt_y,     ## __VA_ARGS__); \\r
+        ::perf::Regression::add(this, std::string(#dmat) + "-angle-row",    __angle,    ## __VA_ARGS__); \\r
+        ::perf::Regression::add(this, std::string(#dmat) + "octave-row",    __octave,   ## __VA_ARGS__); \\r
+        ::perf::Regression::add(this, std::string(#dmat) + "-pt-size-row",  __size,     ## __VA_ARGS__); \\r
+    } while(0);\r
+\r
+#define GPU_SANITY_CHECK_RESPONSE(alg, dmat, ...) \\r
+    do{                                                                                     \\r
+        cv::Mat d##dmat(dmat);                                                              \\r
+        cv::Mat __response  = d##dmat.row(cv::gpu::alg##_GPU::RESPONSE_ROW);                \\r
+        ::perf::Regression::add(this, std::string(#dmat) + "-response-row", __response, ## __VA_ARGS__); \\r
+    } while(0);\r
+\r
 #endif // __OPENCV_PERF_GPU_UTILITY_HPP__\r