美文网首页
mxnet 使用预训练模型预测

mxnet 使用预训练模型预测

作者: Jancd | 来源:发表于2018-06-22 06:41 被阅读190次

 本教程解释了如何通过预先训练的模型来识别图像中的对象,以及如何执行特征提取。

官网:mxnet.incubator.apache.org,文中如有任何错漏的地方请谅解并指出,不胜感激.


准备

完成本教程您需要:
- 安装mxnet
- 安装python 以及 Requests, Matplotlib, Jupyter Notebook.

$ pip install requests matplotlib jupyter opencv-python

加载

 我们首先下载了一个经过训练的ResNet 152层,它是在完整的ImageNet数据集上训练的,有超过1000万张图片和1万个类。一个预训练的模型包含两个部分,一个包含模型定义的json文件和一个包含参数的二进制文件。此外,标签可能还有一个文本文件。

import mxnet as mx
path='http://data.mxnet.io/models/imagenet-11k/'
[mx.test_utils.download(path+'resnet-152/resnet-152-symbol.json'),
 mx.test_utils.download(path+'resnet-152/resnet-152-0000.params'),
 mx.test_utils.download(path+'synset.txt')]

接着,加载下载的模型。注意:如果GPU可用,我们可以用mx.gpu()替换所有mx. cpu()来加速计算。

 sym, arg_params, aux_params = mx.model.load_checkpoint('resnet-152', 0)
mod = mx.mod.Module(symbol=sym, context=mx.cpu(), label_names=None)
mod.bind(for_training=False, data_shapes=[('data', (1,3,224,224))], 
         label_shapes=mod._label_shapes)
mod.set_params(arg_params, aux_params, allow_missing=True)
with open('synset.txt', 'r') as f:
    labels = [l.rstrip() for l in f]

预测

我们首先定义辅助函数来下载图像和执行预测:

%matplotlib inline
import matplotlib.pyplot as plt
import cv2
import numpy as np
# define a simple data batch
from collections import namedtuple
Batch = namedtuple('Batch', ['data'])

def get_image(url, show=False):
    # download and show the image
    fname = mx.test_utils.download(url)
    img = cv2.cvtColor(cv2.imread(fname), cv2.COLOR_BGR2RGB)
    if img is None:
         return None
    if show:
         plt.imshow(img)
         plt.axis('off')
    # convert into format (batch, RGB, width, height)
    img = cv2.resize(img, (224, 224))
    img = np.swapaxes(img, 0, 2)
    img = np.swapaxes(img, 1, 2)
    img = img[np.newaxis, :]
    return img

def predict(url):
    img = get_image(url, show=True)
    # compute the predict probabilities
    mod.forward(Batch([mx.nd.array(img)]))
    prob = mod.get_outputs()[0].asnumpy()
    # print the top-5
    prob = np.squeeze(prob)
    a = np.argsort(prob)[::-1]
    for i in a[0:5]:
        print('probability=%f, class=%s' %(prob[i], labels[i]))

        

现在,我们可以用任何可下载的链接进行预测:

predict('http://writm.com/wp-content/uploads/2016/08/Cat-hd-wallpapers.jpg')
predict('http://thenotoriouspug.com/wp-content/uploads/2015/01/Pug-Cookie-1920x1080-1024x576.jpg')

特征提取

 通过特征提取,我们的意思是通过内部层的输出而不是最后的softmax层来呈现输入图像。这些输出可以被视为原始输入图像的特征,然后可以被其他应用程序(如对象检测)使用。

我们可以使用get_internals方法从一个符号获取所有内部层。

# list the last 10 layers
all_layers = sym.get_internals()
all_layers.list_outputs()[-10:]

 常用的特征提取层是在最后一个全连通层之前的一层。对于ResNetInception来说,它是一个扁平的层,它的名称是平坦的,它将四维卷积层的输出变成了二维的完全连接层。下面的源代码提取了一个新的符号,它输出扁平的层并创建一个模型。

fe_sym = all_layers['flatten0_output']
fe_mod = mx.mod.Module(symbol=fe_sym, context=mx.cpu(), label_names=None)
fe_mod.bind(for_training=False, data_shapes=[('data', (1,3,224,224))])
fe_mod.set_params(arg_params, aux_params)

我们现在可以调用forward来获得特性:

img = get_image('http://writm.com/wp-content/uploads/2016/08/Cat-hd-wallpapers.jpg')
fe_mod.forward(Batch([mx.nd.array(img)]))
features = fe_mod.get_outputs()[0].asnumpy()
print(features)
assert features.shape == (1, 2048)

相关文章

  • mxnet 使用预训练模型预测

     本教程解释了如何通过预先训练的模型来识别图像中的对象,以及如何执行特征提取。 官网:mxnet.incubato...

  • Gluoncv: VOCDetection

    含义 Mxnet中的Gluoncv提供标准VOC和COCO数据集上的预训练模型、数据读取类和训练程序.image....

  • TensorFlow 同时导入多个预训练模型进行 finetun

    这篇文章将说明怎么同时导入多个预训练模型进行训练。 前面的文章 TensorFlow 使用预训练模型 ResNet...

  • [MXnet] 如何将数据集加载到MXnet中

    MXnet的学习笔记,这次主要是使用MXnet提供的example模型进行训练时如何加载数据集的介绍。步骤基本上按...

  • pytorch如何给预训练模型添加新的层

    在使用pytorch预训练模型的时候发现预训练模型的输出层没有激活函数,为了提高模型的训练效果需要自己添加。以Re...

  • 《Estimator工程实现》系列一:使用Estimator时f

    1. 本文重点 本篇博客主要介绍如何使用 training_hooks进行预训练模型参数加载, 实现单预训练模型或...

  • tensorflow模型保存

    在使用TensorFlow训练模型时,为了避免每次预测都要重新训练模型,模型保存必不可少。而在模型保存时,使用不同...

  • Bert基础介绍

    BERT理解 1、预训练模型 BERT是一个预训练的模型,那么什么是预训练呢? 假设已有A训练集,先用A对网络进行...

  • [Deep-Learning-with-Python]计算机视觉

    包括: 理解卷积神经网络 使用数据增强缓解过拟合 使用预训练卷积网络做特征提取 微调预训练网络模型 可视化卷积网络...

  • keras 入门 api

    概述 神经网络使用中主要包括:训练;预测 训练前需要准备:数据;定义模型结构; 数据:训练集、测试集、打标签 模型...

网友评论

      本文标题:mxnet 使用预训练模型预测

      本文链接:https://www.haomeiwen.com/subject/aophyftx.html