深度学习caffe框架(1):如何快速上手caffe?

2023-05-16

  • 初识caffe
    • 安装caffe
    • 跑一个例子mnist
    • 配置caffe框架的深度学习网络结构
    • 输入数据
      • 数据层的定义
      • 图片数据如何保存为lmdb格式
    • 模型的保存和读取
  • caffe的代码层次
  • 参考

初识caffe

安装caffe

跑一个例子:mnist

在Caffe安装目录之下,首先获得MNIST数据集:

cd data/mnist
sh get_mnist.sh

生成mnist-train-leveldb/ 和 mnist-test-leveldb/,把数据转化成leveldb格式:

cd examples/lenet 
sh create_mnist.sh

训练网络:

sh train_lenet.sh

看看train_lenet.sh

#!/usr/bin/env sh
set -e
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt $@

脚本在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出。这样的好处是防止错误像滚雪球般变大导致一个致命的错误,而这些错误本应该在之前就被处理掉。如果要增加可读性,可以使用set -o errexit,它的作用与set -e相同。

配置caffe框架的深度学习网络结构

后缀为.prototxt 的文件是caffe配置文件.
Caffe非常强调网络的层次结构,也就是说有的操作都是一个layer.layer还有很多种类型,比如Data,Convolution,Pooling等,层之间的数据流动是以Blobs的方式进行
数据层是每个模型的最底层,是模型的入口,不仅提供数据的输入,也提供数据从Blobs转换成别的格式进行保存输出。通常数据的预处理(如减去均值, 放大缩小, 裁剪和镜像等),也在这一层设置参数实现。
下面来看看如何定义数据层及输入数据.

输入数据

Caffe的输入数据可以是数据库lmdb或者LevelDB,也可以是内存数据, HDF5, 甚至是图片数据(将图片名称和label按照固定格式写入txt, 这种方式效率比较低)

数据层的定义

下面的例子给出了所有数据层都具有的公用参数:

layer {
  name: "cifar"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mean_file: "examples/cifar10/mean.binaryproto"
  }
  data_param {
    source: "examples/cifar10/cifar10_train_lmdb"
    batch_size: 100
    backend: LMDB
  }
}
  • name: 表示该层的名称,可随意取

  • type: 层类型,如果是Data,表示数据来源于LevelDB或LMDB。根据数据的来源不同,数据层的类型也不同(后面会详细阐述)。一般在练习的时候,我们都是采 用的LevelDB或LMDB数据,因此层类型设置为Data。

  • top或bottom: 每一层用bottom来输入数据,用top来输出数据。如果只有top没有bottom,则此层只有输出,没有输入。反之亦然。如果有多个 top或多个bottom,表示有多个blobs数据的输入和输出。

  • data 与 label: 在数据层中,至少有一个命名为data的top。如果有第二个top,一般命名为label。 这种(data,label)配对是分类模型所必需的.

  • include: 一般训练的时候和测试的时候,模型的层是不一样的。该层(layer)是属于训练阶段的层,还是属于测试阶段的层,需要用include来指定。如果没有include参数,则表示该层既在训练模型中,又在测试模型中。

  • Transformations: 数据的预处理,可以将数据变换到定义的范围内。如设置scale为0.00390625,实际上就是1/255, 即将输入数据由0-255归一化到0-1之间. 这里定义了数据的均值文件.mean_file: “examples/cifar10/mean.binaryproto”.这是由于图片减去均值后,再进行训练和测试,会提高速度和精度。因此,一般在各种模型中都会有这个操作。

其他格式的数据层具体定义及相应参数参见:http://www.cnblogs.com/denny402/p/5070928.html
如何生成均值文件binaryproto: http://www.cnblogs.com/denny402/p/5102328.html

图片数据如何保存为lmdb格式?

在caffe中,作者为我们提供了这样一个文件:convert_imageset.cpp,存放在根目录下的tools文件夹下。编译之后,生成对应的可执行文件放在 buile/tools/ 下面,这个文件的作用就是将图片文件转换成caffe框架中能直接使用的db文件。
在linux终端, 就可以输入下面命令实现数据格式的转换

convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME

这里需要带四个参数:
- FLAGS: 图片参数组,后面详细介绍
- ROOTFOLDER/: 图片存放的绝对路径,从linux系统根目录开始
- LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片
- DB_NAME: 最终生成的db文件存放目录

首先看看FLAGS都有哪些具体设置:
-gray: 是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为false
-shuffle: 是否随机打乱图片顺序。默认为false
-backend:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
-resize_width/resize_height: 改变图片的大小。在运行中,要求所有图片的尺寸一致,因此需要改变图片大小。 程序调用opencv库的resize()函数来对图片放大缩小,默认为0,不改变
-check_size: 检查所有的数据是否有相同的尺寸。默认为false,不检查
-encoded: 是否将原图片编码放入最终的数据中,默认为false
-encode_type: 与前一个参数对应,将图片编码为: ‘png’,’jpg’……
例如:

DATA=examples/images
build/tools/convert_imageset --shuffle \--resize_height=256 --resize_width=256 \/home/xxx/caffe/examples/images/ $DATA/train.txt  $DATA/img_train_lmdb

–shuffle –resize_height=256 –resize_width=256 是图片参数组设置,这里设置参数-shuffle,打乱图片顺序。设置参数-resize_height和-resize_width将所有图片尺寸都变为256*256.
/home/xxx/caffe/examples/images/就是图片的ROOT_FOLDER, $DATA/train.txt 图片文件列表清单

模型的保存和读取

Caffe训练好的模型可以保存在后缀为.caffemodel的文件里.这个文件是二进制文件,在读取的时候将二进制文件(caffemodel)转化成文件流,再放入proto里面。可以用caffe的代码打开,详见:http://blog.csdn.net/jiongnima/article/details/72904526.

模型的加载也很简单, python代码如下:

import caffeimport numpy as np
root='/home/dl/'   #根目录
deploy=root + 'mnist/deploy.prototxt'    #deploy文件
caffe_model=root + 'mnist/lenet_iter_9380.caffemodel'   #训练好的 caffemodel

caffe的代码层次

  • Blob:是基础的数据结构,是用来保存学习到的参数以及网络传输过程中产生数据的类。
  • Layer:是网络的基本单元,由此派生出了各种层类。修改这部分的人主要是研究特征表达方向的。
  • Net:是网络的搭建,将Layer所派生出层类组合成网络。Solver:是Net的求解,修改这部分人主要会是研究DL求解方向的。

参考

https://www.zhihu.com/question/27982282/answer/39350629
一个不错的caffe学习笔记博客:
http://www.cnblogs.com/denny402/tag/caffe/default.html?page=2
图片文件转lmdb数据库:
http://www.cnblogs.com/denny402/p/5082341.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习caffe框架(1):如何快速上手caffe? 的相关文章

  • avc: denied SELinux权限问题解决

    1 SELinux简介 SELinux是Google从android 5 0开始 xff0c 强制引入的一套非常严格的权限管理机制 xff0c 主要用于增强系统的安全性 然而 xff0c 在开发中 xff0c 我们经常会遇到由于SELinu
  • 解决编译报错:VINTF parse error:“android.hardware.secure_element“ has a conflict.

    VINTF parse error Cannot add manifest fragment vendor etc vintf manifest android hardware secure element 64 1 2 service
  • HIDL转AIDL编译报错:ISecureElement does not have VINTF level stablity, but interface requires it.

    在m vendor sprd hardware secure element update api生成stable接口时 xff0c 总是报错如下 找了一圈找不到解决方法 xff0c 最后误打误撞地解决了 xff0c 供大家参考 HIDL转
  • Mac上的远程连接工具Royal TSX,比FinalShell更值得被推荐

    安装Royal TSX xff1a https blog csdn net Darling qi article details 120289137 使用Royal TSX xff1a https blog csdn net Bluffin
  • libjvm.so: ELF file OS ABI invalid

    Error dl failure on line 893 Error failed 某目录 jdk jre lib amd64 server libjvm so because 某目录 jdk jre lib amd64 server li
  • win11启用旧右键菜单(不折叠)的方案,亲测有效

    我电脑的winodws11版本如下 在以上win版本下 xff0c 测试网上说的以下几个办法都不行 1 权利与暗访时在终端运行 reg exe delete HKCU Software Classes CLSID 86ca1aa0 34aa
  • Android中的动画总结

    Android 动画 三种总结 xff1a 属性动画 xff1a 动态的改变属性产生动画效果 xff1b 改变动画的属性 xff0c 两个重要的类 xff1a 1 ValueAnimator 类是先改变值 xff0c 然后 手动赋值 给对象
  • ubuntu自动登录tty终端的最简方法

    背景 在嵌入式系统经常需要自动登录tty xff0c 以实现业务程序开机启动的效果 网上有篇文章ubuntu自动登录tty1 shell text 配置转发挺多 xff0c 但我弄明白原理后 xff0c 觉得可以进一步简化 xff0c 经测
  • git为指定项目设置用户名密码

    我们如果没有为项目设置用户名密码 xff0c 那么每次提交都会有提示账号和密码输入 xff1a 1 找到你项目的半隐藏文件 git文件夹 xff0c 通常只要git init 就会生成这样一个文件夹 xff0c 现在双击进入文件夹 xff1
  • JAVA 访问windows共享文件夹

    一 使用技术 JCIFS框架对Windows共享文件夹进行读写 xff0c 使用了SMB通信协议 xff0c 它为局域网内不同的计算机之间提供文件和打印机等资源共享服务 二 共享文件夹设置 测试共享文件夹机器windows版本为win10家
  • 前端代码调试:Webstorm调试js

    前言 目前前端开发 JavaScript的debug一般都是用chrome和firefox的开发者工具进行调试 xff0c 浏览器工具使用不方便 xff0c webstorm支持了在代码上打断点 xff0c 在编辑器里debug js代码
  • CV:基本概念和工具

    文章目录 计算机视觉像素 xff0c 颜色 xff0c 通道 xff0c 图像和颜色空间的概念图像文件后缀有损压缩和无损压缩 Python的计算机视觉库PIL xff1a python 图像处理类库载入PIL库基本操作命令 openCVop
  • OCR技术概览

    OCR技术概览 OCR Optical Character Recognition 光学字符识别技术主要分为手写体识别和印刷体识别两类 印刷体识别比手写体识别要简单 因为印刷体更规范 字体来自于计算机字库 尽管印刷过程中可能会发生不清晰 粘
  • CV:图像色彩空间及色彩处理

    文章目录 基本概念RGB空间HSV空间HSL空间 色彩变换灰度变换色彩反向 调整像素区间增强对比度直方图均衡化 图像平滑 减少噪声图像平均高斯滤波 图像梯度sobel算子 scharr算子prewitt算子Laplacian 算子 参考及更
  • OpenCV角点检测: Harris算子, ShiTomasi算子

    角点检测 角点的特征检测与匹配是Computer Vision 应用总重要的一部分 xff0c 这需要寻找图像之间的特征建立对应关系 点 xff0c 也就是图像中的特殊位置 xff0c 是很常用的一类特征 xff0c 点的局部特征也可以叫做
  • 集成学习:让算法和算法赛跑

    文章目录 集成学习的基本概念构建弱分类器 xff1a 决策树自助采样法bootstrappingbootstrapping的核心思想bootstrapping与permutation的区别 baggingboosting为何bagging会
  • backbone模型:FCN、SRN、STN

    文章目录 FCN网络CNN图像分割模型结构FCN github资源FCN的优缺点 SRN 网络什么是空间规整 spatial regularization xff09 SRN网络github资源 STN网络空间变换器localisation
  • docker部署机器学习/深度学习模型的容器化方案

    文章目录 什么是dockerdocker的优点 docker image镜像Dockerfile 文件Dockerfile配置例子 创建docker镜像 docker container 容器模型部署参考和更多阅读 docker部署机器学习
  • RNN模型训练经验总结

    文章目录 RNN模型训练经验总结数据准备 look at your data 小步试错 搭建模型设置端到端的训练评估框架 forward propagation设置激活函数dropout back propagation设置学习率 lear
  • 算法的时间复杂度和空间复杂度

    如何评价算法的性能 定义 一个算法中的语句执行次数称为 语句频度 或 时间频度 约定 检验算法的效率 xff0c 主要考虑 最坏时间复杂度 和 平均时间复杂度 一般不特别说明 xff0c 讨论的时间复杂度均是最坏情况下的时间复杂度 时间复杂

随机推荐

  • 【LeetCode】LCS最长公共子序列

    最长公共子序列 题目描述思路分析递归结构算法实现输出最长子序列算法实现 题目描述 思路分析 设A 61 a0 xff0c a1 xff0c xff0c am xff0c B 61 b0 xff0c b1 xff0c xff0c bn xff
  • 升级到tensorflow2.0

    目录 从tensorflow1 x升级到2 x方案一 xff1a 依然使用tf 1 x的脚本方案二 xff1a 升级项目代码到2 x tensorflow2 0推出以后 xff0c 全面拥抱keras xff0c 简化了API接口 xff0
  • tensorflow2.0系列(1):张量

    目录 tensor xff1a 张量张量的数据类型Dtype类函数tf as type xff1a 定义Dtype类型对象tf dtypes cast xff1a 将张量映射 投射为新的类型tf dtypes complex xff1a 将
  • tensorflow 2.0系列(3):eager execution和计算图

    目录 tf 2 0 的新特性 xff1a eager execution开启eager模式关闭eager模式 构建图默认图创建多个计算图启动会话 从公式到计算图绘制心形曲线开根号线性回归 tf 2 0 的新特性 xff1a eager ex
  • tensorflow2.0系列(2):张量的运算

    目录 张量运算tf linalg 模块tf math模块常用的代数函数tf math segment 张量运算 tensorflow定义了很多张量的基本运算 xff0c 由于张量的特殊属性 xff0c 其运算操作主要有两类 xff0c 一类
  • 那些重要但是容易被忽略的python编程基础知识

    目录 变量类型标准数据类型 字典字典的内置函数 amp 方法 字符串前符号 python很容易上手 xff0c 工具包特别多 xff0c 入门后就特别容易忽略python的基本特性 这里将特别关注python那些特别基础 xff0c 重要但
  • 常见深度神经网络模型图

    from tensorflow learn in one day by Krishna Rungta
  • tensorflow2.0系列(4): Eager Execution和Auto Graph

    目录 静态图的弊端Eager模式Eager execution的基本特性对 numpy 的支持 Auto Graph 动态图static analysis VS dynamic flow局部参数的可见域python collections
  • Eclipse离线安装ADT插件

    Eclipse安装 ADT插件 但是由于某些不可抗拒的原因连上 https dl ssl google com android eclipse 后 xff0c 始终无法更新 ADT插件 卡死在 Fetchingcontent jar上 解决
  • ubuntu在shell中把文件拷贝进U盘

    1 创建挂载位置 xff0c 例如 sudo mkdir mnt u 这个位置只要建好 xff0c 以后就可以不用再建了 2 用mount命令将U盘挂载在这个位置 sudo mount dev sdb1 mnt u 注意U盘的盘符不一定是
  • linux文件管理

    linux文件管理 计算机操作系统都采用了目录树的文件结构 linux中 xff1a 符号名称 根目录 bin常见用户口令 boot内核和启动文件 dev设备文件 home系统默认的普通用户主目录 etc系统和服务配置文件 lib系统函数库
  • C++和Windows平台的一些书籍

    从2010年学习编程以来 xff0c 到现在有差不多3年时间了 xff0c 过的真快啊 目前在深圳工作 xff0c 主要使用的是C 43 43 语言 xff0c 那么我就说说C 43 43 和Windows平台的书籍吧 1 C primer
  • ubuntu上运行C程序

    ubuntu版本为Ukylin14 04LTS 首先配置编辑器vim step1 xff1a 查看系统是否安装vim 打开终端 xff0c 输入vi xff0c 按下tab键 xff0c 如果列表里没有vim xff0c 说明系统没有安装
  • 怎么让ubuntu变得更加好用

    ubunut14 04LTS版本其实已经很好用了 但是也有一些小小的美中不足 以下设置是陆续收集 摸索到的可以让系统更好用的方法 1 在终端打开已经安装的应用程序时 xff0c 总是会显示一些错误信息 在 bin下添加x文件 xff1a c
  • linux命令(1):touch

    touch 命令 功能说明 xff1a 改变文件或目录时间 xff0c 包括存取时间和更改时间 语 法 xff1a 补充说明 xff1a 使用touch指令可更改文件或目录的日期时间 最常用用法 xff1a touch fileA 如果fi
  • bash shell命令(1);、&&、||

    xff1b 命令 按照先后顺序一次执行多个命令 xff0c 命令之间用 xff1b 分割 xff1a command 1 command 2 command 3 amp amp 命令 如果前一个命令 command 1 顺利执行 xff0c
  • linux命令(2):less

    less工具也是对文件或其它输出进行分页显示的工具 xff0c 比more的功能更强大 命令格式 xff1a less 参数 文件1 xff08 文件2 xff09 命令功能 xff1a less 与 more 类似 xff0c 但使用 l
  • [zz] linux下vi或vim操作Found a swap file by the name的原因及解决方法

    在linux下用vi或vim打开Test java文件时 root 64 localhost tmp vi Test java 出现了如下信息 xff1a E325 ATTENTION Found a swap file by the na
  • ubuntu中使用判断符号[]

    鸟哥的私房菜p270中13 3 2使用 符号有这样一个例子 xff1a vim sh06 sh 脚本内容如下 xff1a bin bash Program This program shows the user 39 s choice Hi
  • 深度学习caffe框架(1):如何快速上手caffe?

    初识caffe 安装caffe跑一个例子mnist配置caffe框架的深度学习网络结构输入数据 数据层的定义图片数据如何保存为lmdb格式 模型的保存和读取 caffe的代码层次参考 初识caffe 安装caffe 跑一个例子 mnist