/* void baggedSegments(SegCluster &selectedSegments,RefVector<SegCluster> &baggedA,double & baggedProbability, unsigned long minimumLength,unsigned long maximumLength){ Seg* seg; // reset the reader at the begin of the input stream selectedSegments.rewind(); seg=selectedSegments.getSeg(); bool end=(seg==NULL); unsigned long beginSeg=0,lengthSeg=0; if (!end){ beginSeg=seg->begin(); lengthSeg=seg->length(); } while(!end){ if (debug) cout << "bagged, current input seg ["<<beginSeg<<","<<lengthSeg<<"]"<<endl; unsigned long verifyLength=correctedLength(lengthSeg,minimumLength,maximumLength); bool moveSeg=true; unsigned long length=0; if (lengthSeg<=verifyLength){ moveSeg=true; length=lengthSeg; if (debug) cout <<"change seg"<<endl; } else{ moveSeg=false; length=verifyLength; } // for all cluster in baggedA if (length>0) for (unsigned long idx=0;idx<baggedA.size();idx++) // For each component if(baggedFrame(baggedProbability)){ SegServer &segServerOutput=baggedA[idx].getServer(); Seg &newSeg=segServerOutput.createSeg(beginSeg,length,0,seg->string(),seg->sourceName()); baggedA[idx].add(newSeg); if (debug) cout << "bagged - Adding in bagged["<<idx<<"] the seg ["<<seg->sourceName()<<"]"<<newSeg.begin()<<" "<<newSeg.length()<<endl; } if (moveSeg){ seg=selectedSegments.getSeg(); end=(seg==NULL); if (!end){ beginSeg=seg->begin(); lengthSeg=seg->length(); } } else{ lengthSeg-=length; beginSeg+=length; } } if ((debug) || (verboseLevel>3)){ cout <<"Bagged segments"<<endl; for (unsigned long idx=0;idx<baggedA.size();idx++){ cout << "Bagged cluster["<<idx<<"]"<<endl; showCluster(baggedA[idx]); } } if (verbose){ unsigned long total=totalFrame(selectedSegments); for (unsigned long idx=0;idx<baggedA.size();idx++){ unsigned long selected=totalFrame(baggedA[idx]); double percent=(double)selected*100/(double) total; cout <<"Bagged segments["<<idx<<"] Initial frames["<<total<<"] Selected frames["<<selected<<"] % selected["<<percent<<"]"<<endl; } } }*/ void baggedSegments(SegCluster &selectedSegments,SegCluster &baggedFrameSegment,double baggedProbability, unsigned long minimumLength,unsigned long maximumLength){ SegServer &segServerOutput=baggedFrameSegment.getServer(); Seg* seg; // reset the reader at the begin of the input stream selectedSegments.rewind(); seg=selectedSegments.getSeg(); bool end=(seg==NULL); unsigned long beginSeg=0,lengthSeg=0; if (!end){ beginSeg=seg->begin(); lengthSeg=seg->length(); } while(!end){ if (debug) cout << "bagged, current input seg ["<<beginSeg<<","<<lengthSeg<<"]"<<endl; unsigned long verifyLength=correctedLength(lengthSeg,minimumLength,maximumLength); double segBaggedProbability=baggedProbability; bool moveSeg=true; unsigned long length=0; if (lengthSeg<=verifyLength){ moveSeg=true; length=lengthSeg; if (debug) cout <<"change seg"<<endl; } else{ moveSeg=false; length=verifyLength; } if ((length>0) &&(baggedFrame(segBaggedProbability))){ Seg &newSeg=segServerOutput.createSeg(beginSeg,length,0,seg->string(),seg->sourceName()); baggedFrameSegment.add(newSeg); if (debug) cout << "bagged - Adding the seg ["<<seg->sourceName()<<"]"<<newSeg.begin()<<" "<<newSeg.length()<<endl; } if (moveSeg){ seg=selectedSegments.getSeg(); end=(seg==NULL); if (!end){ beginSeg=seg->begin(); lengthSeg=seg->length(); } } else{ lengthSeg-=length; beginSeg+=length; } } if ((debug) || (verboseLevel>3)){ cout <<"Bagged segments"<<endl; showCluster(baggedFrameSegment); } if (verbose){ unsigned long total=totalFrame(selectedSegments); unsigned long selected=totalFrame(baggedFrameSegment); double percent=(double)selected*100/(double) total; cout <<"Bagged segments, Initial frames["<<total<<"] Selected frames["<<selected<<"] % selected["<<percent<<"]"<<endl; } }
void baggedSegmentsConstraint(SegCluster &selectedSegments,SegCluster &baggedFrameSegment,double baggedProbability, unsigned long minimumLength,unsigned long maximumLength){ do{ baggedSegments(selectedSegments,baggedFrameSegment,baggedProbability,minimumLength,maximumLength); }while(totalFrame(baggedFrameSegment) == 0); }
// Main init function double TopGauss::compute(MixtureGD & UBM,FeatureServer &fs,String & featureFilename,Config & config){ StatServer ss(config); MixtureGDStat &acc=ss.createAndStoreMixtureStat(UBM); unsigned long _mixsize=UBM.getDistribCount(); String labelSelectedFrames =config.getParam("labelSelectedFrames"); unsigned long begin=fs.getFirstFeatureIndexOfASource(featureFilename); fs.seekFeature(begin); SegServer segmentsServer; LabelServer labelServer; initializeClusters(featureFilename,segmentsServer,labelServer,config); // __android_log_print(ANDROID_LOG_DEBUG, "TopGauss::compute", " Feature file %s \n", featureFilename.c_str()); verifyClusterFile(segmentsServer,fs,config); unsigned long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame); acc.resetLLK(); double topD=config.getParam("topGauss").toDouble(); if (verbose) {if(topD<1.0) cout << "LLK %="<< topD << "% ";else cout << "Top-"<<topD<<" ";} // Class values _nt=totalFrame(selectedSegments); _nbg.setSize(_nt); _idx.setSize(0);_snsw.setSize(0); _snsl.setSize(0); _nbg.setAllValues(0); _idx.setAllValues(0);_snsw.setAllValues(0.0);_snsl.setAllValues(0.0); _nbgcnt=0; Seg *seg; // current selected segment selectedSegments.rewind(); unsigned long t=0; //cnt frames while((seg=selectedSegments.getSeg())!=NULL){ unsigned long begin=seg->begin()+fs.getFirstFeatureIndexOfASource(seg->sourceName()); fs.seekFeature(begin); Feature f; for (unsigned long idxFrame=0;idxFrame<seg->length();idxFrame++){ fs.readFeature(f); double llk=acc.computeAndAccumulateLLK(f,1.0,DETERMINE_TOP_DISTRIBS); const LKVector &topV=ss.getTopDistribIndexVector(); double lk_tot=exp(llk); double val=0.0; if (topD<1.0) { for(unsigned long j=0;j<_mixsize;j++){ if (val > topD*lk_tot) break; val+=(topV[j].lk); _nbg[t]++; } } else _nbg[t]=(unsigned long)topD; _nbgcnt+=_nbg[t]; double snsw=1.0; double snsl=lk_tot; for(unsigned long j=0;j<_nbg[t];j++) { _idx.addValue(topV[j].idx); snsw -=UBM.weight(topV[j].idx); snsl -=topV[j].lk; } _snsw.addValue(snsw); if (snsl < EPS_LK) _snsl.addValue(EPS_LK); else _snsl.addValue(snsl); t++; } } if (t!=_nt) cout << "W: t("<<t<<") != _nt(" <<_nt<<")"<<endl; return acc.getMeanLLK(); }