| | |
| | | } |
| | | #ifdef GPU |
| | | if(gpu_index >= 0){ |
| | | printf(" try to allocate workspace = %zu * sizeof(float), ", (workspace_size - 1) / sizeof(float) + 1); |
| | | net->workspace = cuda_make_array(0, (workspace_size-1)/sizeof(float)+1); |
| | | printf(" try to allocate workspace = %zu * sizeof(float), ", workspace_size / sizeof(float) + 1); |
| | | net->workspace = cuda_make_array(0, workspace_size/sizeof(float) + 1); |
| | | printf(" CUDA allocate done! \n"); |
| | | }else { |
| | | free(net->workspace); |
| | |
| | | return def; |
| | | } |
| | | |
| | | layer* get_network_layer(network* net, int i) |
| | | { |
| | | return net->layers + i; |
| | | } |
| | | |
| | | image get_network_image(network net) |
| | | { |
| | | int i; |
| | |
| | | box *boxes = calloc(l.w*l.h*l.n, sizeof(box)); |
| | | float **probs = calloc(l.w*l.h*l.n, sizeof(float *)); |
| | | int i, j; |
| | | for (j = 0; j < l.w*l.h*l.n; ++j) probs[j] = calloc(l.classes, sizeof(float *)); |
| | | for (j = 0; j < l.w*l.h*l.n; ++j) probs[j] = calloc(l.classes, sizeof(float)); |
| | | get_region_boxes(l, 1, 1, thresh, probs, boxes, 0, map); |
| | | for (j = 0; j < l.w*l.h*l.n; ++j) { |
| | | dets[j].classes = l.classes; |
| | |
| | | |
| | | void fill_network_boxes(network *net, int w, int h, float thresh, float hier, int *map, int relative, detection *dets, int letter) |
| | | { |
| | | int prev_classes = -1; |
| | | int j; |
| | | for (j = 0; j < net->n; ++j) { |
| | | layer l = net->layers[j]; |
| | | if (l.type == YOLO) { |
| | | int count = get_yolo_detections(l, w, h, net->w, net->h, thresh, map, relative, dets, letter); |
| | | dets += count; |
| | | if (prev_classes < 0) prev_classes = l.classes; |
| | | else if (prev_classes != l.classes) { |
| | | printf(" Error: Different [yolo] layers have different number of classes = %d and %d - check your cfg-file! \n", |
| | | prev_classes, l.classes); |
| | | } |
| | | } |
| | | if (l.type == REGION) { |
| | | custom_get_region_detections(l, w, h, net->w, net->h, thresh, map, hier, relative, dets, letter); |
| | |
| | | |
| | | float *network_predict_image(network *net, image im) |
| | | { |
| | | image imr = letterbox_image(im, net->w, net->h); |
| | | //image imr = letterbox_image(im, net->w, net->h); |
| | | image imr = resize_image(im, net->w, net->h); |
| | | set_batch_network(net, 1); |
| | | float *p = network_predict(*net, imr.data); |
| | | free_image(imr); |