Caffe 实例一(cifar10)

Caffe安装编译好后,总要跑点什么吧,Caffe的examples目录下有几个实例,先试一下cifar10

下载

下载cifar10数据集

./data/cifar10/get_cifar10.sh

下载完成后,在data/cifar10目录下会有一些.bin的数据集文件

jimmy@jimmy-MS-7B53:~/AI/caffe/data/cifar10$ ls -l
total 180084
-rw-r--r-- 1 jimmy jimmy       61 6月   5  2009 batches.meta.txt
-rw-r--r-- 1 jimmy jimmy 30730000 6月   5  2009 data_batch_1.bin
-rw-r--r-- 1 jimmy jimmy 30730000 6月   5  2009 data_batch_2.bin
-rw-r--r-- 1 jimmy jimmy 30730000 6月   5  2009 data_batch_3.bin
-rw-r--r-- 1 jimmy jimmy 30730000 6月   5  2009 data_batch_4.bin
-rw-r--r-- 1 jimmy jimmy 30730000 6月   5  2009 data_batch_5.bin
-rwxrwxr-x 1 jimmy jimmy      506 8月  21 16:23 get_cifar10.sh
-rw-r--r-- 1 jimmy jimmy       88 6月   5  2009 readme.html
-rw-r--r-- 1 jimmy jimmy 30730000 6月   5  2009 test_batch.bin
jimmy@jimmy-MS-7B53:~/AI/caffe/data/cifar10$ 

该目录下的batches.meta.txt文件写明了cifar10支持的类别

jimmy@jimmy-MS-7B53:~/AI/caffe/data/cifar10$ cat batches.meta.txt
airplane
automobile
bird
cat
deer
dog
frog
horse
ship
truck

LMDB

caffe默认用的是LMDB数据集,所以还需要讲bin文件转换成lmdb文件

简单介绍一下LMDB的优点:

1.它是一个数据库文件,将大量单个文件平铺起来,所以程序只要打开一个文件即可,不需要反复打开,关闭大量小文件

2.不需要单独的数据库程序管理

3.它用内存映射实现,提示了性能

caffe的example中提供了转换脚本

./examples/cifar10/create_cifar10.sh

jimmy@jimmy-MS-7B53:~/AI/caffe/examples/cifar10$ ls -l *_lmdb
cifar10_test_lmdb:
total 40256
-rw-rw-r-- 1 jimmy jimmy 41218048 8月  22 15:07 data.mdb
-rw-rw-r-- 1 jimmy jimmy     8192 8月  22 15:13 lock.mdb

cifar10_train_lmdb:
total 201208
-rw-rw-r-- 1 jimmy jimmy 206032896 8月  22 15:07 data.mdb
-rw-rw-r-- 1 jimmy jimmy      8192 8月  22 15:13 lock.mdb

训练

caffe里面有./examples/cifar10/train_quick.sh,该脚本文件调用了examples/cifar10/cifar10_quick_solver.prototxt,可以在这个文件中修改训练的相关配置,比如CPU还是GPU

训练完成后会生成两个h5的模型文件

jimmy@jimmy-MS-7B53:~/AI/caffe$ ls -l examples/cifar10/*.h5
-rw-rw-r-- 1 jimmy jimmy 600032 8月  24 13:23 examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5
-rw-rw-r-- 1 jimmy jimmy 590064 8月  24 13:23 examples/cifar10/cifar10_quick_iter_5000.solverstate.h5

验证

同样caffe提供了验证接口,我用的是python接口,所以在安装、编译caffe环境时需要make pycaffe,另外caffe不支持python3.6的版本(其它版本没试过),所以最好直接用python2.7的版本。最好不要同时安装多个版本,虽然能够切换版本,但是编译caffe的时候会有一些兼容性错误,没必要在这个上面浪费时间。

直接使用examples/images/目录下的图片做识别

python python/classify.py --model_def examples/cifar10/cifar10_quick.prototxt --pretrained_model examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5 --center_only examples/images/cat.jpg foo

Classifying 1 inputs.
Done in 0.01 s.
Saving results into foo

结果输出到了foo.npy,这个文件时一个二进制文件,我要的是直接输出结果,所以在classify.py中增加了一些调试信息

    # Classify.
    start = time.time()
    predictions = classifier.predict(inputs, not args.center_only)
    print("Done in %.2f s." % (time.time() - start))
	# predictions
    print("Predictions : %s" % predictions)
    labels = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
    top_k = predictions.flatten().argsort()[-1:-10:-1]
    print("top_k : %s" % top_k)
    for i in np.arange(top_k.size):
        print top_k[i], labels[top_k[i]]
    # Save
    print("Saving results into %s" % args.output_file)
    np.save(args.output_file, predictions)

这样就能直接输出结果了,图片明明是猫,结果第一是狗,第二才是猫,准确率太差了

Classifying 1 inputs.
Done in 0.01 s.
Predictions : [[1.5983205e-02 2.6724942e-04 1.1164860e-02 4.0146208e-01 1.8660864e-02
  5.0617838e-01 1.7000468e-02 3.7125179e-03 1.4827041e-02 1.0743420e-02]]
top_k : [5 3 4 6 0 8 2 9 7]
5 dog
3 cat
4 deer
6 frog
0 airplane
8 ship
2 bird
9 truck
7 horse
Saving results into foo

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值