Je reçois Segmentation fault (core dumped)
erreur lorsque j'appelle la fonction draw_detections
en utilisant les paramètres suivants:Darknet Yolo: Segmentation fault (core dumped) lorsque la fonction d'appel draw_detections
draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, alphabet, 20);
Il est ma première fois d'utiliser Yolo
, et comme En fait, je ne sais pas lequel des libs
inclus définir la fonction draw_detections
. Voici la chose complète:
#include "network.h"
#include "detection_layer.h"
#include "cost_layer.h"
#include "utils.h"
#include "parser.h"
#include "box.h"
#include "demo.h"
#ifdef OPENCV
#include "opencv2/highgui/highgui_c.h"
#endif
char *voc_names[] = {"face"};
void test_yolo(char *cfgfile, char *weightfile, char *filename, float thresh)
{
printf("looking for faces");
image **alphabet = load_alphabet();
network net = parse_network_cfg(cfgfile);
if(weightfile){
load_weights(&net, weightfile);
}
detection_layer l = net.layers[net.n-1];
set_batch_network(&net, 1);
srand(2222222);
clock_t time;
char buff[256];
char *input = buff;
int j;
float nms=.4;
box *boxes = calloc(l.side*l.side*l.n, sizeof(box));
float **probs = calloc(l.side*l.side*l.n, sizeof(float *));
for(j = 0; j < l.side*l.side*l.n; ++j) probs[j] = calloc(l.classes, sizeof(float *));
while(1){
if(filename){
strncpy(input, filename, 256);
} else {
printf("Enter Image Path: ");
fflush(stdout);
input = fgets(input, 256, stdin);
if(!input) return;
strtok(input, "\n");
}
image im = load_image_color(input,0,0);
image sized = resize_image(im, net.w, net.h);
float *X = sized.data;
time=clock();
network_predict(net, X);
printf("%s: Predicted in %f seconds.\n", input, sec(clock()-time));
get_detection_boxes(l, 1, 1, thresh, probs, boxes, 0);
if (nms)
do_nms_sort(boxes, probs, l.side*l.side*l.n, l.classes, nms);
printf("check1\n"); //this statement is reached fine
draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, alphabet, 20);
printf("check2\n"); //this statement is never reached
save_image(im, "predictions");
printf("just saved the img");
show_image(im, "predictions");
free_image(im);
free_image(sized);
#ifdef OPENCV
cvWaitKey(0);
cvDestroyAllWindows();
#endif
if (filename) break;
}
}
void run_yolo(int argc, char **argv)
{
printf("\n/nrunning Yolo....");
char *prefix = find_char_arg(argc, argv, "-prefix", 0);
float thresh = find_float_arg(argc, argv, "-thresh", .2);
int cam_index = find_int_arg(argc, argv, "-c", 0);
int frame_skip = find_int_arg(argc, argv, "-s", 0);
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;
char *filename = (argc > 5) ? argv[5]: 0;
if(0==strcmp(argv[2], "test")) test_yolo(cfg, weights, filename, thresh);
}
Et je courais cela en utilisant la commande suivante:
./darknet yolo test cfg/yolo-face.cfg yolo-face_final.weights data/faces.jpg
Il charge les poids et effectue une prédiction, mais il se bloque quand il atteint la draw_predictions()
. Des idées pourquoi?
Edit: Voici la trace que je reçois quand je débogage à l'aide Valgrind
valgrind --leak-check=yes ./darknet yolo test cfg/yolo-face.cfg yolo-face_final.weights data/faces.jpg
==8582== Memcheck, a memory error detector
==8582== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==8582== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==8582== Command: ./darknet yolo test cfg/yolo-face.cfg yolo-face_final.weights data/faces.jpg
==8582==
running Yolo....
layer filters size input output
0 Crop Layer: 448 x 448 -> 448 x 448 x 3 image
shift: Using default '0.000000'
1 conv 16 3 x 3/1 448 x 448 x 3 -> 448 x 448 x 16
2 max 2 x 2/2 448 x 448 x 16 -> 224 x 224 x 16
3 conv 32 3 x 3/1 224 x 224 x 16 -> 224 x 224 x 32
4 max 2 x 2/2 224 x 224 x 32 -> 112 x 112 x 32
5 conv 64 3 x 3/1 112 x 112 x 32 -> 112 x 112 x 64
6 max 2 x 2/2 112 x 112 x 64 -> 56 x 56 x 64
7 conv 128 3 x 3/1 56 x 56 x 64 -> 56 x 56 x 128
8 max 2 x 2/2 56 x 56 x 128 -> 28 x 28 x 128
9 conv 256 3 x 3/1 28 x 28 x 128 -> 28 x 28 x 256
10 max 2 x 2/2 28 x 28 x 256 -> 14 x 14 x 256
11 conv 512 3 x 3/1 14 x 14 x 256 -> 14 x 14 x 512
12 max 2 x 2/2 14 x 14 x 512 -> 7 x 7 x 512
13 conv 1024 3 x 3/1 7 x 7 x 512 -> 7 x 7 x1024
14 conv 1024 3 x 3/1 7 x 7 x1024 -> 7 x 7 x1024
15 conv 1024 3 x 3/1 7 x 7 x1024 -> 7 x 7 x1024
16 connected 50176 -> 256
17 connected 256 -> 4096
18 dropout p = 0.50 4096 -> 4096
19 connected 4096 -> 1331
20 Detection Layer
forced: Using default '0'
Loading weights from yolo-face_final.weights...looking for facesDone!
data/faces.jpg: Predicted in 28.192593 seconds.
pre check
==8582== Invalid read of size 4
==8582== at 0x407DA0: max_index (in /home/.../darknet/darknet)
==8582== by 0x429492: draw_detections (in /home/.../darknet/darknet)
==8582== by 0x456487: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582== Address 0x7328f78 is 0 bytes after a block of size 8 alloc'd
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x456300: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== Invalid read of size 4
==8582== at 0x42949B: draw_detections (in /home/.../darknet/darknet)
==8582== by 0x456487: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582== Address 0x7328fa0 is 32 bytes before a block of size 32 in arena "client"
==8582==
face: 6%
face: 15%
face: 18%
face: 12%
face: 5%
face: 10%
face: 8%
face: 6%
face: 21%
face: 21%
face: 37%
face: 37%
face: 23%
face: 7%
face: 33%
face: 31%
face: 20%
face: 15%
face: 37%
face: 9%
face: 36%
face: 50%
face: 49%
face: 37%
face: 5%
face: 9%
face: 6%
face: 9%
face: 19%
face: 14%
face: 25%
face: 11%
face: 6%
face: 36%
face: 13%
face: 17%
face: 8%
face: 8%
face: 6%
After check
Not compiled with OpenCV, saving to predictions.png instead
just saved the img==8582==
==8582== HEAP SUMMARY:
==8582== in use at exit: 550,317,244 bytes in 1,116 blocks
==8582== total heap usage: 98,171 allocs, 97,055 frees, 579,801,694 bytes allocated
==8582==
==8582== 4 bytes in 1 blocks are definitely lost in loss record 2 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x43E34D: make_network (in /home/.../darknet/darknet)
==8582== by 0x444ABE: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 4 bytes in 1 blocks are definitely lost in loss record 3 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x43E35F: make_network (in /home/.../darknet/darknet)
==8582== by 0x444ABE: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 24 bytes in 1 blocks are definitely lost in loss record 4 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x4447C3: parse_net_options (in /home/.../darknet/darknet)
==8582== by 0x444B12: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 24 bytes in 1 blocks are definitely lost in loss record 5 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x4447D5: parse_net_options (in /home/.../darknet/darknet)
==8582== by 0x444B12: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 3,872 bytes in 1 blocks are definitely lost in loss record 7 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x4562C1: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 3,872 (1,936 direct, 1,936 indirect) bytes in 1 blocks are definitely lost in loss record 8 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x4562D1: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 5,808 bytes in 1 blocks are definitely lost in loss record 9 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x445416: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 32,856 bytes in 1 blocks are possibly lost in loss record 18 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x42DC33: load_image_stb (in /home/.../darknet/darknet)
==8582== by 0x42DE1A: load_alphabet (in /home/.../darknet/darknet)
==8582== by 0x456209: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 3,211,264 bytes in 1 blocks are possibly lost in loss record 21 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x434D98: make_maxpool_layer (in /home/.../darknet/darknet)
==8582== by 0x4462BC: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 4,816,896 bytes in 1 blocks are definitely lost in loss record 23 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x445401: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 13,917,024 (192 direct, 13,916,832 indirect) bytes in 1 blocks are definitely lost in loss record 28 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x42DDB5: load_alphabet (in /home/.../darknet/darknet)
==8582== by 0x456209: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 25,690,112 bytes in 1 blocks are possibly lost in loss record 29 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x40AB15: make_convolutional_layer (in /home/.../darknet/darknet)
==8582== by 0x442203: parse_convolutional (in /home/.../darknet/darknet)
==8582== by 0x4456A6: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 28,901,376 bytes in 1 blocks are definitely lost in loss record 31 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x445435: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== 473,734,108 (18,144 direct, 473,715,964 indirect) bytes in 1 blocks are definitely lost in loss record 37 of 37
==8582== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8582== by 0x43E33B: make_network (in /home/.../darknet/darknet)
==8582== by 0x444ABE: parse_network_cfg (in /home/.../darknet/darknet)
==8582== by 0x456224: test_yolo (in /home/.../darknet/darknet)
==8582== by 0x401F41: main (in /home/.../darknet/darknet)
==8582==
==8582== LEAK SUMMARY:
==8582== definitely lost: 33,748,280 bytes in 11 blocks
==8582== indirectly lost: 487,634,732 bytes in 1,102 blocks
==8582== possibly lost: 28,934,232 bytes in 3 blocks
==8582== still reachable: 0 bytes in 0 blocks
==8582== suppressed: 0 bytes in 0 blocks
==8582==
==8582== For counts of detected and suppressed errors, rerun with: -v
==8582== ERROR SUMMARY: 4573 errors from 16 contexts (suppressed: 0 from 0)
Oh, et il me donne trop de prédictions avec des limites mauvaises de la boîte. Quel est le paramètre manquant pour réduire le nombre de cases voisines (pour que j'obtienne seulement les cases appropriées)?
Avez-vous essayé de le déboguer en utilisant 'gdb' et' valgrind'? –
Honnêtement non, je voudrais essayer valgrind maintenant –
Avez-vous compilé yolo avec opencv activé? Avez-vous opencv? C'est lié correctement? Quelle version? – Miki