public BackpropNeuralNetwork Clone() { var result = new BackpropNeuralNetwork(); var ms = new MemoryStream(); Save(ms); ms.Seek(0, SeekOrigin.Begin); result.Open(ms); return result; }
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; }
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); }