// Get potential bounding boxes for all test images
void Objectness::getObjBndBoxesForTestsFast(vector<vector<Vec4i>> &_boxesTests, int numDetPerSize)
{
	//setColorSpace(HSV);

	// comment this for training 
	// trainObjectness(numDetPerSize);

	loadTrainedModel();
	illustrate();


	const int TestNum = _voc.testSet.size();
	vecM imgs3u(TestNum);
	vector<ValStructVec<float, Vec4i>> boxesTests;
	boxesTests.resize(TestNum);

#pragma omp parallel for
	for (int i = 0; i < TestNum; i++){
		//imgs3u[i] = imread("C:/Users/TerryChen/Desktop/M.jpg"); 
		imgs3u[i] = imread(format(_S(_voc.imgPathW), _S(_voc.testSet[i])));
		boxesTests[i].reserve(10000);
	}

	printf("Start predicting\n");
	CmTimer tm("Predict");
	tm.Start();

#pragma omp parallel for
	for (int i = 0; i < TestNum; i++)
		getObjBndBoxes(imgs3u[i], boxesTests[i], numDetPerSize);
	
	tm.Stop();
	printf("Average time for predicting an image (%s) is %gs\n", _clrName[_Clr], tm.TimeInSeconds()/TestNum);

	_boxesTests.resize(TestNum);
	CmFile::MkDir(_bbResDir);

#pragma omp parallel for
	for (int i = 0; i < TestNum; i++){
		CStr fName = _bbResDir + _voc.testSet[i];
		ValStructVec<float, Vec4i> &boxes = boxesTests[i];
		FILE *f = fopen(_S(fName + ".txt"), "w");
		fprintf(f, "%d\n", boxes.size());
		for (size_t k = 0; k < boxes.size(); k++)
			fprintf(f, "%g, %s\n", boxes(k), _S(strVec4i(boxes[k])));
		fclose(f);

		_boxesTests[i].resize(boxesTests[i].size());
		for (int j = 0; j < boxesTests[i].size(); j++)
			_boxesTests[i][j] = boxesTests[i][j];
	}

	evaluatePerImgRecall(_boxesTests, "PerImgAll.m", 5000);
}
Beispiel #2
0
// Get potential bounding boxes for all test images
void Objectness::getObjBndBoxesForTestsFast(vector<vector<Vec4i> > &_boxesTests, int numDetPerSize, bool preloadModel, bool preloadImages)
{
    //setColorSpace(HSV);
    if (!preloadModel)
        trainObjectness(numDetPerSize);
    loadTrainedModel();
    illustrate();


    const int TestNum = _voc.testSet.size();
    vecM imgs3u;
    if (preloadImages)
        imgs3u.resize(TestNum);
    vector<ValStructVec<float, Vec4i> > boxesTests;
    boxesTests.resize(TestNum);

    //Reading all images beforehand needs a lot of memory.
    //The timing results are affected based on when the image is loaded.
    if (preloadImages) {
        #pragma omp parallel for
        for (int i = 0; i < TestNum; i++) {
            imgs3u[i] = imread(format(_S(_voc.imgPathW), _S(_voc.testSet[i])));
            boxesTests[i].reserve(10000);
        }
    }

    printf("Start predicting\n");
    CmTimer tm("Predict");
    tm.Start();

    #pragma omp parallel for
    for (int i = 0; i < TestNum; i++) {
        if (!preloadImages) {
            Mat img = imread(format(_S(_voc.imgPathW), _S(_voc.testSet[i])));
            getObjBndBoxes(img, boxesTests[i], numDetPerSize);
        } else {
            getObjBndBoxes(imgs3u[i], boxesTests[i], numDetPerSize);
        }
    }

    tm.Stop();
    if (!preloadImages) {
        printf("Average time for loading and predicting an image (%s) is %gs\n", _clrName[_Clr], tm.TimeInSeconds()/TestNum);
    } else {
        printf("Average time for predicting an image (%s) is %gs\n", _clrName[_Clr], tm.TimeInSeconds()/TestNum);
    }
    _boxesTests.resize(TestNum);
    CmFile::MkDir(_bbResDir);

    #pragma omp parallel for
    for (int i = 0; i < TestNum; i++) {
        CStr fName = _bbResDir + _voc.testSet[i];
        ValStructVec<float, Vec4i> &boxes = boxesTests[i];
        FILE *f = fopen(_S(fName + ".txt"), "w");
        fprintf(f, "%d\n", boxes.size());
        for (size_t k = 0; k < boxes.size(); k++)
            fprintf(f, "%g, %s\n", boxes(k), _S(strVec4i(boxes[k])));
        fclose(f);

        _boxesTests[i].resize(boxesTests[i].size());
        for (int j = 0; j < boxesTests[i].size(); j++)
            _boxesTests[i][j] = boxesTests[i][j];
    }

    evaluatePerImgRecall(_boxesTests, "PerImgAll.m", 5000);
}