Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        public Math::Matrix <double> Predict(IList <string> frameImageFilePaths)
        {
            Math::Matrix <double> X = LoadOrCalculateInputMatrix(frameImageFilePaths);

            dataNormalizer.Normalize(X);

            return(innerRegression.Predict(X));
        }
Пример #4
0
        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);
        }
Пример #5
0
        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));
        }