代码之家  ›  专栏  ›  技术社区  ›  Blue Bird

MxNet中的内置VGG16网络不工作

  •  0
  • Blue Bird  · 技术社区  · 6 年前

    我想在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\u normalize的输出似乎不正确,因为某些数字的绝对值大于1。

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

    enter image description here

    这些是我的作品。

    概率=0.218258,等级=n01519563,食火鸡概率=0.172373, 等级=n01519873鸸鹋、新喉猴科、新喉猴科 概率=0.128973,等级=n01521399 rhea,rhea americana 概率=0.105253,等级=n01518878驼鸟 概率=0.051424,等级=n01517565 ratite,ratite bird,不会飞 鸟

    1 回复  |  直到 6 年前
        1
  •  0
  •   Thomas    6 年前

    阅读你的代码:

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

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

    正确的语法集如下: http://data.mxnet.io/models/imagenet/synset.txt