keras 3D UnetCNN训练时出现的segmentati

2019-08-16  本文已影响0人  Denny_sun

        最近做3D UnetCNN 医学图像的分割。按照GitHub中的https://github.com/ellisdg/3DUnetCNN官方操作,在执行 python train.py和python train_isensee2017.py时,都会出现segmentation fault的问题。查看了很多网上的资料,始终和自己遇到的问题有所差异。

1)有些人在CPU下可以正常运行,多GPU就不行,有的是单GPU可以,多GPU不行。所以怀疑是Keras多GPU设置的问题,但是程序在CPU和单GPU下仍然会出现segmentation fault的问题。

2)有时候,cudnn的版本问题也会导致segmentation fault的问题。我尝试了几个版本的cudnn,发现问题依旧存在。

3)怀疑是数据本身的问题,导致访问内存出错,尝试了Brats2018和Brats2017,结果都一样。

4)调试程序,用print语句找错误位置,程序运行到Epoch 1/500结束,始终没有找到相应的打印语句。最后找到

model.fit_generator(generator=training_generator,

                        steps_per_epoch=steps_per_epoch,

                        epochs=n_epochs,

                       validation_data=validation_generator,

                        validation_steps=validation_steps,

                        callbacks=get_callbacks(model_file,

                                                initial_learning_rate=initial_learning_rate,

                                                learning_rate_drop=learning_rate_drop,

                                                learning_rate_epochs=learning_rate_epochs,

                                                learning_rate_patience=learning_rate_patience,

                                                early_stopping_patience=early_stopping_patience) )

找到fit_generator()函数的定义,发现参数位置是不对的callbacks在前面

应该是:

model.fit_generator(generator=training_generator,

                        steps_per_epoch=steps_per_epoch,

                        epochs=n_epochs,

                        callbacks=get_callbacks(model_file,

                                                initial_learning_rate=initial_learning_rate,

                                                learning_rate_drop=learning_rate_drop,

                                                learning_rate_epochs=learning_rate_epochs,

                                                learning_rate_patience=learning_rate_patience,

                                                early_stopping_patience=early_stopping_patience),

                        validation_data=validation_generator,

                        validation_steps=validation_steps,

                       use_multiprocessing = True)

程序可以正常运行一个epoch,不会出现segmentation fault的问题。

但是程序还是未能正常运行。最后发现是Keras版本的问题,我的版本是2.2.4,降级到2.1.2就可以了。

上一篇下一篇

猜你喜欢

热点阅读