private void ProcessNetwork() { app.WriteLine("Downsampling images..."); foreach (ImagePair pair in imageList) { IMLData ideal = new BasicMLData(outputCount); int idx = pair.Identity; for (int i = 0; i < outputCount; i++) { if (i == idx) { ideal.Data[i] = 1; } else { ideal.Data[i] = -1; } } try { var img = new Bitmap(pair.File); var data = new ImageMLData(img); training.Add(data, ideal); } catch (Exception e) { app.WriteLine("Error loading: " + pair.File + ": " + e.Message); } } String strHidden1 = GetArg("hidden1"); String strHidden2 = GetArg("hidden2"); if (training.Count == 0) { app.WriteLine("No images to create network for."); return; } training.Downsample(downsampleHeight, downsampleWidth); int hidden1 = int.Parse(strHidden1); int hidden2 = int.Parse(strHidden2); network = EncogUtility.SimpleFeedForward(training .InputSize, hidden1, hidden2, training.IdealSize, true); app.WriteLine("Created network: " + network); }
private void Learn_Click(object sender, RoutedEventArgs e) { var downsample = new Downsampler(); var training = new ImageMLDataSet(downsample, true, 1, -1); for (var i = 0; i < Images.Count; ++i) { var ideal = new BasicMLData(DIGITS_COUNT); for (int j = 0; j < DIGITS_COUNT; ++j) { if (j == i) { ideal[j] = 1; } else { ideal[j] = -1; } } foreach (var img in Images[i]) { MemoryStream stream = new MemoryStream(); BitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(img)); encoder.Save(stream); var bitmap = new Drawing.Bitmap(stream); var data = new ImageMLData(bitmap); training.Add(data, ideal); } } training.Downsample(DIGIT_HEIGHT, DIGIT_WIDTH); network = EncogUtility.SimpleFeedForward(training.InputSize, 35, 0, training.IdealSize, true); double strategyError = 0.01; int strategyCycles = 2000; var train = new ResilientPropagation(network, training); //train.AddStrategy(new ResetStrategy(strategyError, strategyCycles)); EncogUtility.TrainDialog(train, network, training); EncogDirectoryPersistence.SaveObject(new FileInfo("network.eg"), network); }
public void ProcessWhatIs() { String filename = GetArg("image"); try { var img = new Bitmap(filename); var input = new ImageMLData(img); input.Downsample(downsample, false, downsampleHeight, downsampleWidth, 1, -1); int winner = network.Winner(input); app.WriteLine("What is: " + filename + ", it seems to be: " + neuron2identity[winner]); } catch (Exception e) { app.WriteLine("Error loading: " + filename + ", " + e.Message); } }
private void button1_Click(object sender, EventArgs e) { using (OpenFileDialog dlg = new OpenFileDialog()) { dlg.Title = "Open Image"; dlg.Filter = "Image files (*.bmp, *.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.bmp; *.jpg; *.jpeg; *.jpe; *.jfif; *.png"; if (dlg.ShowDialog() == DialogResult.OK) { var bitMap = new Bitmap(dlg.FileName); NeuralForm n = new NeuralForm(); n.BitMap = bitMap; n.Show(); // var network = new BasicNetwork(); FileInfo networkFile = new FileInfo(NETWORK_PATH); if (System.IO.File.Exists(NETWORK_PATH)) { network = (BasicNetwork)(Encog.Persist.EncogDirectoryPersistence.LoadObject(networkFile)); } int hCounter = 0; int Wcounter = 0; int hMax = bitMap.Height / SIZE; int wMax = bitMap.Width / SIZE; var outputBitmap = new Bitmap(bitMap.Width, bitMap.Height); while (hMax > hCounter) { Encog.ML.Data.Image.ImageMLDataSet testingSet = new Encog.ML.Data.Image.ImageMLDataSet(new Encog.Util.DownSample.RGBDownsample(), false, 1, -1); var _25x25bitmap = new Bitmap(SIZE, SIZE); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { var px = bitMap.GetPixel(Wcounter * SIZE + j, hCounter * SIZE + i); _25x25bitmap.SetPixel(i, j, px); } } ImageMLData data = new ImageMLData(_25x25bitmap); testingSet.Add(data, null); testingSet.Downsample(SIZE, SIZE); bool isVege = false; foreach (IMLDataPair pair in testingSet) { IMLData output = network.Compute(pair.Input); if (output[1] > .05) { isVege = true; } } for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { var px = _25x25bitmap.GetPixel(i, j); if (!isVege) { outputBitmap.SetPixel(Wcounter * SIZE + j, hCounter * SIZE + i, px); } else { outputBitmap.SetPixel(Wcounter * SIZE + j, hCounter * SIZE + i, Color.FromArgb(px.R, 0, px.B)); } } } Wcounter++; if (wMax <= Wcounter) { Wcounter = 0; hCounter++; } } NeuralForm n2 = new NeuralForm(); n2.BitMap = outputBitmap; n2.Show(); } } }
private void RecCanvas_MouseUp(object sender, MouseButtonEventArgs e) { recCanvas_drawing = false; var size = new Size(RecCanvas.ActualWidth, RecCanvas.ActualHeight); // Measure and arrange the surface // VERY IMPORTANT RecCanvas.Measure(size); RecCanvas.Arrange(new Rect(size)); var renderBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32); renderBitmap.Render(RecCanvas); MemoryStream stream = new MemoryStream(); BitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); encoder.Save(stream); var bitmap = new Drawing.Bitmap(stream); var downsample = new Downsampler(); var result = downsample.DownSample(bitmap, DIGIT_HEIGHT, DIGIT_WIDTH); var image = new Drawing.Bitmap(DIGIT_WIDTH, DIGIT_HEIGHT); for (var i = 0; i < DIGIT_HEIGHT; ++i) { for (var j = 0; j < DIGIT_WIDTH; ++j) { image.SetPixel(j, i, Drawing.Color.FromArgb( 255, (int)result[i * DIGIT_WIDTH + j], (int)result[i * DIGIT_WIDTH + j], (int)result[i * DIGIT_WIDTH + j] )); } } RecComp.Source = Imaging.CreateBitmapSourceFromHBitmap( image.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); if (network == null) { return; } var input = new ImageMLData(bitmap); input.Downsample(downsample, false, DIGIT_HEIGHT, DIGIT_WIDTH, 1, -1); int winner = network.Winner(input); RecDigit.Text = winner.ToString(); var data = network.Compute(input); for (var i = 0; i < DIGITS_COUNT; ++i) { Results[i] = new ResultObject { Char = i.ToString(), Result = (data[i] + 1) / 2 }; } }
public static void Run() { FileInfo networkFile = new FileInfo(@"D:\Imagery\network\network.eg"); var network = new BasicNetwork(); network.AddLayer(new BasicLayer(null, true, SIZE * SIZE * 3)); network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, NERUONCOUNT)); network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 2)); network.Structure.FinalizeStructure(); network.Reset(); if (System.IO.File.Exists(@"D:\Imagery\network\network.eg")) { network = (BasicNetwork)(Encog.Persist.EncogDirectoryPersistence.LoadObject(networkFile)); } Encog.ML.Data.Image.ImageMLDataSet trainingSet = new Encog.ML.Data.Image.ImageMLDataSet(new RGBDownsample(), false, 1, -1); Random rnd = new Random(); //take 1000,, take 5000 from nothing and scramble them List <string> fileEntries = Directory.GetFiles(@"D:\Imagery\_Vege").OrderBy(x => rnd.Next()).Take(1000).ToList(); fileEntries.AddRange(Directory.GetFiles(@"D:\Imagery\_Nothing").OrderBy(x => rnd.Next()).Take(5000).ToArray()); fileEntries = fileEntries.OrderBy(x => rnd.Next()).Take(6000).ToList(); foreach (var file in fileEntries) { var bitmap = new System.Drawing.Bitmap(file); ImageMLData data = new ImageMLData(bitmap); if (file.Contains("_Nothing")) { BasicMLData ideal = new BasicMLData(Nothing); trainingSet.Add(data, ideal); } else { BasicMLData ideal = new BasicMLData(Vegetation); trainingSet.Add(data, ideal); } } trainingSet.Downsample(SIZE, SIZE); IMLTrain train = new Backpropagation(network, trainingSet, .001, 0.02) { }; int epoch = 1; do { train.Iteration(); Console.WriteLine(@"Epoch #" + epoch + @" Error: " + train.Error); epoch++; } while (epoch < 50); train.FinishTraining(); Encog.Persist.EncogDirectoryPersistence.SaveObject(networkFile, (BasicNetwork)network); Encog.ML.Data.Image.ImageMLDataSet testingSet = new Encog.ML.Data.Image.ImageMLDataSet(new RGBDownsample(), false, 1, -1); fileEntries = Directory.GetFiles(@"D:\Imagery\_VegeTest").ToList(); foreach (var file in fileEntries) { ImageMLData data = new ImageMLData(new System.Drawing.Bitmap(file)); BasicMLData ideal = new BasicMLData(Vegetation); testingSet.Add(data, ideal); } fileEntries = Directory.GetFiles(@"D:\Imagery\_NothingTest").ToList(); foreach (var file in fileEntries) { ImageMLData data = new ImageMLData(new System.Drawing.Bitmap(file)); BasicMLData ideal = new BasicMLData(Nothing); testingSet.Add(data, ideal); } testingSet.Downsample(SIZE, SIZE); Console.WriteLine(@"Neural Network Results:"); foreach (IMLDataPair pair in testingSet) { IMLData output = network.Compute(pair.Input); Console.WriteLine(@", actual (" + output[0] + @"," + output[1] + @"),ideal (" + pair.Ideal[0] + @"," + pair.Ideal[1] + ")"); } EncogFramework.Instance.Shutdown(); }