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

如何使用ImageAI在Python中加载自定义训练的ResNet50模型?

如何使用ImageAI在Python中加载自定义训练的ResNet50模型?

我之前也碰到过一模一样的问题,ImageAI默认的模型加载流程是专门为它官方提供的预训练模型设计的,直接用loadModel()加载自定义PyTorch模型肯定会踩坑。咱们结合你的情况一步步解决:

先解释你遇到的错误原因

你收到的Model not yet loaded错误,本质是因为ImageAI的loadModel()方法默认只识别它官方发布的预训练模型格式(比如特定命名的.pth文件),而你自己训练保存的.pt模型是标准PyTorch的state_dict或者完整模型,和它的预期格式不匹配,所以loadModel()实际上并没有成功加载模型。

针对你的问题逐一解答

1. 有没有特定方法加载自定义训练的模型?

有的,但不能用默认的loadModel(),需要手动接管模型权重的加载流程,把自定义权重注入到ImageAI初始化的ResNet50模型里。

2. 有没有特殊的导出或转换要求?

不需要转换格式,但要确保两点:

  • 你的自定义模型是基于标准ResNet50架构修改的(和ImageAI底层用的ResNet50结构一致)
  • 保存模型时,要么保存完整模型,要么保存正确的state_dict(训练时用torch.save(model.state_dict(), "model.pt")而不是只保存部分参数)

3. 是否需要修改state_dict或使用特定格式?

如果你的模型是单GPU训练的,通常不需要修改state_dict;如果是多GPU训练的,state_dict的键会带有module.前缀,这时候需要去掉前缀才能匹配ImageAI的模型结构。另外,如果你的自定义数据集类别数不是默认的1000类,还需要先修改ImageAI模型的分类头(fc层)维度。

具体实现代码

下面是适配你的场景的完整代码:

from imageai.Classification import ImageClassification
import torch

# 初始化ImageAI分类器并设置模型类型
classifier = ImageClassification()
classifier.setModelTypeAsResNet50()

# 获取ImageAI的ResNet50模型实例
base_model = classifier.model

# --------------------------
# 关键步骤1:适配自定义数据集的类别数
# 把num_classes改成你自己数据集的类别数量
num_classes = 10
base_model.fc = torch.nn.Linear(base_model.fc.in_features, num_classes)
# --------------------------

# --------------------------
# 关键步骤2:加载自定义模型权重
custom_weights = torch.load("path/to/custom/model.pt")

# 如果是多GPU训练的模型,需要去除state_dict中的`module.`前缀
# 单GPU训练的话可以注释掉下面这行
custom_weights = {k.replace('module.', ''): v for k, v in custom_weights.items()}

# 加载权重到模型
base_model.load_state_dict(custom_weights)
# --------------------------

# --------------------------
# 关键步骤3:将模型设置回分类器并切换到评估模式
classifier.model = base_model
classifier.model.eval()
# --------------------------

# 现在可以正常进行预测了
predictions, probabilities = classifier.classifyImage("path/to/test/image.jpg")
for pred, prob in zip(predictions, probabilities):
    print(f"{pred}: {prob:.2f}%")

额外注意事项

  • 确保你的PyTorch版本和训练模型时的版本尽量一致,避免权重加载时的兼容性问题
  • 如果加载时提示键不匹配,检查你的自定义模型和ImageAI的ResNet50结构是否一致(比如是否修改了除fc层外的其他层)
  • 测试时用你自定义数据集中的图片,确保分类结果符合预期

备注:内容来源于stack exchange,提问作者KaleBats123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:48:00