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 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 来搭建网络。
转载于:https://www.cnblogs.com/Charles-Wan/p/6442294.html
Caffe 议事(一):从零开始搭建 ResNet 之 残差网络结构介绍和数据准备相关推荐
- 从零开始搭建多租户自洽的权限数据配置模块(一)
基于 DevExpress 从零开始搭建多租户自洽的权限数据配置模块(一) 从零开始设计一个最简单的winform练习程序,在这个过程中会涉及到devexpress.简单数据库设计.简单分层设计.基本 ...
- 从零开始搭建多租户自洽的权限数据配置模块(二)- 主界面的跳转管理以及基础数据维护设计
基于 DevExpress 从零开始搭建多租户自洽的权限数据配置模块(二) 基础数据的维护管理,以简单基本操作的形式展开.主要是演示devexpress做基本的增删改查.加载表单.建立多表关联.用户操 ...
- 经典网络结构梳理:Resnet深度残差网络结构
说到深度学习一般网络结构越深网络的效果就会越好.因为越深的网络可以得到更多的语义信息. 上图可以看出来随着网络结构的加深网络的分类,识别效果也就越好.事实是这样吗?人们对chan常规的网络直接堆叠很多 ...
- 深度学习经典网络(4)ResNet深度残差网络结构详解
0.引言 ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它"简单与实用"并存,之后很多方法都建立在ResNet50或者Re ...
- ResNet之残差结构的理解
ResNet 论文 2015年提出的ResNet 2016年改进后的ResNet 博客 本人实现的2015-2016的ResNet网络复现 深度学习-残差resnet网络原理详解 ResNet详解-- ...
- ResNet、残差结构、迁移学习
文章目录 前言 一.ResNet 二.残差结构 BN层 三.迁移学习 前言 机器学习基本知识--Resnet.残差结构.迁移学习 参考内容来自b站up主:https://space.bilibili. ...
- 详解ResNet(深度残差网络)
引言 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,让我们先看一下ResNet在ILSVRC和COCO 2015上的战绩: ResN ...
- ssm radis mysql_从零开始搭建框架SSM+Redis+Mysql(一)之摘要
从零开始搭建框架SSM+Redis+Mysql(一)之摘要 本文章为本人实际的操作后的回忆笔记,如果有步骤错漏,希望来信307793969@qq.com或者评论指出. 本文章只体现过程,仅体现操作流程 ...
- 从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一)
从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一) 1.vue-cli搭建一个可靠成熟的项目 1.介绍 vue-cli 我是去年六月份接触的vue1.0,当时还是个菜逼,当 ...
最新文章
- 终于把微软BING搜索-SPTAG算法的原理搞清了
- python unicode编码书写方式_python 中文编码 小结 ,json读写,str转换unicode,文字比较...
- epoll使用详解(精髓)
- 怎么在服务器中修改sql权限设置密码,SQL server数据库的权限设置
- Kibana功能一览
- 普元部署包部署找不到构建_让我们在5分钟内构建和部署AutoML解决方案
- kali linux 双显卡,Kali上双显卡驱动的安装
- [转]Android应用签名
- OpenShift 4 之 GitOps(3)用Helm+ArgoCD部署应用,并保持配置同步
- 【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)...
- Lesson5 How to open a new window from a pushbutton
- solr suggest+autocomplete实现自动提示
- susue linux防火墙,在64位的SUSUE下,g++编译的代码中,进入函数前的一段汇编让人费解,请高手解释一下?...
- 交互式电子杂志_快速的创建交互式演示和翻转电子书工具-XFlip Enterprise(电子杂志相册制作器) V2.0.5.0 中文版 - 未来软件园...
- Logistic Regression(LR) 算法原理简介
- wifi数据包解析_WIFI协议详解
- 常见的浏览器兼容性问题
- CCF-CSP认证历年真题解
- 微信小程序判断是否开启定位功能引导重新打开定位权限
- 紫光公有云能后发先至吗?
热门文章
- FFmpeg发送流媒体的命令(UDP,RTP,RTMP)
- sql查询分析器 只读_DRDS 只读实例来解决复杂 SQL 查询
- Linux动态链接库隔离,Linux下的.so文件是动态链接库
- idea 高级调试技巧
- CSS中给表格的第一列及最后一列设置不同的样式
- 【CCCC】L2-025 分而治之 (25分),图的度数,使节点独立的方案
- mysql 判断日志时间早_MySQL5.7慢查询日志时间与系统时间差8小时原因详解
- 魔兽世界怀旧服务器维护,魔兽世界怀旧服转服维护服务 关闭部分服务器
- jquery绑定方法on的
- windows中python虚拟环境_Windows下Python虚拟环境的配置