Joseph Redmon
2016-02-29 16d06ec0db241261d0d030722e440206ed8aad77
src/nightmare.c
@@ -8,6 +8,8 @@
#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;
@@ -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,11 +135,10 @@
    }
}
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);
    network_state state = {0};
@@ -169,15 +170,13 @@
    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);
}
}
void run_nightmare(int argc, char **argv)
@@ -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,7 +264,8 @@
            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
                cvWaitKey(10);