运行NiftyNet快速启动命令时遇FloorMod KeyError求助
解决NiftyNet启动时FloorMod梯度注册冲突的KeyError
我之前踩过这个一模一样的坑,结合你描述的环境和错误信息,问题主要出在TensorFlow版本兼容性和命令执行格式错误这两个点上,给你几个针对性的解决方案:
1. 先修正命令执行格式(最容易忽略的点)
你把net_download.py和net_segment.py两个命令写在同一行了,这会导致脚本解析错误,触发异常!正确的操作是分开执行:
首先下载预训练模型:
python net_download.py dense_vnet_abdominal_ct_model_zoo
等下载完成后,再单独执行推理命令:
python net_segment.py inference -c ~/niftynet/extensions/dense_vnet_abdominal_ct/config.ini
2. 匹配NiftyNet与TensorFlow的兼容版本
你用的TensorFlow 1.4.1版本太老了,和NiftyNet的新版本存在算子兼容性问题——FloorMod的梯度注册冲突就是典型的版本不匹配表现。建议:
- 卸载当前的TensorFlow,安装1.13.x或1.14.x版本(这两个是NiftyNet 0.6.x版本的官方适配版本):
pip uninstall tensorflow pip install tensorflow-gpu==1.14.0 # GPU版,对应你的Nvidia GPU环境 # 或者CPU版:pip install tensorflow==1.14.0 - 同时确保NiftyNet是对应兼容的版本:
pip install niftynet==0.6.0
3. 清理环境缓存避免残留冲突
如果之前在多个环境里反复测试过,建议清理NiftyNet的缓存目录,避免旧的配置或依赖残留:
rm -rf ~/.niftynet
然后重新安装依赖并执行命令。
4. 尝试官方预配置Docker镜像
如果不想折腾环境,直接用NiftyNet官方的Docker镜像,已经打包好了兼容的TensorFlow和所有依赖:
docker pull niftynet/niftynet:1.14.0 docker run -it --gpus all niftynet/niftynet:1.14.0 # GPU版,需要Docker支持GPU # 进入容器后再执行下载和推理命令
为什么会出现这个错误?
FloorMod算子的梯度注册逻辑在TensorFlow 1.x早期版本(比如1.4)里存在不完善的地方,而NiftyNet的部分模块会重新定义这个算子的梯度实现,当版本不兼容或者脚本重复加载TensorFlow时,就会触发“重复注册梯度”的KeyError。分开执行命令能避免两个脚本同时初始化TensorFlow导致的冲突,升级版本则能从根本上解决算子实现的兼容性问题。
内容的提问来源于stack exchange,提问作者bsp2020
相关产品推荐
相关产品推荐

