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

YOLOv3 Keras模型加载报错:yolo_head未定义问题求助

解决Keras-YOLOv3加载完整模型时yolo_head未定义的问题

核心原因

使用save_weights_only=False保存完整模型时,Keras会将模型结构(包括自定义层/函数的调用关系)一并保存。加载时不仅需要指定损失函数yolo_loss,还需要包含模型结构中用到的所有自定义函数——yolo_head是yolo_body构建模型时直接调用的函数,必须加入custom_objects字典。

解决方案

方案1:显式指定所有用到的自定义函数

从model.py中导入所有模型结构依赖的自定义函数,加载时全部传入custom_objects:

from keras.models import load_model
from model import yolo_loss, yolo_head, yolo_boxes_and_scores, yolo_body

# 加载剪枝后的模型
pruned_model = load_model(
    'path/to/your/pruned_model.h5',
    custom_objects={
        'yolo_loss': yolo_loss,
        'yolo_head': yolo_head,
        'yolo_boxes_and_scores': yolo_boxes_and_scores
    }
)

方案2:直接导入整个model模块的字典(更简便)

如果不确定哪些函数需要导入,可以直接将model模块的全局字典传入custom_objects,自动覆盖所有模块内的自定义函数:

from keras.models import load_model
import model

pruned_model = load_model(
    'path/to/your/pruned_model.h5',
    custom_objects=model.__dict__
)

额外检查项

  • 确保加载模型的环境与保存时一致:Python3.6.5、Tensorflow1.13、对应版本的Keras(建议使用Keras 2.2.4,适配TF1.13)。
  • 确认剪枝过程未破坏模型结构中对yolo_head等函数的调用逻辑,避免剪枝工具误删相关节点引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:22:15