From cdd1cb0e8c4fda3671714bb5ad6ba1825cff16d1 Mon Sep 17 00:00:00 2001
From: Puneet Kohli <punkohl@gmail.com>
Date: Sun, 06 May 2018 21:45:26 +0000
Subject: [PATCH] Change matplotlib backend to 'agg' when 'show_plot' is false. This allows the script to be run from command line without any errors (for ex, on a remote machine)
---
src/nightmare.c | 90 ++++++++++++++++++++++++---------------------
1 files changed, 48 insertions(+), 42 deletions(-)
diff --git a/src/nightmare.c b/src/nightmare.c
index bc2060f..ec7166c 100644
--- a/src/nightmare.c
+++ b/src/nightmare.c
@@ -8,12 +8,14 @@
#include "opencv2/highgui/highgui_c.h"
#endif
+// ./darknet nightmare cfg/extractor.recon.cfg ~/trained/yolo-coco.conv frame6.png -reconstruct -iters 500 -i 3 -lambda .1 -rate .01 -smooth 2
+
float abs_mean(float *x, int n)
{
int i;
float sum = 0;
for (i = 0; i < n; ++i){
- sum += abs(x[i]);
+ sum += fabs(x[i]);
}
return sum/n;
}
@@ -31,8 +33,8 @@
void optimize_picture(network *net, image orig, int max_layer, float scale, float rate, float thresh, int norm)
{
- scale_image(orig, 2);
- translate_image(orig, -1);
+ //scale_image(orig, 2);
+ //translate_image(orig, -1);
net->n = max_layer + 1;
int dx = rand()%16 - 8;
@@ -98,8 +100,8 @@
translate_image(orig, mean);
*/
- translate_image(orig, 1);
- scale_image(orig, .5);
+ //translate_image(orig, 1);
+ //scale_image(orig, .5);
//normalize_image(orig);
constrain_image(orig);
@@ -133,50 +135,47 @@
}
}
-void reconstruct_picture(network net, float *features, image recon, image update, float rate, float momentum, float lambda, int smooth_size)
+void reconstruct_picture(network net, float *features, image recon, image update, float rate, float momentum, float lambda, int smooth_size, int iters)
{
- scale_image(recon, 2);
- translate_image(recon, -1);
+ int iter = 0;
+ for (iter = 0; iter < iters; ++iter) {
+ image delta = make_image(recon.w, recon.h, recon.c);
- image delta = make_image(recon.w, recon.h, recon.c);
-
- network_state state = {0};
+ network_state state = {0};
#ifdef GPU
- state.input = cuda_make_array(recon.data, recon.w*recon.h*recon.c);
- state.delta = cuda_make_array(delta.data, delta.w*delta.h*delta.c);
- state.truth = cuda_make_array(features, get_network_output_size(net));
+ state.input = cuda_make_array(recon.data, recon.w*recon.h*recon.c);
+ state.delta = cuda_make_array(delta.data, delta.w*delta.h*delta.c);
+ state.truth = cuda_make_array(features, get_network_output_size(net));
- forward_network_gpu(net, state);
- backward_network_gpu(net, state);
+ forward_network_gpu(net, state);
+ backward_network_gpu(net, state);
- cuda_pull_array(state.delta, delta.data, delta.w*delta.h*delta.c);
+ cuda_pull_array(state.delta, delta.data, delta.w*delta.h*delta.c);
- cuda_free(state.input);
- cuda_free(state.delta);
- cuda_free(state.truth);
+ cuda_free(state.input);
+ cuda_free(state.delta);
+ cuda_free(state.truth);
#else
- state.input = recon.data;
- state.delta = delta.data;
- state.truth = features;
+ state.input = recon.data;
+ state.delta = delta.data;
+ state.truth = features;
- forward_network(net, state);
- backward_network(net, state);
+ forward_network(net, state);
+ backward_network(net, state);
#endif
- axpy_cpu(recon.w*recon.h*recon.c, 1, delta.data, 1, update.data, 1);
- smooth(recon, update, lambda, smooth_size);
+ axpy_cpu(recon.w*recon.h*recon.c, 1, delta.data, 1, update.data, 1);
+ smooth(recon, update, lambda, smooth_size);
- axpy_cpu(recon.w*recon.h*recon.c, rate, update.data, 1, recon.data, 1);
- scal_cpu(recon.w*recon.h*recon.c, momentum, update.data, 1);
+ axpy_cpu(recon.w*recon.h*recon.c, rate, update.data, 1, recon.data, 1);
+ scal_cpu(recon.w*recon.h*recon.c, momentum, update.data, 1);
- translate_image(recon, 1);
- scale_image(recon, .5);
+ //float mag = mag_array(recon.data, recon.w*recon.h*recon.c);
+ //scal_cpu(recon.w*recon.h*recon.c, 600/mag, recon.data, 1);
- float mag = mag_array(recon.data, recon.w*recon.h*recon.c);
- scal_cpu(recon.w*recon.h*recon.c, 600/mag, recon.data, 1);
-
- constrain_image(recon);
- free_image(delta);
+ constrain_image(recon);
+ free_image(delta);
+ }
}
@@ -226,7 +225,7 @@
im = resized;
}
- float *features;
+ float *features = 0;
image update;
if (reconstruct){
resize_network(&net, im.w, im.h);
@@ -241,13 +240,19 @@
printf("%d features\n", out_im.w*out_im.h*out_im.c);
- im = resize_image(im, im.w*2, im.h);
- f_im = resize_image(f_im, f_im.w*2, f_im.h);
+ im = resize_image(im, im.w, im.h);
+ f_im = resize_image(f_im, f_im.w, f_im.h);
features = f_im.data;
+ int i;
+ for(i = 0; i < 14*14*512; ++i){
+ features[i] += rand_uniform(-.19, .19);
+ }
+
free_image(im);
im = make_random_image(im.w, im.h, im.c);
update = make_image(im.w, im.h, im.c);
+
}
int e;
@@ -259,11 +264,12 @@
fprintf(stderr, "%d, ", n);
fflush(stderr);
if(reconstruct){
- reconstruct_picture(net, features, im, update, rate, momentum, lambda, smooth_size);
+ reconstruct_picture(net, features, im, update, rate, momentum, lambda, smooth_size, 1);
+ //if ((n+1)%30 == 0) rate *= .5;
show_image(im, "reconstruction");
- #ifdef OPENCV
+#ifdef OPENCV
cvWaitKey(10);
- #endif
+#endif
}else{
int layer = max_layer + rand()%range - range/2;
int octave = rand()%octaves;
--
Gitblit v1.10.0