首页 > 解决方案 > 胶子模型形状不一致

问题描述

我正在尝试胶子模型动物园

import mxnet as mx
from mxnet.gluon.model_zoo import vision
import cv2
import numpy as np

ctx = mx.gpu(6) # successful
net = vision.alexnet(pretrained=True, ctx=ctx)

# preparing input image. 
# You may ignore this process. This just preprocess an image for the net.
# To load input image as shape (batch=1, channel=3, width, height)
im = cv2.imread(‘img.jpg’) # w,h = 4032,3024. rgb color image
im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB).astype(float)/255
im = mx.image.color_normalize(im, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) 
im = np.transpose(im, (2,0,1)) # (4032,3024,3) -> (3,4032,3024)
im = im[None,:] # (3,4032,3024) -> (1,3,4032,3024). this means batchsize=1
im = mx.nd.array(im, ctx=ctx)

# run 
r = net(im)

当我运行它时,会发生错误。

MXNetError: Shape inconsistent, Provided = [4096,9216], inferred shape=(4096,2976000)

我必须将图像大小调整为特定大小吗?在manual中,gluon 只需要最小尺寸的宽度、高度。我应该考虑最大尺寸还是固定输入尺寸?

标签: mxnet

解决方案


根据原始论文,您需要将输入大小固定为 256 到 256,因为这是训练 AlexNet 网络的图像大小。通常,您可以通过将较小的轴(宽度或高度)调整为 256,然后进行中心裁剪来实现它。

问题是,当您使用神经网络进行预测时,您需要以与训练数据完全相同的方式准备输入数据。如果你不这样做,在最简单的情况下会出现形状不匹配错误。在更复杂的情况下,当形状匹配,但图像与模型训练的图像截然不同时,结果肯定是错误的。


推荐阅读