OpenVINO 2022.1中VGG16模型输入形状转换报错求助
问题解答
错误含义解析
Cannot infer shapes or values for node "fc6/WithoutBiases" 错误的核心原因是输入形状修改后,模型特征图尺寸与全连接层的固定输入维度不匹配:
- VGG16的
fc6是全连接层,原设计基于输入尺寸224x224:经过5轮卷积+池化(每轮池化步长为2,总下采样倍数32),最终生成的特征图尺寸为7x7,对应fc6的输入神经元数为7*7*512=25088,这是固定值。 - 当你将输入改为
300x300时,经过相同池化操作后,特征图尺寸为300/32=9.375(非整数),无法与fc6的固定输入维度对齐,导致模型优化器无法完成形状推断。
OpenVINO对全连接层的支持
OpenVINO完全支持全连接层,全连接层是OpenVINO IR(中间表示)格式原生兼容的层类型。你的问题并非源于不支持,而是输入形状修改后与原模型的结构设计冲突。
解决方法
针对你的需求,提供两种可行方案:
方案1:调整输入尺寸为兼容值
选择能被32整除的输入尺寸(匹配VGG16的总下采样倍数),例如256x256、320x320等。修改后的模型优化器命令示例:
mo --input_model <path_to_model_directory>\vgg16.caffemodel --input data --input_shape [2,3,320,320] -o <path_to_vgg16_fp32_optimized_model_directory>
此时特征图尺寸为320/32=10x10,需同步编辑Caffe模型的prototxt文件,将fc6的输入维度调整为10*10*512=51200,再配合原caffemodel文件运行优化器。
方案2:将全连接层转换为卷积层
全连接层可等价转换为对应尺寸的卷积层,从而支持任意输入尺寸:
- 编辑VGG16的Caffe prototxt文件:
- 将
fc6层替换为卷积层:设置type: "Convolution",kernel_size: 7,stride: 1,num_output: 4096,移除全连接层的inner_product相关参数。 - 同理,将
fc7替换为kernel_size:1、num_output:4096的卷积层,fc8替换为对应输出类别的1×1卷积层。
- 将
- 使用修改后的prototxt与原caffemodel文件,运行你之前的模型优化器命令即可。
内容的提问来源于stack exchange,提问作者Md Maksud-Ul-Kabir Rico
相关产品推荐
相关产品推荐

