胶子模型形状不一致

时间:2018-11-08 07:32:16

标签: mxnet

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

也许mxnet经过预先训练的alexnet无法处理大尺寸的图像。

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