Caffe实战
看完本片博客,您将可能能够达到以下目的
- 能够对Shell编程以及caffe框架有着更深刻的理解
- 能够独自对自己的数据集进行二分类训练
- 通过自己的掌握程度,将代码从二分类更改成N分类问题
文件结构及概览
在项目文件中,我们主要需要关心的是下面目录结构中的文件,并理解其中在项目中整体的作用
project
│ README.md
│ run.sh
| train.sh
│
└─── Demo
| |
| └─── model
| |
| └─── nopos
| |
| └─── pos
| |
| └─── result
|
└─── test
| pos.txt
| test.sh
|
└─── photo
|
|
└─── model
- README.md 文件主要说明项目如何运行
- run.sh 运行程序
- train.sh 运行程序,和run.sh区别会之后进行讨论
- Demo目录 对文件进行训练目录
- test目录 对样本进行测试的目录
训练
准备数据集
- 进入Demo目录下,将正负样本分别添加至 pos 以及 nopos 目录下。Demo中的其他文件不需要更改。(作者已经更改完毕)
编辑train.sh
- 将以下内容改成自己系统对应文件的路径。DataDir 表示Demo目录的绝对路径,而TOOLS表示caffe安装目录下的build/tools文件目录的绝对路径。
shell编程,等号两边不能有空格。
# set these
dataDir=/home/rui/WANG/Project/Demo
TOOLS=/home/rui/Work/caffe/build/tools
#
关于run.sh脚本具体内容将不会详细说明,因为本博客主要目的是使用caffe进行二分类。如果想要详细了解shell命令具体解释,可以自己网上查找相应的资料
开始训练
- 我们使用命令行进入Project目录后,输入
rui@Hopo:~$ sudo sh run.sh AlexNet
使用了AlexNet 参数传入脚本,这里你可以在 Project/Demo 目录下找到 AlexNet文件夹以及 GoogleNet 文件夹,分别对应相应的训练模型,也即使是你可以传入 GoogleNet 参数来使用 GoogleNet 进行训练。
不过需要注意的是需要注意的的是:
0 vs.2 错误一般是 Gpu 内存不足,而0 vs.4, 一般是没有使用sudo管理员模式运行。对于有些电脑,训练时,直接强制推出。如果再想调用GPU,只能重启电脑再进行训练
- 训练结果保存在了 /Demo/result 文件夹下了,可以在对应的 AlexNet 或者 GoogleNet 文件夹下查找相应的训练结果。
测试
测试文件类型时,主要用到的是四个文件,在test/model文件夹的目录结构:
test
│
└─── model
| caffenet.caffemodel
| deploy.prototxt
| image_mean.binaryproto
| synset_words.txt
- caffenet.caffemodel 是训练结果文件,将训练结果放在此文件夹内并改名成此名。将Project/Demo/result/ 文件夹下相应的文件放在此处。
- deploy.prototxt 是网络模型文件,其实大部分都仅仅是在训练网络模型中删除了前向网络。
- image_mean.binaryproto 是中值文件,不影响测试结果,仅仅影响测试时间,可以将 Project/Demo/result/image_mean.binaryproto 放在这里来缩减测试时间
- synset_words.txt 是标注,即是测试时,命令行显示的标注,内容可以改成自己想要的名字。
修改test/test.sh文件
在test.sh文件夹中找到下列相应的内容,其中
- CAFFE caffe安装的根目录
- INPUT 测试所使用的model,model有相应的四个文件
- TEST_PHOTO 存放测试照片的文件夹
- res_txt 测试结果存放路径
CAFFE=/home/ubuntu/Softs/caffe-master
INPUT=/media/rui/WANG/Project/test/model
TEST_PHOTO=./photo
res_txt=/home/ubuntu/gdp/fire/qingdao/test/pos.txt
进行测试
不显示照片进行测试:
rui@Hopo:~$ sudo sh test.sh 0
此时所带的 0 表示测试时不显示照片。仅仅在命令行显示结果并且存在pos.txt文件夹中
如果将0 更改成 1,则比参数 0 多出来显示照片这一步骤。
需要注意的是
在ubuntu16.04下编程,shell运行脚本可能会提示语法错误。有可能是shell编码设置的编程风格不对,得自己设置一下。具体可以百度,或者留言讨论,如果碰到任何问题,可以留言咨询,我会尽快答复。
关于将二分类拓展成N分类我就不具体展开,如果想了解可以留言,我会进行相应答复(其实是答主有点懒,而且进行N分类还要更改一些东西,之前弄过,但隔离的时间有点长忘记了,如果现在弄可能得花点时间,就算写出来了可能还没多少人看呢!)
最最重要的是,现在caffe差不多大部分已经差不多都迁移到了caffe2中了,还是赶快学caffe2吧