public static double[] Evaluate(Math::Matrix <double> predictions, Math::Matrix <double> shouldBe, params ErrorCalculator[] ecs) { List <string> diffStrings = new List <string>(); for (int row = 0; row < predictions.RowCount; row++) { double desiredSum = 0; double actualSum = 0; for (int col = 0; col < predictions.ColumnCount; col++) { desiredSum += shouldBe[row, col]; actualSum += predictions[row, col]; } diffStrings.Add(String.Format("{0} {1}", desiredSum, actualSum)); } File.WriteAllLines(@"D:\! Egyetem\! RWTH\Semester 2\Seminar CV\Datasets\Mall\analysis\differences.txt", diffStrings); double[] results = new double[ecs.Length]; int i = 0; foreach (ErrorCalculator ec in ecs) { results[i++] = Evaluate(predictions, shouldBe, ec); } return(results); }
private Math::Matrix <double> LoadOrCalculateInputMatrix(IList <string> frameImageFilePaths) { if (CachePath == null) { return(CalculateInputMatrix(frameImageFilePaths)); } string filename = String.Format("count={0}, {1}.dat", frameImageFilePaths.Count, featureExtractor.ToString()); string path = Path.Combine(CachePath, filename); if (File.Exists(path)) { lock (cacheLock) { using (var stream = File.Open(path, FileMode.Open)) { BinaryFormatter bf = new BinaryFormatter(); return(DenseMatrix.OfArray((double[, ])bf.Deserialize(stream))); } } } else { lock (cacheLock) { Math::Matrix <double> inputMatrix = CalculateInputMatrix(frameImageFilePaths); using (var stream = File.Open(path, FileMode.Create)) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(stream, inputMatrix.ToArray()); } return(inputMatrix); } } }
public Math::Matrix <double> Predict(IList <string> frameImageFilePaths) { Math::Matrix <double> X = LoadOrCalculateInputMatrix(frameImageFilePaths); dataNormalizer.Normalize(X); return(innerRegression.Predict(X)); }
public void Train(IList <string> frameImageFilePaths, IList <IList <PointF> > peoplePositions) { Math::Matrix <double> X = LoadOrCalculateInputMatrix(frameImageFilePaths); dataNormalizer.TrainNormalization(X); dataNormalizer.Normalize(X); Math::Matrix <double> Y = PeoplePositions.GridQuantize(peoplePositions, featureExtractor.N, featureExtractor.M, 640, 480); innerRegression.Train(X, Y); }
public static double Evaluate(Math::Matrix <double> predictions, Math::Matrix <double> shouldBe, ErrorCalculator ec) { double errorSum = 0; for (int row = 0; row < predictions.RowCount; row++) { double desiredSum = 0; double actualSum = 0; for (int col = 0; col < predictions.ColumnCount; col++) { desiredSum += shouldBe[row, col]; actualSum += predictions[row, col]; } errorSum += ec.CalculateError(actualSum, desiredSum); } return(errorSum / (predictions.RowCount)); }