public void LoadFeatureTrainData() { foreach (SceneFeatureData scenefeatureData in classifier.Values) { scenefeatureData.trainData = FeatureDetector.GetAllTrainImageData(path + @"\" + scenefeatureData.feature.name, scenefeatureData.feature.trainFolders); } }
private void test1ToolStripMenuItem_Click(object sender, EventArgs e) { FeatureDetector f = new FeatureDetector(); f.Init(@"D:\kwang\Csharp\MyAutoIt\MyAutoIt\bin\Debug\Linage2\Main\Features", configure.features["Main"]); f.LoadFeatureTrainData(); f.Train(); }
private void testWithTestSetToolStripMenuItem_Click(object sender, EventArgs e) { ImageTrainDataSet testDataSet = FeatureDetector.GetAllTrainImageData(testDataPath, configure.trainFolders); testDataSet.flgCache = true; byte[] hash = imgClassifier.ComputeHash(testDataSet); logger.logStr(hash.ToHex()); int testErrCount = imgClassifier.Evaluate(testDataSet); logger.logStr(String.Format("test {0}", testErrCount)); }
private void loadTrainDataToolStripMenuItem_Click_1(object sender, EventArgs e) { trainData = FeatureDetector.GetAllTrainImageData(dataPath, configure.trainFolders); trainData = trainData.BalanceData(); trainData.Shuffle(); testData = trainData.SplitTestData((int)(0.1 * trainData.Count())); TrainDataInfo[] infos = trainData.GetInfo(configure.trainFolders.Count()); TrainDataInfo[] testinfos = testData.GetInfo(configure.trainFolders.Count()); logger.logStr(Utils.ToJsonString(infos, true)); logger.logStr(Utils.ToJsonString(testinfos, true)); }
public void Init() { Accord.Math.Random.Generator.Seed = 0; logger = new MyLogger(txtDebug); logger.logStr("Start"); String configFile = configPath + @"\AutoIt.json"; try { configure = JsonConvert.DeserializeObject <AutoItConfigure>(File.ReadAllText(configFile)); //configure.features.Add("test",new SceneFeature()); foreach (var s in configure.features.Keys) { foreach (var f in configure.features[s]) { String fname = s + @"\" + f.name; sceneFeatures.Add(fname, new SceneFeatureData() { feature = f, trainData = FeatureDetector.GetAllTrainImageData(dataPath + @"\" + s + @"\Features\" + f.name, f.trainFolders) } ); logger.logStr("add " + fname); } } } catch (Exception ex) { logger.logError("Config not found [" + configFile + "]"); configure = new AutoItConfigure(); } mask = Utils.CreateMaskBitmap(new Size(1280, 720), configure.areas); logger.logStr(JsonConvert.SerializeObject(configure, Formatting.Indented)); foreach (String s in configure.trainFolders) { cmbFolder.Items.Add(s); } Reload(); }
private void trainToolStripMenuItem_Click_1(object sender, EventArgs e) { ImageTrainDataSet testDataSet = FeatureDetector.GetAllTrainImageData(testDataPath, configure.trainFolders); testDataSet.flgCache = true; int[] labelIndexs = trainData.GetLabelIndexs(); String[] labels = trainData.GetLabels(); var bow = Accord.IO.Serializer.Load <BagOfVisualWords>(dataPath + String.Format(@"\train-{0}.bow", bowSize)); double[][] features = trainData.GetFeature(bow, mask); int numOutput = trainData.GetNumOutput(); var function = new SigmoidFunction(); logger.logStr("Start Training"); bool flgFound = false; int count = 0; while ((flgFound == false) && (count < 100)) { count++; var network = new ActivationNetwork(function, bow.NumberOfOutputs, 20, numOutput); new NguyenWidrow(network).Randomize(); var teacher = new ParallelResilientBackpropagationLearning(network); BowImageClassifier trainImgClassifier = new BowImageClassifier(); trainImgClassifier.Init(bow, network, mask); //creat output double[][] outputs = trainData.GetOutputs(numOutput); double avgError = 10000.0; double prevError = avgError; double bestError = avgError; int errorCount = 0; while ((errorCount < 3) && (avgError > 0.00001)) { //Application.DoEvents(); double[] errors = new double[10]; for (int i = 0; i < 10; i++) { errors[i] = teacher.RunEpoch(features, outputs); } avgError = errors.Average(); if (prevError > avgError) { int trainError = trainImgClassifier.Evaluate(trainData); int testError = trainImgClassifier.Evaluate(testData); int testSetError = trainImgClassifier.Evaluate(testDataSet); logger.logStr(String.Format("{0} {1} {2} {3} {4} #{5}", avgError, prevError, trainError, testError, testSetError, errorCount)); prevError = avgError; //save best error if (bestError > avgError) { bestError = avgError; Accord.IO.Serializer.Save(network, dataPath + String.Format(@"\train-{0}.net", bow.NumberOfOutputs)); } if (trainError + testError + testSetError == 0) { flgFound = true; Accord.IO.Serializer.Save(network, dataPath + String.Format(@"\train-{0}.net", bow.NumberOfOutputs)); break; } } else { logger.logStr(String.Format("{0}", avgError)); prevError = 10000.0; errorCount++; } Application.DoEvents(); } logger.logStr("Done " + bestError + " " + count); } }