From 1bf696f392d19440a5b0b63ab578c24195d47655 Mon Sep 17 00:00:00 2001 From: "marina.kolpakova" Date: Sat, 2 Mar 2013 09:24:13 +0400 Subject: [PATCH] fixes for soft cascade training app --- apps/sft/config.cpp | 5 ++++- apps/sft/include/sft/config.hpp | 3 +++ apps/sft/sft.cpp | 13 ++++++++++--- modules/softcascade/src/soft_cascade_octave.cpp | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apps/sft/config.cpp b/apps/sft/config.cpp index 81b433f04..3cc64c7fe 100644 --- a/apps/sft/config.cpp +++ b/apps/sft/config.cpp @@ -69,6 +69,7 @@ void sft::Config::write(cv::FileStorage& fs) const << "outXmlPath" << outXmlPath << "seed" << seed + << "featureType" << featureType << "}"; } @@ -99,6 +100,7 @@ void sft::Config::read(const cv::FileNode& node) outXmlPath = (std::string)node["outXmlPath"]; seed = (int)node["seed"]; + featureType = (std::string)node["featureType"]; } void sft::write(cv::FileStorage& fs, const string&, const Config& x) @@ -153,7 +155,8 @@ std::ostream& sft::operator<<(std::ostream& out, const Config& m) << std::setw(14) << std::left << "cascadeName" << m.cascadeName << std::endl << std::setw(14) << std::left << "outXmlPath" << m.outXmlPath << std::endl - << std::setw(14) << std::left << "seed" << m.seed << std::endl; + << std::setw(14) << std::left << "seed" << m.seed << std::endl + << std::setw(14) << std::left << "featureType" << m.featureType << std::endl; return out; } \ No newline at end of file diff --git a/apps/sft/include/sft/config.hpp b/apps/sft/include/sft/config.hpp index 6bdb861bb..3d39d3272 100644 --- a/apps/sft/include/sft/config.hpp +++ b/apps/sft/include/sft/config.hpp @@ -121,6 +121,9 @@ struct Config // seed for random generation int seed; + // channel feature type + string featureType; + // // bounding rectangle for actual example into example window // cv::Rect exampleWindow; }; diff --git a/apps/sft/sft.cpp b/apps/sft/sft.cpp index 5981c9677..ba66ace7d 100644 --- a/apps/sft/sft.cpp +++ b/apps/sft/sft.cpp @@ -104,7 +104,7 @@ int main(int argc, char** argv) fso << cfg.cascadeName << "{" << "stageType" << "BOOST" - << "featureType" << "ICF" + << "featureType" << cfg.featureType << "octavesNum" << (int)cfg.octaves.size() << "width" << cfg.modelWinSize.width << "height" << cfg.modelWinSize.height @@ -118,7 +118,12 @@ int main(int argc, char** argv) int nfeatures = cfg.poolSize; cv::Size model = cfg.model(it); std::cout << "Model " << model << std::endl; - cv::Ptr pool = cv::FeaturePool::create(model, nfeatures); + + int nchannels = (cfg.featureType == "HOG6MagLuv") ? 10: 8; + + std::cout << "number of feature channels is " << nchannels << std::endl; + + cv::Ptr pool = cv::FeaturePool::create(model, nfeatures, nchannels); nfeatures = pool->size(); @@ -130,7 +135,9 @@ int main(int argc, char** argv) typedef cv::Octave Octave; - cv::Ptr boost = Octave::create(boundingBox, npositives, nnegatives, *it, shrinkage, nfeatures); + cv::Ptr builder = cv::ChannelFeatureBuilder::create(cfg.featureType); + std::cout << "Channel builder " << builder->info()->name() << std::endl; + cv::Ptr boost = Octave::create(boundingBox, npositives, nnegatives, *it, shrinkage, nfeatures, builder); std::string path = cfg.trainPath; sft::ScaledDataset dataset(path, *it); diff --git a/modules/softcascade/src/soft_cascade_octave.cpp b/modules/softcascade/src/soft_cascade_octave.cpp index 3d3864ecf..7322901da 100644 --- a/modules/softcascade/src/soft_cascade_octave.cpp +++ b/modules/softcascade/src/soft_cascade_octave.cpp @@ -137,7 +137,7 @@ BoostedSoftCascadeOctave::BoostedSoftCascadeOctave(cv::Rect bb, int np, int nn, int w = boundingBox.width; int h = boundingBox.height; - integrals.create(poolSize, (w / shrinkage + 1) * (h / shrinkage * 10 + 1), CV_32SC1); + integrals.create(poolSize, (w / shrinkage + 1) * (h / shrinkage * builder->totalChannels() + 1), CV_32SC1); } BoostedSoftCascadeOctave::~BoostedSoftCascadeOctave(){}