TensorFlow2.4运行TFODCourse模型评估报4维输入错误如何解决
错误含义解释
tensorflow.python.framework.errors_impl.InvalidArgumentError: input must be 4-dimensional[1,1,371,300,3]
[[{{node ResizeImage/resize/ResizeBilinear}}]] [Op:IteratorGetNext]
这个错误核心是输入张量维度不匹配:
- 模型的ResizeBilinear预处理节点要求输入为4维张量,标准格式为
[批量大小, 图片高度, 图片宽度, 通道数] - 实际传入的是5维张量
[1,1,371,300,3],第二个1是多余的冗余维度,导致运算失败
常见成因
- TFRecord生成逻辑错误:生成训练/评估用的TFRecord文件时,误给单张图片的张量多扩了一维,比如单图本来是
[371,300,3],存的时候变成[1,371,300,3],加载时拼批量就会变成[batch_size,1,H,W,C]的5维结构 - pipeline.config配置错误:图像resize模块的配置不符合要求,或者手动添加了多余的预处理扩维操作
- 标注转换脚本bug:VOC标注转TFRecord的脚本存在逻辑问题,处理图片数组时额外加了维度
排查处理步骤
- 验证TFRecord的维度正确性
写简单脚本读取你生成的eval TFRecord文件,打印每条记录的图片张量形状,如果单张图片的形状已经是[1,H,W,C],说明是生成阶段的问题,修改转换脚本,用tf.squeeze()去掉多余的维度后再写入TFRecord - 检查pipeline.config的resize配置
找到配置文件中的image_resizer块,确认和你使用的模型匹配,以ssd_mobnet为例,正确配置参考:
image_resizer { fixed_shape_resizer { height: 300 width: 300 } }
不要修改默认resize逻辑的其他参数,避免引入维度错误
- 调试数据加载逻辑
如果上述步骤都没问题,在model_main_tf2.py的数据加载输出位置,加一行打印张量形状的代码,确认冗余维度出现的位置,临时修复可以加input_tensor = tf.squeeze(input_tensor, axis=1)直接去掉多余的第二个维度 - 重置配置文件
如果是手动修改配置文件导致的问题,直接下载对应预训练模型的官方pipeline.config模板,只修改num_classes、train_input_reader/eval_input_reader的路径、batch_size这几个必要参数,不要改动默认预处理逻辑
内容的提问来源于stack exchange,提问作者allNighter
相关产品推荐
相关产品推荐

