【问题标题】:How to measure the trainign time of KNN classifier training in C++ and OpenCV?如何测量 C++ 和 OpenCV 中 KNN 分类器训练的训练时间?
【发布时间】:2015-06-17 01:01:20
【问题描述】:

我将CvKNearest 用于KNN 分类。我想测量培训所需的时间。这是代码:

#include <time.h>
clock_t start, end;
double time;
start = clock();
KnnClassifier.train( trainData, classes, Mat(), false, 1 );
end = clock();
time = ((float) (end - start)) / CLOCKS_PER_SEC;
cout<<" Training time (s) =   "<<time << "\n";  

问题是结果是训练需要 0 秒。 提前致谢。

【问题讨论】:

  • 也许确实需要大约0s,你打印时间以微秒为单位怎么样,即time = 1000.0f * ((float) (end - start)) / CLOCKS_PER_SEC;
  • 结果也是0。startend总是相等的!
  • time 的类型是什么?你能展示你的完整代码吗?
  • 我已经更新了问题。
  • KnnClassifier.train 使用 GPU 吗?

标签: c++ opencv classification knn


【解决方案1】:

如果可用 (C++11),您可以使用 chrono。

#include <chrono>

auto start = std::chrono::system_clock::now();
KnnClassifier.train( trainData, classes, Mat(), false, 1 );
auto end = std::chrono::system_clock::now();
auto time = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
cout << " Training time (s) = " << time.count() << "\n";  

【讨论】:

  • 除了使用C++11还有什么办法吗?
  • 您知道培训过程需要多长时间吗? clock() 的问题在于它的粒度很差,如果进程花费不到 20 毫秒(尽管这完全独立于架构),那么它可能会报告运行时间为 0。有可用的库,例如 boost 的 @987654321 @,虽然我对他们没有经验。
【解决方案2】:

这个问题很老,但我认为发布的答案不是使用 OpenCV 时应该使用的答案。

为了测量操作的时间,OpenCV 提供了执行此操作的函数。您可以咨询official documentation for that。 这是要编写的代码:

double t = (double)getTickCount();
// do something ...
t = ((double)getTickCount() - t)/getTickFrequency();

另一种方法是在 OpenCV 中使用 TickMeter 对象。 以下是官方文档中对TickMeter 类的描述:

一个类来衡量通过时间。

该类通过计算每个刻度的数量来计算经过时间 第二。也就是说,以下代码计算执行时间 秒:

TickMeter tm;
tm.start();
// do something ...
tm.stop();
std::cout << tm.getTimeSec();

还可以计算多次运行的平均时间:

TickMeter tm;
for (int i = 0; i < 100; i++)
{
    tm.start();
 // do something ...
    tm.stop();
}
double average_time = tm.getTimeSec() / tm.getCounter();
std::cout << "Average time in second per iteration is: " << average_time << std::endl;

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 2017-11-21
    • 2015-12-16
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2012-12-05
    • 2021-03-12
    相关资源
    最近更新 更多