Я пытаюсь создать в OpenCV модель для распознавания лиц (в частности, пола и возраста). В моем наборе данных около 50 000 изображений. Проблема в; когда я пытаюсь обучить модель с таким объемом данных, использование памяти просто растет и заканчивается примерно через 100 изображений. Даже при попытке пакетной обработки и выгрузки загруженного изображения cv::mat модель просто увеличивается в размерах (чего, я думаю, и следовало ожидать).
Я пробовал загрузить и обучить одно изображение на время, и с этим вариантом я пробовал обучение в пакетном режиме, но результат все тот же.
Класс ImageCollection представляет собой просто карту SEXAGEBRACKET (меток) для путей к файлам изображений. Я использую модель LBPHFaceRecouncer.
Вот как выглядит моя функция «загрузка и обучение»:
Код: Выделить всё
void ModelGenerator::LoadImagesAndTrain(const ImageCollection* imageCollection, const cv::Ptr modelToTrain, const bool isUpdatingModel)
{
cv::Size loadedImageSize;
cv::Mat currLoadedImage;
std::vector imagesToUse;
std::vector labelsToUse;
std::multimap* bracketToImageFileNameMap;
if (imageCollection != NULL && modelToTrain != NULL)
{
std::cout begin()->second, cv::IMREAD_GRAYSCALE);
imagesToUse.push_back(currLoadedImage);
labelsToUse.push_back(bracketToImageFileNameMap->begin()->first);
modelToTrain->train(imagesToUse, labelsToUse);
currLoadedImage.release();
}
imagesToUse.clear();
labelsToUse.clear();
for (std::multimap::iterator it = bracketToImageFileNameMap->begin(); it != bracketToImageFileNameMap->end(); it++)
{
std::cout
Источник: [url]https://stackoverflow.com/questions/78143051/how-do-i-train-an-opencv-lbphfacerecognizer-model-with-a-very-large-number-of-im[/url]