如何调用 caffe 训练好的模型对输入图片进行测试

如何调用 caffe 训练好的模型对输入图片进行测试

该部分包括两篇文章

对 caffe 来说常用的有两种接口,一种是通过 C++ 接口, 另一种是通过 python 接口。这里以 caffe 中自带的 mnist 手写数据集为例。

训练好模型之后,应该如何调用训练好的模型了。其实训练的过程就是对网络进行前向传播,计算最后的输出结果,也即模型的预测结果,所以输入的网络模型应该是去除了反向传播过程的,比如求loss。通过下面的对比可以非常清晰的看到区别。第一张为训练模型时的网络,第二张图为预测时的网络。

[外链图片转存失败(img-sVWE3ymO-1566132389138)(2019-08-18-20-44-38.png)]
在这里插入图片描述

被测试的图片可以自己准备测试的图片,也可以从 mnist 数据集中提取。如果是从数据集中提取可以参考 mnist数据集转换为图片+测试手写字的demo。这里直接用画板手写一个数字的图片来进行测试。需要注意的是这张图片应该是 28 * 28 pix, 然后为256的二值图像。下图是我用的测试图像(放大了12倍的效果)。

[外链图片转存失败(img-8jx4cQsW-1566132389139)(2019-08-18-20-45-16.png)]

1. C++ 接口

在 examples/cpp_classification 文件夹下有 classification.cpp 文件,其中定义了 Classifier 类, 用来进行测试,需要注意的是这个 class 是基于 opencv 的,所以对于不想折腾 opencv 的朋友, 可以选择 python 接口。
但是对于 C++ 接口,比较麻烦的是 vs 的环境配置,需要弄好所以的依赖性,是一件很麻烦的事情。具体可以参考 CAFFE安装笔记[windows和ubuntu]。coding 部分比较简单,直接把 classification.cpp 的main() 函数部分修改一下就可以了,这里不再赘述。

2. python 接口

相比 C++ 接口,python接口使用起来更为方便,当然实际应用中很多都是部署到 C++ 应用中。为了方便,这里利用 jupyter 来进行测试。当然首先要保证你已经配置好了 caffe 的 python 接口。 代码如下。

# set up Python environment: numpy for numerical routines, and matplotlib for plotting
import numpy as np
import matplotlib.pyplot as plt
# display plots in this notebook
%matplotlib inline

# set display defaults
plt.rcParams['figure.figsize'] = (10, 10)        # large images
plt.rcParams['image.interpolation'] = 'nearest'  # don't interpolate: show square pixels
plt.rcParams['image.cmap'] = 'gray'  # use grayscale output rather than a (potentially misleading) color heatmap

# The caffe module needs to be on the Python path;
#  we'll add it here explicitly.
import sys
caffe_root = 'C:/Projects/caffe/'  # this file should be run from {caffe_root}/examples (otherwise change this line)
sys.path.insert(0, caffe_root + 'python')

import caffe
# If you get "No module named _caffe", either you have not built pycaffe or you have the wrong path.

import os
if os.path.isfile(caffe_root + 'examples/mnist/lenet_iter_10000.caffemodel'):
    print('CaffeNet found.')
else:
    print('Downloading pre-trained CaffeNet model...')

caffe.set_mode_cpu()

model_def = caffe_root + 'examples/mnist/lenet.prototxt'
model_weights = caffe_root + 'examples/mnist/lenet_iter_10000.caffemodel'

IMAGE_FILE ='F:\\VS_Project\\opencv_test\\opencv_test\\gray_9.jpg'
input_image=caffe.io.load_image(IMAGE_FILE,color=False)

net =caffe.Classifier(model_def,model_weights)
prediction=net.predict([input_image],oversample=False)
caffe.set_mode_cpu()
print('predicted class:', prediction[0].argmax())

除此之外也可以参考官方的资料 Classification: Instant Recognition with Caffe。在官方的资料中的是用的另外一种方法,较上面的功能更为强大,可以观察更多的输出,比如中间层的输出,感兴趣的朋友也可以仔细研究下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值