我的第一个二值化网络:BWN-XNOR-caffe安装注意项&&BWN-XNOR-caffe-master训练二进制cifar数据集

转载自:http://blog.csdn.net/l297969586/article/details/62428426

终于找到一篇指导我运行的文章了,泪奔中

github地址https://github.com/loswensiana/BWN-XNOR-caffe

XNOR是用于权值与输入二值化的解决方案,以损失一部分精度为代价,来达到提高计算速度和减小缓存的目的

你需要提前准备好cuda配置与caffe环境配置. 
具体可查看我之前博客: 
ubuntu14.04+cuda7.5安装 官方步骤版 
ubuntu14.04+cuda7.5+caffe+cudnn7.5+anaconda+opencv 2.4.9系统整合(2016.12.3)

从github上下载压缩文件后解压到home路径下,会出现一个BWN-XNOR-caffe-master文件夹. 
由于我们的cudnn是v5版本的,而该工程是v3版本的,需要我们把之前caffe中的cudnn文件替换BWN-XNOR-caffe-master中的cudnn文件 
在终端输入:

cp caffe-master/include/caffe/layers/cudnn_* BWN-XNOR-caffe-master/include/caffe/layers/  
cp caffe-master/src/caffe/layers/cudnn_* BWN-XNOR-caffe-master/src/caffe/layers/  
cp caffe-master/include/caffe/util/cudnn.hpp BWN-XNOR-caffe-master/include/caffe/util/ 
 
 
  • 1
  • 2
  • 3

更改BWN-XNOR-caffe-master/src/caffe/ex_layers/binary_conv_layer.cu文件中的两个函数

110行cudnnConvolutionBackwardFilter_v3改为cudnnConvolutionBackwardFilter 
128行cudnnConvolutionBackwardData_v3改为cudnnConvolutionBackwardData

注:这都是cudnn_v5版本函数名 
之后建立BWN-XNOR-caffe-master/build文件夹

cmake ..
make -j8        //这个是8线程编译
make pycaffe -j8
 
 
  • 1
  • 2
  • 3

caffe编译完成

lilai619
  • lilai619
    2017-08-01 09:461楼
  • 你好,请教一下,你有测试xnor和没有二值化版本的速度吗?

  • l297969586
    2017-08-01 09:56
  • 回复lilai619:我测试的一般都是python版本的。在tensorflow、借助lasagne的theano下做二值化卷积并没有达到论文里提到的接近64倍加速的效果
  • lilai619
    2017-08-01 22:48
  • 回复l297969586:好的,很是感谢,有空我去尝试一下python版本的



续:

BWN-XNOR-caffe-master训练二进制cifar数据集

BWN-XNOR-caffe-master安装还有一些注意事项在上一个博客 
目的:为了提高卷积过程的速度,和把caffe移植到FPGA上

cd BWN-XNOR-caffe-master
  
  
  • 1
./data/cifar10/get_cifar10.sh  #该脚本会下载二进制的cifar,并解压,会在/data/cifar10中出现很多batch文件  
./examples/cifar10/create_cifar10.sh #运行后将会在examples中出现数据集./cifar10_xxx_lmdb和数据集图像均值./mean.binaryprot

  
  
  • 1
  • 2
  • 3

修改examples/cifar10/train_nobias.sh

#!/usr/bin/env sh

TOOLS=./build/tools

GLOG_log_dir=examples/cifar10/log 

$TOOLS/caffe train \
  --solver=examples/cifar10/cifar10_full.nobias.solver $@
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

就是把– gpu $1 给删了 
或者你在cifar10_full.nobias.solver文件中把最后两行的

solver_mode: GPU
device_id: 3
改为
solver_mode: GPU
device_id: 1
或者
solver_mode: CPU
device_id: 0
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

训练

./examples/cifar10/train_nobias.sh
  
  
  • 1

会得到两个文件

cifar10_full_nobias_iter_40000.caffemodel
cifar10_full_nobias_iter_40000.solverstate
  
  
  • 1
  • 2

以下是在caffe-master中的过程

cd caffe-master
  
  
  • 1
./data/cifar10/get_cifar10.sh  #该脚本会下载二进制的cifar,并解压,会在/data/cifar10中出现很多batch文件  
./examples/cifar10/create_cifar10.sh #运行后将会在examples中出现数据集./cifar10_xxx_lmdb和数据集图像均值./mean.binaryprot
  
  
  • 1
  • 2

训练

./examples/cifar10/train_quick.sh
  
  
  • 1

会得到两个文件

 cifar10_quick_iter_4000.caffemodel.h5

 cifar10_quick_iter_4000.solverstate.h5
  
  
  • 1
  • 2
  • 3

检测

python python/classify.py examples/images/cat.jpg  #这是用ImageNet模型检测的
  
  
  • 1
python python/classify.py --model_def examples/cifar10/cifar10_quick.prototxt --pretrained_model examples/cifar10/cifar10_quick_iter_4000.caffemodel.h5 --center_only  examples/images/cat.jpg foo  #这是用我们自己的模型检测的
  
  
  • 1

可能会出现的问题: 
运行classify.py时报错 Mean shape incompatible with input shape 
解决: 
修改 ./python/caffe/io.py 文件 

if ms != self.inputs[in_][1:]:  
    raise ValueError('Mean shape incompatible with input shape.')  
  
  
  • 1
  • 2

修改为:

if ms != self.inputs[in_][1:]:
                print(self.inputs[in_])  
                in_shape = self.inputs[in_][1:]  
                m_min, m_max = mean.min(), mean.max()  
                normal_mean = (mean - m_min) / (m_max - m_min)  
                mean = resize_image(normal_mean.transpose((1,2,0)), in_shape[1:]).transpose((2,0,1)) 
                (m_max - m_min) + m_min  
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

即可. 
以下为运行结果: 
这里写图片描述

为了能够显示测试图片种类以及置信度,网上有位网友写了一个classify.py 
地址:http://download.csdn.net/detail/caisenchuan/9513196 
下载后替换Python/classify.py 
因为这个classify.py增加了几个参数 –labels_file、–print_results、–force_grayscale可以显示预测结果,同时博主发现这个文件有问题,你直接运行是输出不了结果的,需要修改171行

 'synset_id': l.strip().split(' ')[0],
 'name': ' '.join(l.strip().split(' ')[1:]).split(',')[0]
  
  
  • 1
  • 2

修改为

'name': l.strip().split(' ')[0],
'synset_id': ' '.join(l.strip().split(' ')[1:]).split(',')[0]
  
  
  • 1
  • 2

之后cd到caffe-master,终端运行

python python/classify.py --print_results --model_def examples/cifar10/cifar10_quick.prototxt --pretrained_model examples/cifar10/cifar10_quick_iter_4000.caffemodel.h5 --labels_file data/cifar10/batches.meta.txt  --center_only  examples/images/cat.jpg foo
  
  
  • 1

显示结果 
这里写图片描述




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值