mxnet使用预训练模型预测
2017-11-03 23:48
483 查看
Release
- September 06,2017.MXNet 0.11.0
官网:mxnet.incubator.apache.org,文中如有任何错漏的地方请谅解并指出,不胜感激.
准备
完成本教程您需要:- 安装mxnet
- 安装
python以及
Requests, Matplotlib, Jupyter Notebook.
$ pip install requests matplotlib jupyter opencv-python
加载
我们首先下载了一个经过训练的ResNet152层,它是在完整的
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:]
常用的特征提取层是在最后一个全连通层之前的一层。对于
ResNet和
Inception来说,它是一个扁平的层,它的名称是平坦的,它将四维卷积层的输出变成了二维的完全连接层。下面的源代码提取了一个新的符号,它输出扁平的层并创建一个模型。
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)
相关文章推荐
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- 使用lenet模型训练及预测自己的图片数据
- TensorFlow学习笔记(七) 使用训练好的inception_v3模型预测分类图片
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测(tf.graph_util.convert_variables_to_constants函数)
- 简单数据预测—使用Python训练回归模型并进行预测(转自蓝鲸网站分析博客)
- 使用mxnet的预训练模型(pretrained model)分类与特征提取
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- MXNet官方文档中文版教程(8):使用预训练模型预测
- Day Four——分别使用Keras和Sklearn训练模型预测结果
- Tensorflow使用的预训练的resnet_v2_50,resnet_v2_101,resnet_v2_152等模型预测,训练
- 深度学习Caffe平台实例——CIFAR-10数据集在caffe平台上模型训练及实例使用模型进行预测
- 将tf训练的权重保存为CKPT,PB ,CKPT 转换成 PB格式。并将权重固化到图里面,并使用该模型进行预测
- Tensorflow保存模型,恢复模型,使用训练好的模型进行预测和提取中间输出(特征)【转】
- 使用三种继承回归模型对美国波士顿房价训练数据进行学习,并对测试数据进行预测
- tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
- Tensorflow保存模型,恢复模型,使用训练好的模型进行预测和提取中间输出(特征)
- SQL脚本实现算法模型的训练,预测
- 【Caffe的C++接口使用说明(三)】Ubuntu14.04下Caffe利用训练好的模型进行分类的C++接口使用说明(三)