1
0
mirror of https://github.com/opencv/opencv_contrib.git synced 2025-10-19 02:16:34 +08:00
Files
opencv_contrib/modules/tracking/test/test_trackerParametersIO.cpp
Vladislav Sovrasov 41995b76e8 KCF speedup (#1374)
* kcf use float data type rather than double.

In our practice, float is good enough and could get better performance.
With this patch, one of my benchmark could get about 20% performance gain.

Signed-off-by: Zhigang Gong <zhigang.gong@intel.com>

* Offload transpose matrix multiplication to ocl.

The matrix multiplication in updateProjectMatrix is one of the
hotspot. And because of the matrix shape is special, say the
m is very short but the n is very large. The GEMM implementation
in neither the clBLAS nor the in trunk implementation are very
inefficient, I implement an standalone transpose matrix mulplication
kernel here. It can get about 10% performance gain on Intel
desktop platform or 20% performance gain on a braswell platform.
And in the mean time, the CPU utilization will be lower.

Signed-off-by: Zhigang Gong <zhigang.gong@intel.com>

* Add verification code for kcf ocl transpose mm kernel.

Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>

* tracking: show FPS in traker sample

* tracking: fix MSVC warnings in KCF

* tracking: move OCL kernel initialization to constructor in KCF
2017-10-10 13:54:22 +03:00

128 lines
5.4 KiB
C++

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
#include "test_precomp.hpp"
#include "opencv2/tracking.hpp"
using namespace cv;
TEST(MEDIAN_FLOW_Parameters, IO)
{
TrackerMedianFlow::Params parameters;
parameters.maxLevel = 10;
parameters.maxMedianLengthOfDisplacementDifference = 11;
parameters.pointsInGrid = 12;
parameters.winSize = Size(6, 5);
parameters.winSizeNCC = Size(41, 40);
parameters.termCriteria.maxCount = 100;
parameters.termCriteria.epsilon = 0.1;
FileStorage fsWriter("parameters.xml", FileStorage::WRITE + FileStorage::MEMORY);
parameters.write(fsWriter);
String serializedParameters = fsWriter.releaseAndGetString();
FileStorage fsReader(serializedParameters, FileStorage::READ + FileStorage::MEMORY);
TrackerMedianFlow::Params readParameters;
readParameters.read(fsReader.root());
ASSERT_EQ(parameters.maxLevel, readParameters.maxLevel);
ASSERT_EQ(parameters.maxMedianLengthOfDisplacementDifference,
readParameters.maxMedianLengthOfDisplacementDifference);
ASSERT_EQ(parameters.pointsInGrid, readParameters.pointsInGrid);
ASSERT_EQ(parameters.winSize, readParameters.winSize);
ASSERT_EQ(parameters.winSizeNCC, readParameters.winSizeNCC);
ASSERT_EQ(parameters.termCriteria.epsilon, readParameters.termCriteria.epsilon);
ASSERT_EQ(parameters.termCriteria.maxCount, readParameters.termCriteria.maxCount);
}
TEST(MEDIAN_FLOW_Parameters, Default_Value_If_Absent)
{
TrackerMedianFlow::Params defaultParameters;
FileStorage fsReader(String("%YAML 1.0"), FileStorage::READ + FileStorage::MEMORY);
TrackerMedianFlow::Params readParameters;
readParameters.read(fsReader.root());
ASSERT_EQ(defaultParameters.maxLevel, readParameters.maxLevel);
ASSERT_EQ(defaultParameters.maxMedianLengthOfDisplacementDifference,
readParameters.maxMedianLengthOfDisplacementDifference);
ASSERT_EQ(defaultParameters.pointsInGrid, readParameters.pointsInGrid);
ASSERT_EQ(defaultParameters.winSize, readParameters.winSize);
ASSERT_EQ(defaultParameters.winSizeNCC, readParameters.winSizeNCC);
ASSERT_EQ(defaultParameters.termCriteria.epsilon, readParameters.termCriteria.epsilon);
ASSERT_EQ(defaultParameters.termCriteria.maxCount, readParameters.termCriteria.maxCount);
}
TEST(KCF_Parameters, IO)
{
TrackerKCF::Params parameters;
parameters.sigma = 0.3f;
parameters.lambda = 0.02f;
parameters.interp_factor = 0.08f;
parameters.output_sigma_factor = 1.0f/ 32.0f;
parameters.resize=false;
parameters.max_patch_size=90*90;
parameters.split_coeff=false;
parameters.wrap_kernel=true;
parameters.desc_npca = TrackerKCF::CN;
parameters.desc_pca = TrackerKCF::GRAY;
parameters.compress_feature=false;
parameters.compressed_size=3;
parameters.pca_learning_rate=0.2f;
FileStorage fsWriter("parameters.xml", FileStorage::WRITE + FileStorage::MEMORY);
parameters.write(fsWriter);
String serializedParameters = fsWriter.releaseAndGetString();
FileStorage fsReader(serializedParameters, FileStorage::READ + FileStorage::MEMORY);
TrackerKCF::Params readParameters;
readParameters.read(fsReader.root());
ASSERT_DOUBLE_EQ(parameters.sigma, readParameters.sigma);
ASSERT_DOUBLE_EQ(parameters.lambda, readParameters.lambda);
ASSERT_DOUBLE_EQ(parameters.interp_factor, readParameters.interp_factor);
ASSERT_DOUBLE_EQ(parameters.output_sigma_factor, readParameters.output_sigma_factor);
ASSERT_EQ(parameters.resize, readParameters.resize);
ASSERT_EQ(parameters.max_patch_size, readParameters.max_patch_size);
ASSERT_EQ(parameters.split_coeff, readParameters.split_coeff);
ASSERT_EQ(parameters.wrap_kernel, readParameters.wrap_kernel);
ASSERT_EQ(parameters.desc_npca, readParameters.desc_npca);
ASSERT_EQ(parameters.desc_pca, readParameters.desc_pca);
ASSERT_EQ(parameters.compress_feature, readParameters.compress_feature);
ASSERT_EQ(parameters.compressed_size, readParameters.compressed_size);
ASSERT_DOUBLE_EQ(parameters.pca_learning_rate, readParameters.pca_learning_rate);
}
TEST(KCF_Parameters, Default_Value_If_Absent)
{
TrackerKCF::Params defaultParameters;
FileStorage fsReader(String("%YAML 1.0"), FileStorage::READ + FileStorage::MEMORY);
TrackerKCF::Params readParameters;
readParameters.read(fsReader.root());
ASSERT_DOUBLE_EQ(defaultParameters.sigma, readParameters.sigma);
ASSERT_DOUBLE_EQ(defaultParameters.lambda, readParameters.lambda);
ASSERT_DOUBLE_EQ(defaultParameters.interp_factor, readParameters.interp_factor);
ASSERT_DOUBLE_EQ(defaultParameters.output_sigma_factor, readParameters.output_sigma_factor);
ASSERT_EQ(defaultParameters.resize, readParameters.resize);
ASSERT_EQ(defaultParameters.max_patch_size, readParameters.max_patch_size);
ASSERT_EQ(defaultParameters.split_coeff, readParameters.split_coeff);
ASSERT_EQ(defaultParameters.wrap_kernel, readParameters.wrap_kernel);
ASSERT_EQ(defaultParameters.desc_npca, readParameters.desc_npca);
ASSERT_EQ(defaultParameters.desc_pca, readParameters.desc_pca);
ASSERT_EQ(defaultParameters.compress_feature, readParameters.compress_feature);
ASSERT_EQ(defaultParameters.compressed_size, readParameters.compressed_size);
ASSERT_DOUBLE_EQ(defaultParameters.pca_learning_rate, readParameters.pca_learning_rate);
}