如何在C++和OpenCV中测量KNN分类器训练的训练时间
How to measure the trainign time of KNN classifier training in C++ and OpenCV?
我正在使用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 秒。提前谢谢。
如果可用(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";
这个问题很旧,但在我看来,发布的答案不是使用 OpenCV 时应该使用的答案。
为了测量操作的时间,OpenCV提供了函数来做到这一点。您可以为此查阅官方文档。下面是要编写的代码:
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;
相关文章:
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 只有级联分类器会发出未定义的引用错误
- 将svm分类器设置为HOG检测器
- 在C /OBJ-C 中运行Tensorflow分类器模型与Python的结果不同
- 贝叶斯和SVM分类器在OpenCV3中的实现
- 如何在OpenCV中从3D模型训练HAAR分类器?
- Tensorflow - Deep MNIST 教程 - 将分类器导出到C++
- OpenCV SVM 分类器图像识别
- 哪个分类器可用于使用C 和OPENCV进行铁路线检测
- CNTK中的二进制分类器,带有C
- 是时候训练分类器了
- SVM 分类器未保存在 ".xml" 中?
- 带有级联或 SVM 分类器的 HOG.C++ OpenCV (V2.4.5) 中的程序
- 如何在C++和OpenCV中测量KNN分类器训练的训练时间
- OpenCV级联分类器检测输入Mat边界外的MultiScale结果Rect
- 如何使用多个 SVM 分类器(每个分类器都有一个特定的内核)作为"one vs rest classification"方案?
- 在哪里可以获得用于detectMultiScale调用的新的经过训练的分类器级联类型
- opencv训练分类器从未连续3个阶段
- 修改OpenCV随机树分类器
- 使用OpenCV级联分类器的内存泄漏