private static void test_writing(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); var sw = new Stopwatch(); 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 im = LoadArgs.load_image_color(input, 0, 0); Network.resize_network(net, im.W, im.H); Console.Write($"%d %d %d\n", im.H, im.W, im.C); float[] x = im.Data; sw.Reset(); sw.Start(); Network.network_predict(net, x); sw.Stop(); Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds); Image pred = Network.get_network_image(net); Image upsampled = LoadArgs.resize_image(pred, im.W, im.H); Image thresh = LoadArgs.threshold_image(upsampled, .5f); pred = thresh; LoadArgs.show_image(pred, "prediction"); LoadArgs.show_image(im, "orig"); CvInvoke.WaitKey(); CvInvoke.DestroyAllWindows(); if (!string.IsNullOrEmpty(filename)) { break; } } }
private static void demo_art(string cfgfile, string weightfile, int camIndex) { 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); using (VideoCapture cap = new VideoCapture(camIndex)) { string window = "ArtJudgementBot9000!!!"; if (cap != null) { Utils.Error("Couldn't connect to webcam.\n"); } int i; int[] idx = { 37, 401, 434 }; int n = idx.Length; while (true) { Image ini = LoadArgs.get_image_from_stream(cap); Image inS = LoadArgs.resize_image(ini, net.W, net.H); LoadArgs.show_image(ini, window); float[] p = Network.network_predict(net, inS.Data); Console.Write($"\033[2J"); Console.Write($"\033[1;1H"); float score = 0; for (i = 0; i < n; ++i) { float s = p[idx[i]]; if (s > score) { score = s; } } Console.Write($"I APPRECIATE THIS ARTWORK: %10.7f%%\n", score * 100); Console.Write($"["); int upper = 30; for (i = 0; i < upper; ++i) { Console.Write($"%c", ((i + .5) < score * upper) ? 219 : ' '); } Console.Write($"]\n"); CvInvoke.WaitKey(1); } } }
private static void fetch_in_thread() { inputImage = LoadArgs.get_image_from_stream(vidCap); if (inputImage.Data.Length == 0) { Utils.Error("Stream closed."); } inS = LoadArgs.resize_image(inputImage, net.W, net.H); }
private static FloatPair get_rnn_vid_data(Network net, string[] files, int n, int batch, int steps) { int b; Image outIm = Network.get_network_image(net); int outputSize = outIm.W * outIm.H * outIm.C; Console.Write($"%d %d %d\n", outIm.W, outIm.H, outIm.C); float[] feats = new float[net.Batch * batch * outputSize]; for (b = 0; b < batch; ++b) { int inputSize = net.W * net.H * net.C; float[] input = new float[inputSize * net.Batch]; string filename = files[Utils.Rand.Next() % n]; using (VideoCapture cap = new VideoCapture(filename)) { int frames = (int)cap.GetCaptureProperty(CapProp.FrameCount); int index = Utils.Rand.Next() % (frames - steps - 2); if (frames < (steps + 4)) { --b; continue; } Console.Write($"frames: %d, index: %d\n", frames, index); cap.SetCaptureProperty(CapProp.PosFrames, index); int i; for (i = 0; i < net.Batch; ++i) { using (Mat src = cap.QueryFrame()) { Image im = new Image(src); LoadArgs.rgbgr_image(im); Image re = LoadArgs.resize_image(im, net.W, net.H); Array.Copy(re.Data, 0, input, i * inputSize, inputSize); } } float[] output = Network.network_predict(net, input); for (i = 0; i < net.Batch; ++i) { Array.Copy(output, i * outputSize, feats, (b + i * batch) * outputSize, outputSize); } } } FloatPair p = new FloatPair(); p.X = feats; p.Y = new float[feats.Length - outputSize * batch]; Array.Copy(feats, outputSize * batch, p.Y, 0, p.Y.Length); return(p); }
private static void optimize_picture(Network net, Image orig, int maxLayer, float scale, float rate, float thresh, bool norm) { net.N = maxLayer + 1; int dx = Utils.Rand.Next() % 16 - 8; int dy = Utils.Rand.Next() % 16 - 8; bool flip = Utils.Rand.Next() % 2 != 0; Image crop = LoadArgs.crop_image(orig, dx, dy, orig.W, orig.H); Image im = LoadArgs.resize_image(crop, (int)(orig.W * scale), (int)(orig.H * scale)); if (flip) { LoadArgs.flip_image(im); } Network.resize_network(net, im.W, im.H); Layer last = net.Layers[net.N - 1]; Image delta = new Image(im.W, im.H, im.C); NetworkState state = new NetworkState(); state.Input = (float[])im.Data.Clone(); state.Delta = (float[])im.Data.Clone(); Network.forward_network_gpu(net, state); Blas.copy_ongpu(last.Outputs, last.OutputGpu, last.DeltaGpu); Array.Copy(last.DeltaGpu, last.Delta, last.Outputs); calculate_loss(last.Delta, last.Delta, last.Outputs, thresh); Array.Copy(last.Delta, last.DeltaGpu, last.Outputs); Network.backward_network_gpu(net, state); Array.Copy(state.Delta, delta.Data, im.W * im.H * im.C); if (flip) { LoadArgs.flip_image(delta); } Image resized = LoadArgs.resize_image(delta, orig.W, orig.H); Image outi = LoadArgs.crop_image(resized, -dx, -dy, orig.W, orig.H); if (norm) { Utils.normalize_array(outi.Data, outi.W * outi.H * outi.C); } Blas.Axpy_cpu(orig.W * orig.H * orig.C, rate, outi.Data, orig.Data); LoadArgs.constrain_image(orig); }
private static void test_coco(string cfgfile, string weightfile, string filename, float thresh) { Image[][] alphabet = LoadArgs.load_alphabet(); Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Layer l = net.Layers[net.N - 1]; Network.set_batch_network(net, 1); Utils.Rand = new Random(2222222); float nms = .4f; var sw = new Stopwatch(); int j; Box[] boxes = new Box[l.Side * l.Side * l.N]; float[][] probs = new float[l.Side * l.Side * l.N][]; for (j = 0; j < l.Side * l.Side * l.N; ++j) probs[j] = new float[l.Classes]; while (true) { string input; 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 sized = LoadArgs.resize_image(im, net.W, net.H); float[] x = sized.Data; sw.Reset(); sw.Start(); Network.network_predict(net, x); sw.Stop(); Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds); l.get_detection_boxes( 1, 1, thresh, probs, boxes, false); if (nms != 0) Box.do_nms_sort(boxes, probs, l.Side * l.Side * l.N, l.Classes, nms); LoadArgs.draw_detections(im, l.Side * l.Side * l.N, thresh, boxes, probs, CocoClasses, alphabet, 80); LoadArgs.save_image(im, "prediction"); LoadArgs.show_image(im, "predictions"); CvInvoke.WaitKey(); CvInvoke.DestroyAllWindows(); if (!string.IsNullOrEmpty(filename)) break; } }
private static void generate_vid_rnn(string cfgfile, string weightfile) { Network extractor = Parser.parse_network_cfg("cfg/extractor.recon.cfg"); Parser.load_weights(extractor, "/home/pjreddie/trained/yolo-coco.conv"); Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(extractor, 1); Network.set_batch_network(net, 1); int i; VideoCapture cap = new VideoCapture("/extra/vid/ILSVRC2015/Data.Data/VID/snippets/val/ILSVRC2015_val_00007030.mp4"); float[] feat; float[] next; next = null; Image last = null; for (i = 0; i < 25; ++i) { Image im = LoadArgs.get_image_from_stream(cap); Image re = LoadArgs.resize_image(im, extractor.W, extractor.H); feat = Network.network_predict(extractor, re.Data); if (i > 0) { Console.Write($"%f %f\n", Utils.mean_array(feat, 14 * 14 * 512), Utils.variance_array(feat, 14 * 14 * 512)); Console.Write($"%f %f\n", Utils.mean_array(next, 14 * 14 * 512), Utils.variance_array(next, 14 * 14 * 512)); Console.Write($"%f\n", Utils.mse_array(feat, 14 * 14 * 512)); Blas.Axpy_cpu(14 * 14 * 512, -1, feat, next); Console.Write($"%f\n", Utils.mse_array(next, 14 * 14 * 512)); } next = Network.network_predict(net, feat); if (i == 24) { last = new Image(re); } } for (i = 0; i < 30; ++i) { next = Network.network_predict(net, next); Image newi = save_reconstruction(extractor, last, next, "new", i); last = newi; } }
private static void gun_classifier(string datacfg, string cfgfile, string weightfile, int camIndex, string filename) { int[] badCats = { 218, 539, 540, 1213, 1501, 1742, 1911, 2415, 4348, 19223, 368, 369, 370, 1133, 1200, 1306, 2122, 2301, 2537, 2823, 3179, 3596, 3639, 4489, 5107, 5140, 5289, 6240, 6631, 6762, 7048, 7171, 7969, 7984, 7989, 8824, 8927, 9915, 10270, 10448, 13401, 15205, 18358, 18894, 18895, 19249, 19697 }; Console.Write($"Classifier Demo\n"); Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(net, 1); var options = OptionList.read_data_cfg(datacfg); Utils.Rand = new Random(2222222); using (VideoCapture cap = !string.IsNullOrEmpty(filename) ? new VideoCapture(filename) : new VideoCapture(camIndex)) { int top = OptionList.option_find_int(options, "top", 1); string nameList = OptionList.option_find_str(options, "names", ""); string[] names = Data.Data.get_labels(nameList); int[] indexes = new int[top]; if (cap.IsOpened) { Utils.Error("Couldn't connect to webcam.\n"); } float fps = 0; int i; while (true) { var sw = new Stopwatch(); sw.Start(); Image ini = LoadArgs.get_image_from_stream(cap); Image inS = LoadArgs.resize_image(ini, net.W, net.H); LoadArgs.show_image(ini, "Threat Detection"); float[] predictions = Network.network_predict(net, inS.Data); Network.top_predictions(net, top, indexes); Console.Write($"\033[2J"); Console.Write($"\033[1;1H"); bool threat = false; for (i = 0; i < badCats.Length; ++i) { int index = badCats[i]; if (predictions[index] > .01) { Console.Write($"Threat Detected!\n"); threat = true; break; } } if (threat) { Console.Write($"Scanning...\n"); } for (i = 0; i < badCats.Length; ++i) { int index = badCats[i]; if (predictions[index] > .01) { Console.Write($"%s\n", names[index]); } } CvInvoke.WaitKey(10); sw.Stop(); float curr = 1000.0f / sw.ElapsedMilliseconds; fps = .9f * fps + .1f * curr; } } }
private static void threat_classifier(string datacfg, string cfgfile, string weightfile, int camIndex, string filename) { float threat = 0; float roll = .2f; Console.Write($"Classifier Demo\n"); Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(net, 1); var options = OptionList.read_data_cfg(datacfg); Utils.Rand = new Random(2222222); using (VideoCapture cap = !string.IsNullOrEmpty(filename) ? new VideoCapture(filename) : new VideoCapture(camIndex)) { int top = OptionList.option_find_int(options, "top", 1); string nameList = OptionList.option_find_str(options, "names", ""); string[] names = Data.Data.get_labels(nameList); int[] indexes = new int[top]; if (!cap.IsOpened) { Utils.Error("Couldn't connect to webcam.\n"); } float fps = 0; int i; int count = 0; while (true) { ++count; var sw = new Stopwatch(); sw.Start(); Image ini = LoadArgs.get_image_from_stream(cap); if (ini.Data.Length == 0) { break; } Image inS = LoadArgs.resize_image(ini, net.W, net.H); Image outo = ini; int x1 = outo.W / 20; int y1 = outo.H / 20; int x2 = 2 * x1; int y2 = outo.H - outo.H / 20; int border = (int)(.01f * outo.H); int h = y2 - y1 - 2 * border; int w = x2 - x1 - 2 * border; float[] predictions = Network.network_predict(net, inS.Data); float currThreat = 0; currThreat = predictions[0] * 0f + predictions[1] * .6f + predictions[2]; threat = roll * currThreat + (1 - roll) * threat; LoadArgs.draw_box_width(outo, x2 + border, (int)(y1 + .02 * h), (int)(x2 + .5 * w), (int)(y1 + .02 * h + border), border, 0, 0, 0); if (threat > .97) { LoadArgs.draw_box_width(outo, (int)(x2 + .5 * w + border), (int)(y1 + .02 * h - 2 * border), (int)(x2 + .5 * w + 6 * border), (int)(y1 + .02 * h + 3 * border), 3 * border, 1, 0, 0); } LoadArgs.draw_box_width(outo, (int)(x2 + .5 * w + border), (int)(y1 + .02 * h - 2 * border), (int)(x2 + .5 * w + 6 * border), (int)(y1 + .02 * h + 3 * border), (int)(.5 * border), 0, 0, 0); LoadArgs.draw_box_width(outo, x2 + border, (int)(y1 + .42 * h), (int)(x2 + .5 * w), (int)(y1 + .42 * h + border), border, 0, 0, 0); if (threat > .57) { LoadArgs.draw_box_width(outo, (int)(x2 + .5 * w + border), (int)(y1 + .42 * h - 2 * border), (int)(x2 + .5 * w + 6 * border), (int)(y1 + .42 * h + 3 * border), 3 * border, 1, 1, 0); } LoadArgs.draw_box_width(outo, (int)(x2 + .5 * w + border), (int)(y1 + .42 * h - 2 * border), (int)(x2 + .5 * w + 6 * border), (int)(y1 + .42 * h + 3 * border), (int)(.5 * border), 0, 0, 0); LoadArgs.draw_box_width(outo, x1, y1, x2, y2, border, 0, 0, 0); for (i = 0; i < threat * h; ++i) { float ratio = (float)i / h; float r = (ratio < .5f) ? (2 * (ratio)) : 1; float g = (ratio < .5f) ? 1 : 1 - 2 * (ratio - .5f); LoadArgs.draw_box_width(outo, x1 + border, y2 - border - i, x2 - border, y2 - border - i, 1, r, g, 0); } Network.top_predictions(net, top, indexes); string buff = $"/home/pjreddie/tmp/threat_{count:06}"; Console.Write($"\033[2J"); Console.Write($"\033[1;1H"); Console.Write($"\nFPS:%.0f\n", fps); for (i = 0; i < top; ++i) { int index = indexes[i]; Console.Write($"%.1f%%: %s\n", predictions[index] * 100, names[index]); } LoadArgs.show_image(outo, "Threat"); CvInvoke.WaitKey(10); sw.Stop(); float curr = 1000.0f / sw.ElapsedMilliseconds; fps = .9f * fps + .1f * curr; } } }
private static void demo_classifier(string datacfg, string cfgfile, string weightfile, int camIndex, string filename) { Console.Write($"Classifier Demo\n"); Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(net, 1); var options = OptionList.read_data_cfg(datacfg); Utils.Rand = new Random(2222222); using (VideoCapture cap = !string.IsNullOrEmpty(filename) ? new VideoCapture(filename) : new VideoCapture(camIndex)) { int top = OptionList.option_find_int(options, "top", 1); string nameList = OptionList.option_find_str(options, "names", ""); string[] names = Data.Data.get_labels(nameList); int[] indexes = new int[top]; if (cap != null) { Utils.Error("Couldn't connect to webcam.\n"); } float fps = 0; int i; while (true) { var sw = new Stopwatch(); sw.Start(); Image ini = LoadArgs.get_image_from_stream(cap); Image inS = LoadArgs.resize_image(ini, net.W, net.H); LoadArgs.show_image(ini, "Classifier"); float[] predictions = Network.network_predict(net, inS.Data); if (net.Hierarchy != null) { net.Hierarchy.Hierarchy_predictions(predictions, 0, net.Outputs, true); } Network.top_predictions(net, top, indexes); Console.Write($"\033[2J"); Console.Write($"\033[1;1H"); Console.Write($"\nFPS:%.0f\n", fps); for (i = 0; i < top; ++i) { int index = indexes[i]; Console.Write($"%.1f%%: %s\n", predictions[index] * 100, names[index]); } CvInvoke.WaitKey(10); sw.Stop(); float curr = 1000.0f / sw.ElapsedMilliseconds; fps = .9f * fps + .1f * curr; } } }
public static void run_nightmare(List <string> args) { if (args.Count < 4) { Console.Error.Write($"usage: %s %s [cfg] [weights] [Image] [Layer] [options! (optional)]\n", args[0], args[1]); return; } string cfg = args[2]; string weights = args[3]; string input = args[4]; int maxLayer = int.Parse(args[5]); int range = Utils.find_int_arg(args, "-range", 1); bool norm = Utils.find_int_arg(args, "-norm", 1) != 0; int rounds = Utils.find_int_arg(args, "-rounds", 1); int iters = Utils.find_int_arg(args, "-iters", 10); int octaves = Utils.find_int_arg(args, "-octaves", 4); float zoom = Utils.find_int_arg(args, "-zoom", 1); float rate = Utils.find_int_arg(args, "-rate", .04f); float thresh = Utils.find_int_arg(args, "-thresh", 1); float rotate = Utils.find_int_arg(args, "-rotate", 0); float momentum = Utils.find_int_arg(args, "-momentum", .9f); float lambda = Utils.find_int_arg(args, "-lambda", .01f); string prefix = Utils.find_int_arg(args, "-prefix", ""); bool reconstruct = Utils.find_arg(args, "-reconstruct"); int smoothSize = Utils.find_int_arg(args, "-smooth", 1); Network net = Parser.parse_network_cfg(cfg); Parser.load_weights(net, weights); string cfgbase = Utils.Basecfg(cfg); string imbase = Utils.Basecfg(input); Network.set_batch_network(net, 1); Image im = LoadArgs.load_image_color(input, 0, 0); float[] features = new float[0]; Image update = null; if (reconstruct) { Network.resize_network(net, im.W, im.H); int zz = 0; Network.network_predict(net, im.Data); Image outIm = Network.get_network_image(net); Image crop = LoadArgs.crop_image(outIm, zz, zz, outIm.W - 2 * zz, outIm.H - 2 * zz); Image fIm = LoadArgs.resize_image(crop, outIm.W, outIm.H); Console.Write($"%d features\n", outIm.W * outIm.H * outIm.C); im = LoadArgs.resize_image(im, im.W, im.H); fIm = LoadArgs.resize_image(fIm, fIm.W, fIm.H); features = fIm.Data; int i; for (i = 0; i < 14 * 14 * 512; ++i) { features[i] += Utils.rand_uniform(-.19f, .19f); } im = LoadArgs.make_random_image(im.W, im.H, im.C); update = new Image(im.W, im.H, im.C); } int e; int n; for (e = 0; e < rounds; ++e) { Console.Error.Write($"Iteration: "); for (n = 0; n < iters; ++n) { Console.Error.Write($"%d, ", n); if (reconstruct) { reconstruct_picture(net, features, im, update, rate, momentum, lambda, smoothSize, 1); //if ((n+1)%30 == 0) rate *= .5; LoadArgs.show_image(im, "reconstruction"); CvInvoke.WaitKey(10); } else { int layer = maxLayer + Utils.Rand.Next() % range - range / 2; int octave = Utils.Rand.Next() % octaves; optimize_picture(net, im, layer, 1 / (float)Math.Pow(1.33333333, octave), rate, thresh, norm); } } Console.Error.Write($"done\n"); string buff; if (!string.IsNullOrEmpty(prefix)) { buff = $"{prefix}_{imbase}_{cfgbase}_{maxLayer}_{e:06}%s/%s_%s_%d_%06d"; } else { buff = $"{imbase}_{cfgbase}_{maxLayer}_{e:06}"; } Console.Write($"%d %s\n", e, buff); LoadArgs.save_image(im, buff); //LoadArgs.show_image(im, buff); //CvInvoke.WaitKey(); if (rotate != 0) { Image rot = LoadArgs.rotate_image(im, rotate); im = rot; } Image crop = LoadArgs.crop_image(im, (int)(im.W * (1f - zoom) / 2f), (int)(im.H * (1f - zoom) / 2f), (int)(im.W * zoom), (int)(im.H * zoom)); Image resized = LoadArgs.resize_image(crop, im.W, im.H); im = resized; } }
private static void validate_yolo_recall(string cfgfile, string weightfile) { Network net = Parser.parse_network_cfg(cfgfile); if (string.IsNullOrEmpty(weightfile)) { Parser.load_weights(net, weightfile); } Network.set_batch_network(net, 1); Console.Error.Write($"Learning Rate: %g, Momentum: %g, Decay: %g\n", net.LearningRate, net.Momentum, net.Decay); string[] paths = Data.Data.GetPaths("Data.Data/voc.2007.test"); Layer l = net.Layers[net.N - 1]; int classes = l.Classes; int side = l.Side; int j, k; Box[] boxes = new Box[side * side * l.N]; float[][] probs = new float[side * side * l.N][]; for (j = 0; j < side * side * l.N; ++j) { probs[j] = new float[classes]; } int m = paths.Length; int i = 0; float thresh = .001f; float iouThresh = .5f; int total = 0; int correct = 0; int proposals = 0; float avgIou = 0; for (i = 0; i < m; ++i) { string path = paths[i]; Image orig = LoadArgs.load_image_color(path, 0, 0); Image sized = LoadArgs.resize_image(orig, net.W, net.H); string id = Utils.Basecfg(path); Network.network_predict(net, sized.Data); l.get_detection_boxes(orig.W, orig.H, thresh, probs, boxes, true); string labelpath; Utils.find_replace(path, "images", "labels", out labelpath); Utils.find_replace(labelpath, "JPEGImages", "labels", out labelpath); Utils.find_replace(labelpath, ".jpg", ".txt", out labelpath); Utils.find_replace(labelpath, ".JPEG", ".txt", out labelpath); int numLabels = 0; BoxLabel[] truth = Data.Data.read_boxes(labelpath, ref numLabels); for (k = 0; k < side * side * l.N; ++k) { if (probs[k][0] > thresh) { ++proposals; } } for (j = 0; j < numLabels; ++j) { ++total; Box t = new Box(truth[j].X, truth[j].Y, truth[j].W, truth[j].H); float bestIou = 0; for (k = 0; k < side * side * l.N; ++k) { float iou = Box.box_iou(boxes[k], t); if (probs[k][0] > thresh && iou > bestIou) { bestIou = iou; } } avgIou += bestIou; if (bestIou > iouThresh) { ++correct; } } Console.Error.Write($"%5d %5d %5d\tRPs/Img: %.2f\tIOU: %.2f%%\tRecall:%.2f%%\n", i, correct, total, (float)proposals / (i + 1), avgIou * 100 / total, 100f * correct / total); } }
public static void test_detector(string datacfg, string cfgfile, string weightfile, string filename, float thresh) { var options = OptionList.read_data_cfg(datacfg); string nameList = OptionList.option_find_str(options, "names", "Data.Data/names.list"); string[] names = Data.Data.get_labels(nameList); Image[][] alphabet = LoadArgs.load_alphabet(); 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 sw = new Stopwatch(); string input = ""; int j; float nms = .4f; 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 sized = LoadArgs.resize_image(im, net.W, net.H); Layer l = net.Layers[net.N - 1]; Box[] boxes = new Box[l.W * l.H * l.N]; float[][] probs = new float[l.W * l.H * l.N][]; for (j = 0; j < l.W * l.H * l.N; ++j) { probs[j] = new float[l.Classes]; } float[] x = sized.Data; sw.Start(); Network.network_predict(net, x); sw.Stop(); Console.Write($"%s: Predicted ini %f seconds.\n", input, sw.Elapsed.Seconds); Layer.get_region_boxes(l, 1, 1, thresh, probs, boxes, false, new int[0]); if (nms != 0) { Box.do_nms_sort(boxes, probs, l.W * l.H * l.N, l.Classes, nms); } LoadArgs.draw_detections(im, l.W * l.H * l.N, thresh, boxes, probs, names, alphabet, l.Classes); LoadArgs.save_image(im, "predictions"); LoadArgs.show_image(im, "predictions"); CvInvoke.WaitKey(); CvInvoke.DestroyAllWindows(); if (!string.IsNullOrEmpty(filename)) { break; } } }