diff --git a/examples/detector.py b/examples/detector.py index b95ab71a..61868112 100644 --- a/examples/detector.py +++ b/examples/detector.py @@ -10,9 +10,9 @@ 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..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,7 +62,8 @@ 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; + 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); copy_cpu(last.outputs, last.output, 1, last.delta, 1); @@ -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/python/darknet.py b/python/darknet.py index d0c6e961..398a2913 100644 --- a/python/darknet.py +++ b/python/darknet.py @@ -17,7 +17,6 @@ def c_array(ctype, values): arr[:] = values return arr - class BOX(Structure): _fields_ = [("x", c_float), ("y", c_float), diff --git a/src/convolutional_kernels.cu b/src/convolutional_kernels.cu index dd516fd3..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); @@ -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; 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;