MxNet中的内置VGG16网络无法正常工作

时间:2018-05-18 12:21:41

标签: deep-learning mxnet

我想在MxNet中测试训练有素的内置VGG16网络。该实验是向网络提供来自ImageNet的图像。然后,我想看看结果是否正确。

然而,结果总是错误的!嗨,网络是多么愚蠢!嗯,这不可能是真的。我必须做错事。

from mxnet.gluon.model_zoo.vision import vgg16
from mxnet.image import color_normalize
import mxnet as mx
import numpy as np
import cv2
path=‘http://data.mxnet.io/models/imagenet-11k/’
data_dir = ‘F:/Temps/Models_tmp/’
k = ‘synset.txt’
#gluon.utils.download(path+k, data_dir+k)
img_dir = ‘F:/Temps/DataSets/ImageNet/’
img = cv2.imread(img_dir + ‘cat.jpg’)
img = mx.nd.array(img)
img,_ = mx.image.center_crop(img,(224,224))
img = img/255
img = color_normalize(img,mean=mx.nd.array([0.485, 0.456, 0.406]),std=mx.nd.array([0.229, 0.224, 0.225]))
img = mx.nd.transpose(img, axes=(2, 0, 1))
img = img.expand_dims(axis=0)
with open(data_dir + ‘synset.txt’, ‘r’) as f:
labels = [l.rstrip() for l in f]
aVGG = vgg16(pretrained=True,root=‘F:/Temps/Models_tmp/’)
features = aVGG.forward(img)
features = mx.ndarray.softmax(features)
features = features.asnumpy()
features = np.squeeze(features)
a = np.argsort(features)[::-1]
for i in a[0:5]:
  print(‘probability=%f, class=%s’ %(features[i], labels[i]))

color_normalize的输出似乎不适合某些数字的绝对值大于1。

这是我从ImageNet下载的猫的图。

enter image description here

这些是我的输出。

  

概率= 0.218258,等级= n01519563食火药概率= 0.172373,   class = n01519873 emu,Dromaius novaehollandiae,Emu novaehollandiae   概率= 0.128973,等级= n01521399 rhea,Rhea americana   概率= 0.105253,等级= n01518878鸵鸟,鸵鸟骆驼   概率= 0.051424,等级= n01517565平胸鸟,平胸鸟,不会飞   鸟

1 个答案:

答案 0 :(得分:0)

阅读你的代码:

path=‘http://data.mxnet.io/models/imagenet-11k/’

我认为您可能正在使用ImageNet 11k(11000个类)的synset而不是1k(1000)类。这可以解释不匹配。

正确的synset在这里:http://data.mxnet.io/models/imagenet/synset.txt