Ejemplo n.º 1
0
        private static TrainedRecognizer Train(TrainerInput input, ConvolutionBase2D convolution, bool isColor, int finalResolution)
        {
            if (input == null || input.ImportantEvents == null || input.ImportantEvents.Length == 0)
            {
                return null;
            }

            TrainerInput normalized = GetTrainingInput(input, convolution, isColor, finalResolution);

            List<double[]> inputs = new List<double[]>();
            List<double[]> outputs = new List<double[]>();

            // Important Events
            inputs.AddRange(normalized.ImportantEvents.Select(o => o.Item2));
            outputs.AddRange(normalized.ImportantEvents.Select(o => o.Item1.Vector));

            // Unimportant Events (sensor input that should output zeros)
            if (normalized.UnimportantEvents != null && normalized.UnimportantEvents.Length > 0)
            {
                int outputVectorLength = outputs[0].Length;

                inputs.AddRange(normalized.UnimportantEvents);
                outputs.AddRange(Enumerable.Range(0, normalized.UnimportantEvents.Length).
                    Select(o => new double[outputVectorLength]));
            }

            //NOTE: If there is an exception, the network couldn't be trained
            BasicNetwork network = null;
            try
            {
                //network = UtilityEncog.GetTrainedNetwork(inputs.ToArray(), outputs.ToArray(), UtilityEncog.ERROR, 15, 45).NetworkOrNull;
                network = UtilityEncog.GetTrainedNetwork(inputs.ToArray(), outputs.ToArray(), UtilityEncog.ERROR, 5, 15).NetworkOrNull;
            }
            catch (Exception) { }

            if (network == null)
            {
                return null;
            }

            return new TrainedRecognizer()
            {
                Network = network,
                InputRaw = input,
                InputNormalized = normalized,
            };
        }
Ejemplo n.º 2
0
        /// <summary>
        /// This runs the input through NormalizeInput, and returns an object with those results
        /// </summary>
        private static TrainerInput GetTrainingInput(TrainerInput raw, ConvolutionBase2D convolution, bool isColor, int finalResolution)
        {
            var importantEvents = raw.ImportantEvents.
                Select(o =>
                {
                    double[] normalized = NormalizeInput(o.Item2, raw.Width, raw.Height, finalResolution, convolution, isColor);
                    return Tuple.Create(o.Item1, normalized);
                }).
                ToArray();

            var unimportantEvents = raw.UnimportantEvents.
                Select(o => NormalizeInput(o, raw.Width, raw.Height, finalResolution, convolution, isColor)).
                ToArray();

            var awayPoints = GetAwayPoints(importantEvents.Select(o => o.Item2).ToArray());

            //VectorInt reduction;
            //if (convolution == null)
            //{
            //    reduction = new VectorInt(0, 0);
            //}
            //else
            //{
            //    reduction = convolution.GetReduction();
            //}

            return new TrainerInput()
            {
                //Width = raw.Width - reduction.X,
                //Height = raw.Height - reduction.Y,
                Width = finalResolution,
                Height = finalResolution,
                ImportantEvents = importantEvents,
                UnimportantEvents = unimportantEvents.Concat(awayPoints).ToArray(),
                IsColor = isColor,
            };
        }
Ejemplo n.º 3
0
        private static void SaveImages(string parentFolder, string childFolder, TrainerInput trainerInput)
        {
            if (trainerInput == null)
            {
                return;
            }

            foreach (var set in trainerInput.ImportantEvents.ToLookup(o => o.Item1))
            {
                SaveImages(parentFolder, childFolder, trainerInput.Width, trainerInput.Height, set.Select(o => o.Item2).ToArray(), trainerInput.IsColor, set.Key.ToString());
            }

            SaveImages(parentFolder, childFolder, trainerInput.Width, trainerInput.Height, trainerInput.UnimportantEvents, trainerInput.IsColor, "none");
        }
Ejemplo n.º 4
0
        /// <summary>
        /// This returns raw input (still need to call NormalizeInput)
        /// </summary>
        private TrainerInput GetTrainingInput()
        {
            var camera = _camera;
            if (camera == null)
            {
                return null;
            }

            double numCategories = _importantEvents.
                Distinct(o => o.Item1.Type).
                Count();

            int unimportantCount = Math.Min(20, (_importantEvents.Count / numCategories).ToInt_Round());

            TrainerInput trainerInput = new TrainerInput()
            {
                ImportantEvents = _importantEvents.ToArray(),
                UnimportantEvents = _nonLifeEventSnapshots.GetSamples(unimportantCount),
                Width = camera.PixelWidthHeight,
                Height = camera.PixelWidthHeight,
                IsColor = _isColor,
            };

            return trainerInput;
        }