manifold.cpp

来自「一个由Mike Gashler完成的机器学习方面的includes neural」· C++ 代码 · 共 1,682 行 · 第 1/5 页

CPP
1,682
字号
	}

	void RunImageSemiSupPerfTest(int nCount, int nWid, int nHgt, int nTargetDims, int nNeighbors, double dSquishingRate, const char* szDir, int nSupervisedPoints)
	{
		printf("\n\n--- Image Semi Supervised Perf Test ---\n");
		delete(m_pModel);
		m_pModel = new ImageModel(0, nCount, nWid, nHgt, nTargetDims, nNeighbors, dSquishingRate, szDir, 0, NULL, true);

		// First learn the points
		int nPass = 0;
		GManifoldSculpting* pSculpter = m_pModel->GetSculpter();
		int nDataPoints = pSculpter->GetDataPointCount();
		int nErrors;
		int nBestErrors = nDataPoints;
		int nIttersSinceImprovement = 0;
		while(true)
		{
			pSculpter->SquishPass(rand() % nDataPoints);
			nErrors = m_pModel->MeasureSingleDimOrderErrors();
			if(nErrors < nBestErrors)
			{
				nBestErrors = nErrors;
				nIttersSinceImprovement = 0;
			}
			else
				nIttersSinceImprovement++;
			if(nErrors == 0 || nIttersSinceImprovement > 100)
			{
				printf("First pass errors: %d\n", nErrors);
				break;
			}
			nPass++;
		}
		int nPassLimit = 3 * nPass;
		nPass = 0;

		// Precision iterations
		int i;
		for(i = 0; i < nPass; i++)
			pSculpter->SquishPass(rand() % nDataPoints);
		nErrors = m_pModel->MeasureSingleDimOrderErrors();
		int nTargetErrors = nErrors;
		printf("Errors after precision iterations: %d\n", nErrors);

		// Now do the demo with semi-supervision
		ImageModel* pPrevModel = (ImageModel*)m_pModel;
		double dStartTime = GTime::GetTime();
		m_pModel = new ImageModel(0, nCount, nWid, nHgt, nTargetDims, nNeighbors, dSquishingRate, szDir, nSupervisedPoints, pPrevModel, true);
		delete(pPrevModel);
		pSculpter = m_pModel->GetSculpter();
		double dBeginIterationTime = GTime::GetTime();
		while(true)
		{
			pSculpter->SquishPass(rand() % nDataPoints);
			nErrors = m_pModel->MeasureSingleDimOrderErrors();
			if(nErrors <= nTargetErrors)
				break;
			if(nPass++ > nPassLimit)
			{
				printf("############ FAILED ##########\n");
				break;
			}
		}
		double dEndTime = GTime::GetTime();
		printf("Iterate time: %f, Total time: %f\n", dEndTime - dBeginIterationTime, dEndTime - dStartTime);
	}

	void MakeGeneratedMatrix(const char* szFilename, SwissRollModel::ManifoldType eType, int nCount)
	{
		delete(m_pModel);
		m_pModel = new SwissRollModel(eType, nCount, false, 8, .995, true, 0, NULL);
		m_pModel->ToMatrix(szFilename);
	}

	void MakeImageMatrix(const char* szFilename, int nCount, int nWid, int nHgt, const char* szDir)
	{
		delete(m_pModel);
		m_pModel = new ImageModel(0, nCount, nWid, nHgt, 1, 8, .995, szDir, 0, NULL, false);
		m_pModel->ToMatrix(szFilename);
	}

	void RunGeneratedSemiSupPerfTest(SwissRollModel::ManifoldType eType, int nCount, int nNeighbors, double dSquishingRate, int nSupervisedPoints, double dFirstAcceptableError, double dSecondAcceptableError)
	{
		printf("\n\n--- Generated Semi Supervised Perf Test ---\n");
		delete(m_pModel);
		m_pModel = new SwissRollModel(eType, nCount, false, nNeighbors, dSquishingRate, true, 0, NULL);

		// First learn the points
		GManifoldSculpting* pSculpter = m_pModel->GetSculpter();
		int nDataPoints = pSculpter->GetDataPointCount();
		double dError;
		while(true)
		{
			pSculpter->SquishPass(rand() % nDataPoints);
			dError = (eType == SwissRollModel::SPIRALS ? ((SwissRollModel*)m_pModel)->Measure1DError() : ((SwissRollModel*)m_pModel)->Measure2DError());
			if(dError < dFirstAcceptableError)
				break;
		}

		// Now do the demo with semi-supervision
		SwissRollModel* pPrevModel = (SwissRollModel*)m_pModel;
		double dStartTime = GTime::GetTime();
		m_pModel = new SwissRollModel(eType, nCount, false, nNeighbors, dSquishingRate, true, nSupervisedPoints, pPrevModel);
		delete(pPrevModel);
		pSculpter = m_pModel->GetSculpter();
		double dBeginIterationTime = GTime::GetTime();
		while(true)
		{
			pSculpter->SquishPass(rand() % nDataPoints);
			dError = (eType == SwissRollModel::SPIRALS ? ((SwissRollModel*)m_pModel)->Measure1DError() : ((SwissRollModel*)m_pModel)->Measure2DError());
			if(dError < dSecondAcceptableError)
				break;
		}
		double dEndTime = GTime::GetTime();
		printf("Iterate time: %f, Total time: %f\n", dEndTime - dBeginIterationTime, dEndTime - dStartTime);
	}

	void RunImagePerfTest(int nCount, int nWid, int nHgt, int nTargetDims, int nNeighbors, double dSquishingRate, const char* szDir, int nFinalErrors)
	{
		char szBuf[64];
		printf("\n\n--- Image Perf Test for %s --- %s", szDir, GTime::GetAsciiTime(szBuf, 64));
		delete(m_pModel);
		double dStartTime = GTime::GetTime();
		m_pModel = new ImageModel(0, nCount, nWid, nHgt, nTargetDims, nNeighbors, dSquishingRate, szDir, 0, NULL, true);
		GManifoldSculpting* pSculpter = m_pModel->GetSculpter();
		int nDataPoints = pSculpter->GetDataPointCount();
		int nErrors;
		int nBestErrors = nDataPoints;
		int nIttersSinceImprovement = 0;
		double dBeginIterationTime = GTime::GetTime();
		while(true)
		{
			pSculpter->SquishPass(rand() % nDataPoints);
			nErrors = m_pModel->MeasureSingleDimOrderErrors();
			if(nErrors < nBestErrors)
			{
				nBestErrors = nErrors;
				nIttersSinceImprovement = 0;
			}
			else
				nIttersSinceImprovement++;
			if(/*nErrors <= nFinalErrors || */nIttersSinceImprovement > 500)
			{
				printf("Number of errors: %d\n", nErrors);
				break;
			}
		}
		double dEndTime = GTime::GetTime();
		double dMeanSquaredError = m_pModel->Measure1DError();
		printf("Iterate time: %f, Total time: %f, Errors: %d, MeanSquaredError: %f\n", dEndTime - dBeginIterationTime, dEndTime - dStartTime, nBestErrors, dMeanSquaredError);
	}

	void ExportImageData(int nCount, int nWid, int nHgt, const char* szDir, const char* szOutFilename)
	{
		printf("\n\n--- Exporting images set: %s ---\n", szOutFilename);
		delete(m_pModel);
		m_pModel = new ImageModel(0, nCount, nWid, nHgt, 1, 1, .99, szDir, 0, NULL, false);
		m_pModel->ToMatrix(szOutFilename);
		printf("done.\n");
	}

	void DoImagePerfTests()
	{
		//RunImagePerfTest(12/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .99/*squishing rate*/, "faces/", 0);
		//RunImagePerfTest(17/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .99/*squishing rate*/, "faces/", 0);
		//RunImagePerfTest(25/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .99/*squishing rate*/, "faces/", 0);
		//RunImagePerfTest(35/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .99/*squishing rate*/, "faces/", 0);
		//RunImagePerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .99/*squishing rate*/, "faces/", 0);
		
		//RunImagePerfTest(14/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(20/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(28/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(40/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(56/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(79/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(112/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(158/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 0);
		//RunImagePerfTest(225/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 5);
		//RunImagePerfTest(318/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 6);
		RunImagePerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox1/", 5);
		
		//RunImagePerfTest(14/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(20/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(28/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(40/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(56/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(79/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(112/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(158/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 0);
		//RunImagePerfTest(225/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 5);
		//RunImagePerfTest(318/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 6);
		RunImagePerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/fox2/", 5);
		
		//RunImagePerfTest(15/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 0);
		//RunImagePerfTest(21/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 0);
		//RunImagePerfTest(30/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 2);
		//RunImagePerfTest(42/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 4);
		//RunImagePerfTest(60/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 6);
		//RunImagePerfTest(85/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 8);
		//RunImagePerfTest(120/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 12);
		//RunImagePerfTest(170/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 26);
		//RunImagePerfTest(240/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 29);
		//RunImagePerfTest(339/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 38);
		//RunImagePerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/games/", 94);
		
		//RunImagePerfTest(14/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 0);
		//RunImagePerfTest(20/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 0);
		//RunImagePerfTest(28/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 0);
		//RunImagePerfTest(40/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 0);
		//RunImagePerfTest(57/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 0);
		//RunImagePerfTest(81/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 0);
		//RunImagePerfTest(115/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 0);
		//RunImagePerfTest(163/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 1);
		RunImagePerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall1/", 1);
		
		//RunImagePerfTest(16/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 0);
		//RunImagePerfTest(23/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 0);
		//RunImagePerfTest(33/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 0);
		//RunImagePerfTest(47/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 0);
		//RunImagePerfTest(67/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 0);
		//RunImagePerfTest(95/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 1);
		//RunImagePerfTest(135/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 1);
		//RunImagePerfTest(191/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 1);
		RunImagePerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/hall2/", 1);
		
		//RunImagePerfTest(15/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 0);
		//RunImagePerfTest(21/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 0);
		//RunImagePerfTest(31/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 0);
		//RunImagePerfTest(44/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 0);
		//RunImagePerfTest(63/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 0);
		//RunImagePerfTest(89/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 0);
		//RunImagePerfTest(127/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 9);
		//RunImagePerfTest(180/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 14);
		//RunImagePerfTest(255/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 20);
		RunImagePerfTest(360/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 23);
		RunImagePerfTest(510/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/marsup/", 34);
		
		//RunImagePerfTest(16/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 0);
		//RunImagePerfTest(23/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 0);
		//RunImagePerfTest(32/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 0);
		//RunImagePerfTest(45/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 0);
		//RunImagePerfTest(65/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 0);
		//RunImagePerfTest(92/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 0);
		//RunImagePerfTest(130/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 0);
		//RunImagePerfTest(184/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 3);
		//RunImagePerfTest(260/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan1/", 2);
		
		//RunImagePerfTest(17/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 0);
		//RunImagePerfTest(24/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 0);
		//RunImagePerfTest(35/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 0);
		//RunImagePerfTest(49/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 0);
		//RunImagePerfTest(70/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 0);
		//RunImagePerfTest(99/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 0);
		//RunImagePerfTest(140/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 1);
		//RunImagePerfTest(198/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 0);
		//RunImagePerfTest(280/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan2/", 1);
		
		//RunImagePerfTest(17/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 0);
		//RunImagePerfTest(24/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 0);
		//RunImagePerfTest(35/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 0);
		//RunImagePerfTest(49/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 0);
		//RunImagePerfTest(70/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 0);
		//RunImagePerfTest(99/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 0);
		//RunImagePerfTest(140/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 1);
		//RunImagePerfTest(198/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 0);
		RunImagePerfTest(280/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .995/*squishing rate*/, "movies/pan3/", 1);
	}

	void DoImageSemiSupTests()
	{
		RunImageSemiSupPerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .98/*squishing rate*/, "faces/", 0);
		RunImageSemiSupPerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .98/*squishing rate*/, "faces/", 1);
		RunImageSemiSupPerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .98/*squishing rate*/, "faces/", 2);
		RunImageSemiSupPerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .98/*squishing rate*/, "faces/", 4);
		RunImageSemiSupPerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .98/*squishing rate*/, "faces/", 8);
		RunImageSemiSupPerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .98/*squishing rate*/, "faces/", 16);
		RunImageSemiSupPerfTest(50/*count*/, 43/*wid*/, 38/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .98/*squishing rate*/, "faces/", 32);
		
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 0);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 1);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 2);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 4);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 8);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 16);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 32);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 64);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 128);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox1/", 256);
		
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 0);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 1);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 2);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 4);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 8);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 16);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 32);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 64);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 128);
		RunImageSemiSupPerfTest(450/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/fox2/", 256);
		
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 0);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 1);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 2);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 4);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 8);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 16);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 32);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 64);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 128);
		RunImageSemiSupPerfTest(480/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/games/", 256);
		
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 0);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 1);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 2);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 4);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 8);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 16);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 32);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 64);
		RunImageSemiSupPerfTest(230/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall1/", 128);
		
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 0);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 1);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 2);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 4);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 8);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 16);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 32);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 64);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 128);
		RunImageSemiSupPerfTest(270/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/hall2/", 256);
		
		RunImageSemiSupPerfTest(510/*count*/, 40/*wid*/, 30/*hgt*/, 1/*target dims*/, 6/*neighbors*/, .985/*squishing rate*/, "movies/marsup/", 0);
		RunImageSemiSupPerfTest(510/*count*/, 40/*wid*/, 30/*hgt*/, 1/*

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?