public BackpropNeuralNetwork Clone()
 {
     var result = new BackpropNeuralNetwork();
     var ms = new MemoryStream();
     Save(ms);
     ms.Seek(0, SeekOrigin.Begin);
     result.Open(ms);
     return result;
 }
예제 #2
0
        public BackpropNeuralNetwork Clone()
        {
            var result = new BackpropNeuralNetwork();
            var ms     = new MemoryStream();

            Save(ms);
            ms.Seek(0, SeekOrigin.Begin);
            result.Open(ms);
            return(result);
        }
        public static void ExportResult(Dataset testData, BackpropNeuralNetwork net)
        {
            var reader = new StreamReader(Path.Combine(dataPath, "IdLookupTable.csv"));
            var writer = new StreamWriter(Path.Combine(dataPath, "result.csv"));

            var featureNames = new List<string>()
            {
                "left_eye_center_x", "left_eye_center_y",
                "right_eye_center_x", "right_eye_center_y",
                "left_eye_inner_corner_x", "left_eye_inner_corner_y",
                "left_eye_outer_corner_x", "left_eye_outer_corner_y",
                "right_eye_inner_corner_x", "right_eye_inner_corner_y",
                "right_eye_outer_corner_x", "right_eye_outer_corner_y",
                "left_eyebrow_inner_end_x", "left_eyebrow_inner_end_y",
                "left_eyebrow_outer_end_x", "left_eyebrow_outer_end_y",
                "right_eyebrow_inner_end_x", "right_eyebrow_inner_end_y",
                "right_eyebrow_outer_end_x", "right_eyebrow_outer_end_y",
                "nose_tip_x", "nose_tip_y",
                "mouth_left_corner_x", "mouth_left_corner_y",
                "mouth_right_corner_x", "mouth_right_corner_y",
                "mouth_center_top_lip_x", "mouth_center_top_lip_y",
                "mouth_center_bottom_lip_x", "mouth_center_bottom_lip_y"
            };

            var featureLookup = featureNames.Select((f, i) => new { key = f, value = i }).ToDictionary(t => t.key, t => t.value);

            Console.WriteLine();

            var image = -1;
            var p = default(float[]);
            var s = reader.ReadLine();
            writer.WriteLine("RowId,Location");
            int row = 1;
            while((s = reader.ReadLine()) != null)
            {
                var v = s.Split(',');
                var img = int.Parse(v[1]);
                if (img != image)
                {
                    image = img;
                    p = net.Predict(testData.input[image-1]);
                }

                var idx = featureLookup[v[2]];
                var value = Tools.Clamp(p[idx] * origImgSize, 0, origImgSize);
                var rl = row + "," + value;
                row++;
                writer.WriteLine(rl);
                Console.Write(".");
            }
            Console.WriteLine();
            reader.Dispose();
            writer.Dispose();
        }
        public static Dataset LoadTrainData()
        {
            Dataset result = new Dataset();
            var net = new PragmaLearn.Learner.BackpropNeuralNetwork();
               //  net.Open("network.dat");
            var reader = new StreamReader(Path.Combine(dataPath, "training.csv"));

            // ignore first line
            var line = reader.ReadLine();

            while ((line = reader.ReadLine()) != null)
            {
                var ls = line.Split(',');

                bool skipped = false;
                var keypoints = new double[outputSize];
                for (int i = 0; i < outputSize; ++i)
                {
                    if (string.IsNullOrEmpty(ls[i]))
                    {
                        Console.Write(".");
                        keypoints[i] = -1;
                        // output[i] = Tools.rnd.NextDouble();
                        skipped = true;
                        // break;
                    }
                    else
                    {
                        keypoints[i] = double.Parse(ls[i]);
                    }
                }

                //if (skipped)
                //    continue;

                var pic = ls.Last().Split(' ');
                var img = new float[inputSize];
                for (int j = 0; j < inputSize; ++j)
                {
                    img[j] = float.Parse(pic[j]) / 255.0f;
                }

                //if (skipped)
                //{
                //    using (var bmp = Tools.double_to_bmp(img, origImgSize, origImgSize))
                //    {
                //        using (var filtered = applyFilters(bmp))
                //        {
                //            var input = Tools.bmp_to_double(filtered);
                //            var p = net.Predict(input);

                //            for (int i = 0; i < keypoints.Length; ++i)
                //            {
                //                if (keypoints[i] == -1)
                //                    keypoints[i] = p[i] * origImgSize;
                //            }
                //        }
                //    }
                //}

                for (int x = 0; x < 20; ++x)
                {

                    var points = new PointF[keypoints.Length / 2];
                    for (int i = 0; i < keypoints.Length; i += 2)
                    {
                        points[i / 2] = new PointF((float)keypoints[i], (float)keypoints[i + 1]);
                    }

                    var input = default(float[]);

                    using (var bmp = Tools.float_to_bmp(img, origImgSize, origImgSize))
                    {
                        if (x != 0)
                        {
                            using (var transformed = transformRandom(bmp, points))
                            {
                                using (var filtered = applyFilters(transformed))
                                {
                                    input = Tools.bmp_to_float(filtered);
                                }
                            }
                        }
                        else
                        {
                            using (var filtered = applyFilters(bmp))
                            {
                                input = Tools.bmp_to_float(filtered);
                            }

                        }
                    }
                    var output = new float[keypoints.Length];
                    for (int i = 0; i < points.Length; i++)
                    {
                        output[2 * i] = points[i].X != -1 ? points[i].X / origImgSize : -1;
                        output[2 * i + 1] = points[i].Y != -1 ? points[i].Y / origImgSize : -1;
                    }

                    result.AddPair(input, output);
                }

                //if (skipped)
                //{
                //    var p = net.Predict(input);

                //    for (int i = 0; i < output.Length; ++i)
                //    {
                //        if (output[i] == -1)
                //            output[i] = p[i];
                //    }
                //}

            }

            reader.Dispose();
            return result;
        }
예제 #5
0
        public static Dataset LoadTrainData()
        {
            Dataset result = new Dataset();
            var     net    = new PragmaLearn.Learner.BackpropNeuralNetwork();
            //  net.Open("network.dat");
            var reader = new StreamReader(Path.Combine(dataPath, "training.csv"));

            // ignore first line
            var line = reader.ReadLine();

            while ((line = reader.ReadLine()) != null)
            {
                var ls = line.Split(',');

                bool skipped   = false;
                var  keypoints = new double[outputSize];
                for (int i = 0; i < outputSize; ++i)
                {
                    if (string.IsNullOrEmpty(ls[i]))
                    {
                        Console.Write(".");
                        keypoints[i] = -1;
                        // output[i] = Tools.rnd.NextDouble();
                        skipped = true;
                        // break;
                    }
                    else
                    {
                        keypoints[i] = double.Parse(ls[i]);
                    }
                }

                //if (skipped)
                //    continue;

                var pic = ls.Last().Split(' ');
                var img = new float[inputSize];
                for (int j = 0; j < inputSize; ++j)
                {
                    img[j] = float.Parse(pic[j]) / 255.0f;
                }


                //if (skipped)
                //{
                //    using (var bmp = Tools.double_to_bmp(img, origImgSize, origImgSize))
                //    {
                //        using (var filtered = applyFilters(bmp))
                //        {
                //            var input = Tools.bmp_to_double(filtered);
                //            var p = net.Predict(input);

                //            for (int i = 0; i < keypoints.Length; ++i)
                //            {
                //                if (keypoints[i] == -1)
                //                    keypoints[i] = p[i] * origImgSize;
                //            }
                //        }
                //    }
                //}

                for (int x = 0; x < 20; ++x)
                {
                    var points = new PointF[keypoints.Length / 2];
                    for (int i = 0; i < keypoints.Length; i += 2)
                    {
                        points[i / 2] = new PointF((float)keypoints[i], (float)keypoints[i + 1]);
                    }

                    var input = default(float[]);

                    using (var bmp = Tools.float_to_bmp(img, origImgSize, origImgSize))
                    {
                        if (x != 0)
                        {
                            using (var transformed = transformRandom(bmp, points))
                            {
                                using (var filtered = applyFilters(transformed))
                                {
                                    input = Tools.bmp_to_float(filtered);
                                }
                            }
                        }
                        else
                        {
                            using (var filtered = applyFilters(bmp))
                            {
                                input = Tools.bmp_to_float(filtered);
                            }
                        }
                    }
                    var output = new float[keypoints.Length];
                    for (int i = 0; i < points.Length; i++)
                    {
                        output[2 * i]     = points[i].X != -1 ? points[i].X / origImgSize : -1;
                        output[2 * i + 1] = points[i].Y != -1 ? points[i].Y / origImgSize : -1;
                    }

                    result.AddPair(input, output);
                }

                //if (skipped)
                //{
                //    var p = net.Predict(input);

                //    for (int i = 0; i < output.Length; ++i)
                //    {
                //        if (output[i] == -1)
                //            output[i] = p[i];
                //    }
                //}
            }

            reader.Dispose();
            return(result);
        }