美文网首页
yolo darknet 浮点数例外 核心存储 问题排查及

yolo darknet 浮点数例外 核心存储 问题排查及

作者: book_02 | 来源:发表于2021-05-28 15:03 被阅读0次

1. crash 现象

在运行darknet对视频进行物体分类检测过程中,突然程序crash中止,报如下错误

Floating point exception (core dumped)

或者

浮点数例外(核心存储)

darknet的github有相关的issue: https://github.com/pjreddie/darknet/issues/1419

但是我遇到的问题是开始可以分类检测,后来crash的,与上面的一上来就crash不同。
所以进行了如下另外的拍错:

2. 原因分析

经过下面的"排查过程",发现最终原因是发生了分母为0的除法,导致crash

crash点在文件 src/yolo_layer.c的257行(具体行数可能会变)的 correct_yolo_boxes() 函数

new_w = (w*neth)/h;

因为传进来的h为0,所以导致程序crash.

3. 解决方法

在crash点处增加判断,放置除0错误,在 correct_yolo_boxes() 函数入口处添加防护如下:

if((0==w) || (0==h)) {
return 0;
}

4. 排查过程

上述定位crash点的排查过程如下,参考了博客"gdb调试详解与darknet框架gdb调试过程"(https://blog.csdn.net/zdaiot/article/details/83066133)的调试过程:

修改文件Makefile,置DEBUG为1

DEBUG=1

重新编译darknet

make

开始调试

gdb ./darknet

输入运行程序需要的参数类型

set args detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
set args detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights test.mp4

将src目录添加进来

DIR ./src

让程序运行直到crash

r

程序crash后,显示crash点如下,由此定位到crash点:


5. 参考

gdb调试详解与darknet框架gdb调试过程
https://blog.csdn.net/zdaiot/article/details/83066133

相关文章

网友评论

      本文标题:yolo darknet 浮点数例外 核心存储 问题排查及

      本文链接:https://www.haomeiwen.com/subject/peessltx.html