Beispiel #1
0
        private static void try_classifier(string datacfg, string cfgfile, string weightfile, string filename, int layerNum)
        {
            Network net = Parser.parse_network_cfg(cfgfile);

            if (string.IsNullOrEmpty(weightfile))
            {
                Parser.load_weights(net, weightfile);
            }
            Network.set_batch_network(net, 1);
            Utils.Rand = new Random(2222222);

            var options = OptionList.read_data_cfg(datacfg);

            string nameList = OptionList.option_find_str(options, "names", "");

            if (string.IsNullOrEmpty(nameList))
            {
                nameList = OptionList.option_find_str(options, "labels", "Data.Data/labels.list");
            }
            int top = OptionList.option_find_int(options, "top", 1);

            int i = 0;

            string[] names = Data.Data.get_labels(nameList);
            var      sw    = new Stopwatch();

            int[] indexes = new int[top];

            string input = "";

            while (true)
            {
                if (!string.IsNullOrEmpty(filename))
                {
                    input = filename;
                }
                else
                {
                    Console.Write($"Enter Image Path: ");

                    input = Console.ReadLine();
                    if (string.IsNullOrEmpty(input))
                    {
                        return;
                    }
                    input = input.TrimEnd();
                }
                Image   orig = LoadArgs.load_image_color(input, 0, 0);
                Image   r    = LoadArgs.resize_min(orig, 256);
                Image   im   = LoadArgs.crop_image(r, (r.W - 224 - 1) / 2 + 1, (r.H - 224 - 1) / 2 + 1, 224, 224);
                float[] mean = { 0.48263312050943f, 0.45230225481413f, 0.40099074308742f };
                float[] std  = { 0.22590347483426f, 0.22120921437787f, 0.22103996251583f };
                float[] var  = new float[3];
                var[0] = std[0] * std[0];
                var[1] = std[1] * std[1];
                var[2] = std[2] * std[2];

                Blas.Normalize_cpu(im.Data, mean, var, 1, 3, im.W * im.H);

                float[] x = im.Data;
                sw.Reset();
                sw.Start();
                float[] predictions = Network.network_predict(net, x);

                Layer l = net.Layers[layerNum];
                for (i = 0; i < l.C; ++i)
                {
                    if (l.RollingMean.Length > i)
                    {
                        Console.Write($"%f %f %f\n", l.RollingMean[i], l.RollingVariance[i], l.Scales[i]);
                    }
                }
                Array.Copy(l.OutputGpu, l.Output, l.Outputs);
                for (i = 0; i < l.Outputs; ++i)
                {
                    Console.Write($"%f\n", l.Output[i]);
                }

                Network.top_predictions(net, top, indexes);
                sw.Stop();
                Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds);
                for (i = 0; i < top; ++i)
                {
                    int index = indexes[i];
                    Console.Write($"%s: %f\n", names[index], predictions[index]);
                }
                if (!string.IsNullOrEmpty(filename))
                {
                    break;
                }
            }
        }