使用InceptionV3训练PB文件运行目标检测教程时遇形状不匹配报错
解决InceptionV3检测时的输入尺寸不匹配错误
嘿,这个问题我之前也碰到过,原因很直接:你传入模型的图像尺寸和InceptionV3要求的输入尺寸对不上!
问题根源
InceptionV3在默认配置下(不管是训练还是推理),都要求输入是299×299像素的RGB图像,对应张量形状就是(1, 299, 299, 3)(这里的1是batch size)。但你现在传入的图像是26×38的,形状变成了(1,26,38,3),模型里的ResizeBilinear层自然就报错了。
具体解决步骤
1. 推理前强制调整图像尺寸
在把图像喂给run_inference_for_single_image函数之前,先统一把图像resize到299×299。这里给你两种常用的实现方式:
用OpenCV的话:
import cv2 # 假设image_np是你的输入图像numpy数组 image_np = cv2.resize(image_np, (299, 299)) # 注意如果是用OpenCV读的图,默认是BGR通道,要转成RGB image_np = cv2.cvtColor(image_np, cv2.COLOR_BGR2RGB)
用PIL库的话:
from PIL import Image import numpy as np # 把numpy数组转成PIL图像,resize后再转回数组 image_pil = Image.fromarray(image_np) image_np = np.array(image_pil.resize((299, 299)))
2. 确认模型的实际输入要求
如果你在训练时修改过InceptionV3的输入尺寸(比如为了适配你的数据集改了大小),那推理时也要对应调整。可以用这段代码查看模型期望的输入形状:
with detection_graph.as_default(): with tf.Session(graph=detection_graph) as sess: input_tensor = detection_graph.get_tensor_by_name('image_tensor:0') print("模型期望的输入形状:", input_tensor.shape)
确保你的图像resize后的形状和输出的结果完全一致。
3. 对齐训练与推理的预处理流程
还要检查你推理时的图像预处理是不是和训练时完全一样:比如有没有做归一化(比如把像素值缩放到0-1或者-1到1之间)、颜色通道顺序是不是RGB(训练时用的是RGB的话,推理时不能用BGR),这些细节也可能引发类似的形状或数据不匹配问题。
小提示
如果是批量处理图像,建议写一个统一的预处理函数,把resize、通道转换、归一化这些步骤都封装进去,这样就能避免每次都手动处理,减少出错概率。
内容的提问来源于stack exchange,提问作者송준석
相关产品推荐
相关产品推荐

