胶子模型形状不一致

gluon model shape inconsistency

我正在尝试 gluon model zoo

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,胶子只需要宽度和高度的最小尺寸。我应该考虑最大尺寸,还是固定输入尺寸?

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

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

当我将输入图像调整到254*254以下时,推理成功。

可能 mxnet 的预训练 alexnet 无法处理大尺寸图像。

@Sergei 的评论很有帮助。谢谢。