Caffe学习笔记3

Caffe学习笔记3

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

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

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

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

图片下载网址:

参考文章:

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这一级的目录。

GLOG_logtostderr=1 $TOOLS/convert_imageset     --resize_height=$RESIZE_HEIGHT     --resize_width=$RESIZE_WIDTH     --shuffle     $TRAIN_DATA_ROOT     $DATA/train.txt     $EXAMPLE/ilsvrc12_train_lmdb

echo "Creating val lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset     --resize_height=$RESIZE_HEIGHT     --resize_width=$RESIZE_WIDTH     --shuffle     $VAL_DATA_ROOT     $DATA/val.txt     $EXAMPLE/ilsvrc12_val_lmdb

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

时间: 2025-01-18 22:59:47

Caffe学习笔记3的相关文章

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

1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验证识别效果又当如何呢? 观察CAFFE_ROOT/examples/mnist/下的lenet_train_test.prototxt文件,发现里面既给出了训练集的路径,又给出了测试集的路径.因此答案很显然了,我们可以把自己的测试集做成leveldb(或lmdb)格式的,然后在lenet_train

Caffe学习笔记

Caffe学习笔记 Caffe Caffe is a deep learning framework made with expression, speed, and modularity in mind. It is developed by the Berkeley Vision and Learning Center (BVLC) and by community contributors.Yangqing Jia created the project during his PhD at

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

1 收集自己的数据 1-1 我的训练集与测试集的来源:表情包 由于网上一幅一幅图片下载非常麻烦,所以我干脆下载了两个eif表情包.同一个表情包里的图像都有很强的相似性,因此可以当成一类图像来使用.下载个eif解压包可以把eif文件解压成gif和jpg格式的文件,然后删除gif文件,只留下jpg格式的文件,这些图就是我的训练集与测试集了. 1-2 使用rename批量重命名图像 (1)对于一个存放了图像src.jpg的文件夹ROOT,在ROOT中新建一个test.txt文件,在里面写下"renam

Caffe 学习笔记目录

版权声明:本文为hanahimi原创及转载文章,转载请附上链接…… 一点点更新中... 目录: 安装.配置与测试 buildtools学习 Tutorial 学习 pyCaffe 学习 Caffe源码学习 相关实例 安装.配置与测试 在windows上安装caffe (GPU) 使用caffe-windows 生成数据文件 运行caffe-windows 的demo 配置caffe + cuDNN buildtools学习 Caffe 学习:convert_imageset Caffe 学习:c

caffe学习笔记3.1 -- caffe的三级结构

在caffe教程中,介绍了caffe的三级结构:Blobs, Layers,Nets.如下图所示: 深度网络是一个复杂的模型,caffe定义了一个层与层之间连接的网络模型.这个网络定义了从输入层到损失的所有模型.caffe使用blobs结构存储,交换和处理网络中正向和反向迭代时的数据和导数信息,blob是Caffe的标准数组结构,它提供了一个统一的内存接口.Layer是Caffe模型和计算的基本单元.Net是一系列的Layer和其连接的集合,Blob详细描述了信息是如何在Layer和net中存储

CAFFE学习笔记(一)Caffe_Example之训练mnist

0.参考文献 [1]caffe官网<Training LeNet on MNIST with Caffe>; [2]薛开宇<读书笔记4学习搭建自己的网络MNIST在caffe上进行训练与学习>([1]的翻译版,同时还有作者的一些注解,很赞); 1.*.sh文件如何执行? ①方法一:有sh后缀名的是linux脚本文件,在windows下为了执行这个文件,应该下载Git.然后对于sh文件右键,打开方式,选择git-bash.exe. ②方法二:直接将后缀名改成“bat”然后双击. 2.

caffe学习笔记(十)图像数据转换为db(leveldb/lmdb)文件

在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致.而在caffe中经常使用的数据类型是lmdb或leveldb,因此就产生了这样的一个问题:如何从原始图片文件转换成caffe中能够运行的db(leveldb/lmdb)文件? 在caffe中,作者为我们提供了这样一个文件:convert_imageset.cpp,存放在根目录下的tools文件夹下.编译之后,生成对应的可执行文件放在 buile/tools/ 下面,

caffe学习笔记10.1--Fine-tuning a Pretrained Network for Style Recognition(new)

在之前的文章里,写过一个关于微调的博客,但是今天上去发现这部分已经更新了http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/02-fine-tuning.ipynb,因此补一篇最新的,关于微调,前面的文章由讲,参考http://blog.csdn.net/thystar/article/details/50675533 首先,还是需要需要的python导入包: caffe_root = '../' # this f

caffe学习笔记2:Fine-tuning一个类别识别的预处理的网

Fine-tuning一个预处理的网用于类型识别(Fine-tuning a Pretrained Network for Style Recognition) 本文原文地址here 在这个实验中,我们我们探索一个通用的方法,这个方法在现实世界的应用中非常的有用:使用一个提前训练的caffe网络,并且使用自定义的数据来fine-tune参数. 这个方法的优点就是,提前训练好的我那个落是从一个非常大的图像数据集中学习到的,中层的网可以捕获一般视觉表象的语义信息.考虑把它作为十分强大的通用的可视化特