21 #ifndef _PRECOMPUTED_PATTERN_RESPONSE_H
22 #define _PRECOMPUTED_PATTERN_RESPONSE_H
40 template<
class ResponseType>
63 template<
class Train
intSetType,
class FeatureType>
64 void internal_precompute_feat_wide(
int f0,
int f1,
const TrainintSetType * set,
const std::vector<FeatureType> * feats)
67 int sample_size = set->Size();
69 for(
int j=f0; j<f1; ++j)
71 for(
int i =0; i<sample_size; ++i)
73 category[i] = set->templates[i].category;
75 ResponseType v = (*feats)[j].response(getData1(set->templates[i], *set), getData2(set->templates[i], *set));
95 for(
unsigned int i=0; i<set->Size(); ++i)
118 std::cout <<
"allocate memory for " << samples <<
" samples and "<< feats <<
" features" << std::endl;
120 int64_t n_elements =
static_cast<int64_t
>(samples) * feats;
123 if(n_elements > int64_t(0xFFFFFFFF))
125 std::cerr <<
"too much samples" << std::endl;
139 response =
new ResponseType[n_elements];
143 bin =
new int[n_elements];
148 response_range =
new std::pair<ResponseType, ResponseType> [feats];
157 template<
class Train
intSetType,
class FeatureType>
158 void Precompute(
const TrainintSetType & set,
const std::vector<FeatureType> & feats,
int max_concurrent_jobs )
160 int feat_size = feats.size();
161 int sample_size = set.Size();
167 if(max_concurrent_jobs > 1)
171 for(
int k=0; k<max_concurrent_jobs; ++k)
173 int f0 = (k * feat_size) / max_concurrent_jobs;
174 int f1 = ((k+1) * feat_size) / max_concurrent_jobs;
176 thread_pool_.
create_thread(sprint::thread_bind(&PrecomputedPatternResponse::internal_precompute_feat_wide<TrainintSetType,FeatureType>,
this, f0, f1, &set, &feats));
186 for(
int i =0; i<sample_size; ++i)
188 category[i] = set.templates[i].category;
190 for(
int j=0; j<feat_size; ++j)
192 ResponseType v = feats[j].response(getData1(set.templates[i], set), getData2(set.templates[i], set));
212 for(
int j=0; j<feat_size; ++j)
216 for(
unsigned int i =0; i<set.Size(); ++i)
285 template<
class Classifier>
286 void ExecuteClassifier(
const Classifier & c,
bool *correct_tables,
double *_wp,
double *_wn,
int *_match)
const
288 double wp = 0.0, wn = 0.0;
293 int test = c(&
response[i], n_samples );
297 correct_tables[i] =
true;
303 correct_tables[i] =
false;
int * category
category list
Definition: PrecomputedPatternResponse.h:48
double * weights
weights list
Definition: PrecomputedPatternResponse.h:50
int number_of_bins
Quantization level.
Definition: PrecomputedPatternResponse.h:58
int * bin
precomputed bin matrix (rows features, columns samples)
Definition: PrecomputedPatternResponse.h:56
Definition: thread_group.h:82
void join_all()
wait all threads terminate
Definition: thread_group.h:114
proposal 1 for thread group
int n_features
number of feature preallocated
Definition: PrecomputedPatternResponse.h:46
void Precompute(const TrainintSetType &set, const std::vector< FeatureType > &feats, int max_concurrent_jobs)
Definition: PrecomputedPatternResponse.h:158
void InitializeWeights()
Initialize ugual weights.
Definition: PrecomputedPatternResponse.h:271
int n_samples
number of samples
Definition: PrecomputedPatternResponse.h:44
Definition: PrecomputedPatternResponse.h:41
method to create function pointer for thread call
std::pair< ResponseType, ResponseType > * response_range
precomputed response ranges
Definition: PrecomputedPatternResponse.h:54
bool create_thread(const sprint::thread_function &p)
create an additional thread
Definition: thread_group.h:102
ResponseType * response
response matrix. For performance reason it each row is a feature and columns are samples ...
Definition: PrecomputedPatternResponse.h:52
void ExecuteClassifier(const Classifier &c, bool *correct_tables, double *_wp, double *_wn, int *_match) const
Definition: PrecomputedPatternResponse.h:286
additional typedef, for portability under win32
void allocate(int samples, int feats)
allocate the response matrix
Definition: PrecomputedPatternResponse.h:117
void PrepareBins()
compute bin
Definition: PrecomputedPatternResponse.h:233