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

如何调整输入适配ResNet101?解决通道与尺寸不匹配问题

适配ResNet101输入的修改方案

你的问题核心是两处输入不匹配:

  • ResNet101预训练模型默认要求3通道RGB输入,但你的输入是1通道灰度图
  • 模型期望输入尺寸为229×229(从错误信息推断),但你的输入是48×48

修改步骤:

  1. 单通道转3通道:将灰度图复制3次,模拟RGB通道结构(ResNet第一层卷积核设计为接收3通道输入)
  2. 调整输入尺寸:把48×48的人脸区域resize到模型要求的229×229
  3. 补充batch维度:模型输入需要[batch_size, channels, height, width]格式,需给张量添加batch维度

修改后的关键代码段:

if __name__ == "__main__":
    vid = cv2.VideoCapture(0)
    emotions = []
    while vid.isOpened():
        # 原代码中同时读取本地图片和摄像头帧,逻辑冲突,建议统一用摄像头帧
        _, frame = vid.read()
        if not _:
            break

        # 基于摄像头帧生成灰度图,和人脸检测源保持一致
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        faces = face_cascade.detectMultiScale(frame)
        for (x,y,w,h) in faces:
            
            # 修正宽度截取错误:原代码用x:x+h,应改为x:x+w
            roi_gray = gray[y:y+h, x:x+w]
            # 1. 调整尺寸到模型期望的229×229
            resized = cv2.resize(roi_gray, (229, 229))
            # 2. 单通道灰度图转3通道BGR格式
            rgb_img = cv2.cvtColor(resized, cv2.COLOR_GRAY2BGR)
            # 3. 转张量并添加batch维度
            img = img2tensor(rgb_img).unsqueeze(0)
            # 执行预测
            prediction = predict(img)

额外说明:

  • 若使用标准预训练ResNet101,通常输入尺寸为224×224,可根据你的模型配置调整resize参数
  • 原代码中roi_gray的宽度截取逻辑错误,会导致人脸区域变形,已修正为x:x+w
  • 原代码同时读取本地图片和摄像头帧,存在逻辑冲突,已调整为统一使用摄像头帧处理

内容的提问来源于stack exchange,提问作者Berkay Çamur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:35:21