本文整理汇总了C++中DataSet::Remove方法的典型用法代码示例。如果您正苦于以下问题:C++ DataSet::Remove方法的具体用法?C++ DataSet::Remove怎么用?C++ DataSet::Remove使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DataSet
的用法示例。
在下文中一共展示了DataSet::Remove方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LearnGAB
//.........这里部分代码省略.........
printf("Iter %d: nPos=%d, nNeg=%d, ", t, nPosSam, nNegSam);
DQT dqt;
gettimeofday(&Tstart,NULL);
float mincost = dqt.Learn(faceFea,nonfaceFea,pos.W,neg.W,posIndex,negIndex,minLeaf_t,feaId,leftChild,rightChild,cutpoint,fit);
gettimeofday(&Tend,NULL);
float DQTtime = (Tend.tv_sec - Tstart.tv_sec);
printf("DQT time:%.3fs\n",DQTtime);
if (feaId.empty()){
printf("\n\nNo available features to satisfy the split. The AdaBoost learning terminates.\n");
break;
}
Mat posX(feaId.size(),faceFea.cols,CV_8UC1);
for(int i = 0;i<feaId.size();i++)
for(int j = 0;j<faceFea.cols;j++){
int x,y;
GetPoints(feaId[i],&x,&y);
unsigned char Fea = ppNpdTable.at<uchar>(faceFea.at<uchar>(x,j),faceFea.at<uchar>(y,j));
posX.at<uchar>(i,j) = Fea;
}
Mat negX(feaId.size(),nonfaceFea.cols,CV_8UC1);
for(int i = 0;i<feaId.size();i++)
for(int j = 0;j<nonfaceFea.cols;j++){
int x,y;
GetPoints(feaId[i],&x,&y);
unsigned char Fea = ppNpdTable.at<uchar>(nonfaceFea.at<uchar>(x,j),nonfaceFea.at<uchar>(y,j));
negX.at<uchar>(i,j) = Fea;
}
TestDQT(pos.Fx,fit,cutpoint,leftChild,rightChild,posX);
TestDQT(neg.Fx,fit,cutpoint,leftChild,rightChild,negX);
vector<int> negPassIndex;
for(int i=0; i<nNegSam; i++)
negPassIndex.push_back(i);
memcpy(w,pos.Fx,nPos*sizeof(float));
sort(w,w+nPos);
int index = max(floor(nPos*(1-opt.minDR)),0);
float threshold = w[index];
for(iter = negPassIndex.begin(); iter != negPassIndex.end();){
if(neg.Fx[*iter] < threshold)
iter = negPassIndex.erase(iter);
else
iter++;
}
float far = float(negPassIndex.size())/float(nNeg);
int depth = CalcTreeDepth(leftChild,rightChild);
if(t==1)
aveEval+=depth;
else
aveEval+=depth*_FAR;
_FAR *=far;
nFea = nFea + feaId.size();
gettimeofday(&end,NULL);
time += (end.tv_sec - start.tv_sec);
int nNegPass = negPassIndex.size();
printf("FAR(t)=%.2f%%, FAR=%.2g, depth=%d, nFea(t)=%d, nFea=%d, cost=%.3f.\n",far*100.,_FAR,depth,feaId.size(),nFea,mincost);
printf("\t\tnNegPass=%d, aveEval=%.3f, time=%.3fs, meanT=%.3fs.\n", nNegPass, aveEval, time, time/(stages+1));
if(_FAR<=opt.maxFAR){
printf("\n\nThe training is converged at iteration %d. FAR = %.2f%%\n", t, _FAR * 100);
break;
}
SaveIter(feaId,leftChild,rightChild,cutpoint,fit,threshold);
gettimeofday(&Tstart,NULL);
neg.Remove(negPassIndex);
MiningNeg(nPos,neg);
nonfaceFea = neg.ExtractPixel();
pos.CalcWeight(1,opt.maxWeight);
neg.CalcWeight(-1,opt.maxWeight);
gettimeofday(&Tend,NULL);
float Ttime = (Tend.tv_sec - Tstart.tv_sec);
printf("neg mining time:%.3fs\n",Ttime);
if(!(stages%opt.saveStep)){
Save();
printf("save the model\n");
}
}
delete []w;
}
示例2: Train
void BoostCart::Train(DataSet& pos, DataSet& neg) {
Config& c = Config::GetInstance();
JoinCascador& joincascador = *c.joincascador;
// statistic parameters
const int pos_original_size = pos.size;
const int neg_original_size = int(pos_original_size * c.nps[stage]);
int neg_rejected = 0;
const int landmark_n = c.landmark_n;
const int normalization_step = landmark_n*c.score_normalization_steps[stage];
RNG& rng = c.rng_pool[0];
//int drop_n = (1. - c.recall[stage])*pos.size / K; // pos drop number per cart
//if (drop_n <= 1) drop_n = 1;
int drop_n = c.drops[stage];
const int start_of_cart = joincascador.current_cart_idx + 1;
int restarts = 0;
double best_drop_rate = 0.;
Cart best_cart = carts[0];
// Real Boost
// if neg.size < neg_th, mining starts
int current_stage_idx = c.joincascador->current_stage_idx;
int neg_th = int(pos.size*c.nps[current_stage_idx] * c.mining_th[current_stage_idx]);
for (int k = start_of_cart; k < K; k++) {
const int kk = k + 1;
Cart& cart = carts[k];
if (neg.size < neg_th) {
neg.MoreNegSamples(pos.size, c.nps[stage]);
neg_th = int(neg.size * c.mining_th[current_stage_idx]); // update neg_th
}
// print out data set status
pos.QSort(); neg.QSort();
LOG("Pos max score = %.4lf, min score = %.4lf", pos.scores[0], pos.scores[pos.size - 1]);
LOG("Neg max score = %.4lf, min score = %.4lf", neg.scores[0], neg.scores[neg.size - 1]);
// draw scores desity graph
draw_density_graph(pos.scores, neg.scores);
// update weights
DataSet::UpdateWeights(pos, neg);
LOG("Current Positive DataSet Size is %d", pos.size);
LOG("Current Negative DataSet Size is %d", neg.size);
// train cart
TIMER_BEGIN
LOG("Train %d th Cart", k + 1);
cart.Train(pos, neg);
LOG("Done with %d th Cart, costs %.4lf s", k + 1, TIMER_NOW);
TIMER_END
joincascador.current_cart_idx = k;
// update score and last_score
pos.UpdateScores(cart);
neg.UpdateScores(cart);
if (kk % normalization_step == 0) {
DataSet::CalcMeanAndStd(pos, neg, cart.mean, cart.std);
pos.ApplyMeanAndStd(cart.mean, cart.std);
neg.ApplyMeanAndStd(cart.mean, cart.std);
}
else {
cart.mean = 0.;
cart.std = 1.;
}
// select th for pre-defined recall
pos.QSort();
neg.QSort();
cart.th = pos.CalcThresholdByNumber(drop_n);
int pos_n = pos.size;
int neg_n = neg.size;
int will_removed = neg.PreRemove(cart.th);
double tmp_drop_rate = double(will_removed) / neg_n;
int number_of_carts = joincascador.current_stage_idx*joincascador.K + joincascador.current_cart_idx;
if (c.restart_on && tmp_drop_rate < c.restart_th[joincascador.current_stage_idx] && number_of_carts > 10) {
restarts++;
LOG("***** Drop %d, Drop rate neg is %.4lf%%, Restart current Cart *****", will_removed, tmp_drop_rate*100.);
LOG("***** Restart Time: %d *****", restarts);
LOG("Current trained Cart below");
cart.PrintSelf();
// compare with best cart for now
if (tmp_drop_rate > best_drop_rate) {
best_drop_rate = tmp_drop_rate;
best_cart = cart;
}
// select the best cart for this cart
if (restarts >= c.restart_times) {
LOG("***** Select a cart which give us %.4lf%% drop rate *****", best_drop_rate*100.);
cart = best_cart;
best_drop_rate = 0.;
pos.ResetScores();
neg.ResetScores();
pos.UpdateScores(cart);
neg.UpdateScores(cart);
if (kk % normalization_step == 0) {
DataSet::CalcMeanAndStd(pos, neg, cart.mean, cart.std);
pos.ApplyMeanAndStd(cart.mean, cart.std);
neg.ApplyMeanAndStd(cart.mean, cart.std);
}
else {
cart.mean = 0.;
cart.std = 1.;
//.........这里部分代码省略.........