Как измерить время обучения для обучения классификаторов KNN в C ++ и 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 секунд.
Заранее спасибо.

0

Решение

Если доступно (C ++ 11), вы можете использовать хронограф.

#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";
1

Другие решения

Вопрос старый, но опубликованный ответ, на мой взгляд, не тот, который следует использовать при работе с OpenCV.

Чтобы измерить время операции, OpenCV предоставляет функции для этого. Вы можете проконсультироваться официальная документация для этого.
Вот код для записи:

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

Другим способом является использование TickMeter объект в OpenCV.
Вот описание 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;
0

По вопросам рекламы [email protected]