Skip to content
Snippets Groups Projects
Commit e63b3a6f authored by Joseph Redmon's avatar Joseph Redmon
Browse files

syncing messed something up

parent c521f87c
No related branches found
No related tags found
No related merge requests found
...@@ -178,6 +178,13 @@ pad=1 ...@@ -178,6 +178,13 @@ pad=1
filters=1024 filters=1024
activation=ramp activation=ramp
[convolutional]
size=3
stride=1
pad=1
filters=1024
activation=ramp
[connected] [connected]
output=4096 output=4096
activation=ramp activation=ramp
......
...@@ -178,6 +178,13 @@ pad=1 ...@@ -178,6 +178,13 @@ pad=1
filters=1024 filters=1024
activation=ramp activation=ramp
[convolutional]
size=3
stride=1
pad=1
filters=1024
activation=ramp
[connected] [connected]
output=4096 output=4096
activation=ramp activation=ramp
...@@ -195,4 +202,3 @@ coords=4 ...@@ -195,4 +202,3 @@ coords=4
rescore=1 rescore=1
nuisance = 0 nuisance = 0
background=0 background=0
...@@ -527,11 +527,11 @@ pthread_t load_data_detection_thread(int n, char **paths, int m, int classes, in ...@@ -527,11 +527,11 @@ pthread_t load_data_detection_thread(int n, char **paths, int m, int classes, in
data load_data_writing(char **paths, int n, int m, int w, int h) data load_data_writing(char **paths, int n, int m, int w, int h)
{ {
if(m) paths = get_random_paths(paths, n, m); if(m) paths = get_random_paths(paths, n, m);
char **replace_paths = find_replace_paths(paths, n, ".png", "label.png"); char **replace_paths = find_replace_paths(paths, n, ".png", "-label.png");
data d; data d;
d.shallow = 0; d.shallow = 0;
d.X = load_image_paths(paths, n, w, h); d.X = load_image_paths(paths, n, w, h);
d.y = load_image_paths_gray(replace_paths, n, w/4, h/4); d.y = load_image_paths_gray(replace_paths, n, w/8, h/8);
if(m) free(paths); if(m) free(paths);
int i; int i;
for(i = 0; i < n; ++i) free(replace_paths[i]); for(i = 0; i < n; ++i) free(replace_paths[i]);
......
...@@ -21,7 +21,7 @@ void draw_detection(image im, float *box, int side, char *label) ...@@ -21,7 +21,7 @@ void draw_detection(image im, float *box, int side, char *label)
//printf("%d\n", j); //printf("%d\n", j);
//printf("Prob: %f\n", box[j]); //printf("Prob: %f\n", box[j]);
int class = max_index(box+j, classes); int class = max_index(box+j, classes);
if(box[j+class] > .4){ if(box[j+class] > .05){
//int z; //int z;
//for(z = 0; z < classes; ++z) printf("%f %s\n", box[j+z], class_names[z]); //for(z = 0; z < classes; ++z) printf("%f %s\n", box[j+z], class_names[z]);
printf("%f %s\n", box[j+class], class_names[class]); printf("%f %s\n", box[j+class], class_names[class]);
...@@ -32,8 +32,8 @@ void draw_detection(image im, float *box, int side, char *label) ...@@ -32,8 +32,8 @@ void draw_detection(image im, float *box, int side, char *label)
//float maxheight = distance_from_edge(r, side); //float maxheight = distance_from_edge(r, side);
//float maxwidth = distance_from_edge(c, side); //float maxwidth = distance_from_edge(c, side);
j += classes; j += classes;
float y = box[j+0]; float x = box[j+0];
float x = box[j+1]; float y = box[j+1];
x = (x+c)/side; x = (x+c)/side;
y = (y+r)/side; y = (y+r)/side;
float w = box[j+2]; //*maxwidth; float w = box[j+2]; //*maxwidth;
...@@ -257,10 +257,11 @@ void train_detection(char *cfgfile, char *weightfile) ...@@ -257,10 +257,11 @@ void train_detection(char *cfgfile, char *weightfile)
if (imgnet){ if (imgnet){
plist = get_paths("/home/pjreddie/data/imagenet/det.train.list"); plist = get_paths("/home/pjreddie/data/imagenet/det.train.list");
}else{ }else{
plist = get_paths("/home/pjreddie/data/voc/no_2012_val.txt"); //plist = get_paths("/home/pjreddie/data/voc/no_2012_val.txt");
//plist = get_paths("/home/pjreddie/data/voc/no_2007_test.txt"); //plist = get_paths("/home/pjreddie/data/voc/no_2007_test.txt");
//plist = get_paths("/home/pjreddie/data/voc/val_2012.txt");
//plist = get_paths("/home/pjreddie/data/coco/trainval.txt"); //plist = get_paths("/home/pjreddie/data/coco/trainval.txt");
//plist = get_paths("/home/pjreddie/data/voc/all2007-2012.txt"); plist = get_paths("/home/pjreddie/data/voc/all2007-2012.txt");
} }
paths = (char **)list_to_array(plist); paths = (char **)list_to_array(plist);
pthread_t load_thread = load_data_detection_thread(imgs, paths, plist->size, classes, net.w, net.h, side, side, background, &buffer); pthread_t load_thread = load_data_detection_thread(imgs, paths, plist->size, classes, net.w, net.h, side, side, background, &buffer);
...@@ -272,12 +273,13 @@ void train_detection(char *cfgfile, char *weightfile) ...@@ -272,12 +273,13 @@ void train_detection(char *cfgfile, char *weightfile)
train = buffer; train = buffer;
load_thread = load_data_detection_thread(imgs, paths, plist->size, classes, net.w, net.h, side, side, background, &buffer); load_thread = load_data_detection_thread(imgs, paths, plist->size, classes, net.w, net.h, side, side, background, &buffer);
/* /*
image im = float_to_image(net.w, net.h, 3, train.X.vals[114]); image im = float_to_image(net.w, net.h, 3, train.X.vals[114]);
image copy = copy_image(im); image copy = copy_image(im);
draw_detection(copy, train.y.vals[114], 7); draw_detection(copy, train.y.vals[114], 7, "truth");
cvWaitKey(0);
free_image(copy); free_image(copy);
*/ */
printf("Loaded: %lf seconds\n", sec(clock()-time)); printf("Loaded: %lf seconds\n", sec(clock()-time));
time=clock(); time=clock();
...@@ -289,7 +291,7 @@ void train_detection(char *cfgfile, char *weightfile) ...@@ -289,7 +291,7 @@ void train_detection(char *cfgfile, char *weightfile)
if(i == 100){ if(i == 100){
net.learning_rate *= 10; net.learning_rate *= 10;
} }
if(i%100==0){ if(i%1000==0){
char buff[256]; char buff[256];
sprintf(buff, "/home/pjreddie/imagenet_backup/%s_%d.weights",base, i); sprintf(buff, "/home/pjreddie/imagenet_backup/%s_%d.weights",base, i);
save_weights(net, buff); save_weights(net, buff);
...@@ -313,8 +315,8 @@ void predict_detections(network net, data d, float threshold, int offset, int cl ...@@ -313,8 +315,8 @@ void predict_detections(network net, data d, float threshold, int offset, int cl
int ci = k+classes+background+nuisance; int ci = k+classes+background+nuisance;
float x = (pred.vals[j][ci + 0] + col)/num_boxes; float x = (pred.vals[j][ci + 0] + col)/num_boxes;
float y = (pred.vals[j][ci + 1] + row)/num_boxes; float y = (pred.vals[j][ci + 1] + row)/num_boxes;
float w = pred.vals[j][ci + 2]; //* distance_from_edge(row, num_boxes); float w = pred.vals[j][ci + 2]; // distance_from_edge(row, num_boxes);
float h = pred.vals[j][ci + 3]; //* distance_from_edge(col, num_boxes); float h = pred.vals[j][ci + 3]; // distance_from_edge(col, num_boxes);
w = pow(w, 2); w = pow(w, 2);
h = pow(h, 2); h = pow(h, 2);
float prob = scale*pred.vals[j][k+class+background+nuisance]; float prob = scale*pred.vals[j][k+class+background+nuisance];
...@@ -337,7 +339,88 @@ void validate_detection(char *cfgfile, char *weightfile) ...@@ -337,7 +339,88 @@ void validate_detection(char *cfgfile, char *weightfile)
srand(time(0)); srand(time(0));
//list *plist = get_paths("/home/pjreddie/data/voc/test_2007.txt"); //list *plist = get_paths("/home/pjreddie/data/voc/test_2007.txt");
list *plist = get_paths("/home/pjreddie/data/voc/val_2012.txt"); //list *plist = get_paths("/home/pjreddie/data/voc/val_2012.txt");
list *plist = get_paths("/home/pjreddie/data/voc/test.txt");
//list *plist = get_paths("/home/pjreddie/data/voc/val.expanded.txt");
//list *plist = get_paths("/home/pjreddie/data/voc/train.txt");
char **paths = (char **)list_to_array(plist);
int classes = layer.classes;
int nuisance = layer.nuisance;
int background = (layer.background && !nuisance);
int num_boxes = sqrt(get_detection_layer_locations(layer));
int per_box = 4+classes+background+nuisance;
int num_output = num_boxes*num_boxes*per_box;
int m = plist->size;
int i = 0;
int splits = 100;
int nthreads = 4;
int t;
data *val = calloc(nthreads, sizeof(data));
data *buf = calloc(nthreads, sizeof(data));
pthread_t *thr = calloc(nthreads, sizeof(data));
time_t start = time(0);
for(t = 0; t < nthreads; ++t){
int num = (i+1+t)*m/splits - (i+t)*m/splits;
char **part = paths+((i+t)*m/splits);
thr[t] = load_data_thread(part, num, 0, 0, num_output, net.w, net.h, &(buf[t]));
}
//clock_t time;
for(i = nthreads; i <= splits; i += nthreads){
//time=clock();
for(t = 0; t < nthreads; ++t){
pthread_join(thr[t], 0);
val[t] = buf[t];
}
for(t = 0; t < nthreads && i < splits; ++t){
int num = (i+1+t)*m/splits - (i+t)*m/splits;
char **part = paths+((i+t)*m/splits);
thr[t] = load_data_thread(part, num, 0, 0, num_output, net.w, net.h, &(buf[t]));
}
//fprintf(stderr, "%d: Loaded: %lf seconds\n", i, sec(clock()-time));
fprintf(stderr, "%d\n", i);
for(t = 0; t < nthreads; ++t){
predict_detections(net, val[t], .001, (i-nthreads+t)*m/splits, classes, nuisance, background, num_boxes, per_box);
free_data(val[t]);
}
}
fprintf(stderr, "Total Detection Time: %f Seconds\n", (double)(time(0) - start));
}
void do_mask(network net, data d, int offset, int classes, int nuisance, int background, int num_boxes, int per_box)
{
matrix pred = network_predict_data(net, d);
int j, k;
for(j = 0; j < pred.rows; ++j){
printf("%d ", offset + j);
for(k = 0; k < pred.cols; k += per_box){
float scale = 1.-pred.vals[j][k];
printf("%f ", scale);
}
printf("\n");
}
free_matrix(pred);
}
void mask_detection(char *cfgfile, char *weightfile)
{
network net = parse_network_cfg(cfgfile);
if(weightfile){
load_weights(&net, weightfile);
}
detection_layer layer = get_network_detection_layer(net);
fprintf(stderr, "Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay);
srand(time(0));
list *plist = get_paths("/home/pjreddie/data/voc/test_2007.txt");
//list *plist = get_paths("/home/pjreddie/data/voc/val_2012.txt");
//list *plist = get_paths("/home/pjreddie/data/voc/test.txt"); //list *plist = get_paths("/home/pjreddie/data/voc/test.txt");
//list *plist = get_paths("/home/pjreddie/data/voc/val.expanded.txt"); //list *plist = get_paths("/home/pjreddie/data/voc/val.expanded.txt");
//list *plist = get_paths("/home/pjreddie/data/voc/train.txt"); //list *plist = get_paths("/home/pjreddie/data/voc/train.txt");
...@@ -381,7 +464,7 @@ void validate_detection(char *cfgfile, char *weightfile) ...@@ -381,7 +464,7 @@ void validate_detection(char *cfgfile, char *weightfile)
fprintf(stderr, "%d: Loaded: %lf seconds\n", i, sec(clock()-time)); fprintf(stderr, "%d: Loaded: %lf seconds\n", i, sec(clock()-time));
for(t = 0; t < nthreads; ++t){ for(t = 0; t < nthreads; ++t){
predict_detections(net, val[t], .01, (i-nthreads+t)*m/splits, classes, nuisance, background, num_boxes, per_box); do_mask(net, val[t], (i-nthreads+t)*m/splits, classes, nuisance, background, num_boxes, per_box);
free_data(val[t]); free_data(val[t]);
} }
time=clock(); time=clock();
...@@ -526,14 +609,17 @@ void test_detection(char *cfgfile, char *weightfile) ...@@ -526,14 +609,17 @@ void test_detection(char *cfgfile, char *weightfile)
while(1){ while(1){
fgets(filename, 256, stdin); fgets(filename, 256, stdin);
strtok(filename, "\n"); strtok(filename, "\n");
image im = load_image_color(filename, im_size, im_size); image im = load_image_color(filename,0,0);
image sized = resize_image(im, im_size, im_size);
printf("%d %d %d\n", im.h, im.w, im.c); printf("%d %d %d\n", im.h, im.w, im.c);
float *X = im.data; float *X = sized.data;
time=clock(); time=clock();
float *predictions = network_predict(net, X); float *predictions = network_predict(net, X);
printf("%s: Predicted in %f seconds.\n", filename, sec(clock()-time)); printf("%s: Predicted in %f seconds.\n", filename, sec(clock()-time));
draw_detection(im, predictions, 7, "detections"); draw_detection(im, predictions, 7, "YOLO#SWAG#BLAZEIT");
free_image(im); free_image(im);
free_image(sized);
cvWaitKey(0);
} }
} }
...@@ -551,5 +637,6 @@ void run_detection(int argc, char **argv) ...@@ -551,5 +637,6 @@ void run_detection(int argc, char **argv)
else if(0==strcmp(argv[2], "teststuff")) train_detection_teststuff(cfg, weights); else if(0==strcmp(argv[2], "teststuff")) train_detection_teststuff(cfg, weights);
else if(0==strcmp(argv[2], "trainloc")) train_localization(cfg, weights); else if(0==strcmp(argv[2], "trainloc")) train_localization(cfg, weights);
else if(0==strcmp(argv[2], "valid")) validate_detection(cfg, weights); else if(0==strcmp(argv[2], "valid")) validate_detection(cfg, weights);
else if(0==strcmp(argv[2], "mask")) mask_detection(cfg, weights);
else if(0==strcmp(argv[2], "validpost")) validate_detection_post(cfg, weights); else if(0==strcmp(argv[2], "validpost")) validate_detection_post(cfg, weights);
} }
...@@ -372,15 +372,12 @@ void forward_detection_layer(const detection_layer l, network_state state) ...@@ -372,15 +372,12 @@ void forward_detection_layer(const detection_layer l, network_state state)
l.delta[j+1] = 4 * (state.truth[j+1] - l.output[j+1]); l.delta[j+1] = 4 * (state.truth[j+1] - l.output[j+1]);
l.delta[j+2] = 4 * (state.truth[j+2] - l.output[j+2]); l.delta[j+2] = 4 * (state.truth[j+2] - l.output[j+2]);
l.delta[j+3] = 4 * (state.truth[j+3] - l.output[j+3]); l.delta[j+3] = 4 * (state.truth[j+3] - l.output[j+3]);
if(1){ if(0){
for (j = offset; j < offset+classes; ++j) { for (j = offset; j < offset+classes; ++j) {
if(state.truth[j]) state.truth[j] = iou; if(state.truth[j]) state.truth[j] = iou;
l.delta[j] = state.truth[j] - l.output[j]; l.delta[j] = state.truth[j] - l.output[j];
} }
} }
/*
*/
} }
printf("Avg IOU: %f\n", avg_iou/count); printf("Avg IOU: %f\n", avg_iou/count);
} }
......
...@@ -32,7 +32,7 @@ void train_imagenet(char *cfgfile, char *weightfile) ...@@ -32,7 +32,7 @@ void train_imagenet(char *cfgfile, char *weightfile)
pthread_join(load_thread, 0); pthread_join(load_thread, 0);
train = buffer; train = buffer;
/* /*
image im = float_to_image(256, 256, 3, train.X.vals[114]); image im = float_to_image(256, 256, 3, train.X.vals[114]);
show_image(im, "training"); show_image(im, "training");
cvWaitKey(0); cvWaitKey(0);
......
...@@ -133,20 +133,18 @@ float train_network_datum_gpu(network net, float *x, float *y) ...@@ -133,20 +133,18 @@ float train_network_datum_gpu(network net, float *x, float *y)
float *get_network_output_layer_gpu(network net, int i) float *get_network_output_layer_gpu(network net, int i)
{ {
layer l = net.layers[i]; layer l = net.layers[i];
cuda_pull_array(l.output_gpu, l.output, l.outputs*l.batch);
if(l.type == CONVOLUTIONAL){ if(l.type == CONVOLUTIONAL){
return l.output; return l.output;
} else if(l.type == DECONVOLUTIONAL){ } else if(l.type == DECONVOLUTIONAL){
return l.output; return l.output;
} else if(l.type == CONNECTED){ } else if(l.type == CONNECTED){
cuda_pull_array(l.output_gpu, l.output, l.outputs*l.batch);
return l.output; return l.output;
} else if(l.type == DETECTION){ } else if(l.type == DETECTION){
cuda_pull_array(l.output_gpu, l.output, l.outputs*l.batch);
return l.output; return l.output;
} else if(l.type == MAXPOOL){ } else if(l.type == MAXPOOL){
return l.output; return l.output;
} else if(l.type == SOFTMAX){ } else if(l.type == SOFTMAX){
pull_softmax_layer_output(l);
return l.output; return l.output;
} }
return 0; return 0;
......
#include "network.h"
#include "utils.h"
#include "parser.h"
void train_writing(char *cfgfile, char *weightfile)
{
data_seed = time(0);
srand(time(0));
float avg_loss = -1;
char *base = basecfg(cfgfile);
printf("%s\n", base);
network net = parse_network_cfg(cfgfile);
if(weightfile){
load_weights(&net, weightfile);
}
printf("Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay);
int imgs = 1024;
int i = net.seen/imgs;
list *plist = get_paths("figures.list");
char **paths = (char **)list_to_array(plist);
printf("%d\n", plist->size);
clock_t time;
while(1){
++i;
time=clock();
data train = load_data_writing(paths, imgs, plist->size, 512, 512);
float loss = train_network(net, train);
#ifdef GPU
float *out = get_network_output_gpu(net);
#else
float *out = get_network_output(net);
#endif
image pred = float_to_image(64, 64, 1, out);
print_image(pred);
/*
image im = float_to_image(256, 256, 3, train.X.vals[0]);
image lab = float_to_image(64, 64, 1, train.y.vals[0]);
image pred = float_to_image(64, 64, 1, out);
show_image(im, "image");
show_image(lab, "label");
print_image(lab);
show_image(pred, "pred");
cvWaitKey(0);
*/
net.seen += imgs;
if(avg_loss == -1) avg_loss = loss;
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%100 == 0 && net.learning_rate > .00001) net.learning_rate *= .97;
if(i%1000==0){
char buff[256];
sprintf(buff, "/home/pjreddie/imagenet_backup/%s_%d.weights",base, i);
save_weights(net, buff);
}
}
}
void run_writing(int argc, char **argv)
{
if(argc < 4){
fprintf(stderr, "usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]);
return;
}
char *cfg = argv[3];
char *weights = (argc > 4) ? argv[4] : 0;
if(0==strcmp(argv[2], "train")) train_writing(cfg, weights);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment