From fdcc096694791f92d2cff0e4fd74fbabfca12936 Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Fri, 24 Jul 2015 22:14:23 +0000
Subject: [PATCH] Fixed some problems with visualizing networks
---
src/network.c | 23 +++++++----
src/image.c | 14 +++++-
src/imagenet.c | 2
src/convolutional_layer.c | 1
src/data.c | 2 -
src/captcha.c | 50 ++++++++++++++++++++++---
6 files changed, 72 insertions(+), 20 deletions(-)
diff --git a/src/captcha.c b/src/captcha.c
index ccefa45..f47b35e 100644
--- a/src/captcha.c
+++ b/src/captcha.c
@@ -41,13 +41,13 @@
//net.seen=0;
int imgs = 1024;
int i = net.seen/imgs;
- int solved = 1;
+ int solved = 0;
list *plist;
char **labels = get_labels("/data/captcha/reimgs.labels2.list");
if (solved){
plist = get_paths("/data/captcha/reimgs.solved.list");
}else{
- plist = get_paths("/data/captcha/reimgs.train.list");
+ plist = get_paths("/data/captcha/reimgs.raw.list");
}
char **paths = (char **)list_to_array(plist);
printf("%d\n", plist->size);
@@ -96,7 +96,6 @@
srand(2222222);
int i = 0;
char **names = get_labels("/data/captcha/reimgs.labels2.list");
- clock_t time;
char input[256];
int indexes[26];
while(1){
@@ -110,7 +109,6 @@
}
image im = load_image_color(input, net.w, net.h);
float *X = im.data;
- time=clock();
float *predictions = network_predict(net, X);
top_predictions(net, 26, indexes);
//printf("%s: Predicted in %f seconds.\n", input, sec(clock()-time));
@@ -126,6 +124,47 @@
}
}
+void valid_captcha(char *cfgfile, char *weightfile, char *filename)
+{
+ char **labels = get_labels("/data/captcha/reimgs.labels.list");
+ network net = parse_network_cfg(cfgfile);
+ if(weightfile){
+ load_weights(&net, weightfile);
+ }
+ list *plist = get_paths("/data/captcha/reimgs.fg.list");
+ char **paths = (char **)list_to_array(plist);
+ int N = plist->size;
+ int outputs = net.outputs;
+
+ set_batch_network(&net, 1);
+ srand(2222222);
+ int i, j;
+ for(i = 0; i < N; ++i){
+ if (i%100 == 0) fprintf(stderr, "%d\n", i);
+ image im = load_image_color(paths[i], net.w, net.h);
+ float *X = im.data;
+ float *predictions = network_predict(net, X);
+ //printf("%s: Predicted in %f seconds.\n", input, sec(clock()-time));
+ int truth = -1;
+ for(j = 0; j < 13; ++j){
+ if (strstr(paths[i], labels[j])) truth = j;
+ }
+ if (truth == -1){
+ fprintf(stderr, "bad: %s\n", paths[i]);
+ return;
+ }
+ printf("%d, ", truth);
+ for(j = 0; j < outputs; ++j){
+ if (j != 0) printf(", ");
+ printf("%f", predictions[j]);
+ }
+ printf("\n");
+ fflush(stdout);
+ free_image(im);
+ if (filename) break;
+ }
+}
+
void train_captcha(char *cfgfile, char *weightfile)
{
data_seed = time(0);
@@ -189,7 +228,6 @@
srand(2222222);
int i = 0;
char **names = get_labels("/data/captcha/reimgs.labels.list");
- clock_t time;
char input[256];
int indexes[13];
while(1){
@@ -203,7 +241,6 @@
}
image im = load_image_color(input, net.w, net.h);
float *X = im.data;
- time=clock();
float *predictions = network_predict(net, X);
top_predictions(net, 13, indexes);
//printf("%s: Predicted in %f seconds.\n", input, sec(clock()-time));
@@ -400,6 +437,7 @@
char *filename = (argc > 5) ? argv[5]: 0;
if(0==strcmp(argv[2], "train")) train_captcha2(cfg, weights);
else if(0==strcmp(argv[2], "test")) test_captcha2(cfg, weights, filename);
+ else if(0==strcmp(argv[2], "valid")) valid_captcha(cfg, weights, filename);
//if(0==strcmp(argv[2], "test")) test_captcha(cfg, weights);
//else if(0==strcmp(argv[2], "encode")) encode_captcha(cfg, weights);
//else if(0==strcmp(argv[2], "decode")) decode_captcha(cfg, weights);
diff --git a/src/convolutional_layer.c b/src/convolutional_layer.c
index c3a3718..378e23f 100644
--- a/src/convolutional_layer.c
+++ b/src/convolutional_layer.c
@@ -248,6 +248,7 @@
int i;
for(i = 0; i < l.n; ++i){
filters[i] = copy_image(get_convolutional_filter(l, i));
+ normalize_image(filters[i]);
}
return filters;
}
diff --git a/src/data.c b/src/data.c
index 5140ce6..6a41d13 100644
--- a/src/data.c
+++ b/src/data.c
@@ -197,8 +197,6 @@
h = constrain(0, 1, h);
if (w < .01 || h < .01) continue;
if(1){
- //w = sqrt(w);
- //h = sqrt(h);
w = pow(w, 1./2.);
h = pow(h, 1./2.);
}
diff --git a/src/image.c b/src/image.c
index ae8ca0a..5db93f1 100644
--- a/src/image.c
+++ b/src/image.c
@@ -188,7 +188,7 @@
int x,y,k;
image copy = copy_image(p);
constrain_image(copy);
- rgbgr_image(copy);
+ if(p.c == 3) rgbgr_image(copy);
//normalize_image(copy);
char buff[256];
@@ -849,8 +849,16 @@
void show_images(image *ims, int n, char *window)
{
image m = collapse_images_vert(ims, n);
- save_image(m, window);
- show_image(m, window);
+ int w = 448;
+ int h = ((float)m.h/m.w) * 448;
+ if(h > 896){
+ h = 896;
+ w = ((float)m.w/m.h) * 896;
+ }
+ image sized = resize_image(m, w, h);
+ save_image(sized, window);
+ show_image(sized, window);
+ free_image(sized);
free_image(m);
}
diff --git a/src/imagenet.c b/src/imagenet.c
index ad0e30c..96e74d0 100644
--- a/src/imagenet.c
+++ b/src/imagenet.c
@@ -47,7 +47,7 @@
avg_loss = avg_loss*.9 + loss*.1;
printf("%d: %f, %f avg, %lf seconds, %d images\n", i, loss, avg_loss, sec(clock()-time), net.seen);
free_data(train);
- if((i % 20000) == 0) net.learning_rate *= .1;
+ if((i % 30000) == 0) net.learning_rate *= .1;
if(i%1000==0){
char buff[256];
sprintf(buff, "/home/pjreddie/imagenet_backup/%s_%d.weights",base, i);
diff --git a/src/network.c b/src/network.c
index 5b52da9..fba4494 100644
--- a/src/network.c
+++ b/src/network.c
@@ -125,13 +125,20 @@
float get_network_cost(network net)
{
- if(net.layers[net.n-1].type == COST){
- return net.layers[net.n-1].output[0];
+ int i;
+ float sum = 0;
+ int count = 0;
+ for(i = 0; i < net.n; ++i){
+ if(net.layers[net.n-1].type == COST){
+ sum += net.layers[net.n-1].output[0];
+ ++count;
+ }
+ if(net.layers[net.n-1].type == DETECTION){
+ sum += net.layers[net.n-1].cost[0];
+ ++count;
+ }
}
- if(net.layers[net.n-1].type == DETECTION){
- return net.layers[net.n-1].cost[0];
- }
- return 0;
+ return sum/count;
}
int get_predicted_class_network(network net)
@@ -184,9 +191,9 @@
float train_network_datum(network net, float *x, float *y)
{
- #ifdef GPU
+#ifdef GPU
if(gpu_index >= 0) return train_network_datum_gpu(net, x, y);
- #endif
+#endif
network_state state;
state.input = x;
state.delta = 0;
--
Gitblit v1.10.0