最近想熟悉一下深度学习,体验了一下Caffe,简单写写训练和分类的过程:

1.下载Caffe VS2013工程:https://github.com/Microsoft/caffe

2. 解压并用VS2013打开解决方案caffe-master\windows\Caffe.sln,默认配置是x64 Debug

2.  重命名caffe-master\windows\CommonSettings.props.example为caffe-master\windows\CommonSettings.props,然后修改如下配置:

<CpuOnlyBuild>true</CpuOnlyBuild>  -----  是否使用GPU,我的电脑没有GPU,所以为true

<UseCuDNN>false</UseCuDNN>   -----   是否使用CuDNN库

<PythonSupport>false</PythonSupport>  ----- 是否支持Python

<MatlabSupport>false</MatlabSupport>   -----  是否支持Matlab

4. 编译解决方案

全编译整个解决方案,刚开始会弹出一个窗口下载第三方库,需要下载一段时间,下载完毕后开始编译。第一次编译或许会出现错误说找不到libcaffe.lib,把工程libcaffe单独编译一下然后再编译整个解决方案即可。

5.编译通过后,在caffe-master\Build\x64\Debug中会出现一堆exe和dll:

convert_imageset.exe    用来生成训练图片和测试图片的数据库

compute_image_mean.exe  计算训练图片的均值

classification.exe   对目标图片分类

6. 准备训练图片和测试图片,我们这里训练圆形,三角形,六边形和云朵图片,比如:

caffe-master\data\train\circle中放圆形练图片10张

caffe-master\data\train\cloud中放云朵形状练图片5张

caffe-master\data\train\hexagon中放六边形练图片5张

caffe-master\data\train\triangle中放三角形练图片10张

训练图片共30张

caffe-master\data\train\val中放测试图片

这里放两张圆形图片(标准圆形和手绘圆形),两张三角形(标准+手绘),一张标准六边形,一张云朵图片,共6张

7. 新建文本文件caffe-master\data\train\train.txt,填写将30张训练图片和类别编号对应关系,内容如下,jpg后面的数字表示图片类别编号,从0开始。

\circle\1.jpg 0

\circle\2.jpg 0

\circle\3.jpg 0

\circle\4.jpg 0

\circle\5.jpg 0

\circle\6.jpg 0

\circle\7.jpg 0

\circle\8.jpg 0

\circle\9.jpg 0

\circle\10.jpg 0

\triangle\1.jpg 1

\triangle\2.jpg 1

\triangle\3.jpg 1

\triangle\4.jpg 1

\triangle\5.jpg 1

\triangle\6.jpg 1

\triangle\7.jpg 1

\triangle\8.jpg 1

\triangle\9.jpg 1

\triangle\10.jpg 1

\hexagon\1.jpg 2

\hexagon\2.jpg 2

\hexagon\3.jpg 2

\hexagon\4.jpg 2

\hexagon\5.jpg 2

\cloud\a.jpg 3

\cloud\b.jpg 3

\cloud\c.jpg 3

\cloud\d.jpg 3

\cloud\e.jpg 3

注意:这里每行的文件名称会和第9节convert_imageset_train.bat的行“set a=C:\xxx\caffe-master\data\train”指定的路径拼接成一个完整图片文件路径

8. 新建文本文件caffe-master\data\val\val.txt,填写测试图片和类别编号的对应关系,内容如下,格式与上面train.txt一样:

\1.jpg 0

\a.jpg 0

\2.jpg 1

\b.jpg 1

\3.jpg 2

\5.jpg 3

注意:这里每行的图片文件名称会和第10节convert_imageset_val.bat的行“set a=C:\xxx\caffe-master\data\val”指定的路径拼接成一个完整图片文件路径

9. 在caffe-master根目录下新建并运行批处理文件convert_imageset_train.bat,用于生成训练图片数据库:

文件内容如下:

SET GLOG_logtostderr=1

cd /d C:\xxx\caffe-master

set a=C:\xxx\caffe-master\data\train

set b=C:\xxx\caffe-master\data\train\train.txt

set c=C:\xxx\caffe-master\data\trainlmdb

Build\x64\Debug\convert_imageset.exe -resize_height=200 -resize_width=200 %a% %b% %c% 0

pause

注意:运行此批处理文件前要确保文件夹caffe-master\data\trainlmdb不存在,否则会报错。

批处理运行后生成两个文件:caffe-master\data\trainlmdb\data.mdb和caffe-master\data\trainlmdb\lock.mdb

10. 在caffe-master根目录下新建并运行批处理文件convert_imageset_val.bat,用于生成测试图片数据库,文件内容如下:

SET GLOG_logtostderr=1

cd /d C:\xxx\caffe-master

set a=C:\xxx\caffe-master\data\val

set b=C:\ xxx\caffe-master\data\val\val.txt

set c=C:\xxx\caffe-master\data\vallmdb

Build\x64\Debug\convert_imageset.exe -resize_height=200 -resize_width=200 %a% %b% %c% 0

pause

注意:运行此批处理文件前要确保文件夹caffe-master\data\vallmdb不存在,否则会报错。

resize_height和resize_width分别为调整后的输入图片的宽度和高度

批处理运行后生成两个文件:caffe-master\data\vallmdb\data.mdb和caffe-master\data\vallmdb\lock.mdb

11. 生成均值文件,在caffe-master根目录下新建并运行批处理文件compute_image_mean.bat

SET GLOG_logtostderr=1

cd /d C:\xxx\caffe-master

set a=C:\xxx\caffe-master\data\trainlmdb

set b=C:\xxx\caffe-master\data\image_mean.binaryproto

Build\x64\Debug\compute_image_mean.exe %a% %b%

pause

批处理运行后生成caffe-master\data\image_mean.binaryproto

12. 复制文件caffe-master\models\bvlc_alexnet\solver.prototxt和caffe-master\models\bvlc_alexnet\train_val.prototxt到caffe-master\data,并修改如下:

solver.prototxt:

net: "C:/xxx/caffe-master/data/train_val.prototxt"

test_iter: 1

test_interval: 500

base_lr: 0.001

lr_policy: "step"

gamma: 0.1

stepsize: 100000

display: 20

max_iter: 10000

momentum: 0.9

weight_decay: 0.0005

snapshot: 1000

snapshot_prefix: "models/bvlc_alexnet/caffe_alexnet_train"

solver_mode: CPU

solver.prototxt和train_val.prototxt的详细介绍请参考如下两篇博客:

http://blog.csdn.net/u012746763/article/details/51549184

http://blog.csdn.net/u012746763/article/details/51549267

13. 在caffe-master根目录下新建并运行批处理文件train.bat开始训练:

SET GLOG_logtostderr=1

cd /d C:\xxx\caffe-master

Build\x64\Debug\caffe.exe train --solver=C:\xxx\caffe-master\data\solver.prototxt

pause

训练结果和快照保存在caffe-master\models\bvlc_alexnet中。

14. 由于使用CPU计算,训练速度非常慢,不知道采用GPU能加速多少,减少训练图片数量和图片尺寸(step9和10中的resize_height和resize_width)能加快训练速度和降低内存使用。经过数个小时的等待训练结束,生成最终的训练结果,也可使用训练中间生成的快照来做分类。

15.  在caffe-master根目录下新建并运行批处理文件classification.bat开始分类。

SET GLOG_logtostderr=1

cd /d C:\xxx\caffe-master

set a=C:\xxx\caffe-master\models\bvlc_alexnet\deploy.prototxt

set b=C:\xxx\caffe-master\models\bvlc_alexnet\caffe_alexnet_train_iter_4000.caffemodel

set c=C:\xxx\caffe-master\data\image_mean.binaryproto

set d=C:\xxx\caffe-master\labels.txt

set e=C:\xxx\caffe-master\data\val\f.jpg

Build\x64\Debug\classification.exe %a% %b% %c% %d% %e%

pause

参数说明:

deploy.prototxt:

修改name为data的layer中的input_param为{ shape: { dim: 10 dim: 3 dim: 200 dim: 200 } }  其中的200分别对应step9和10中的resize_height和resize_width

在name为fc8的layer中,修改num_output的值为4(训练图片类型的个数)

caffe_alexnet_train_iter_4000.caffemodel: 训练结果

image_mean.binaryproto: 均值文件

labels.txt: 图片类型编号对应的类型名称文件,一行一个名称

f.jpg: 待分类的图片

14. 手绘一个云朵形状的图片然后分类,结果:

0.9997 - "cloud"

0.0002 - "triangle

0.0001 - "hexagon"

0.0000 - "circle"

【神经网络与深度学习】在Windows8.1上用VS2013编译Caffe并训练和分类自己的图片的更多相关文章

  1. 【神经网络与深度学习】如何将别人训练好的model用到自己的数据上

    caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...

  2. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  3. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  4. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  5. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  6. 如何理解归一化(Normalization)对于神经网络(深度学习)的帮助?

    如何理解归一化(Normalization)对于神经网络(深度学习)的帮助? 作者:知乎用户链接:https://www.zhihu.com/question/326034346/answer/730 ...

  7. 【神经网络与深度学习】卷积神经网络(CNN)

    [神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...

  8. 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程

    [神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...

  9. 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程

    [神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...

随机推荐

  1. JavaWeb--ServletContext

    https://www.jianshu.com/p/31d27181d542 java类中获取ServletContext的方法 起因是我想要获取一个相对路径,需要用到servletContext的g ...

  2. 第十一章 前端开发-html

    第十一章 前端开发-html 1.1.0 html:超文本标记语言 html特征:(HyperText Markup Language) 对换行的空格不敏感 空白折叠 标签:有称为标记 双闭合标签 & ...

  3. mysql 8.0.18 mgr 搭建及其切换

    mysql 8.0.18 mgr 搭建及其切换 一.系统安装包 yum -y install make gcc-c++ cmake bison-devel ncurses-devel readline ...

  4. Python 操作 MySQL 数据库Ⅱ

    数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_N ...

  5. Nowcoder 北师校赛 B 外挂使用拒绝 ( k次前缀和、矩阵快速幂打表找规律、组合数 )

    题目链接 题意 : 中文题.点链接 分析 : 有道题是问你不断求前缀和后的结果 Click here 这道题问的是逆过程 分析方法雷同.可参考 Click here ----------------- ...

  6. 洛谷 P2473 [SCOI2008]奖励关 ( 期望DP )

    题目链接 题意 : 中文题.点链接 分析 : 第一道有关概率期望的DP 有个大部分情况下通用的结论 概率正推.期望反推 原因不明.其实是没有查到较好的解释 这题由于有一些取物品的先决条件在这里 而且观 ...

  7. 手动升级 Confluence 6 - 升级 Confluence

    4. 备份 备份你的数据库,并且确定的你的数据库备份已经被正确的创建了.如果你的数据库不支持在线备份的话,你需要首先停止 Confluence 的运行. 备份你的 Confluence 安装目录(in ...

  8. [CSP-S模拟测试]:集合合并(记忆化搜索)

    题目传送门(内部题133) 输入格式 第一行一个正整数$n$. 第二行$n$个正整数$a_i$,表示一开始有$S_i=\{a_i\}$ 输出格式 输出一个非负整数表示最大的收益之和 样例 样例输入: ...

  9. 一次高IO下的GC分析之旅

    一次高IO下的GC分析之旅 编码前线 关注 2018.12.21 00:06 字数 597 阅读 45评论 0喜欢 0 起因:收到GC STW报警 [监控系统]Total time for which ...

  10. C++入门经典-例5.7-调用自定义函数交换两变量值,传入指针

    1:代码如下: // 5.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...