本文整理汇总了C++中LabelServer::getLabelIndexByString方法的典型用法代码示例。如果您正苦于以下问题:C++ LabelServer::getLabelIndexByString方法的具体用法?C++ LabelServer::getLabelIndexByString怎么用?C++ LabelServer::getLabelIndexByString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LabelServer
的用法示例。
在下文中一共展示了LabelServer::getLabelIndexByString方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ExtractTargetDataInfo
// Information on the quantity of data available for each client
// Outputs a list with the selected files for a defined quantity of data
int ExtractTargetDataInfo(Config& config)
{
String inputClientListFileName = config.getParam("targetIdList");
bool fixedLabelSelectedFrame;
String labelSelectedFrames;
if (config.existsParam("useIdForSelectedFrame")) // the ID of each speaker is used as labelSelectedFrame
fixedLabelSelectedFrame=false;
else{ // the label is decided by the command line and is unique for the run
labelSelectedFrames=config.getParam("labelSelectedFrames");
if (verbose) cout << "Computing on" << labelSelectedFrames << " label" << endl;
fixedLabelSelectedFrame=true;
}
unsigned long maxFrame=config.getParam("maxFrame").toLong();
String outputFilename=config.getParam("outputFilename");
ofstream outputFile(outputFilename.c_str(),ios::out| ios::trunc);
try{
XList inputClientList(inputClientListFileName,config); // read the Id + filenames for each client
XLine * linep;
if (verbose) cout << "InfoTarget" << endl;
// *********** Target loop *****************
while ((linep=inputClientList.getLine()) != NULL){ // linep gives the XLine with the Id of a given client and the list of files
String *id=linep->getElement(); // Get the Client ID (id)
outputFile<<*id;
String currentFile="";
XLine featureFileListp=linep->getElements(); // Get the list of feature file for the client (end of the line)
if (verbose) cout << "Info model ["<<*id<<"]"<<endl;
if (!fixedLabelSelectedFrame){ // the ID is used as label for selecting the frame
labelSelectedFrames=*id;
if (debug) cout <<*id<<" is used for label selected frames"<<endl;
}
// label files reading - It creates, for each file and each label, a cluster of segments - will be integrated witth the featre s - asap
SegServer segmentsServer; // Reading the segmentation files for each feature input file
LabelServer labelServer;
initializeClusters(featureFileListp,segmentsServer,labelServer,config); // Reading the segmentation files for each feature input file
unsigned long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the cluster with in interest audio segments
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame); // Gives the cluster of the selected/used segments
Seg *seg; // Will give the current segment
unsigned long frameCount=0;
selectedSegments.rewind(); // at the begin of the selected segments list
while(((seg=selectedSegments.getSeg())!=NULL) && (frameCount<maxFrame)){ // For each of the selected segments until the amount of data is get
frameCount+=seg->length();
cout << seg->sourceName()<<" "<<seg->begin()<<" "<<seg->length()<<" Total time="<<frameCount<<endl;
if (seg->sourceName()!=currentFile){
outputFile<<" "<<seg->sourceName();
currentFile=seg->sourceName();
}
} // end of the initial Train Iteration loop
outputFile<<endl;
if (verbose) cout << "Save info client ["<<*id<<"]" << endl;
} // end of the the target loop
} // fin try
catch (Exception& e)
{
cout << e.toString().c_str() << endl;
}
return 0;
}
示例2: computeAndAccumulateGeneralFAStats
void FactorAnalysisStat::computeAndAccumulateGeneralFAStats(FeatureServer &fs,Config & config){
SegServer segmentsServer;
LabelServer labelServer;
initializeClusters(fileList,segmentsServer,labelServer,config);
verifyClusterFile(segmentsServer,fs,config);
unsigned long codeSelectedFrame=labelServer.getLabelIndexByString(config.getParam("labelSelectedFrames"));
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame);
this->computeAndAccumulateGeneralFAStats(selectedSegments,fs,config);
};
示例3: get
// Can use this function to get likelihood with a topgauss
double TopGauss::get(MixtureGD & UBM,FeatureServer &fs,String & featureFilename,Config & config){
StatServer ss(config);
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::get", " Feature file %s \n", featureFilename.c_str());
verifyClusterFile(segmentsServer,fs,config);
unsigned long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames);
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame);
MixtureGDStat &acc=ss.createAndStoreMixtureStat(UBM);
Seg *seg; // current selected segment
selectedSegments.rewind();
unsigned long t=0; //cnt frames
acc.resetLLK();
unsigned long idxBegin=0;
while((seg=selectedSegments.getSeg())!=NULL){
unsigned long begin=seg->begin()+fs.getFirstFeatureIndexOfASource(seg->sourceName());
fs.seekFeature(begin);
Feature f;
idxBegin=this->frameToIdx(t);
for (unsigned long idxFrame=0;idxFrame<seg->length();idxFrame++){
fs.readFeature(f);
//unsigned long idx=this->frameToIdx(t);
unsigned long nbg=_nbg[t];
ULongVector index;
double sumNonSelectedWeights=_snsw[t];
double sumNonSelectedLLK=_snsl[t];
for (unsigned long i=0;i<nbg;i++) {
index.addValue(_idx[idxBegin+i]);
}
char c[100];
sprintf(c,"%d",(int)index.size());
config.setParam("topDistribsCount",c); // this should be high enough
if (t==0) {acc.computeAndAccumulateLLK(f,1.0,DETERMINE_TOP_DISTRIBS);acc.resetLLK();} // to remove in ALIZE, this is to init the LKvector
ss.setTopDistribIndexVector(index, sumNonSelectedWeights, sumNonSelectedLLK);
acc.computeAndAccumulateLLK(f,1.0,USE_TOP_DISTRIBS);
idxBegin+=nbg;
t++;
}
}
//ss.deleteMixtureStat(acc);
if (t!=_nt || idxBegin !=_nbgcnt) cout << "W: t("<<t<<") != _nt(" <<_nt<<")"<<"W: idxBegin("<<idxBegin<<") != _nbgcnt(" <<_nbgcnt<<")"<<endl;
return acc.getMeanLLK();
}
开发者ID:umbatoul,项目名称:Android-Voice-IDentification-App-using-SPRO-ALIZE-LIARAL,代码行数:50,代码来源:TopGauss.cpp
示例4: featureStream
void featureStream(Config &config,String filename,FeatureServer *&fs,SegServer *&segServ,SegCluster *&segCluster,String labelSelectedFrames){
fs=new FeatureServer(config,filename);
try{
// TODO Test if the stream is not empty
segServ=new SegServer; // Create the segment server for managing the segments/clusters
LabelServer labelServer; // Create the label server, for indexing the segments/clusters
initializeClusters(filename,*segServ,labelServer,config); // Reading the segmentation files for each feature input file
verifyClusterFile(*segServ,*fs,config); // Verify if the segments ending before the end of the feature files...
unsigned long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the cluster with in interest audio segments
segCluster=&(segServ->getCluster(codeSelectedFrame));
}
catch (Exception& e){
cout << e.toString() << endl;
}
}
示例5: cms
void cms(String & featureFileName,FeatureServer &fs,Config &config) {
unsigned long begin=fs.getFirstFeatureIndexOfASource(featureFileName);
fs.seekFeature(begin);
SegServer segmentsServer;
LabelServer labelServer;
initializeClusters(featureFileName,segmentsServer,labelServer,config);
verifyClusterFile(segmentsServer,fs,config);
unsigned long codeSelectedFrame=labelServer.getLabelIndexByString(config.getParam("labelSelectedFrames"));
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame);
selectedSegments.rewind();
RealVector <double> mean,cov;
FrameAccGD frameAccu;
frameAccu.reset();
accumulateStatFrame(frameAccu,fs, selectedSegments, config);
mean = frameAccu.getMeanVect(); // Get the mean vector
cov = frameAccu.getStdVect(); // Get the std vector
computeZeroOne(mean,cov,fs, selectedSegments, config);
}
示例6: saveApost
int saveApost(Config &config)
{
bool writeAllFeature=true; // Output a vector for all input vectors (selected and not selected vectors) - DEFAULT=on
if (config.existsParam("writeAllFeatures")) writeAllFeature=config.getParam("writeAllFeatures").toBool(); // Define if all the feature (selected or not) should be written
String modelname = config.getParam("inputModelFilename");
String inputFeatureFileName =config.getParam("inputFeatureFilename"); // input feature - could be a simple feature file or a list of filenames
XLine inputFeatureFileNameList; // The (feature) input filename list
if (inputFeatureFileName.endsWith(".lst")){ // If the file parameter is the name of a XList file
XList inputFileNameXList(inputFeatureFileName,config); // Read the filename list file
inputFeatureFileNameList=inputFileNameXList.getAllElements(); // And put the filename in a list if the file is a list of feature filenames
}
else { // It was a simple feature file and not a filename list
inputFeatureFileNameList.addElement(inputFeatureFileName); // add the filename in the list
}
try{
// read UBM
MixtureServer _ms(config);
StatServer _ss(config);
_ms.loadMixtureGD(config.getParam("inputWorldFilename"));
MixtureGD & UBM=_ms.getMixtureGD((unsigned long) 0);
MixtureGDStat &acc=_ss.createAndStoreMixtureStat(UBM);
unsigned long _vsize=UBM.getVectSize();
unsigned long _mixsize=UBM.getDistribCount();
// Loop over the list of feature files
String *file;
String labelSelectedFrames;
unsigned long codeSelectedFrame;
while ((file=inputFeatureFileNameList.getElement())!= NULL){
String & featureFilename=(*file);
FeatureServer fs(config,featureFilename);
FeatureServer fs_out(config,featureFilename);
SegServer segmentsServer;
LabelServer labelServer;
initializeClusters(featureFilename,segmentsServer,labelServer,config);
verifyClusterFile(segmentsServer,fs,config);
labelSelectedFrames=config.getParam("labelSelectedFrames");
codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames);
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame);
// Compute Occupations and Statistics
acc.resetOcc();
Seg *seg;
selectedSegments.rewind();
String currentSource="";
while((seg=selectedSegments.getSeg())!=NULL){
unsigned long begin=seg->begin()+fs.getFirstFeatureIndexOfASource(seg->sourceName()); // Idx of the first frame of the current file in the feature server
if (currentSource!=seg->sourceName()) {
currentSource=seg->sourceName();
if (verbose)cout << "Processing speaker["<<currentSource<<"]"<< endl;
}
fs.seekFeature(begin);
Feature f;
for (unsigned long idxFrame=0;idxFrame<seg->length();idxFrame++){
fs.readFeature(f);
acc.computeAndAccumulateOcc(f);
RealVector <double> aPost=acc.getOccVect();
Feature tmpF;
for(unsigned long k=0;k<_mixsize;k++) {
tmpF[k]=aPost[k];
}
fs_out.addFeature(f);
}
}
// Writing apost probabilities to file
cout << "Writing to: " << featureFilename << endl;
FeatureFileWriter w(featureFilename, config); // build a featurefile writer to output the features (real features)
SegServer fakeSegServer;
if (writeAllFeature) { // Output all the features- feature count id the same SegServer fakeSegServer; // Create a new fake segment server
fakeSegServer.createCluster(0); // Create a new cluster
SegCluster& fakeSeg=fakeSegServer.getCluster(0); // Get the cluster
fakeSeg.add(fakeSegServer.createSeg(0,fs_out.getFeatureCount(),codeSelectedFrame, labelSelectedFrames,featureFilename)); // Add a segment with all the features
outputFeatureFile(config,fs_out,fakeSeg,w); // output all the features - giving the same file length
}
else
outputFeatureFile(config,fs_out,selectedSegments, w); // Output only the selected features - giving a shorter output
}
}
catch (Exception& e){cout << e.toString().c_str() << endl;}
return 0;
}
示例7: fs
//---------------------------------------------------------------------------------------------------------------
// Energy detector
// TAKE CARE !!!! INPUT DATA IS A PARAMETER FILE WITH ONLY THE ENERGY AS THE COEFF 0
// Use the featureMask ALIZE option for selecting the ernegy
SegCluster& energyDetector(Config& config,SegServer &segServer,String &featureFileName)
{
int nbTrainIt = config.getParam("nbTrainIt").toLong(); // number of train it
String thresholdMode; // Select the mode for the threshold (default=weight)
if (config.existsParam("thresholdMode")) // weight -> select wh(+alpha*wm) % of the frames
thresholdMode= config.getParam("thresholdMode"); // (wh is the weight of the highest comp, wm, the weight of the midle component
else thresholdMode="meanStd"; // meanStd -> the threshold is mean of the highest comp - alpha*Std of the same comp
double alpha = config.getParam("alpha").toDouble(); // alpha is the percentage of central gaussian framess taken into account
double flooring = config.getParam("varianceFlooring").toDouble(); // Variance flooring and ceiling
double ceiling = config.getParam("varianceCeiling").toDouble();
String labelSelectedFrames = config.getParam("labelSelectedFrames"); // Label of the selected frames/segments in the input file
String labelOutput = config.getParam("labelOutputFrames"); // Label of the selected frames in the output file
if (verbose) cout << "Proceeding Energy based silence detection for ["<<featureFileName<<"]"<<endl;
FeatureServer fs(config,featureFileName); // Reading the feature file and create a feature server to deal with the data
LabelServer labelServer; // Create the lable server, for indexing the segments/clusters
initializeClusters(featureFileName,segServer,labelServer,config); // Reading the segmentation files for each feature input file
unsigned long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the cluster with in interest audio segments
SegCluster& selectedSegments=segServer.getCluster(codeSelectedFrame); // Gives the cluster of the selected/used segments
//FrameAcc energyAccu(fs.getVectSize());
//computeZeroOneOnACluster(energyAccu, fs, selectedSegments, config);
unsigned long codeOutput=segServer.getClusterCount();
segServer.createCluster(codeOutput); // Create a new cluster for the output segments
SegCluster& outputSeg=segServer.getCluster(codeOutput); // Get the cluster
MixtureServer ms(config); // Create a mixture server in order to build an energy model
StatServer ss(config,ms); // Create a statistic server for model learning
FrameAccGD globalFrameAcc; // Create a frame accumulator for mean/cov computation
globalMeanCov (fs,selectedSegments,globalFrameAcc,config); // Compute the global mean and cov on the input segments
DoubleVector globalMean=globalFrameAcc.getMeanVect(); // Get the Mean
DoubleVector globalCov=globalFrameAcc.getCovVect(); // Get the Cov
if (verboseLevel>1){
cout <<"global mean and cov"<<endl;
for (unsigned i=0; i < fs.getVectSize(); i++)cout << "mean[" << i << "=" << globalMean[i] << "]\tcov[" << globalCov[i] << "]" << endl;
}
MixtureGD & energyModel=ms.createMixtureGD(); // Creating the energy model
// energyMixtureInit(ms,ss,fs,energyModel,selectedSegments,globalCov,config); // Init the energy model with randomly picked data
energyMixtureInit(ms, ss, fs,energyModel,selectedSegments,globalCov,config); // Fixed init
if (verboseLevel>1)plotEnergyDistrib(energyModel);
MixtureStat &emAcc=ss.createAndStoreMixtureStat(energyModel);
for (int trainIt=0; trainIt<nbTrainIt; trainIt++){ // Training It loop
emAcc.resetEM(); // EM stuff
double llkPreviousIt=accumulateStatEM(ss,fs,emAcc,selectedSegments,config); // Accumulate EM statistics
energyModel = emAcc.getEM(); // Get the EM estimate
varianceControl(energyModel,flooring,ceiling,globalCov); // Apply the variance normalisation
if (verbose) cout << "Partial Train it["<<trainIt-1 <<"] (-1 means initial partial it) LLK="<<llkPreviousIt<<" Nb Frames="
<<emAcc.getEMFeatureCount()<<endl;
if (verboseLevel>1)plotEnergyDistrib(energyModel);
}
unsigned long nbInitialFrames= (unsigned long) emAcc.getEMFeatureCount(); // TODO, REPLACE THIS BY A COUNT OF selectedSegments duration -
double threshold=0; // The Energy threshold
unsigned long higher=findMaxEnergyDistrib(energyModel);
if (thresholdMode=="weight"){ // The selection is based on the weight of the highest energy component
double selectedWeight=energyModel.weight(higher);
if (energyModel.getDistribCount()== 3){
unsigned long lower=findMinEnergyDistrib(energyModel);
unsigned long middle=3-(higher+lower);
double lossH=likelihoodLoss(energyModel.getDistrib(middle),energyModel.weight(middle),
energyModel.getDistrib(higher),energyModel.weight(higher));
double lossL=likelihoodLoss(energyModel.getDistrib(middle),energyModel.weight(middle),
energyModel.getDistrib(lower),energyModel.weight(lower));
if (verbose) cout << "lossL["<<lossL<<"] lossH["<<lossH<<"]"<<endl;
if (lossH<lossL)
selectedWeight+=alpha*energyModel.weight(middle);
}
threshold=computeEnergyThreshold(fs,selectedWeight);
}
else if (thresholdMode=="meanStd"){ // the Energy threshold is the mean of the highest energy component minus alpha*std
threshold=energyModel.getDistrib(higher).getMean(0) - (alpha*sqrt(energyModel.getDistrib(higher).getCov(0)));
}
else cout << thresholdMode<< "unknown"<<endl;
unsigned long nbCurrentFrames=selectFrames(fs,segServer,threshold,selectedSegments,outputSeg,labelOutput,featureFileName); // Build the segments with the energized frames
if (verbose){
double selected=(float) nbCurrentFrames/ (float)nbInitialFrames;
cout <<"File ["<<featureFileName<<"] Number of initial frames ["<<nbInitialFrames<<"] Number of selected frames ["
<<nbCurrentFrames << "] percentage selected [" << (int) (selected*100) << "]" << endl;
}
return outputSeg;
}
示例8: labelNGram
//-------------------------------------------------------------------------
int labelNGram(Config& config)
{
if (config.existsParam("debug"))debug=true; else debug=false;
if (config.existsParam("verbose"))verbose=true; else verbose=false;
String extOutputLabel=".sym.lbl"; // the extension of the output files
if (config.existsParam("saveLabelFileExtension")) extOutputLabel=config.getParam("saveLabelFileExtension");
String pathOutput="./"; // the path of the output files
if (config.existsParam("labelOutputPath")) pathOutput=config.getParam("labelOutputPath");
String extSymbol=".sym"; // the extension of the symbol files
if (config.existsParam("symbolFileExtension")) extSymbol=config.getParam("symbolFileExtension");
String pathSymbol="./";
if (config.existsParam("symbolPath")) pathSymbol=config.getParam("symbolPath");
String formatSymbol="ascii";
if (config.existsParam("symbolFormat")) pathSymbol=config.getParam("symbolFormat");
String NGramFilename=config.getParam("NGramFilename");
unsigned long NGramOrder=3;
if (config.existsParam("NGramOrder")) NGramOrder=config.getParam("NGramOrder").toLong();
unsigned long NGramSelected=16;
if (config.existsParam("NGramSelected")) NGramSelected=config.getParam("NGramSelected").toLong();
NGram NGramTable(NGramOrder,NGramSelected);
NGramTable.load(NGramFilename,config); // Load the NGRAM table, selecting the NGramSelected first
String inputFilename=config.getParam("inputFilename");
String labelSelectedFrames=config.getParam("labelSelectedFrames");
XLine inputFileList;
try{
if (inputFilename.endsWith(".lst")){ // input is file containing a list of filenames
XList tmp(inputFilename,config);
inputFileList=tmp.getAllElements();
}
else inputFileList.addElement(inputFilename); // a single filename
String *p;
while ((p=inputFileList.getElement())){
String& filename=*p;
if (verbose)
cout <<"labelNGram file["<<filename<<"] Table["<<NGramFilename<<"] Order["<<NGramOrder<<"] Selected["<<NGramSelected<<"]"<<endl;
SegServer segServer;
LabelServer labelServer;
loadClusterFile(filename,segServer,labelServer,config);
long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the selected cluster
if (codeSelectedFrame==-1){ // No data for this model !!!!!!!!!!!!!!
cout << " WARNING - NO DATA with the label["<<labelSelectedFrames<<"] in file ["<<filename<<"]"<<endl;
exit(0);
}
SegCluster& cluster=segServer.getCluster(codeSelectedFrame); // Gives the cluster of the selected/used segments
ULongVector tabS;
unsigned long nbSym=loadSymbol(pathSymbol+filename+extSymbol,formatSymbol,tabS,config); // Read the stream of symbols
SegServer segServerOutput;
SegCluster& clusterOut=segServerOutput.createCluster(0,labelSelectedFrames,cluster.sourceName());
//
computeLabelNGram(NGramTable,cluster,clusterOut,tabS,nbSym);
//
if (verbose){
cout <<"File["<<filename<<"]" <<endl;
cout << "Output the new label file in ["<<pathOutput+filename+extOutputLabel <<"]"<<endl;
}
outputLabelFile(clusterOut,pathOutput+filename+extOutputLabel,config);
} // end file loop
} // fin try
catch (Exception& e)
{
cout << e.toString().c_str() << endl;
}
return 0;
}
示例9: TrainTargetLFA
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
int TrainTargetLFA(Config& config)
{
String inputClientListFileName = config.getParam("targetIdList");
String inputWorldFilename = config.getParam("inputWorldFilename");
String outputSERVERFilename = "";
if (config.existsParam("mixtureServer")) outputSERVERFilename =config.getParam("mixtureServer");
bool initByClient=false; // In this case, the init model is read from the file
if (config.existsParam("initByClient")) initByClient=config.getParam("initByClient").toBool();
bool saveEmptyModel=false;
if (config.existsParam("saveEmptyModel")) saveEmptyModel=config.getParam("saveEmptyModel").toBool();
// label for selected frames - Only the frames associated with this label, in the label files, will be used
bool fixedLabelSelectedFrame=true;
String labelSelectedFrames;
if (config.existsParam("useIdForSelectedFrame")) // the ID of each speaker is used as labelSelectedFrame ?
fixedLabelSelectedFrame=(config.getParam("useIdForSelectedFrame").toBool()==false);
if (fixedLabelSelectedFrame) // the label is decided by the command line and is unique for the run
labelSelectedFrames=config.getParam("labelSelectedFrames");
bool modelData=false;
if (config.existsParam("useModelData")) modelData=config.getParam("useModelData").toBool();
String initModelS=inputWorldFilename;
if (modelData) if (config.existsParam("initModel")) initModelS=config.getParam("initModel"); // Use a specific model for Em init
bool outputAdaptParam=false;
if (config.existsParam("superVectors")) outputAdaptParam=true;
try{
XList inputClientList(inputClientListFileName,config); // read the Id + filenames for each client
XLine * linep;
inputClientList.getLine(0);
MixtureServer ms(config);
StatServer ss(config, ms);
if (verbose) cout << "(TrainTarget) Latent Factor Analysis - Load world model [" << inputWorldFilename<<"]"<<endl;
MixtureGD& world = ms.loadMixtureGD(inputWorldFilename);
if (verbose) cout <<"(TrainTarget) Use["<<initModelS<<"] for initializing EM"<<endl;
//LOAD JFA MAtrices
unsigned long svsize=world.getDistribCount()*world.getVectSize();
Matrix<double> U, V;
DoubleVector D(svsize,svsize);
//Initialise EC matrix
if(config.existsParam("eigenChannelMatrix")){
String uName = config.getParam("matrixFilesPath") + config.getParam("eigenChannelMatrix") + config.getParam("loadMatrixFilesExtension");
U.load (uName, config);
if (verboseLevel >=1) cout << "(TrainTargetLFA) Init EC matrix from "<< config.getParam("eigenChannelMatrix") <<" from EigenChannel Matrix: "<<", rank: ["<<U.rows() << "] sv size: [" << U.cols() <<"]"<<endl;
}
else{
U.setDimensions(1,svsize);
U.setAllValues(0.0);
if (verboseLevel >1) cout << "(TrainTargetLFA) Init EC matrix to 0"<<endl;
}
V.setDimensions(1,svsize);
V.setAllValues(0.0);
if (verboseLevel >=1) cout << "(TrainTargetLFA) Init EV matrix to 0"<<endl;
//Initialise the D matrix for MAP adaptation
for(unsigned long i=0; i<world.getDistribCount(); i++){
for(unsigned long j = 0; j<world.getVectSize(); j++){
D[i*world.getVectSize()+j] = sqrt(1.0/(world.getDistrib(i).getCovInv(j)*config.getParam("regulationFactor").toDouble()));
}
}
// *********** Target loop *****************
while ((linep=inputClientList.getLine()) != NULL){ // linep gives the XLine with the Id of a given client and the list of files
String *id=linep->getElement(); // Get the Client ID (id)
XLine featureFileListp=linep->getElements(); // Get the list of feature file for the client (end of the line)
if (verbose) cout << "(TrainTargetLFA) Train model ["<<*id<<"]"<<endl;
XList ndx; ndx.addLine() = featureFileListp;
JFAAcc jfaAcc(ndx,config,"TrainTarget");
//Charger les matrices V, U et D a partir des objets matrice existant.
jfaAcc.loadEV(V, config); jfaAcc.loadEC(U, config); jfaAcc.loadD(D);
//Initialise VU matrix
jfaAcc.initVU();
FeatureServer fs(config,featureFileListp); // Reading the features (from several files)
SegServer segmentsServer; // Create the segment server for managing the segments/clusters
LabelServer labelServer; // Create the lable server, for indexing the segments/clusters
initializeClusters(featureFileListp,segmentsServer,labelServer,config); // Reading the segmentation files for each feature input file
verifyClusterFile(segmentsServer,fs,config); // Verify if the segments ending before the end of the feature files...
MixtureGD & adaptedMixture = ms.duplicateMixture(world,DUPL_DISTRIB); // Creating final as a copy of the world model
MixtureGD & clientMixture= ms.duplicateMixture(world,DUPL_DISTRIB);
long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the cluster with in interest audio segments
if (codeSelectedFrame==-1){ // No data for this model !!!!!!!!!!!!!!
cout << " WARNING - NO DATA FOR TRAINING ["<<*id<<"]";
if (saveEmptyModel){
cout <<" World model is returned"<<endl; // In this case, the client model is the world model
if (verbose) cout << "Save client model ["<<*id<<"]" << endl;
adaptedMixture.save(*id, config); // Save the client model
}
}
else{
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame); // Gives the cluster of the selected/used segments
//.........这里部分代码省略.........
示例10: TrainTargetJFA
//.........这里部分代码省略.........
}
}
else{
unsigned long sS = world.getVectSize() * world.getDistribCount();
D.setSize(sS);
D.setAllValues(0.0);
if (verboseLevel >1) cout << "(TrainTargetJFA) Init D matrix to 0"<<endl;
}
// *********** Target loop *****************
while ((linep=inputClientList.getLine()) != NULL){ // linep gives the XLine with the Id of a given client and the list of files
String *id=linep->getElement(); // Get the Client ID (id)
XLine featureFileListp=linep->getElements(); // Get the list of feature file for the client (end of the line)
if (verbose) cout << "(TrainTarget) Train model ["<<*id<<"]"<<endl;
XList ndx; ndx.addLine() = featureFileListp;
JFAAcc jfaAcc(ndx,config,"TrainTarget");
//Load V, U and D from existing matrices.
jfaAcc.loadEV(V, config); jfaAcc.loadEC(U, config); jfaAcc.loadD(D);
//Initialize VU matrix
jfaAcc.initVU();
FeatureServer fs(config,featureFileListp); // Reading the features (from several files)
SegServer segmentsServer; // Create the segment server for managing the segments/clusters
LabelServer labelServer; // Create the lable server, for indexing the segments/clusters
initializeClusters(featureFileListp,segmentsServer,labelServer,config); // Reading the segmentation files for each feature input file
verifyClusterFile(segmentsServer,fs,config); // Verify if the segments ending before the end of the feature files...
MixtureGD & adaptedMixture = ms.duplicateMixture(world,DUPL_DISTRIB); // Creating final as a copy of the world model
MixtureGD & clientMixture= ms.duplicateMixture(world,DUPL_DISTRIB);
long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the cluster with in interest audio segments
if (codeSelectedFrame==-1){ // No data for this model !!!!!!!!!!!!!!
cout << " WARNING - NO DATA FOR TRAINING ["<<*id<<"]";
if (saveEmptyModel){
cout <<" World model is returned"<<endl; // In this case, the client model is the world model
if (verbose) cout << "Save client model ["<<*id<<"]" << endl;
adaptedMixture.save(*id, config); // Save the client model
}
}
else{
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame); // Gives the cluster of the selected/used segments
//Compute the JFA statistics
jfaAcc.computeAndAccumulateJFAStat(selectedSegments,fs,config);
//Estimate X and Y in one time for each speaker
jfaAcc.storeAccs();
jfaAcc.estimateVUEVUT(config);
jfaAcc.estimateAndInverseL_VU(config);
jfaAcc.substractMplusDZ(config);
jfaAcc.estimateYX();
//Reinitialise the accumulators
jfaAcc.resetTmpAcc();
jfaAcc.restoreAccs();
//Split X and Y estimates
jfaAcc.splitYX();
//Substract speaker and channel statistics M + VUYX
示例11: TrainTargetFA
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
int TrainTargetFA(Config& config)
{
String inputClientListFileName = config.getParam("targetIdList");
String inputWorldFilename = config.getParam("inputWorldFilename");
String outputSERVERFilename = "";
if (config.existsParam("mixtureServer")) outputSERVERFilename =config.getParam("mixtureServer");
bool initByClient=false; // In this case, the init model is read from the file
if (config.existsParam("initByClient")) initByClient=config.getParam("initByClient").toBool();
bool saveEmptyModel=false;
if (config.existsParam("saveEmptyModel")) saveEmptyModel=config.getParam("saveEmptyModel").toBool();
// label for selected frames - Only the frames associated with this label, in the label files, will be used
bool fixedLabelSelectedFrame=true;
String labelSelectedFrames;
if (config.existsParam("useIdForSelectedFrame")) // the ID of each speaker is used as labelSelectedFrame ?
fixedLabelSelectedFrame=(config.getParam("useIdForSelectedFrame").toBool()==false);
if (fixedLabelSelectedFrame) // the label is decided by the command line and is unique for the run
labelSelectedFrames=config.getParam("labelSelectedFrames");
bool modelData=false;
if (config.existsParam("useModelData")) modelData=config.getParam("useModelData").toBool();
String initModelS=inputWorldFilename;
if (modelData) if (config.existsParam("initModel")) initModelS=config.getParam("initModel"); // Use a specific model for Em init
bool outputAdaptParam=false;
if (config.existsParam("superVectors")) outputAdaptParam=true;
Matrix <double> ChannelMatrix;
if (verbose) cout<< "EigenMAP and Eigenchannel with [" << config.getParam("initChannelMatrix") << "] of size: [";
ChannelMatrix.load(config.getParam("initChannelMatrix"),config); //get Channel Matrix from args and load in a Matrix object
if (verbose) cout << ChannelMatrix.rows() << "," <<ChannelMatrix.cols() << "]" << endl;
bool varAdapt=false;
if (config.existsParam("FAVarAdapt")) varAdapt=true;
bool saveCompleteServer=false;
try{
XList inputClientList(inputClientListFileName,config); // read the Id + filenames for each client
XLine * linep;
inputClientList.getLine(0);
MixtureServer ms(config);
StatServer ss(config, ms);
if (verbose) cout << "(TrainTarget) Factor Analysis - Load world model [" << inputWorldFilename<<"]"<<endl;
MixtureGD& world = ms.loadMixtureGD(inputWorldFilename);
if (verbose) cout <<"(TrainTarget) Use["<<initModelS<<"] for initializing EM"<<endl;
// *********** Target loop *****************
while ((linep=inputClientList.getLine()) != NULL){ // linep gives the XLine with the Id of a given client and the list of files
String *id=linep->getElement(); // Get the Client ID (id)
XLine featureFileListp=linep->getElements(); // Get the list of feature file for the client (end of the line)
if (verbose) cout << "(TrainTarget) Train model ["<<*id<<"]"<<endl;
FeatureServer fs(config,featureFileListp); // Reading the features (from several files)
SegServer segmentsServer; // Create the segment server for managing the segments/clusters
LabelServer labelServer; // Create the lable server, for indexing the segments/clusters
initializeClusters(featureFileListp,segmentsServer,labelServer,config); // Reading the segmentation files for each feature input file
verifyClusterFile(segmentsServer,fs,config); // Verify if the segments ending before the end of the feature files...
MixtureGD & adaptedMixture = ms.duplicateMixture(world,DUPL_DISTRIB); // Creating final as a copy of the world model
MixtureGD & clientMixture= ms.duplicateMixture(world,DUPL_DISTRIB);
long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the cluster with in interest audio segments
if (codeSelectedFrame==-1){ // No data for this model !!!!!!!!!!!!!!
cout << " WARNING - NO DATA FOR TRAINING ["<<*id<<"]";
if (saveEmptyModel){
cout <<" World model is returned"<<endl; // In this case, the client model is the world model
if (verbose) cout << "Save client model ["<<*id<<"]" << endl;
adaptedMixture.save(*id, config); // Save the client model
}
}
else{
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame); // Gives the cluster of the selected/used segments
/// **** Factor Analysis Stuff
XList faNdx;
faNdx.addLine()=featureFileListp;
FactorAnalysisStat FA(faNdx,fs,config); // give all features to FA stats
//FA.computeAndAccumulateGeneralFAStats(selectedSegments,fs,config);
for(int i=0;i<config.getParam("nbTrainIt").toLong();i++){
if (verbose) cout << "------ Iteration ["<<i<<"] ------"<<endl;
FA.computeAndAccumulateGeneralFAStats(selectedSegments,fs,config);
/*if (!varAdapt) FA.getTrueSpeakerModel(clientMixture,linep->getElement(1));
else FA.getFactorAnalysisModel(clientMixture,linep->getElement(1));
if (verbose) cout << "LLK for model["<<*id<<"] at it["<<i-1<<"]="<<FA.getLLK(selectedSegments,clientMixture,fs,config) << endl; */
FA.estimateAndInverseL(config);
FA.substractSpeakerStats();
FA.getXEstimate();
FA.substractChannelStats();
FA.getYEstimate();
}
MixtureGD & sessionMixture= ms.duplicateMixture(world,DUPL_DISTRIB);
bool saveSessionModel=false;
if (config.existsParam("saveSessionModel")) saveSessionModel=true;
if (saveSessionModel) FA.getSessionModel(sessionMixture,linep->getElement(1));
if (!varAdapt) FA.getTrueSpeakerModel(clientMixture,linep->getElement(1)); // basically compute M_s_h=M+Dy_s and get a model
else FA.getFactorAnalysisModel(clientMixture,linep->getElement(1)); // get FA variance adapted model
if (verbose) cout << "Final LLK for model["<<*id<<"]="<<FA.getLLK(selectedSegments,clientMixture,fs,config) << endl;
/// **** End of FA
if (!outputAdaptParam) {
if (verbose) cout << "Save client model ["<<*id<<"]" << endl;
clientMixture.save(*id, config); // Save the client model
if (saveSessionModel) {
String sessionfile=*id+".session";
if (verbose) cout << "Save session model ["<<sessionfile<<"]" << endl;
sessionMixture.save(sessionfile,config);
//.........这里部分代码省略.........
示例12: TrainTarget
// Training of client Speakers
// Input: Xlist Format: ID_Client Seg1 Seg2 ..
// Output: ALIZE_MixtureServer (binaire) + GMM / Client (binary)
int TrainTarget(Config& config)
{
String inputClientListFileName = config.getParam("targetIdList");
String inputWorldFilename = config.getParam("inputWorldFilename");
String outputSERVERFilename = "";
if (config.existsParam("mixtureServer")) outputSERVERFilename =config.getParam("mixtureServer");
bool initByClient=false; // In this case, the init model is read from the file
if (config.existsParam("initByClient")) initByClient=config.getParam("initByClient").toBool();
bool saveEmptyModel=false;
if (config.existsParam("saveEmptyModel")) saveEmptyModel=config.getParam("saveEmptyModel").toBool();
// label for selected frames - Only the frames associated with this label, in the label files, will be used
bool fixedLabelSelectedFrame=true;
String labelSelectedFrames;
if (config.existsParam("useIdForSelectedFrame")) // the ID of each speaker is used as labelSelectedFrame ?
fixedLabelSelectedFrame=(config.getParam("useIdForSelectedFrame").toBool()==false);
if (fixedLabelSelectedFrame) // the label is decided by the command line and is unique for the run
labelSelectedFrames=config.getParam("labelSelectedFrames");
bool modelData=false;
if (config.existsParam("useModelData")) modelData=config.getParam("useModelData").toBool();
String initModelS=inputWorldFilename;
if (modelData) if (config.existsParam("initModel")) initModelS=config.getParam("initModel"); // Use a specific model for Em init
bool outputAdaptParam=false;
if (config.existsParam("superVector")) outputAdaptParam=true;
bool NAP=false;
Matrix <double> ChannelMatrix;
if (config.existsParam("NAP")) {
if (verbose) cout<< "Removing channel effect with NAP from " << config.getParam("NAP") << " of size: [";
NAP=true; // enable NAP
ChannelMatrix.load(config.getParam("NAP"),config); //get Channel Matrix from args and load in a Matrix object
if (verbose) cout << ChannelMatrix.rows() << "," <<ChannelMatrix.cols() << "]" << endl;
}
bool saveCompleteServer=false;
try{
XList inputClientList(inputClientListFileName,config); // read the Id + filenames for each client
XLine * linep;
inputClientList.getLine(0);
MixtureServer ms(config);
StatServer ss(config, ms);
if (verbose) cout << "TrainTarget - Load world model [" << inputWorldFilename<<"]"<<endl;
MixtureGD& world = ms.loadMixtureGD(inputWorldFilename);
MixtureGD& initModel =ms.loadMixtureGD(initModelS);
if (verbose) cout <<"Use["<<initModelS<<"] for initializing EM"<<endl;
// *********** Target loop *****************
while ((linep=inputClientList.getLine()) != NULL){ // linep gives the XLine with the Id of a given client and the list of files
String *id=linep->getElement(); // Get the Client ID (id)
XLine featureFileListp=linep->getElements(); // Get the list of feature file for the client (end of the line)
if (verbose) cout << "Train model ["<<*id<<"]"<<endl;
if (!fixedLabelSelectedFrame){ // the ID is used as label for selecting the frame
labelSelectedFrames=*id;
if (verbose) cout <<*id<<" is used for label selected frames"<<endl;
}
FeatureServer fs(config,featureFileListp); // Reading the features (from several files)
SegServer segmentsServer; // Create the segment server for managing the segments/clusters
LabelServer labelServer; // Create the lable server, for indexing the segments/clusters
initializeClusters(featureFileListp,segmentsServer,labelServer,config); // Reading the segmentation files for each feature input file
verifyClusterFile(segmentsServer,fs,config); // Verify if the segments ending before the end of the feature files...
MixtureGD & adaptedMixture = ms.duplicateMixture(world,DUPL_DISTRIB); // Creating final as a copy of the world model
MixtureGD & clientMixture= ms.duplicateMixture(world,DUPL_DISTRIB);
if (initByClient){ // During trainig data statistic estimation by EM,
clientMixture= ms.loadMixtureGD(*id); // the client model is used for initalization
adaptedMixture=clientMixture;
}
long codeSelectedFrame=labelServer.getLabelIndexByString(labelSelectedFrames); // Get the index of the cluster with in interest audio segments
if (codeSelectedFrame==-1){ // No data for this model !!!!!!!!!!!!!!
cout << " WARNING - NO DATA FOR TRAINING ["<<*id<<"]";
if (saveEmptyModel){
cout <<" World model is returned"<<endl; // In this case, the client model is the world model
if (verbose) cout << "Save client model ["<<*id<<"]" << endl;
adaptedMixture.save(*id, config); // Save the client model
}
}
else{
SegCluster& selectedSegments=segmentsServer.getCluster(codeSelectedFrame); // Gives the cluster of the selected/used segments
if (!initByClient) ms.setMixtureId(clientMixture,*id); // Set the client model Id
if (modelData) modelBasedadaptModel(config,ss,ms,fs,selectedSegments,world,clientMixture,initModel); // EM algo with MAP criterion
else adaptModel(config,ss,ms,fs,selectedSegments,world,clientMixture); // EM algo with MAP criterion
if (NAP) {
if (verbose) cout << "NAP on SVs" << endl;
computeNap(clientMixture,ChannelMatrix);
}
if (outputAdaptParam) {
RealVector<double> v;
getSuperVector(v,world,clientMixture,config);
String out=config.getParam("saveVectorFilesPath")+*id+config.getParam("vectorFilesExtension");
Matrix <double> vv=(Matrix<double>)v;
vv.save(out,config);
}
if (!outputAdaptParam) {
if (verbose) cout << "Save client model ["<<*id<<"]" << endl;
clientMixture.save(*id, config); // Save the client model
}
if (!saveCompleteServer){
//.........这里部分代码省略.........
示例13: compute
// 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();
}
开发者ID:umbatoul,项目名称:Android-Voice-IDentification-App-using-SPRO-ALIZE-LIARAL,代码行数:66,代码来源:TopGauss.cpp