You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载RetinaNet模型时出现TensorFlow Keras导入报错如何解决

RetinaNet加载模型Keras接口报错解决方案

错误原因

该报错为版本不兼容导致:官方停止维护的keras-retinanet仅适配TensorFlow 2.3及以下、独立Keras 2.4.3及以下版本。高版本TensorFlow内置Keras移除了keras.utils.generic_utils.populate_dict_with_module_objects接口,同时自定义层序列化逻辑变更,后续出现的Freeze类报错也来源于此。

解决方案

方案1:固定兼容版本(最稳定,适配原始训练环境)

  1. 卸载现有冲突包
pip uninstall -y keras tensorflow keras-retinanet
  1. 安装匹配版本依赖
# CPU版本
pip install tensorflow==2.3.0 keras==2.4.3
# GPU版本对应CUDA 10.1
# pip install tensorflow-gpu==2.3.0 keras==2.4.3
pip install git+https://github.com/fizyr/keras-retinanet.git@0.5.1
  1. 统一导入路径,所有Keras相关导入均从tf.keras调用,避免独立Keras和TensorFlow内置Keras冲突。

方案2:高版本TensorFlow兼容改造(无需降级TF)

  1. 安装社区维护的高版本TF适配分支
pip install git+https://github.com/RobinBaumann/keras-retinanet.git@tf2.10_compat
  1. 调整模型加载代码,显式传入自定义对象并关闭编译
from tensorflow.keras.models import load_model
from keras_retinanet import losses
from keras_retinanet.layers import PriorProbability, RegressionModel, FilterDetections, UpsampleLike

custom_objects = {
    'PriorProbability': PriorProbability,
    'RegressionModel': RegressionModel,
    'FilterDetections': FilterDetections,
    'UpsampleLike': UpsampleLike,
    'smooth_l1': losses.smooth_l1(),
    'focal': losses.focal()
}
# 替换原有加载逻辑
model = load_model(rcnn_model_path, custom_objects=custom_objects, compile=False)

方案3:权重直接加载(适配自定义训练模型)

如果模型是自定义训练的,可直接构建网络结构后加载权重,规避序列化兼容问题:

# 注意num_classes要和预训练模型保持一致
model = models.backbone('resnet101').retinanet(num_classes=你的类别数量, weights=None)
model.load_weights(rcnn_model_path, by_name=True, skip_mismatch=True)

注意事项

  • 高版本TensorFlow(2.4+)已内置Keras,无需单独安装Keras包,否则会出现导入路径冲突
  • 加载推理用预训练模型时建议始终携带compile=False参数,避免训练阶段的优化器、损失函数不兼容问题

内容的提问来源于stack exchange,提问作者Ben Hendel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:54:05