Example #1
0
        /// <summary>
        /// Get an image reader to sequentially read images from disk for training.
        /// </summary>
        /// <param name="mapFilePath">The path to the map file</param>
        /// <param name="imageWidth">The width to scale all images to</param>
        /// <param name="imageHeight">The height to scale all images to</param>
        /// <param name="numChannels">The number of channels to transform all images to</param>
        /// <param name="numClasses">The number of label classes in this training set</param>
        /// <param name="randomizeData">Set to true to randomize the data for training</param>
        /// <param name="augmentData">Set to true to use data augmentation to expand the training set</param>
        /// <returns>An image source ready for use in training or testing.</returns>
        public static CNTK.MinibatchSource GetImageReader(string mapFilePath, int imageWidth, int imageHeight, int numChannels, int numClasses, bool randomizeData, bool augmentData)
        {
            var transforms = new List <CNTK.CNTKDictionary>();

            if (augmentData)
            {
                var randomSideTransform = CNTK.CNTKLib.ReaderCrop("RandomSide",
                                                                  new Tuple <int, int>(0, 0),
                                                                  new Tuple <float, float>(0.8f, 1.0f),
                                                                  new Tuple <float, float>(0.0f, 0.0f),
                                                                  new Tuple <float, float>(1.0f, 1.0f),
                                                                  "uniRatio");
                transforms.Add(randomSideTransform);
            }
            var scaleTransform = CNTK.CNTKLib.ReaderScale(imageWidth, imageHeight, numChannels);

            transforms.Add(scaleTransform);

            var imageDeserializer     = CNTK.CNTKLib.ImageDeserializer(mapFilePath, "labels", (uint)numClasses, "features", transforms);
            var minibatchSourceConfig = new CNTK.MinibatchSourceConfig(new CNTK.DictionaryVector()
            {
                imageDeserializer
            });

            if (!randomizeData)
            {
                minibatchSourceConfig.randomizationWindowInChunks  = 0;
                minibatchSourceConfig.randomizationWindowInSamples = 0;
            }
            return(CNTK.CNTKLib.CreateCompositeMinibatchSource(minibatchSourceConfig));
        }
Example #2
0
        CNTK.MinibatchSource create_minibatch_source(CNTK.NDShape shape, int start_index, int sample_count, string prefix, bool is_training = false, bool use_augmentations = false)
        {
            var map_filename = create_map_txt_file_if_needed(start_index, sample_count, prefix);

            var transforms = new List <CNTK.CNTKDictionary>();

            if (use_augmentations)
            {
                var randomSideTransform = CNTK.CNTKLib.ReaderCrop("RandomSide",
                                                                  new Tuple <int, int>(0, 0),
                                                                  new Tuple <float, float>(0.8f, 1.0f),
                                                                  new Tuple <float, float>(0.0f, 0.0f),
                                                                  new Tuple <float, float>(1.0f, 1.0f),
                                                                  "uniRatio");
                transforms.Add(randomSideTransform);
            }

            var scaleTransform = CNTK.CNTKLib.ReaderScale(width: shape[1], height: shape[0], channels: shape[2]);

            transforms.Add(scaleTransform);

            var imageDeserializer     = CNTK.CNTKLib.ImageDeserializer(map_filename, "labels", 2, "features", transforms);
            var minibatchSourceConfig = new CNTK.MinibatchSourceConfig(new CNTK.DictionaryVector()
            {
                imageDeserializer
            });

            if (!is_training)
            {
                minibatchSourceConfig.randomizationWindowInChunks  = 0;
                minibatchSourceConfig.randomizationWindowInSamples = 0;
            }
            return(CNTK.CNTKLib.CreateCompositeMinibatchSource(minibatchSourceConfig));
        }
Example #3
0
        CNTK.MinibatchSource create_minibatchSource(string map_file, int num_classes, bool train)
        {
            var transforms = new List <CNTK.CNTKDictionary>();

            if (true)
            {
                var randomSideTransform = CNTK.CNTKLib.ReaderCrop("RandomSide",
                                                                  new Tuple <int, int>(0, 0),
                                                                  new Tuple <float, float>(0.8f, 1.0f),
                                                                  new Tuple <float, float>(0.0f, 0.0f),
                                                                  new Tuple <float, float>(1.0f, 1.0f),
                                                                  "uniRatio");
                transforms.Add(randomSideTransform);
            }

            var scaleTransform = CNTK.CNTKLib.ReaderScale(image_width, image_height, num_channels);

            transforms.Add(scaleTransform);

            var imageDeserializer     = CNTK.CNTKLib.ImageDeserializer(map_file, "labels", (uint)num_classes, "features", transforms);
            var minibatchSourceConfig = new CNTK.MinibatchSourceConfig(new CNTK.DictionaryVector()
            {
                imageDeserializer
            });

            return(CNTK.CNTKLib.CreateCompositeMinibatchSource(minibatchSourceConfig));
        }