Windows下caffe用fine-tuning训练好的caffemodel来进行图像分类

 小菜准备了几张验证的图片存放路径为caffe根目录下的 examples/images/, 如果我们想用一个微调训练好的caffemodel来对这张图片进行分类,那该怎么办呢?下面小菜来详细介绍一下这一任务的步骤。一般可以同两种方式进行测试,分别是基于c++接口和python接口。不管是用c++来进行分类,还是用python接口来分类,我们都应该准备这样三个文件:
1、 caffemodel文件。
就是之前小菜fine-tuning训练好的caffemodel,小菜用的是result_iter_1000.caffemodel。
2、均值文件。
有了caffemodel文件,就需要对应的均值文件,在测试阶段,需要把测试数据减去均值。这个文件我们用脚本来下载,在caffe根目录下执行:
data/ilsvrc12/get_ilsvrc_aux.sh
执行并下载后,均值文件放在 data/ilsvrc12/ 文件夹里。不过小菜用的是自己的数据集的均值文件,也就是fine-tuning时生成的均值文件mean.binaryproto。
3、synset_words.txt文件
在调用脚本文件下载均值的时候,这个文件也一并下载好了。里面放的是1000个类的名称。小菜自己在examples/myfile/目录下建立一个自己的ynset_words.txt,里面写了根据小菜需要分类的6个类别文本。
数据准备好了,我们就可以开始分类了,我们给大家提供两个版本的分类方法:
一、c++方法
在caffe根目录下的 examples/cpp-classification/ 文件夹下面,有个classification.cpp文件,就是用来分类的。一开始安装caffe时,编译了caffe.sln会在Build/x64/Release/下有

classification.exe,直接条用就行。我们就直接运行命令:
build/x64/examples/cpp_classification.exe(此处有空格)\
examples/myfile/deploy.prototxt (此处有空格) \  
examples/myfile/result_iter_1000.caffemodel  (此处有空格)\
examples/myfile/mean.binaryproto (此处有空格)\
examples/myfile/synset_words.txt (此处有空格)\
examples/images/cat.jpg

命令很长,用了很多的\符号来换行。可以看出,从第二行开始就是参数,每行一个,共需要4个参数。为了方便小菜这里把这命令写到脚本文件里了(xxx.sh),在cygwin里直接运行。
运行成功后,输出top-5结果:
———- Prediction for examples/images/cat.jpg ———-
0.3134 - “n02123045 tabby, tabby cat”
0.2380 - “n02123159 tiger cat”
0.1235 - “n02124075 Egyptian cat”
0.1003 - “n02119022 red fox, Vulpes vulpes”
0.0715 - “n02127052 lynx, catamount”
即有0.3134的概率为tabby cat, 有0.2380的概率为tiger cat ……
二、python方法
python接口可以使用jupyter notebook来进行可视化操作,因此推荐使用这种方法。建立一个test.py格式的脚本代码如下,在test.py根目录下(CMD)通过运行Python test.py来验证测试图片的分类结果,也可以在cygwin中运行。代码如下:

**#coding=utf-8
****#加载必要的库******
import numpy as np

import sys,os,caffe

**#设置当前目录**
caffe_root = 'd:/caffe-master/' 
sys.path.insert(0, caffe_root + 'python')
import caffe
os.chdir(caffe_root)

net_file=caffe_root + 'examples/myfile/deploy.prototxt'

caffe_model=caffe_root + 'examples/myfile/result_iter_1000.caffemodel'
mean_file=caffe_root + 'examples/myfile/mean.npy'
****#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/2.jpg')
net.blobs['data'].data[...] = transformer.preprocess('data',im)
out = net.forward()
****#imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'****
imagenet_labels_filename = caffe_root + 'examples/myfile/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]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,这里简单介绍一下如何使用caffe-ssd预训练模型进行目标检测。 caffe-ssd是基于caffe框架实现的单阶段目标检测算法,使用预训练模型可以加快模型训练的速度,同时也可以提高模型的检测精度。下面是使用预训练模型做目标检测的步骤: 1. 下载预训练模型 caffe-ssd官方提供了一些预训练模型,可以在这里下载:https://github.com/weiliu89/caffe/tree/ssd#models。选择适合自己数据集的模型进行下载。 2. 准备数据集 准备自己的数据集,包括训练集、验证集和测试集。数据集需要满足SSD数据格式要求,即每个样本需要有对应的标注文件,标注文件格式为:类别id、xmin、ymin、xmax、ymax(例如:0 0.1 0.2 0.3 0.4,表示类别为0,左上角坐标为(0.1, 0.2),右下角坐标为(0.3, 0.4))。 3. 修改配置文件 修改caffe-ssd的配置文件,将模型路径、数据路径、类别数等参数配置正确。其中,模型路径需要指定为下载的预训练模型路径。 4. 训练模型 使用修改后的配置文件训练模型。训练过程中可以调整学习率、迭代次数等参数,以达到更好的效果。 5. 测试模型 使用测试集对训练好的模型进行测试,并计算模型在测试集上的精度和召回率等指标。 以上就是使用caffe-ssd预训练模型做目标检测的基本步骤。需要注意的是,使用预训练模型虽然可以加速模型训练过程,但是如果数据集和预训练模型的差异较大,仍然需要进行微调。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值