在 Nao 上运行暗网分类器时出现分段错误

Posted

技术标签:

【中文标题】在 Nao 上运行暗网分类器时出现分段错误【英文标题】:Segmentation fault when running darknet classifier on Nao 【发布时间】:2018-02-07 15:36:49 【问题描述】:

我正在尝试在 Nao 上运行暗网 imagenet classifier,但它因段错误而崩溃。

使用 YOLO 配置 (./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg),暗网运行,但尝试运行分类器 (./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 模式下,它构建了一个更大的网络(层数更大),所以听起来不太合乎逻辑。有什么想法吗?

【问题讨论】:

【参考方案1】:

其实是内存不足造成的,调用calloc返回null。 (这似乎总是发生在make_convolutional_layer 中的l.weights = calloc(c*n*size*size, sizeof(float)); 行,第16 层尝试分配4 718 592 个字节)

因此,除了尝试构建更小的网络或增加可用内存之外,似乎没有解决问题的方法。

编辑:最小的“暗网参考”网络运行,其他的对 Nao 来说太重了。

【讨论】:

以上是关于在 Nao 上运行暗网分类器时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章

为 OpenCV 的 C++ createTrackbar 运行 C 包装器时出现编译分段错误(核心转储)

使用 Knn 分类器时出现无效的形状错误

错误评估分类器训练和测试数据集不兼容

在 Weka 中使用 libsvm 分类器和堆大小

使用 R2013b MATLAB 版本时出现 SVM 错误

尝试使用管道和网格搜索运行随机森林分类器时出错