From d68c392b42a408844da3eabc646a5ecbd3564251 Mon Sep 17 00:00:00 2001 From: Teng Cao Date: Mon, 7 Dec 2015 18:50:54 +0800 Subject: [PATCH 1/3] calculate innTilted only for Haar::ALL mode major time consuming part for training app is in function fillPassedSamples for negatives, this change make SetImage quicker, in a test of my own data, the total time for SetImage decrease from 9177666 to 5839263, only help for Haar feature and non Haar::ALL mode which is the most commonly case --- apps/traincascade/haarfeatures.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/traincascade/haarfeatures.cpp b/apps/traincascade/haarfeatures.cpp index a58fb45c90..2c96811da7 100644 --- a/apps/traincascade/haarfeatures.cpp +++ b/apps/traincascade/haarfeatures.cpp @@ -100,9 +100,13 @@ void CvHaarEvaluator::setImage(const Mat& img, uchar clsLabel, int idx) CV_DbgAssert( !sum.empty() && !tilted.empty() && !normfactor.empty() ); CvFeatureEvaluator::setImage( img, clsLabel, idx); Mat innSum(winSize.height + 1, winSize.width + 1, sum.type(), sum.ptr((int)idx)); - Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); Mat innSqSum; - integral(img, innSum, innSqSum, innTilted); + if (((const CvHaarFeatureParams*)featureParams)->mode == CvHaarFeatureParams::ALL) { + Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); + integral(img, innSum, innSqSum, innTilted); + } + else + integral(img, innSum, innSqSum); normfactor.ptr(0)[idx] = calcNormFactor( innSum, innSqSum ); } From 8a36402ec0b266b3c1cd22c73c6c0e6184f11752 Mon Sep 17 00:00:00 2001 From: Teng Cao Date: Mon, 7 Dec 2015 19:01:04 +0800 Subject: [PATCH 2/3] Update haarfeatures.cpp --- apps/traincascade/haarfeatures.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/traincascade/haarfeatures.cpp b/apps/traincascade/haarfeatures.cpp index 2c96811da7..db623b5962 100644 --- a/apps/traincascade/haarfeatures.cpp +++ b/apps/traincascade/haarfeatures.cpp @@ -102,11 +102,11 @@ void CvHaarEvaluator::setImage(const Mat& img, uchar clsLabel, int idx) Mat innSum(winSize.height + 1, winSize.width + 1, sum.type(), sum.ptr((int)idx)); Mat innSqSum; if (((const CvHaarFeatureParams*)featureParams)->mode == CvHaarFeatureParams::ALL) { - Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); - integral(img, innSum, innSqSum, innTilted); - } - else - integral(img, innSum, innSqSum); + Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); + integral(img, innSum, innSqSum, innTilted); + } + else + integral(img, innSum, innSqSum); normfactor.ptr(0)[idx] = calcNormFactor( innSum, innSqSum ); } From efacf7b6de8216bbb47984f6fafc90932cbdc1c5 Mon Sep 17 00:00:00 2001 From: Teng Cao Date: Mon, 7 Dec 2015 19:51:30 +0800 Subject: [PATCH 3/3] Update haarfeatures.cpp --- apps/traincascade/haarfeatures.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/traincascade/haarfeatures.cpp b/apps/traincascade/haarfeatures.cpp index db623b5962..f2d18229e8 100644 --- a/apps/traincascade/haarfeatures.cpp +++ b/apps/traincascade/haarfeatures.cpp @@ -101,12 +101,13 @@ void CvHaarEvaluator::setImage(const Mat& img, uchar clsLabel, int idx) CvFeatureEvaluator::setImage( img, clsLabel, idx); Mat innSum(winSize.height + 1, winSize.width + 1, sum.type(), sum.ptr((int)idx)); Mat innSqSum; - if (((const CvHaarFeatureParams*)featureParams)->mode == CvHaarFeatureParams::ALL) { - Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); - integral(img, innSum, innSqSum, innTilted); + if (((const CvHaarFeatureParams*)featureParams)->mode == CvHaarFeatureParams::ALL) + { + Mat innTilted(winSize.height + 1, winSize.width + 1, tilted.type(), tilted.ptr((int)idx)); + integral(img, innSum, innSqSum, innTilted); } else - integral(img, innSum, innSqSum); + integral(img, innSum, innSqSum); normfactor.ptr(0)[idx] = calcNormFactor( innSum, innSqSum ); }