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

Keras中加载与训练输入尺寸不同的图像问题求助

解决Keras超分辨率CNN处理大尺寸图像的问题

我明白你遇到的困扰——训练时用41x41的图像块,预测却要处理更大尺寸的图像,设置input_shape=(None, None, ...)后加载权重还是行不通。这其实是Keras模型加载和结构定义的常见问题,我给你几个针对性的解决方案:

  • 核心问题:训练模型的固定输入尺寸被固化在模型结构中
    如果你训练时用的是固定(41,41,3)的输入,直接保存的模型会带着这个固定维度。哪怕你后来改了输入形状,直接加载整个模型(load_model)还是会沿用原来的固定尺寸。正确的做法是重新定义可变输入的模型结构,再单独加载权重:

    # 1. 重新构建模型,使用可变输入形状
    from tensorflow.keras.layers import Input, Conv2D
    from tensorflow.keras.models import Model
    
    def build_variable_input_model():
        # 这里把输入形状设为(None, None, 3),适配任意尺寸的RGB图像
        inputs = Input(shape=(None, None, 3))
        # 完全复制你训练时的模型层结构,不要修改层的参数(比如卷积核数量、大小)
        x = Conv2D(64, (3,3), activation='relu', padding='same')(inputs)
        # ... 这里添加你模型的其他卷积、上采样等层,和训练时完全一致
        outputs = Conv2D(3, (3,3), padding='same')(x)  # 输出和输入通道数一致
        
        model = Model(inputs=inputs, outputs=outputs)
        return model
    
    # 2. 加载训练好的权重
    model = build_variable_input_model()
    model.load_weights('your_training_weights.h5')  # 注意是加载权重,不是整个模型
    
  • 检查模型中是否存在固定尺寸的层
    如果你的模型里有Flatten、Dense这类依赖输入尺寸的层,哪怕设置了可变输入也没用——这些层的权重形状是固定的,无法适配不同大小的输入。解决办法是:

    • 替换成全卷积的替代方案,比如用GlobalAveragePooling2D代替Flatten + Dense(如果涉及分类任务,但超分辨率场景一般不会用到这类层,不过还是要仔细检查)
    • 确保所有层都是卷积、池化、上采样这类不依赖固定输入尺寸的层(池化只要步幅固定,就能处理任意尺寸的输入,只要输出尺寸为整数即可)
  • 验证可变输入是否生效
    你可以用一张大尺寸图像测试:

    import numpy as np
    import cv2
    
    # 读取并预处理大图像
    img = cv2.imread('large_test_image.jpg')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) / 255.0
    img = np.expand_dims(img, axis=0)  # 增加batch维度
    
    # 预测
    super_res_img = model.predict(img)
    # 处理输出,比如去掉batch维度,转成0-255的图像
    super_res_img = np.squeeze(super_res_img) * 255.0
    super_res_img = super_res_img.astype(np.uint8)
    

这样应该就能解决你遇到的问题了——关键是要先构建可变输入的模型结构,再加载训练好的权重,而不是直接加载原来的固定尺寸模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:48:08