private static void label_classifier(string datacfg, string filename, string weightfile) { int i; Network net = Parser.parse_network_cfg(filename); Network.set_batch_network(net, 1); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } var options = OptionList.read_data_cfg(datacfg); string labelList = OptionList.option_find_str(options, "names", "Data.Data/labels.list"); string testList = OptionList.option_find_str(options, "test", "Data.Data/train.list"); int classes = OptionList.option_find_int(options, "classes", 2); string[] labels = Data.Data.get_labels(labelList); string[] paths = Data.Data.GetPaths(testList); int m = paths.Length; for (i = 0; i < m; ++i) { Image im = LoadArgs.load_image_color(paths[i], 0, 0); Image resized = LoadArgs.resize_min(im, net.W); Image crop = LoadArgs.crop_image(resized, (resized.W - net.W) / 2, (resized.H - net.H) / 2, net.W, net.H); float[] pred = Network.network_predict(net, crop.Data); int ind = Utils.max_index(pred, classes); Console.Write($"%s\n", labels[ind]); } }
public static void predict_classifier(string datacfg, string cfgfile, string weightfile, string filename, int top) { 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"); } if (top == 0) { 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 = ""; int size = net.W; 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 im = LoadArgs.load_image_color(input, 0, 0); Image r = LoadArgs.resize_min(im, size); Network.resize_network(net, r.W, r.H); Console.Write($"%d %d\n", r.W, r.H); float[] x = r.Data; sw.Reset(); sw.Start(); float[] predictions = Network.network_predict(net, x); if (net.Hierarchy != null) { net.Hierarchy.Hierarchy_predictions(predictions, 0, net.Outputs, false); } Utils.top_k(predictions, net.Outputs, 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]; if (net.Hierarchy != null) { Console.Write($"%d, %s: %f, parent: %s \n", index, names[index], predictions[index], (net.Hierarchy.Parent[index] >= 0) ? names[net.Hierarchy.Parent[index]] : "Root"); } else { Console.Write($"%s: %f\n", names[index], predictions[index]); } } if (!string.IsNullOrEmpty(filename)) { break; } } }
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; } } }
private static void validate_classifier_multi(string datacfg, string filename, string weightfile) { int i, j; Network net = Parser.parse_network_cfg(filename); Network.set_batch_network(net, 1); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } var options = OptionList.read_data_cfg(datacfg); string labelList = OptionList.option_find_str(options, "labels", "Data.Data/labels.list"); string validList = OptionList.option_find_str(options, "valid", "Data.Data/train.list"); int classes = OptionList.option_find_int(options, "classes", 2); int topk = OptionList.option_find_int(options, "top", 1); string[] labels = Data.Data.get_labels(labelList); int[] scales = { 224, 288, 320, 352, 384 }; int nscales = scales.Length; string[] paths = Data.Data.GetPaths(validList); int m = paths.Length; float avgAcc = 0; float avgTopk = 0; int[] indexes = new int[topk]; for (i = 0; i < m; ++i) { int class2 = -1; string path = paths[i]; for (j = 0; j < classes; ++j) { if (path.Contains(labels[j])) { class2 = j; break; } } float[] pred = new float[classes]; Image im = LoadArgs.load_image_color(paths[i], 0, 0); for (j = 0; j < nscales; ++j) { Image r = LoadArgs.resize_min(im, scales[j]); Network.resize_network(net, r.W, r.H); float[] p = Network.network_predict(net, r.Data); if (net.Hierarchy != null) { net.Hierarchy.Hierarchy_predictions(p, 0, net.Outputs, true); } Blas.Axpy_cpu(classes, 1, p, pred); LoadArgs.flip_image(r); p = Network.network_predict(net, r.Data); Blas.Axpy_cpu(classes, 1, p, pred); } Utils.top_k(pred, classes, topk, indexes); if (indexes[0] == class2) { avgAcc += 1; } for (j = 0; j < topk; ++j) { if (indexes[j] == class2) { avgTopk += 1; } } Console.Write($"%d: top 1: %f, top %d: %f\n", i, avgAcc / (i + 1), topk, avgTopk / (i + 1)); } }
private static void validate_classifier_single(string datacfg, string filename, string weightfile) { int i, j; Network net = Parser.parse_network_cfg(filename); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(net, 1); var options = OptionList.read_data_cfg(datacfg); string labelList = OptionList.option_find_str(options, "labels", "Data.Data/labels.list"); string leafList = OptionList.option_find_str(options, "leaves", ""); if (!string.IsNullOrEmpty(leafList)) { net.Hierarchy.Change_leaves(leafList); } string validList = OptionList.option_find_str(options, "valid", "Data.Data/train.list"); int classes = OptionList.option_find_int(options, "classes", 2); int topk = OptionList.option_find_int(options, "top", 1); string[] labels = Data.Data.get_labels(labelList); string[] paths = Data.Data.GetPaths(validList); int m = paths.Length; float avgAcc = 0; float avgTopk = 0; int[] indexes = new int[topk]; for (i = 0; i < m; ++i) { int class2 = -1; string path = paths[i]; for (j = 0; j < classes; ++j) { if (path.Contains(labels[j])) { class2 = j; break; } } Image im = LoadArgs.load_image_color(paths[i], 0, 0); Image resized = LoadArgs.resize_min(im, net.W); Image crop = LoadArgs.crop_image(resized, (resized.W - net.W) / 2, (resized.H - net.H) / 2, net.W, net.H); float[] pred = Network.network_predict(net, crop.Data); if (net.Hierarchy != null) { net.Hierarchy.Hierarchy_predictions(pred, 0, net.Outputs, false); } Utils.top_k(pred, classes, topk, indexes); if (indexes[0] == class2) { avgAcc += 1; } for (j = 0; j < topk; ++j) { if (indexes[j] == class2) { avgTopk += 1; } } Console.Write($"%d: top 1: %f, top %d: %f\n", i, avgAcc / (i + 1), topk, avgTopk / (i + 1)); } }
private static void test_tag(string cfgfile, string weightfile, string filename) { 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); int i = 0; string[] names = Data.Data.get_labels("Data.Data/tags.txt"); var sw = new Stopwatch(); int[] indexes = new int[10]; string input = ""; int size = net.W; 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 im = LoadArgs.load_image_color(input, 0, 0); Image r = LoadArgs.resize_min(im, size); Network.resize_network(net, r.W, r.H); Console.Write($"%d %d\n", r.W, r.H); float[] x = r.Data; sw.Reset(); sw.Start(); float[] predictions = Network.network_predict(net, x); Network.top_predictions(net, 10, indexes); sw.Stop(); Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds); for (i = 0; i < 10; ++i) { int index = indexes[i]; Console.Write($"%.1f%%: %s\n", predictions[index] * 100, names[index]); } if (!string.IsNullOrEmpty(filename)) { break; } } }