windows系统下Caffe的安装<深度学习系列>
夜如何其_夜未央
2020年07月17日 19:18

一.环境的准备

Visual studio2013(编译环境)

64位Win7/10系统(操作系统)

Notepad+++中文编码器(用于写或修改代码)

二.caffe的CPU版本安装(Debug版本和Release版本)

1.从github下载Caffe的windows分支。

https://github.com/BVLC/caffe/

caffe压缩包https://github.com/BVLC/caffe/archive/master.zip

 2.解压压缩包,然后把把caffe-windows\windows目录下的CommonSettings.props.example文件改名为CommonSettings.props。

解压后的目录

然后Notepad+++打开CommonSettings.props文件,修改如下:

修改的地方

***把CpuOnlyBuild改为true

***把UseCuDNN改为false

 

3.用VS2013打开caffe-windows\windows\Caffe.sln。打开libcaffe的属性,设置配置属性-&gt;C/C++-&gt;常规,把&#34;将警告视为错误&#​34;改为&#34;否&#​34;。然后编译Debug版本。

Debug版本设置

编译成功后在caffe-windows根目录下出现一个Build文件夹,该文件夹目录下有:E:\caffe-window\Build\x64\Debug

编译成功图

若出现如上程序包,表示Debug编译成功,若没有,则编译不成功,需重新编译。

 

4. Release版本的编译:用VS2013打开caffe-windows\windows\Caffe.sln。选择Release版本,然后打开libcaffe的属性,设置配置属性-&gt;C/C++-&gt;常规,把&#34;将警告视为错误&#​34;改为&#34;否&#​34;。然后编译Release版本。

Release版本设置

编译成功后在caffe-windows根目录下出现一个Build文件夹,该文件夹目录下有:E:\caffe-window\Build\x64\Release

编译成功图

若出现如上程序包,表示Release编译成功,若没有,则编译不成功,需重新编译。第3、4步骤完成后表示CPU的caffe安装就完成了。

三、Caffe的python接口的配置

1.安装Anaconda2

a)  下载Anaconda2:https://www.anaconda.com/download/#windows

Anaconda2版本

 

b)安装流程参考如下网址:

http://www.cnblogs.com/IT-LearnHall/p/9486029.html

注意:需要把添加系统环境变量打√,要记得安装路径

2.windows下编译pycaffe:

a)  进入window命令处理程序(cmd) 输入:pip install protobuf==2.6.1回车就行。安装的一定要是3.0以下版本的protobuf,Caffe只支持2.的版本。

安装protobuf

3. 然后用Notepad+++打开CommonSettings.props文件,修改如下:

&lt;PythonSupport&gt;true&lt;/PythonSupport&gt;

表示支持python

&lt;PythonDir&gt;E:\Anaconda2\&lt;/PythonDir&gt;

 Anaconda2的根目录(根据自己安装路径修改)

4.编译pycaffe

a)  用VS2013打开caffe-windows\windows\Caffe.sln,修改属性如下,只留下pycaffe。

相关属性修改

b)   开始编译,编译成功后在E:\caffe-window\Build\x64\Release的目录下出现一个新的文件夹pycaffe(之前编译完Release是没有的)

pycaffe

c)  .把caffe-windows\Build\x64\Release\pycaffe\caffe复制到Anaconda2的Lib\site-packages目录下。

d)  .把Build\x64\Release\pycaffe\caffe目录下的所有文件复制到caffe-windows\python\caffe目录下。

5.测试python是否成功

打开window命令处理程序(cmd),输入python,回车后输入import caffe

测试

如图表示没有报错表示成功。

四、利用Caffe训练自己模型并测试(苹果成熟度为例)

1.数据采集及分类

从网上批量下载苹果的图片(1000张左右),然后利用Matlab测试的RGB的值,

提取R、G、B

根据R(0-255)的值判断苹果的成熟度,

RGB 模型中,成熟苹果的 R 在180 以上,苹果成熟度分类如下:

0&lt;R&lt;100 表示不成熟(immature)

100&lt;R&lt;180 表示半熟(medium)

180&lt;R&lt;255表示成熟(mature)

在E:\caffe-window\models建立一个名为models_recognition

models_recognition文件夹

然后在models_recognition的目录下建立数据集文件data

data文件夹

在data的文件夹下面建立测试集(test)和训练集(train)并把三类分类建立好文件夹

test and train

三种分类

训练集和测试集分别要有三种分类

2.图片标签的制作

格式:文件路径+标签

在制作标签之前在models_recognition文件目录下建立名为labels的文件夹

使用python的接口Jupyter Notebook,标签代码如下图:

标签代码

文本代码:

import os   #调用程序包

caffe_root = &#39;E:/caffe-master/&#​39;

#训练集标签制作

i = 0

withopen(caffe_root + &#39;models/models_recognition/labels/train.txt&#39;,&#​39;w&#39;) as train_txt:

    for root,dirs,files in os.walk(caffe_root+&#39;models/models_recognition/data/train/&#39;):

        for dir in dirs:

                for root,dirs,files in os.walk(caffe_root+&#39;models/models_recognition/data/train/&#39;+str(dir)):

                    for file in files:

                        image_file = str(dir) + &#39;\\&#​39; + str(file)

                        label = image_file + &#39; &#​39; + str(i) + &#39;\n&#​39;     

                        train_txt.writelines(label)                  

                    i+=1

#测试集标签制作

i=0

with open(caffe_root + &#39;models/models_recognition/labels/test.txt&#39;,&#​39;w&#39;) as test_txt:

        for root,dirs,files in os.walk(caffe_root+&#39;models/models_recognition/data/test/&#39;):

            for dir in dirs:

                for root,dirs,files in os.walk(caffe_root+&#39;models/models_recognition/data/test/&#39;+str(dir)):

                    for file in files:

                        image_file = str(dir) + &#39;\\&#​39; + str(file)

                        label = image_file + &#39; &#​39; + str(i) + &#39;\n&#​39;      

                        test_txt.writelines(label)                 

                    i+=1

运行代码后在下面路径

E:\caffe-master\models\models_recognition\labels

生成两个文本文档

标签文本

3. .数据转换,将图片转为LMDB格式

在models_recognition的目录下建立名为bat和lmdb的的文件夹,并写两个批处理文件:convert_imagest_test.bat和convert_imagest_train.bat

批处理文件

convert_imagest_train.bat的程序:

convert_imagest_train.bat的程序

文本代码:

E:\caffe-master\caffe-master\Build\x64\Release\convert_imageset.exe ^

--resize_height=256 --resize_width=256 ^

--shuffle ^

--backend=&#34;lmdb&#​34; ^

E:\caffe-master\caffe-master\models\models_recognition\data\train\ ^

E:\caffe-master\caffe-master\models\models_recognition\labels\train.txt ^

E:\caffe-master\caffe-master\models\models_recognition\lmdb\train\

pause

保存并双击运行

 

convert_imagest_test.bat的程序:

convert_imagest_test.bat的程序

文本代码:

E:\caffe-master\caffe-master\Build\x64\Release\convert_imageset.exe ^

--resize_height=256 --resize_width=256 ^

--shuffle ^

--backend=&#34;lmdb&#​34; ^

E:\caffe-master\caffe-master\models\models_recognition\data\test\ ^

E:\caffe-master\caffe-master\models\models_recognition\labels\test.txt ^

E:\caffe-master\caffe-master\models\models_recognition\lmdb\test\

pause

保存并双击运行

两个批处理文件运行完成后会在lmdb文件夹生成testtrain的文件并在两个文件下有lmdb的数据

lmdb数据

4.修改网络模型文件

利用E:\caffe-master\models下的bvlc_reference_caffenet文件的train_val.prototxt文件训练模型,利用Notepad+++打开train_val.prototxt修改如下:

相关修改

相关修改

5.修改超参数文件

修改E:\caffe-master\models下的bvlc_reference_caffenet文件的solver.prototxt文件,

solver.prototxt文件

6.优化器的选择及效果比较

https://blog.csdn.net/qq_40314507/article/details/79933289

各类优化前期比较

本模型我们用AdaDelta优化器

7.训练模型(GPU训练)

在bat文件夹下写一个批处理文件train.bat

代码如下:

train.bat

文本代码:

E:\caffe-master\caffe-master\Build\x64\Release\caffe.exe train ^

-solver=E:\caffe-master\caffe-master\models\models_recognition/solver.prototxt

pause

双击运行train.bat

训练模型过程中

训练过程

使用AdaDelta准确率越来越高了

使用优化器AdaDelta后

完成

电脑显卡好的话两三个小时就可以训练好了,GPU比CPU训练速度快10-20倍左右,所以建议使用GPU训练。训练完成后在models_recognition目录下训练前新建的model生成如下文件:

model

8.测试模型

把需要测试的图片放进在models_recognition目录下新建的image文件夹下(网上随机下载图片)

测试图

使用python的接口Jupyter Notebook测试:

Jupyter Notebook

Jupyter Notebook

文本代码:

import caffe

import numpy as np

import matplotlib.pyplot as plt

import os

import PIL

from PIL import  Image

import sys

 

caffe_root = &#39;E:/caffe-master/&#​39;

deploy_file = caffe_root+&#39;models/models_recognition/deploy.prototxt&#39;

model_file = caffe_root+&#39;models/models_recognition/model/_iter_5000.caffemodel&#39;

net = caffe.Classifier(deploy_file,

                    model_file, 

                       channel_swap=(2,1,0),

                       raw_scale=255,

                       image_dims=(227, 227))

imagenet_labels_filename = caffe_root +&#39;models/models_recognition/labels/label.txt&#39;

labels = np.loadtxt(imagenet_labels_filename, str, )

for root,dirs,files in os.walk(caffe_root+&#39;models/models_recognition/image&#39;):

        for file in files:

            #加载要分类的图片\n&#​34;,

            image_file = os.path.join(root,file)

            input_image = caffe.io.load_image(image_file)

   

           

            image_path = os.path.join(root,file)

            print(image_path)

            img=Image.open(image_path)

            plt.imshow(img)

            plt.show()

             #预测图片类别\n&#​34;,

            prediction = net.predict([input_image])

            print &#39;predicted class:&#​39;,prediction[0].argmax()

   

            # 输出概率最大的前5个预测结果\n&#​34;,

            top_k = prediction[0].argsort()[::-1]

            for node_id in top_k:    

                #获取分类名称\n&#​34;,

                human_string = labels[node_id]

                #获取该分类的置信度\n&#​34;,

                score = prediction[0][node_id]

                print(&#39;%s (score = %.5f)&#​39; % (human_string, score))

运行后结果如下:

效果图a

效果图b

效果图c

结果准确率达到99.99%,这说明数据集和训练的模型非常不错。