Я использую OpenCV 3.4.1. Я работаю над проектом по классификации видео и пытаюсь использовать KNearest для классификации между двумя категориями. У меня есть 8 областей интересов в каждом видеокадре. Чтобы принять решение по каждому кадру, каждый KNearest выполняется по значениям пикселей в каждой области. Большинство выигрывает (и поддерживает одну категорию, если она составляет ie). Итак, у меня есть 8 наборов обучающих данных (по одному для каждой интересующей области).
Проблема: Ответ, сгенерированный из модели knn, изменился, когда я по-разному обозначил категории.
Наборы обучающих данных организованы в виде строк:
[метка категории], data0, data1, data2 .... et c. (разные размеры для каждого обучающего набора)
, где dataX = пиксельные данные кадра (1 строка = 1 кадр). Затем я строю модель следующим образом:
Ptr<TrainData> tdata = TrainData::loadFromCSV(filename, 0, 0, -1, String("cat"));
Mat raw = tdata->getTrainSamples();
Mat res = tdata->getResponses();
PCA pca(raw, noArray(), PCA::DATA_AS_ROW, 0.99);
Mat knnIn = pca.project(raw);
Ptr<ml::KNearest> knn = ml::KNearest::create();
knn->train(knnIn, ml::ROW_SAMPLE, res);
После что тестовые данные передаются в pca и knn для получения ответа.
Чтобы протестировать его, я поместил 1 набор тестовых данных в модели 8 knn.
Если я использую 0 & 1 в качестве [метки категории] в наборах обучающих данных, 8 ответов от KNN будут 1,1,1,1,1,0,0,1.
Если вместо этого поменять метку на 2 & 1 (заменить все «0» на «2» в первом столбце обучающих данных), 8 ответов станут 1,1,1,1,1,1,1, 1, в то время как я ожидаю 1,1,1,1,1 2,2 , 1.
Некоторые наблюдения:
- нет ошибок редактирования данных тренировки (при изменении меток категорий).
- Модель KNN isClassifier () = true. DefaultK = 10. AlgorithmType = 1 (BRUTE_FORCE).
- Результат соответствует одному и тому же набору данных обучения и набору данных тестирования.
- Я не вижу никакой картины различий в ответах для двух наборов меток (после использования различных наборов обучающих данных и наборов данных тестирования).
Пожалуйста, пролите немного света. Большое спасибо!