コード例 #1
0
/*
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;
  }
}
コード例 #2
0
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();
}