From 56be49aa4854b81b855f6a9daffce4b4ad1fbb9e Mon Sep 17 00:00:00 2001 From: Joseph Redmon Date: Tue, 21 Nov 2017 11:34:46 -0800 Subject: [PATCH 1/2] I WISH I HAD SOME TESTS THOUGH --- examples/detector.py | 7 ++++--- examples/nightmare.c | 2 +- python/darknet.py | 4 +++- src/convolutional_kernels.cu | 2 +- src/convolutional_layer.c | 12 ++++++------ src/network.c | 1 + 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/examples/detector.py b/examples/detector.py index 5b639a3a..40bb365e 100644 --- a/examples/detector.py +++ b/examples/detector.py @@ -7,11 +7,12 @@ import sys, os sys.path.append(os.path.join(os.getcwd(),'python/')) import darknet as dn +import pdb dn.set_gpu(0) -net = dn.load_net("cfg/tiny-yolo.cfg", "tiny-yolo.weights", 0) -meta = dn.load_meta("cfg/coco.data") -r = dn.detect(net, meta, "data/dog.jpg") +net = dn.load_net("cfg/yolo-thor.cfg", "/home/pjreddie/backup/yolo-thor_final.weights", 0) +meta = dn.load_meta("cfg/thor.data") +r = dn.detect(net, meta, "data/bedroom.jpg") print r # And then down here you could detect a lot more images like: diff --git a/examples/nightmare.c b/examples/nightmare.c index 572396fe..be2179e4 100644 --- a/examples/nightmare.c +++ b/examples/nightmare.c @@ -62,7 +62,7 @@ void optimize_picture(network *net, image orig, int max_layer, float scale, floa cuda_free(net->delta_gpu); net->delta_gpu = 0; #else - net->input = im.data; + copy_cpu(net->inputs, im.data, 1, net->input, 1); net->delta = delta.data; forward_network(net); copy_cpu(last.outputs, last.output, 1, last.delta, 1); diff --git a/python/darknet.py b/python/darknet.py index f9aab1ee..deffa612 100644 --- a/python/darknet.py +++ b/python/darknet.py @@ -13,7 +13,9 @@ def sample(probs): return len(probs)-1 def c_array(ctype, values): - return (ctype * len(values))(*values) + arr = (ctype*len(values))() + arr[:] = values + return arr class BOX(Structure): _fields_ = [("x", c_float), diff --git a/src/convolutional_kernels.cu b/src/convolutional_kernels.cu index dd516fd3..45242a1c 100644 --- a/src/convolutional_kernels.cu +++ b/src/convolutional_kernels.cu @@ -236,7 +236,7 @@ void backward_convolutional_layer_gpu(convolutional_layer l, network net) float *b = net.workspace; float *c = l.weight_updates_gpu + j*l.nweights/l.groups; - float *im = net.input+(i*l.groups + j)*l.c/l.groups*l.h*l.w; + float *im = net.input_gpu+(i*l.groups + j)*l.c/l.groups*l.h*l.w; im2col_gpu(im, l.c/l.groups, l.h, l.w, l.size, l.stride, l.pad, b); diff --git a/src/convolutional_layer.c b/src/convolutional_layer.c index 86930b58..f197bcfe 100644 --- a/src/convolutional_layer.c +++ b/src/convolutional_layer.c @@ -150,24 +150,24 @@ void cudnn_convolutional_setup(layer *l) l->weightDesc, l->convDesc, l->dstTensorDesc, - CUDNN_CONVOLUTION_FWD_PREFER_FASTEST, - 0, + CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT, + 4000000000, &l->fw_algo); cudnnGetConvolutionBackwardDataAlgorithm(cudnn_handle(), l->weightDesc, l->ddstTensorDesc, l->convDesc, l->dsrcTensorDesc, - CUDNN_CONVOLUTION_BWD_DATA_PREFER_FASTEST, - 0, + CUDNN_CONVOLUTION_BWD_DATA_SPECIFY_WORKSPACE_LIMIT, + 4000000000, &l->bd_algo); cudnnGetConvolutionBackwardFilterAlgorithm(cudnn_handle(), l->srcTensorDesc, l->ddstTensorDesc, l->convDesc, l->dweightDesc, - CUDNN_CONVOLUTION_BWD_FILTER_PREFER_FASTEST, - 0, + CUDNN_CONVOLUTION_BWD_FILTER_SPECIFY_WORKSPACE_LIMIT, + 4000000000, &l->bf_algo); } #endif diff --git a/src/network.c b/src/network.c index 6425855d..1b4df6bc 100644 --- a/src/network.c +++ b/src/network.c @@ -389,6 +389,7 @@ int resize_network(network *net, int w, int h) error("Cannot resize this type of layer"); } if(l.workspace_size > workspace_size) workspace_size = l.workspace_size; + if(l.workspace_size > 2000000000) assert(0); inputs = l.outputs; net->layers[i] = l; w = l.out_w; From 80d9bec20f0a44ab07616215c6eadb2d633492fe Mon Sep 17 00:00:00 2001 From: Joseph Redmon Date: Sun, 26 Nov 2017 12:27:21 -0800 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=8C=83=20=F0=9F=A4=94=20=F0=9F=92=AD?= =?UTF-8?q?=20=F0=9F=91=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/nightmare.c | 6 +++--- src/convolutional_kernels.cu | 2 +- src/parser.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/nightmare.c b/examples/nightmare.c index be2179e4..71d38334 100644 --- a/examples/nightmare.c +++ b/examples/nightmare.c @@ -47,7 +47,7 @@ void optimize_picture(network *net, image orig, int max_layer, float scale, floa #ifdef GPU net->delta_gpu = cuda_make_array(delta.data, im.w*im.h*im.c); - cuda_push_array(net->input_gpu, im.data, net->inputs); + copy_cpu(net->inputs, im.data, 1, net->input, 1); forward_network_gpu(net); copy_gpu(last.outputs, last.output_gpu, 1, last.delta_gpu, 1); @@ -62,6 +62,7 @@ void optimize_picture(network *net, image orig, int max_layer, float scale, floa cuda_free(net->delta_gpu); net->delta_gpu = 0; #else + printf("\nnet: %d %d %d im: %d %d %d\n", net->w, net->h, net->inputs, im.w, im.h, im.c); copy_cpu(net->inputs, im.data, 1, net->input, 1); net->delta = delta.data; forward_network(net); @@ -308,8 +309,7 @@ void run_nightmare(int argc, char **argv) int reconstruct = find_arg(argc, argv, "-reconstruct"); int smooth_size = find_int_arg(argc, argv, "-smooth", 1); - network *net = parse_network_cfg(cfg); - load_weights(net, weights); + network *net = load_network(cfg, weights, 0); char *cfgbase = basecfg(cfg); char *imbase = basecfg(input); diff --git a/src/convolutional_kernels.cu b/src/convolutional_kernels.cu index 45242a1c..56043e78 100644 --- a/src/convolutional_kernels.cu +++ b/src/convolutional_kernels.cu @@ -177,7 +177,7 @@ void backward_convolutional_layer_gpu(convolutional_layer l, network net) if(l.smooth){ smooth_layer(l, 5, l.smooth); } - constrain_gpu(l.outputs*l.batch, 1, l.delta_gpu, 1); + //constrain_gpu(l.outputs*l.batch, 1, l.delta_gpu, 1); gradient_array_gpu(l.output_gpu, l.outputs*l.batch, l.activation, l.delta_gpu); diff --git a/src/parser.c b/src/parser.c index 14914bc9..da7487b0 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1110,7 +1110,7 @@ void load_weights_upto(network *net, char *filename, int start, int cutoff) fread(&major, sizeof(int), 1, fp); fread(&minor, sizeof(int), 1, fp); fread(&revision, sizeof(int), 1, fp); - if ((major*10 + minor) >= 2){ + if ((major*10 + minor) >= 2 && major < 1000 && minor < 1000){ fread(net->seen, sizeof(size_t), 1, fp); } else { int iseen = 0;