Сериализация объектов в C ++ для хранения SVM-объекта OpenCV [OpenCV 3.1.0]

Так что общеизвестно, что из-за ошибки в OpenCV при попытке загрузить нелинейное ядро ​​SVM после сохранения вы получаете ошибку.

Обратитесь сюда для получения дополнительной информации:
OpenCV 3.1.0: сохранять и загружать обученные SVM

Люди получили SVM для загрузки, но не смогли получить тот же результат (данные классификатора были повреждены после загрузки). Я попытался проверить это, написав свою собственную функцию svmloader.

Ptr<SVM> svmloader(const String& filepath)
{
FileStorage fs;
fs.open(filepath, FileStorage::READ);

Ptr<SVM> svm = Algorithm::read<SVM>(fs.getFirstTopLevelNode());
return svm;
}

Это работает, но на данный момент я могу подтвердить, что я тестировал модель до и после загрузки, и результаты кажутся хуже после загрузки. То есть после того, как вы обучите классификатор и протестируете его, все будет хорошо, но если вы сохраните его и загрузите снова, он будет исчерпан.

Поэтому я думаю, что хочу использовать сериализацию объектов C ++ для решения этой проблемы. Как я могу записать произвольные объекты в файл, а затем прочитать из этого файла?

Также кто-то может подтвердить, что вышеупомянутая ошибка была исправлена ​​в OpenCV 3.2.0. Я НЕ МОГ В СООТВЕТСТВИИ С RELEASENOTES.

Любая помощь очень ценится людьми

0

Решение

https://github.com/opencv/opencv/blob/master/modules/ml/src/svm.cpp#L1611

Вы обнаружите, что метод clear () вызывается каждый раз, когда вы вызываете cv :: ml :: SVM :: trainAuto или cv :: ml :: SVM :: train ()

0

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

Других решений пока нет …

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