声明:Caffe 系列文章是我们实验室 黄佳斌 大神所写的内部学习文档,已经获得他的授权允许。

本参考资料是在 Ubuntu14.04 版本下进行,并且默认 Caffe 所需的环境已经配置好,下面教大家如何搭建 KaiMing He 的 Residual Network(残差网络)。

Cite: He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 770-778.. Cited by 1330.

1.ResNet结构介绍:

  ResNet 的结构如下:

Fig 1 34-layer ResNet

  上图显示了网络主体框架,可以看到一个残差模块(Fig 2)是由两层卷积再加一个恒等映射组成的。相同颜色块之间的 feature map 的大小是一样的,因此残差模块的输入输出的维度大小也是一样,可以直接进行相加(如 Fig 1中的实曲线)网络延伸到不同颜色块时都要经过2倍下采样或者是 stride=2 的卷积,那么这时 feature map 的大小都会减半,但是卷积核的数量会增加一倍,这样是为了保持时间的复杂度,那么残差模块的输入和输出大小不一样的时应该要怎么办?这里采用论文中的 B 方法:用 1X1 的卷积核来映射到跟输出一样的维度(如 Fig 1中的虚曲线)。ResNet 的大体结构是还是参照 VGG 网络。

Fig 2 残差模块

  本参考资料是搭建论文中 CIFAR10 实验的 ResNet,总共 20 层。结构如下:

Layer_name

Output_size

20-layer ResNet

Conv1

32 X 32

Kernel_size=3 X 3

Num_output = 16

Stride = 1

Pad = 1

Conv2_x

32 X 32

{3X3,16; 3X3,16} X 3

Conv3_x

16 X 16

 {3X3,16; 3X3,16} X 3

Conv4_x

8 X 8

 {3X3,16; 3X3,16} X 3

InnerProduct

1 X 1

Average pooling

10-d fc

  每个 Convx_x 中都含有 3 个残差模块,每个模块的卷积核都是 3X3 大小的,pad 为 1,stride 为 1。Con4_x 的输出通过 global_average_pooling 映射到 64 个 1X1 大小的 feature map,最后再通过含有 10 个神经元的全连接层输出分类结果。

2.数据准备

  CIFAR10 数据库介绍:

  CIFAR10 数据库中的图片大小为 3 X 32 X 32(通道数 X 图像高度 X 图像宽度),训练数据为 50000 张,测试数据为 10000 张。此外还有 CIFAR100,那是分 100 类的图像数据库。

Fig 3 CIFAR10 数据库

  我们先在 /home/your_name/ 下建立一个文件夹叫 ResNet,再把 caffe-master 放进去解压,然后按照如下步骤

Fig 4 把 caffe-maste r放入 ResNet 然后解压

  步骤1:

  在 caffe-master (caffe 的根目录)中找到 Makefile.config.example,复制一份为 Makefile.config。

Fig 5 复制一份Makefile.config

  在这个复制好的 Makefile.config 文件中设置好一些参数。由于每个电脑环境不一样,在这里贴出本实验方案的设置参数,仅供参考:(仅仅是把 “#” 注释给去掉)

  # USE_CUDNN := 1          变为  USE_CUDNN := 1 

  # WITH_PYTHON_LAYER := 1      变为  WITH_PYTHON_LAYER := 1

  步骤2:

  在 caffe-master (caffe 的根目录)中打开终端,先输入 make clean(清除之前编译的文件,虽然还没编译过),然后再输入 make all(重新编译 caffe),这个过程会很漫长,如果想要加快速度,输入 make all -j8(j 后面的数字代表加速的倍数,可以是 2,4,8,16 等),最后再输入 make pycaffe(之后本参考资料会用 python 搭建残差网络,因此要生成供 python 调用的接口文件)。

Fig 6 make clean & make all & make pycaffe

  步骤3:

  在 caffe 的示例程序中有 CIFAR10 的 demo,里面有获取 CIFAR10 数据程序。在 caffe-master (caffe 的根目录)中打开终端,输入:

  $./data/cifar10/get_cifar10.sh

  为什么要在 caffe 的根目录里面输入这个,因为只有在根目录才有 data 文件,才能按照路径找到文件,打了指令后会出现下载界面,如下:

Fig 7 下载CIFAR10界面

  下载完成后,会在 $(caffe 根目录)/data/cifar10/ 中生成许多数据 batch,不过这些都是二进制文件,我们需要转换为 LMDB 格式。

Fig 8 下载后的二进制数据batch

  步骤4:

  同样在 caffe-master (caffe 的根目录)中打开终端,输入:  

  $./examples/cifar10/create_cifar10.sh

  这样就把上面的二进制文件转换成 LMDB 数据,同时生成了训练数据 (cifar10_train_lmdb) 的均值文件 mean.binaryproto。均值文件的计算方式是计算每个样本不同维度上的均值,拿 CIFAR10 做例子,训练数据有 5000 X 3 X 32 X 32 (样本个数 X 图像通道数 X 图像高度 X 图像宽度),那么均值文件的维度是 3 X 32 X 32。

Fig 9 生成的测试数据,训练数据,还有均值文件

  这样我们就已经生成数据了,接下来我们就要用 python 来搭建网络。

Caffe 议事(一):从零开始搭建 ResNet 之 残差网络结构介绍和数据准备的更多相关文章

  1. Caffe 议事(二):从零开始搭建 ResNet 之 网络的搭建(上)

    3.搭建网络: 搭建网络之前,要确保之前编译 caffe 时已经 make pycaffe 了. 步骤1:导入 Caffe 我们首先在 ResNet 文件夹中建立一个 mydemo.py 的文件,本参 ...

  2. Caffe 议事(三):从零开始搭建 ResNet 之 网络的搭建(中)

    上面2个函数定义好了,那么剩下的编写网络就比较容易了,我们在ResNet结构介绍中有一个表,再贴出来: Layer_name Output_size 20-layer ResNet Conv1 32 ...

  3. 陈云pytorch学习笔记_用50行代码搭建ResNet

    import torch as t import torch.nn as nn import torch.nn.functional as F from torchvision import mode ...

  4. Keras入门(五)搭建ResNet对CIFAR-10进行图像分类

      本文将会介绍如何利用Keras来搭建著名的ResNet神经网络模型,在CIFAR-10数据集进行图像分类. 数据集介绍   CIFAR-10数据集是已经标注好的图像数据集,由Alex Krizhe ...

  5. 在阿里云服务器(ECS)上从零开始搭建nginx服务器

    本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器.阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验 ...

  6. 从零开始搭建Docker Swarm集群

    从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker2. 添加-H tcp:/ ...

  7. Linux编程之从零开始搭建RPC分布式系统

    我一毕业进公司就接触到了RPC,主要是使用前辈们搭建好的RPC框架以及封装好的RPC函数进行业务开发,虽说使用RPC框架开发已经近半年了,但一直想知道如何从零开始搭建起这么一个好用的分布式通信系统框架 ...

  8. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  9. 从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建

    从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建 废话不说,直接撸步骤!!! 1.创建主项目:ncc-parent 选择maven创建项目,注意在创建项目中,packing选择 ...

随机推荐

  1. 树莓派系列教程:安装系统与配置环境,使用PuTTy与VNC图形界面远程登录

    本文所需物品清单: Raspberry Pi 3 Model B 主板.SD卡与读卡器(用于烧录系统) 资料整理来源在文尾 需要下载的资源与工具: 推荐系统-Raspbian 树莓派官方深度定制的硬件 ...

  2. StringUtils.isEmpty()和isBlank()的区别

    一.概述 两种判断字符串是否为空的用法都是在程序开发时常用的,相信不少同学在这种简单的问题上也吃过亏,到底有什么区别,使用有什么讲究,带着问题往下看. 二.jar包 commons-lang3-3.5 ...

  3. windows dos权限管理

    显示或者修改文件的访问控制列表(ACL) CACLS filename [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C] [/G user:perm]              ...

  4. winodws同步时间命令

    首先,你应该判断你的两台域控制器,哪一台担任PDC角色(默认的域内权威的时间服务源). 判断方法很简单,单击“开始”,单击“运行”,键入dsa.msc,然后点确定.这时会打开“Active Direc ...

  5. LCD的接口类型详解

    LCD的接口有多种,分类很细.主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式,DSI模式.MCU模式 ...

  6. emacs里面模拟vim按键操作的插件evil

    emacsConfig/evil-setting.el (setq evil-mode t) (setq evil-shift-width ) ;; some modes aren't meant f ...

  7. mediawiki 安装 部署 配置 使用学习

    学习资源: https://blog.csdn.net/gao36951/article/details/43965527 http://blog.csdn.net/hualichenxi123/ar ...

  8. 关于正则表达式 C#

    读懂正则表达式就这么简单   一 前言 对于正则表达式,相信很多人都知道,但是很多人的第一感觉就是难学,因为看第一眼时,觉得完全没有规律可寻,而且全是一堆各种各样的特殊符号,完全不知所云. 其实只是对 ...

  9. Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)?

    ylbtech-Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)? 1.返回顶部 1. Java 实例 - 如何执行指 ...

  10. jquery选择器用法

    jquery的基础选择器 选择器的用法其实跟咱们当时讲css的选择器用法类似,只是代码书写的不同 <ul> <li id="brother" class=&quo ...