Caffe 议事:从零开始搭建 ResNet 之 残差网络结构介绍和数据准备

声明: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 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 来搭建网络。

时间: 2024-10-07 15:38:54

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

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

上面2个函数定义好了,那么剩下的编写网络就比较容易了,我们在ResNet结构介绍中有一个表,再贴出来: 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  {3

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

本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器.阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验馆去体验(半个月有效期).至于如何注册.管理ECS这里就不详细介绍了.因为官方文档已经写的很清楚了.如果还不清楚,打咨询电话询问. 现在假设你已经拥有了阿里云服务器,ip是139.128.33.11(假的,读者需要换成自己的ip地址).并且没有选择任何安装包.现在ECS是完全空的,除了必须的Linu

从零开始搭建Raspberry Pi机器视觉编程环境

从零开始搭建Raspberry Pi机器视觉编程环境 本文主要包括如下内容: 安装Raspbian系统 连接和设置网络 安装中文支持 用电脑控制树莓派 通过SSH远程登录树莓派命令行界面 安装VNC远程登录树莓派图形桌面 通过串口连接树莓派 安装OpenCV及相关开发包 一键备份树莓派SD卡 1 安装Raspbian系统 拿到树莓派后第一件事当然是装系统.安装树莓派系统所需配置: 1个输出5V,>700mA(通常选择1A或2A)的USB电源适配器 1根micro USB线(安卓线) 1张拷贝好系

乐视秒杀架构解读:从零开始搭建百万每秒订单系统

在各种秒杀活动大行其道的今天,订单系统的性能与稳定日益重要.乐视集团作为这一技术的佼佼者,在多次的电商狂欢节中都能抢占商机.拔得头筹,其表现无疑为其他企业和厂商提供了非常有价值的参考. 在Gdevops全球敏捷运维峰会北京站的现场,乐视BOSS平台技术部架构师梁阳鹤就给大家带来了<从零开始搭建百万每秒订单系统>的精彩演讲.从部分到整体,从微观到宏观,层层递进,步步为营,详尽地介绍了整套乐视支付架构及其实现每秒处理百万笔交易的成功要点. (点击“这里”听梁阳鹤演讲完整录音) 演讲主要分为三个部分

Linux从零开始搭建nas &amp; Time Machine(一)

整个过程以Fedora 20为例. 首先安装&配置SSH,SSH安装完毕之后服务器就能扔一边不用管了. SSH使用的是openssh 确定openssh是否已经安装 rpm -qa | grep openssh-server 如果有显示类似 openssh-server-6.4p1-4.fc20.x86_64 表示已经安装 没有安装的话运行 yum install openssh-server进行安装 SSH配置文件默认在 /etc/ssh/sshd_config 里,暂时使用默认参数,不需要作

从零开始搭建Docker Swarm集群

从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker 2. 添加-H tcp://0.0.0.0:2375到OPTIONSOPTIONS='-g /cutome-path/docker -H tcp://0.0.0.0:2375' 3. CentOS6.6 需要另外添加-H unix:///var/run/docker.sockOPTIONS='-g /mnt/docker 

从零开始搭建android框架系列(转)

网址:从零开始搭建android框架系列 githup:https://github.com/CameloeAnthony/Ant

从零开始搭建一个网站

开始做项目,从零开始搭建一个网站的过程.这里以www.sampe.com为例,步骤如下. 1.在万网购买域名:www.sample.com 2.购买阿里云ECS云主机 3.在万网的域名管理中将域名解析到所购买的阿里云主机的ip地址上面. 4.在服务器(也就是云主机上面)设置域名的绑定(教程:http://www.cnblogs.com/yiluxiuxing/p/4347702.html) 至此完成网站搭建

mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下)

继续 mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上) 五.使用监听器启动Spring容器 1.修改pom.xml文件,添加Spring-web 2.修改web.xml,配置启动Spring容器 3.新建BookServer 4.新建BookServlet 5.修改ApplicationContext.xml 6.测试 继续!!! 五.使用监听器启动Spring容器 1.修改pom.xml,添加Spring-web包(注:上一篇中的pom