// Training SVM with feature vector X and label Y. // Each row of X is a feature vector, with corresponding label in Y. // Return a CV_32F weight Mat Mat Objectness::trainSVM(CMat &X1f, const vecI &Y, int sT, double C, double bias, double eps) { // Set SVM parameters parameter param; { param.solver_type = sT; // L2R_L2LOSS_SVC_DUAL; param.C = C; param.eps = eps; // see setting below param.p = 0.1; param.nr_weight = 0; param.weight_label = NULL; param.weight = NULL; set_print_string_function(print_null); CV_Assert(X1f.rows == Y.size() && X1f.type() == CV_32F); } // Initialize a problem feature_node *x_space = NULL; problem prob;{ prob.l = X1f.rows; prob.bias = bias; prob.y = Malloc(double, prob.l); prob.x = Malloc(feature_node*, prob.l); const int DIM_FEA = X1f.cols; prob.n = DIM_FEA + (bias >= 0 ? 1 : 0); x_space = Malloc(feature_node, (prob.n + 1) * prob.l); int j = 0; for (int i = 0; i < prob.l; i++){ prob.y[i] = Y[i]; prob.x[i] = &x_space[j]; const float* xData = X1f.ptr<float>(i); for (int k = 0; k < DIM_FEA; k++){ x_space[j].index = k + 1; x_space[j++].value = xData[k]; } if (bias >= 0){ x_space[j].index = prob.n; x_space[j++].value = bias; } x_space[j++].index = -1; } CV_Assert(j == (prob.n + 1) * prob.l); } // Training SVM for current problem const char* error_msg = check_parameter(&prob, ¶m); if(error_msg){ fprintf(stderr,"ERROR: %s\n",error_msg); exit(1); } model *svmModel = train(&prob, ¶m); Mat wMat(1, prob.n, CV_64F, svmModel->w); wMat.convertTo(wMat, CV_32F); free_and_destroy_model(&svmModel); destroy_param(¶m); free(prob.y); free(prob.x); free(x_space); return wMat; }
bool isLucky(vecI mv){ int cont; int n = mv.size(); for(int i = 0; i < n; i++) { if(mv[i]== 4 or mv[i] == 7) cont++; } if(cont == n) return true; else return false; }
int CmAPCluster::ReMapIdx(vecI &mapIdx) { int N = (int)mapIdx.size(), newCount = 0; map<int, int> idxCount, oldNewIdx; vecI newIdx(N); for (int i = 0; i < N; i++){ if (idxCount.find(mapIdx[i]) == idxCount.end()) oldNewIdx[mapIdx[i]] = newCount++, idxCount[mapIdx[i]]++; mapIdx[i] = oldNewIdx[mapIdx[i]]; } return (int)idxCount.size(); }
void DataSetVOC::loadBox(const FileNode &fn, vector<Vec4i> &boxes, vecI &clsIdx){ string isDifficult; fn["difficult"]>>isDifficult; if (isDifficult == "1") return; string strXmin, strYmin, strXmax, strYmax; fn["bndbox"]["xmin"] >> strXmin; fn["bndbox"]["ymin"] >> strYmin; fn["bndbox"]["xmax"] >> strXmax; fn["bndbox"]["ymax"] >> strYmax; boxes.push_back(Vec4i(atoi(_S(strXmin)), atoi(_S(strYmin)), atoi(_S(strXmax)), atoi(_S(strYmax)))); string clsName; fn["name"]>>clsName; clsIdx.push_back(findFromList(clsName, classNames)); CV_Assert_(clsIdx[clsIdx.size() - 1] >= 0, ("Invalidate class name\n")); }