shared_ptr<ProbabilisticSvmClassifier> ProbabilisticSvmClassifier::load(const ptree& subtree) { path classifierFile = subtree.get<path>("classifierFile"); shared_ptr<ProbabilisticSvmClassifier> psvm; if (classifierFile.extension() == ".mat") { psvm = loadFromMatlab(classifierFile.string(), subtree.get<string>("thresholdsFile")); } else { shared_ptr<SvmClassifier> svm = SvmClassifier::loadFromText(classifierFile.string()); // Todo: Make a ProbabilisticSvmClassifier::loadFromText(...) if (subtree.get("logisticA", 0.0) == 0.0 || subtree.get("logisticB", 0.0) == 0.0) { std::cout << "Warning, one or both sigmoid parameters not set in config, using default sigmoid parameters." << std::endl; // TODO use logger } psvm = make_shared<ProbabilisticSvmClassifier>(svm); } // If the user sets the logistic parameters in the config, overwrite the current settings with it double logisticA = subtree.get("logisticA", 0.0); // TODO: This is not so good, better use the try/catch of get(...). Because: What if the user actually sets a value of 0.0 in the config... double logisticB = subtree.get("logisticB", 0.0); if (logisticA != 0.0 && logisticB != 0.0) { psvm->setLogisticParameters(logisticA, logisticB); } psvm->getSvm()->setThreshold(subtree.get("threshold", 0.0f)); return psvm; }
shared_ptr<RvmClassifier> RvmClassifier::load(const ptree& subtree) { path classifierFile = subtree.get<path>("classifierFile"); if (classifierFile.extension() == ".mat") { shared_ptr<RvmClassifier> rvm = loadFromMatlab(classifierFile.string(), subtree.get<string>("thresholdsFile")); // Do some stuff, e.g. //int numFiltersToUse = subtree.get<int>(""); //Number filters to use //wvm->numUsedFilters=280; // Todo make dynamic (from script) return rvm; } else { throw logic_error("ProbabilisticRvmClassifier: Only loading of .mat RVMs is supported. If you want to load a non-cascaded RVM, use an SvmClassifier."); } }