????????最近做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就可以了。