Segmentation fault (core dumped)
这个bug调的我有点懵。因为是pytorch训练时,跑着跑着突然停了,然后用的ecllipse也没有任何报错信息,就开始查网页,说是Dataloader、Dataparallel的事,就把他们都换了,结果还是出问题。
就用gdb找:
gdb python3
r train.py
这时出现了这个报错:Segmentation fault (core dumped)
然后就直接在停的地方输入
where
出来一大箩筐东西,特别机器代码。。。但是基本都是opencv库的东西。。
从一大堆各种调用回调过程中,最先出现在视野中熟悉的是:
data_augmentation.py, line 82, in resize (img=<numpy.ndarray at remote 0x7fff66f6a8f0>, mask=<numpy.ndarray at remote 0x7fff66f6a8a0>, kpt=[[[<float at remote 0x7fff5d8aa2a0>, <float at remote 0x7fff24d65e28>, 2], [<float at remote 0x7fff24d65e40>, <float at remote 0x7fff638b1318>, 2], [<float at remote 0x7fff638b1330>, <float at remote 0x7fff18e80498>, 2], [<float at remote 0x7fff31e6a618>, <float at remote 0x7fff31e6a630>, 2], [<float at remote 0x7fff395238d0>, <float at remote 0x7fff395238b8>, 2], [<float at remote 0x7fff31e6a6c0>, <float at remote 0x7fff31e6a6d8>, 2], [<float at remote 0x7fff18e804b0>, <float at remote 0x7fff16292b40>, 2], [<float at remote 0x7fff20b0ec30>, <float at remote 0x7fff20b0ec48>, 2], [<float at remote 0x7fff3b87f180>, <float at remote 0x7fff3b87f168>, 2], [<float at remote 0x7fff312a17f8>, <float at remote 0x7fff312a17e0>, 2], [<float at remote 0x7fff20b0ecd8>, <float at remote 0x...(truncated))
这才意识到不是pytorch的问题,而是opencv的resize出bug了。。。
找bug:
然后就看这个函数,好像只有一个随机产生的缩放尺度变量ratio,是可能出问题的,就再次执行train,看ratio的变化,果然,在ratio>25的时候训练被终止了,报错了,好像是resize本身的bug。。。。把它限制在6以下,就不会被终止训练了。。
这个事情告诉我们先搞清楚bug的源头,再Google。。。不然蒙圈了。。