Nao 上的 运行 暗网分类器出现分段错误
Segmentation fault when running darknet classifier on Nao
我正尝试在 Nao 上 运行 暗网 imagenet classifier,但它因段错误而崩溃。
使用 YOLO 配置 (./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
),暗网 运行s,但尝试 运行 分类器 (./darknet classifier predict cfg/imagenet1k.data cfg/extraction.cfg extraction.weights data/dog.jpg
) 只会产生段错误:
$ ./darknet classifier predict cfg/imagenet1k.data cfg/extraction.cfg extraction.weights data/dog.jpg
layer filters size input output
0 conv 64 7 x 7 / 2 224 x 224 x 3 -> 112 x 112 x 64
1 max 2 x 2 / 2 112 x 112 x 64 -> 56 x 56 x 64
2 conv 192 3 x 3 / 1 56 x 56 x 64 -> 56 x 56 x 192
3 max 2 x 2 / 2 56 x 56 x 192 -> 28 x 28 x 192
4 conv 128 1 x 1 / 1 28 x 28 x 192 -> 28 x 28 x 128
5 conv 256 3 x 3 / 1 28 x 28 x 128 -> 28 x 28 x 256
6 conv 256 1 x 1 / 1 28 x 28 x 256 -> 28 x 28 x 256
7 conv 512 3 x 3 / 1 28 x 28 x 256 -> 28 x 28 x 512
8 max 2 x 2 / 2 28 x 28 x 512 -> 14 x 14 x 512
9 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
10 conv 512 3 x 3 / 1 14 x 14 x 256 -> 14 x 14 x 512
11 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
12 conv 512 3 x 3 / 1 14 x 14 x 256 -> 14 x 14 x 512
13 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
14 conv 512 3 x 3 / 1 14 x 14 x 256 -> 14 x 14 x 512
15 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
16 Segmentation fault (core dumped)
核心转储不可用,因为 /proc/sys/kernel/core_pattern 仅包含 |/bin/false
但是 运行用 gdb 连接它,我可以获得崩溃堆栈:
#0 0x0806efac in make_convolutional_layer ()
#1 0x080a4919 in parse_convolutional ()
#2 0x080a6e11 in parse_network_cfg ()
#3 0x0805d7ef in predict_classifier ()
#4 0x0805e85c in run_classifier ()
#5 0x080499c0 in main ()
我看到make_convolutional_layer分配了一堆内存。崩溃可能是程序达到内存限制吗?然而在 YOLO 模式下,它构建了一个更大的网络(具有更大的层大小),所以这听起来不太合乎逻辑。有什么想法吗?
其实是内存不足导致的,调用calloc returns null。
(这似乎总是发生在 make_convolutional_layer
中的 l.weights = calloc(c*n*size*size, sizeof(float));
行,第 16 层试图分配 4 718 592 字节)
因此,除了尝试构建更小的网络或增加可用内存之外,似乎没有解决问题的方法。
编辑:最小的 "Darknet Reference" 网络运行,其他网络对 Nao 来说太重了。
我正尝试在 Nao 上 运行 暗网 imagenet classifier,但它因段错误而崩溃。
使用 YOLO 配置 (./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
),暗网 运行s,但尝试 运行 分类器 (./darknet classifier predict cfg/imagenet1k.data cfg/extraction.cfg extraction.weights data/dog.jpg
) 只会产生段错误:
$ ./darknet classifier predict cfg/imagenet1k.data cfg/extraction.cfg extraction.weights data/dog.jpg
layer filters size input output
0 conv 64 7 x 7 / 2 224 x 224 x 3 -> 112 x 112 x 64
1 max 2 x 2 / 2 112 x 112 x 64 -> 56 x 56 x 64
2 conv 192 3 x 3 / 1 56 x 56 x 64 -> 56 x 56 x 192
3 max 2 x 2 / 2 56 x 56 x 192 -> 28 x 28 x 192
4 conv 128 1 x 1 / 1 28 x 28 x 192 -> 28 x 28 x 128
5 conv 256 3 x 3 / 1 28 x 28 x 128 -> 28 x 28 x 256
6 conv 256 1 x 1 / 1 28 x 28 x 256 -> 28 x 28 x 256
7 conv 512 3 x 3 / 1 28 x 28 x 256 -> 28 x 28 x 512
8 max 2 x 2 / 2 28 x 28 x 512 -> 14 x 14 x 512
9 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
10 conv 512 3 x 3 / 1 14 x 14 x 256 -> 14 x 14 x 512
11 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
12 conv 512 3 x 3 / 1 14 x 14 x 256 -> 14 x 14 x 512
13 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
14 conv 512 3 x 3 / 1 14 x 14 x 256 -> 14 x 14 x 512
15 conv 256 1 x 1 / 1 14 x 14 x 512 -> 14 x 14 x 256
16 Segmentation fault (core dumped)
核心转储不可用,因为 /proc/sys/kernel/core_pattern 仅包含 |/bin/false
但是 运行用 gdb 连接它,我可以获得崩溃堆栈:
#0 0x0806efac in make_convolutional_layer ()
#1 0x080a4919 in parse_convolutional ()
#2 0x080a6e11 in parse_network_cfg ()
#3 0x0805d7ef in predict_classifier ()
#4 0x0805e85c in run_classifier ()
#5 0x080499c0 in main ()
我看到make_convolutional_layer分配了一堆内存。崩溃可能是程序达到内存限制吗?然而在 YOLO 模式下,它构建了一个更大的网络(具有更大的层大小),所以这听起来不太合乎逻辑。有什么想法吗?
其实是内存不足导致的,调用calloc returns null。
(这似乎总是发生在 make_convolutional_layer
中的 l.weights = calloc(c*n*size*size, sizeof(float));
行,第 16 层试图分配 4 718 592 字节)
因此,除了尝试构建更小的网络或增加可用内存之外,似乎没有解决问题的方法。
编辑:最小的 "Darknet Reference" 网络运行,其他网络对 Nao 来说太重了。