keras 3D UnetCNN训练时出现的segmentation fault的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keras 3D UnetCNN训练时出现的segmentation fault的问题相关的知识,希望对你有一定的参考价值。

参考技术A         最近做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就可以了。

使用自定义损失函数编译 Keras 模型时出现 TypeError

【中文标题】使用自定义损失函数编译 Keras 模型时出现 TypeError【英文标题】:TypeError while compiling Keras model with custom loss function 【发布时间】:2020-09-07 09:32:32 【问题描述】:

我已经训练了一个具有自定义损失函数 BinaryCrossEntropy 的模型,使用 Jaccard,使用分段模型库,当我尝试加载和编译模型以开始预测时,我得到了这个错误: model = compile(optimizer='adam', loss=bce_jaccard_loss, metrics=['iou_score']) TypeError: compile() missing required argument 'source' (pos 1)

请问我该如何解决?

import keras
import segmentation_models as sm
from segmentation_models.losses import bce_jaccard_loss
from segmentation_models.metrics import iou_score

model = keras.models.load_model("ResNet_34_Aug.h5", compile = False)
model = compile(optimizer='adam', loss=bce_jaccard_loss, metrics=['iou_score'])

【问题讨论】:

【参考方案1】:

整个问题出在代码的最后一行,缺少的必需参数“源”(位置 1)是模型本身,所以我已将其修复为:

model.compile(optimizer='adam', loss=bce_jaccard_loss, metrics=['iou_score'])

【讨论】:

以上是关于keras 3D UnetCNN训练时出现的segmentation fault的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Keras 上训练 c3d。训练减慢了中期和ETA攀升

将 gridsearchCV 与 Keras RNN-LSTM 一起使用时出现尺寸错误

在构建和训练 3D Keras U-NET 时遇到 ValueError

GPU 在训练大型数据集期间内存不足

在 Keras 中训练对象检测模型时出现不兼容张量形状的问题

用于多输入模型的 R Keras predict_prob 不起作用。我可以成功地训练模型,但是在评分时出现错误