示例#1
0
 public void LoadFeatureTrainData()
 {
     foreach (SceneFeatureData scenefeatureData in classifier.Values)
     {
         scenefeatureData.trainData = FeatureDetector.GetAllTrainImageData(path + @"\" + scenefeatureData.feature.name, scenefeatureData.feature.trainFolders);
     }
 }
示例#2
0
        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();
        }
示例#3
0
        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));
        }
示例#4
0
 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));
 }
示例#5
0
        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();
        }
示例#6
0
        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);
            }
        }