caffe学习笔记——用训练好的caffemodel进行图像分类
caffe程序自带有一张小猫图片,存放路径为caffe根目录下的 examples/images/cat.jpg, 现在我们想用一个训练好的caffemodel来对这张图片进行分类。开发caffe的团队,利用imagenet图片和caffenet模型训练好了一个caffemodel, 供大家下载。要进行图片的分类,这个caffemodel是最好不过的了。不管是用c++来进行分类,还是用python接口来分类,我们都应该准备这样三个文件:
1、caffemodel文件
可以直接在浏览器里输入地址下载,也可以运行脚本文件下载。由于在Windows环境下跑,这里直接在浏览器里输入地址下载,下载地址为:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
文件名称为:bvlc_reference_caffenet.caffemodel,文件大小为230M左右,为了代码的统一,将这个caffemodel文件下载到caffe根目录下的 models/bvlc_reference_caffenet/ 文件夹下面。若在Ubuntu环境下,也可以运行脚本文件进行下载:
# sudo ./scripts/download_model_binary.py models/bvlc_reference_caffenet2、均值文件
有了caffemodel文件,就需要对应的均值文件,在测试阶段,需要把测试数据减去均值。这个文件我没有找到下载的地方,因此在测试时并未减去均值。若在Ubuntu环境下用脚本来下载,在caffe根目录下执行:
# sudo sh ./data/ilsvrc12/get_ilsvrc_aux.sh执行并下载后,均值文件放在 data/ilsvrc12/ 文件夹里。
3、synset_words.txt文件
该文件里面放的是1000个类的名称,放在 data/ilsvrc12/ 文件夹里。
此处,我们用PYTHON接口来实现分类,参考的是denny所写的代码。编写一个py文件,命名为classify_cat.py
#coding=utf-8 #加载必要的库 import numpy as np import sys,os #设置当前目录 caffe_root = 'D:/caffe/caffe-master/caffe-master/' os.chdir(caffe_root) #sys.path.insert(0, caffe_root + 'python') #sys.path.append('D:/caffe/caffe-master/caffe-master/python') sys.path.append('D:/caffe/caffe-master/caffe-master/python/caffe') import caffe net_file=caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt' caffe_model=caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel' mean_file=caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy' net = caffe.Net(net_file,caffe_model,caffe.TEST) transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2,0,1)) transformer.set_mean('data', np.load(mean_file).mean(1).mean(1)) transformer.set_raw_scale('data', 255) transformer.set_channel_swap('data', (2,1,0)) im=caffe.io.load_image(caffe_root+'examples/images/cat.jpg') net.blobs['data'].data[...] = transformer.preprocess('data',im) out = net.forward() imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt' labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t') top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1] for i in np.arange(top_k.size): print (top_k[i], labels[top_k[i]])在CMD窗口执行这个文件,有两种方式:
(1)先把路径转换到py文件所在位置再执行:
(2)直接执行
执行结束后,得到如下结果:
caffe有一个自带的classify.py文件,这里没有跑,就不多做说明。有兴趣的可以看denny的博客。
阅读更多- Caffe_Windows学习笔记(五)用训练好的caffemodel来进行分类
- Caffe学习系列:用训练好的caffemodel来进行分类
- Caffe学习系列:用训练好的caffemodel来进行分类
- Caffe学习系列:用训练好的caffemodel来进行分类
- tensorflow 学习笔记(十二)- 用别人训练好的模型来进行图像分类
- Windows下caffe用fine-tuning训练好的caffemodel来进行图像分类
- Caffe(20):用训练好的caffemodel来进行分类
- caffe学习笔记3:使用caffe对自己的图像数据进行训练和测试
- caffe学习笔记(十六)--用caffemodel进行图片分类
- caffe学习笔记(十七)--用caffemodel进行批量图片分类
- 【神经网络与深度学习】用训练好的caffemodel来进行分类
- 利用CNN进行图像分类学习笔记
- Tensorflow学习(7)用别人训练好的模型进行图像分类
- Caffe学习系列(20):用训练好的caffemodel来进行分类
- 深度学习文章5:使用caffe对自己的图像数据进行训练并测试
- caffe学习:利用已训练的ceffemodel进行分类
- Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习
- tensorflow 1.0 学习:用别人训练好的模型来进行图像分类
- [caffe学习笔记]用自己的数据进行训练和测试
- 用训练好的caffemodel来进行分类