private static void extract_voxel(string lfile, string rfile, string prefix) { int w = 1920; int h = 1080; int shift = 0; int count = 0; VideoCapture lcap = new VideoCapture(lfile); VideoCapture rcap = new VideoCapture(rfile); while (true) { Image l = LoadArgs.get_image_from_stream(lcap); Image r = LoadArgs.get_image_from_stream(rcap); if (l.W == 0 || r.W == 0) { break; } if (count % 100 == 0) { shift = LoadArgs.best_3d_shift_r(l, r, -l.H / 100, l.H / 100); Console.Write($"{shift}\n"); } Image ls = LoadArgs.crop_image(l, (l.W - w) / 2, (l.H - h) / 2, w, h); Image rs = LoadArgs.crop_image(r, 105 + (r.W - w) / 2, (r.H - h) / 2 + shift, w, h); string buff = $"{prefix}_{count:05}_l"; LoadArgs.save_image(ls, buff); buff = $"{prefix}_{count:05}_r"; LoadArgs.save_image(rs, buff); ++count; } }
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]); } }
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 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_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 validate_classifier_10(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); 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; } } int w = net.W; int h = net.H; int shift = 32; Image im = LoadArgs.load_image_color(paths[i], w + shift, h + shift); Image[] images = new Image[10]; images[0] = LoadArgs.crop_image(im, -shift, -shift, w, h); images[1] = LoadArgs.crop_image(im, shift, -shift, w, h); images[2] = LoadArgs.crop_image(im, 0, 0, w, h); images[3] = LoadArgs.crop_image(im, -shift, shift, w, h); images[4] = LoadArgs.crop_image(im, shift, shift, w, h); LoadArgs.flip_image(im); images[5] = LoadArgs.crop_image(im, -shift, -shift, w, h); images[6] = LoadArgs.crop_image(im, shift, -shift, w, h); images[7] = LoadArgs.crop_image(im, 0, 0, w, h); images[8] = LoadArgs.crop_image(im, -shift, shift, w, h); images[9] = LoadArgs.crop_image(im, shift, shift, w, h); float[] pred = new float[classes]; for (j = 0; j < 10; ++j) { float[] p = Network.network_predict(net, images[j].Data); if (net.Hierarchy != null) { net.Hierarchy.Hierarchy_predictions(p, 0, net.Outputs, true); } 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)); } }
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; } }