static void read_dataset(char* fname, CLatentFeatures*& feats, CLatentLabels*& labels) { FILE* fd = fopen(fname, "r"); char line[MAX_LINE_LENGTH]; char *pchar, *last_pchar; int num_examples,label,height,width; char* path = dirname(fname); if (fd == NULL) SG_SERROR("Cannot open input file %s!\n", fname); fgets(line, MAX_LINE_LENGTH, fd); num_examples = atoi(line); labels = new CLatentLabels(num_examples); SG_REF(labels); CBinaryLabels* ys = new CBinaryLabels(num_examples); feats = new CLatentFeatures(num_examples); SG_REF(feats); CMath::init_random(); for (int i = 0; (!feof(fd)) && (i < num_examples); ++i) { fgets(line, MAX_LINE_LENGTH, fd); pchar = line; while ((*pchar)!=' ') pchar++; *pchar = '\0'; pchar++; /* label: {-1, 1} */ last_pchar = pchar; while ((*pchar)!=' ') pchar++; *pchar = '\0'; label = (atoi(last_pchar) % 2 == 0) ? 1 : -1; pchar++; if (ys->set_label(i, label) == false) SG_SERROR("Couldn't set label for element %d\n", i); last_pchar = pchar; while ((*pchar)!=' ') pchar++; *pchar = '\0'; width = atoi(last_pchar); pchar++; last_pchar = pchar; while ((*pchar)!='\n') pchar++; *pchar = '\0'; height = atoi(last_pchar); /* create latent label */ int x = CMath::random(0, width-1); int y = CMath::random(0, height-1); CBoundingBox* bb = new CBoundingBox(x,y); labels->add_latent_label(bb); SG_SPROGRESS(i, 0, num_examples); CHOGFeatures* hog = new CHOGFeatures(width, height); hog->hog = SG_CALLOC(float64_t**, hog->width); for (int j = 0; j < width; ++j) { hog->hog[j] = SG_CALLOC(float64_t*, hog->height); for (int k = 0; k < height; ++k) { char filename[MAX_LINE_LENGTH]; hog->hog[j][k] = SG_CALLOC(float64_t, HOG_SIZE); sprintf(filename,"%s/%s.%03d.%03d.txt",path,line,j,k); FILE* f = fopen(filename, "r"); if (f == NULL) SG_SERROR("Could not open file: %s\n", filename); for (int l = 0; l < HOG_SIZE; ++l) fscanf(f,"%lf",&hog->hog[j][k][l]); fclose(f); } } feats->add_sample(hog); } fclose(fd); labels->set_labels(ys); SG_SDONE(); }