首先,根据网上教程
在caffe根目录下的 examples/cpp_classification/ 文件夹下面,有个classification.cpp文件,就是用来分类的。编译caffe后自动生成,放在/build/examples/cpp_classification/ 下面,接下来要调用classification.bin
问题1:我的服务器上没有自动生成classification.bin,我也并不知道为什么
解决方法:找别人拷一下,亲测能用
直接运行命令:
命令很长,用了很多的\符号来换行。可以看出,从第二行开始就是参数,每行一个,共需要4个参数
# sudo ./build/examples/cpp_classification/classification.bin \
models/bvlc_reference_caffenet/deploy.prototxt \
models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \
data/ilsvrc12/imagenet_mean.binaryproto \
data/ilsvrc12/synset_words.txt \
examples/images/cat.jpg
问题2:经常会忘记“\”,而且前面的【空格】也是必不可少的,刚开始不熟悉linux,走了不少弯路
运行成功后,输出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"
前文用到的模型caffenet.caffemodel是从caffe model zoo下载的。
那么问题来了,如果我想套用其他的模型,是不是改一个参数就可以呢?
答案是可以。于是从caffe model zoo又下载了VGG16,Alexnet,googlenet,NIN,别忘了同时下载相应的deploy.prototxt。
问题3:F0306 21:27:18.357961 4487 classification.cpp:82] Check failed: labels_.size() == output_layer->channels() (1000 vs. 20) Number of labels is different from the output layer dimension.
使用的模型必须是输出维度为1000类,否则会显示不匹配
但还是有一个问题,现在只能一张一张的测,如果我们想批量处理,应该怎么办呢?
在caffe的根目录下编写脚本,保存为class.sh文件
for i in 6 7
do
build/examples/cpp_classification/classification.bin \
models/bvlc_reference_caffenet/deploy.prototxt
\models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
\data/ilsvrc12/imagenet_mean.binaryproto
\data/ilsvrc12/synset_words.txt
\examples/images/$i.jpg
done
在根目录下./class.sh就可以同时处理images文件下的6.jpg和7.jpg。
同理,想同时处理更多的图片,在for i in 后加上图片名就好啦
如果我想再比较一下各个模型处理时间对比呢?
很简单,在代码前后输入系统时间就好啦
DATE=`date`
echo "$DATE"
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
build/examples/cpp_classification/classification.bin
\models/bvlc_reference_caffenet/deploy.prototxt
\models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
\data/ilsvrc12/imagenet_mean.binaryproto \data/ilsvrc12/synset_words.txt
\data/brdw/$i.jpg
done
DATE=`date`
echo "$DATE"
模型 | 时间(s) |
caffenet | 40 |
Googlenet | 32 |
Alexnet | 40 |
NIN-imagenet | 32 |
VGG | 60 |
用上文提到的五个模型处理我从百度下载的20张图片所需时间对比