Caffe学习笔记3

本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权

欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing

http://caffe.berkeleyvision.org/gathered/examples/feature_extraction.html

这篇博客主要是用imagenet的一个网络模型来对自己的图片进行训练和测试

图片下载网址:http://download.csdn.net/detail/hit2015spring/9704947

参考文章:

http://caffe.berkeleyvision.org/gathered/examples/imagenet.html

 

1、准备数据,生成样本标签

在caffe/data 文件夹下新建文件夹myself

这篇文章主要是帮助你怎么准备你的数据集,怎么训练你自己的模型尺度,在这个笔记中主要是对自己网上下载的车,马,恐龙,花,进行训练和测试,训练2类各80张,测试各20张,放在/data/myself 目录下的train和val文件夹下,这些图片分类好了

这里面的图像的大小全部为的,可以在终端用命令行,调整图像大小,训练和测试的图像均为

for name in data/myself/val/val_dinosar/*.JPEG; do

convert -resize 256x256\! $name $name

done

给这些图片制作索引标签,生成训练和测试的txt文件,用批量处理工具对这些图片进行处理:在data/myself/ 文件夹下面建立一个label.py的python脚本文件

#<pre name="code"class="python">

#coding:utf-8

'''''

Created on Jul 29, 2016

 

@author: sgg

'''

 

"<span style=""font-family:Arial;font-size:18px;"">"

"<span style=""font-size:18px;"">"

"<span style=""font-size:18px;"">"

import os

 

def IsSubString(SubStrList,Str):

flag=True

for substr in SubStrList:

if not(substr in Str):

flag=False

 

return flag

 

#扫面文件

def GetFileList(FindPath,FlagStr=[]):

FileList=[]

FileNames=os.listdir(FindPath)

if len(FileNames)>0:

for fn in FileNames:

if len(FlagStr)>0:

if IsSubString(FlagStr,fn):

fullfilename=os.path.join(FindPath,fn)

FileList.append(fullfilename)

else:

fullfilename=os.path.join(FindPath,fn)

FileList.append(fullfilename)

 

if len(FileList)>0:

FileList.sort()

 

return FileList

 

 

 

train_txt=open('train.txt','w')

#制作标签数据,如果是狗的,标签设置为0,如果是猫的标签为1

imgfile=GetFileList('train/train_dinosar')#将数据集放在与.py文件相同目录下

for img in imgfile:

str1=img+' '+'4'+'\n' #用空格代替转义字符 \t

train_txt.writelines(str1)

 

 

imgfile=GetFileList('train/train_ele')

for img in imgfile:

str2=img+' '+'3'+'\n'

train_txt.writelines(str2)

 

 

#imgfile=GetFileList('train/train_flower')#将数据集放在与.py文件相同目录下

#for img in imgfile:

# str3=img+' '+'2'+'\n' #用空格代替转义字符 \t

# train_txt.writelines(str3)

 

 

#imgfile=GetFileList('train/train_horse')

#for img in imgfile:

# str4=img+' '+'1'+'\n'

# train_txt.writelines(str4)

 

 

#imgfile=GetFileList('train/train_truck')

#for img in imgfile:

# str5=img+' '+'0'+'\n'

# train_txt.writelines(str5)

train_txt.close()

 

#测试集文件列表

test_txt=open('val.txt','w')

#制作标签数据,如果是男的,标签设置为0,如果是女的标签为1

imgfile=GetFileList('val/val_dinosar')#将数据集放在与.py文件相同目录下

for img in imgfile:

str6=img+' '+'4'+'\n'

test_txt.writelines(str6)

 

 

imgfile=GetFileList('val/val_ele')

for img in imgfile:

str7=img+' '+'3'+'\n'

test_txt.writelines(str7)

 

 

#imgfile=GetFileList('val/val_flower')#将数据集放在与.py文件相同目录下

#for img in imgfile:

# str8=img+' '+'2'+'\n'

# test_txt.writelines(str8)

 

 

#imgfile=GetFileList('val/val_horse')

#for img in imgfile:

# str9=img+' '+'1'+'\n'

# test_txt.writelines(str9)

 

 

#imgfile=GetFileList('val/val_truck')

#for img in imgfile:

# str10=img+' '+'0'+'\n'

# test_txt.writelines(str10)

test_txt.close()

 

print("成功生成文件列表")

在终端运行该脚本

python label.py

可以在data/myself/ 文件夹下生成两个txt文件,train.txt和val.txt

2、生成lmdb文件

在caffe/ 文件夹下新建myself文件夹,

从/home/xxx/caffe/examples/imagenet下复制create_imagenet.sh文件到caffe/myself

修改create_imagenet.sh里面的路径设置

其中:

EXAMPLE =/home/wangshuo/caffe/myself

表示生成的LMDB文件存放的位置

DATA=/home/wangshuo/caffe/data/myself

表示数据标签存放的位置

TRAIN_DATA_ROOT=/home/wangshuo/caffe/data/myself/

VAL_DATA_ROOT=/home/wangshuo/caffe/data/myself/

表示训练和测试数据的位置,注意这里只填到myself这一级的目录。

EXAMPLE/ilsvrc12_val_lmdb

表示生成文件名为ilsvrc12_train_lmdb 和ilsvrc12_val_lmdb

在caffe根目录下运行create_imagenet.sh

./myself/create_imagenet.sh

在caffe/myself文件夹下生成lmdb文件

3、生成均值文件

从caffe/ examples/imagenet/ 拷贝make_imagenet_mean.sh文件到caffe/myself 文件夹下

修改该文件

EXAMPLE=/home/wangshuo/caffe/myself

##上面生成的lmdb文件目录

DATA=/home/wangshuo/caffe/data/myself

###生成文件所要存放的目录

TOOLS=/home/wangshuo/caffe/build/tools

 

在caffe根目录下运行该文件

./myself/make_imagenet_mean.sh

在caffe/data/myself 下生成imagenet_mean.binaryproto文件

4、模型定义

复制models/bvlc_reference_caffenet/train_val.prototxt到caffe/myself文件夹,并修改路径

mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"

source: "examples/imagenet/ilsvrc12_train_lmdb"

mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"

source: "examples/imagenet/ilsvrc12_val_lmdb"

 

mean_file: "data/myself/imagenet_mean.binaryproto"

source: "myself/ilsvrc12_train_lmdb"

mean_file: "data/myself/imagenet_mean.binaryproto"

source: "myself/ilsvrc12_val_lmdb"

 

这里还有一个bitch_size的参数,该参数如果过大,会提示GPU内存不够,在这里我设置为8

 

 

复制models/bvlc_reference_caffenet/solver.prototxt到caffe/myself

文件夹下,并修改文件路径

net: "myself/train_val.prototxt" ##模型所在目录

snapshot_prefix: "myself/caffenet_train"##生成的模型参数

test_iter: 1000 是指测试的批次,我们就 20 张照片,设置20就可以了。

test_interval: 1000 是指每 1000 次迭代测试一次,我们改成 500 次测试一次。

base_lr: 0.01 是基础学习率,因为数据量小, 0.01 就会下降太快了,因此改成 0.001

lr_policy: "step"学习率变化

gamma: 0.1 学习率变化的比率

stepsize: 100000 每 100000 次迭代减少学习率

display: 20 每 20 层显示一次

max_iter: 450000 最大迭代次数,

momentum: 0.9 学习的参数,不用变

weight_decay: 0.0005 学习的参数,不用变

snapshot: 10000 每迭代 10000 次显示状态,这里改为 2000 次

solver_mode: GPU 末尾加一行,代表用 GPU 进行

5、训练

在caffe根目录下运行

./build/tools/caffe time --model=myself/train_val.prototxt

Caffe学习笔记3的更多相关文章

  1. Caffe学习笔记2--Ubuntu 14.04 64bit 安装Caffe(GPU版本)

    0.检查配置 1. VMWare上运行的Ubuntu,并不能支持真实的GPU(除了特定版本的VMWare和特定的GPU,要求条件严格,所以我在VMWare上搭建好了Caffe环境后,又重新在Windo ...

  2. Caffe学习笔记(三):Caffe数据是如何输入和输出的?

    Caffe学习笔记(三):Caffe数据是如何输入和输出的? Caffe中的数据流以Blobs进行传输,在<Caffe学习笔记(一):Caffe架构及其模型解析>中已经对Blobs进行了简 ...

  3. Caffe学习笔记(二):Caffe前传与反传、损失函数、调优

    Caffe学习笔记(二):Caffe前传与反传.损失函数.调优 在caffe框架中,前传/反传(forward and backward)是一个网络中最重要的计算过程:损失函数(loss)是学习的驱动 ...

  4. Caffe学习笔记(一):Caffe架构及其模型解析

    Caffe学习笔记(一):Caffe架构及其模型解析 写在前面:关于caffe平台如何快速搭建以及如何在caffe上进行训练与预测,请参见前面的文章<caffe平台快速搭建:caffe+wind ...

  5. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

  6. Caffe 学习笔记1

    Caffe 学习笔记1 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和 ...

  7. Caffe学习笔记2

    Caffe学习笔记2-用一个预训练模型提取特征 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hi ...

  8. CAFFE学习笔记(五)用caffe跑自己的jpg数据

    1 收集自己的数据 1-1 我的训练集与测试集的来源:表情包 由于网上一幅一幅图片下载非常麻烦,所以我干脆下载了两个eif表情包.同一个表情包里的图像都有很强的相似性,因此可以当成一类图像来使用.下载 ...

  9. CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式

    1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...

随机推荐

  1. c++的一些编程技巧和细节

    1.函数形参,如: CreateProcess(                  NULL,                  cmdbuf,                  NULL,      ...

  2. [C/C++] 大小端存储问题

    首先来看一下今天做的一道题: 解析: union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据 ...

  3. BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...

  4. 洛谷 P4495 [HAOI2018]奇怪的背包 解题报告

    P4495 [HAOI2018]奇怪的背包 题目描述 小\(C\)非常擅长背包问题,他有一个奇怪的背包,这个背包有一个参数\(P\),当他 向这个背包内放入若干个物品后,背包的重量是物品总体积对\(P ...

  5. UVA.679 Dropping Balls (二叉树 思维题)

    UVA.679 Dropping Balls (二叉树 思维题) 题意分析 给出深度为D的完全二叉树,按照以下规则,求第I个小球下落在那个叶子节点. 1. 默认所有节点的开关均处于关闭状态. 2. 若 ...

  6. Linux内核中的常用宏container_of其实很简单

    http://blog.csdn.net/npy_lp/article/details/7010752 通过一个结构体变量的地址,求该结构体的首地址. #ifndef CONTAINER_OF #de ...

  7. Wireshark中TCP segment of a reassembled PDU的含义

    By francis_hao    Sep 16,2017   在用Wireshark抓包的时候,经常会看到TCP segment of a reassembled PDU,字面意思是要重组的协议数据 ...

  8. poj2060——Taxi Cab Scheme(最小路径覆盖)

    Description Running a taxi station is not all that simple. Apart from the obvious demand for a centr ...

  9. Android 悬浮窗口

    Android 悬浮窗口 一.创建悬浮窗口步骤    1.实现一个ViewGroup类,作为悬浮窗口的界面类,以便在里面重写onInterceptTouchEvent和onTouchEvent方法,实 ...

  10. 不可不知的robots.txt文件

    robots.txt基本介绍 robots.txt是一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的内容. 当一个搜索机器人(有的叫搜索 ...