超轻量级网络SqueezeNet网络解读
SqueezeNet网络模型非常小,但分类精度接近AlexNet。
这里复习一下卷积层参数的计算
输入通道ci,核尺寸k,输出通道co,参数个数为:
以AlexNet第一个卷积为例,参数量达到:3*11*11*96=34848
基础模块

包含三个卷积层(蓝色),步长为1,分为squeeze和expand两部分,分别压缩和扩展数据(灰色矩形)的通道数
expand部分中,两个不同核尺寸的结果通过串接层(黄色)合并输出
fire模块有三个可调参数:
- s1:squeeze部分,1x1卷积层的通道数
- e1:expand部分,1x1卷积层的通道数
- e3:expand部分,3x3卷积层的通道数
输入输出尺寸相同。输出通道数不限,输出通道数为e1+e3
在本文提出SqueezeNet结构中,
网络结构

整个网络包含10层
第1层为卷积层,缩小输入图像,提取96维特征
第2到9层为fire模块,每个模块内部先减少通道数(squeeze)再增加通道数(expand)。每两个模块之后,通道数会增加
在1、4、8层之后加入降采样的max pooling,缩小一般尺寸
第10层又是卷积层,为小图的每个像素预测1000类分类得分
最后用一个全图average pooling得到这张图的1000类得分,使用softmax函数归一化为概率
这是一个全卷积网络,避免了如今越来越不受待见的全连接层。由于最后一层提供了全图求平均操作,可以接受任意尺寸的输入。当然,输入还是需要归一化大致相当的尺寸,保持统一尺度
全连接层的参数多,对性能提升帮助不大,现在往往被pooling代替
这个网络达到了和AlexNet相当的分类精度,但模型缩小了50倍
| architecture | model size | top-1 accuracy | top-5 accuracy |
|---|---|---|---|
| AlexNet | 240MB | 57.2% | 80.3% |
| SqueezeNet | 4.8MB | 57.5% | 80.3% |
网络设计的要点
1. 为了使1x1和3x3filter输出的结果有相同的尺寸,在expand modules中,给3x3filter的原始输入添加一个像素的边界(zero-padding)
2. squeeze和expand layers中都是用ReLU作为激活函数
3. 在fire9 module之后,使用Dropout,比例取50%
4. 训练过程中,初始学习率设为为0.04,在训练过程中线性降低学习率
5. 由于caffe中不支持使用两个不同尺寸的filter,在expand layer中实际上使用了两个单独的卷积层(1x1filter和3x3filter),最后将这两层的输出连接在一起,这在数值上等价于使用单层但是包含两个不同尺寸的filter
当然SqueezeNet还可以继续压缩,使模型更小。SqueezeNet采用了一些deep-compression的方法,比如裁剪,量化和编码
裁剪:设置阈值,对于小于阈值的参数直接写0,然后用非零参数再次训练
量化:对参数做聚类,然后每个类别的参数的梯度值相加,作用在聚类中心上
编码:Huffman编码进一步压缩存储
参考:
轻量化模型:SqueezeNet,MobileNet,ShuffleNet以及Xception
超轻量级网络SqueezeNet网络解读的更多相关文章
- [论文阅读]阿里DIN深度兴趣网络之总体解读
[论文阅读]阿里DIN深度兴趣网络之总体解读 目录 [论文阅读]阿里DIN深度兴趣网络之总体解读 0x00 摘要 0x01 论文概要 1.1 概括 1.2 文章信息 1.3 核心观点 1.4 名词解释 ...
- [论文阅读]阿里DIEN深度兴趣进化网络之总体解读
[论文阅读]阿里DIEN深度兴趣进化网络之总体解读 目录 [论文阅读]阿里DIEN深度兴趣进化网络之总体解读 0x00 摘要 0x01论文概要 1.1 文章信息 1.2 基本观点 1.2.1 DIN的 ...
- Kube-OVN:大型银行技术团队推荐的金融级云原生网络方案
近日,由TWT社区主办的2021容器云职业技能大赛团队赛的冠军作品:<适用于大中型银行的云原生技术体系建设方案>中,Kube-OVN成为银行技术团队推荐的金融级云原生网络最佳实践.本文部分 ...
- spring boot实现超轻量级网关(反向代理、转发)
在我们的rest服务中,需要暴露一个中间件的接口给用户,但是需要经过rest服务的认证,这是典型的网关使用场景.可以引入网关组件来搞定,但是引入zuul等中间件会增加系统复杂性,这里实现一个超轻量级的 ...
- 分享自己的超轻量级高性能ORM数据访问框架Deft
Deft 简介 Deft是一个超轻量级高性能O/R mapping数据访问框架,简单易用,几分钟即可上手. Deft包含如下但不限于此的特点: 1.按照Transact-SQL的语法语义风格来设计,只 ...
- iOS开发网络篇—网络编程基础
iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...
- iOS开发网络篇—网络编程基础(一)
一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新 ...
- [转] - Linux网络编程 -- 网络知识介绍
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
随机推荐
- CVPR 2020论文收藏(转知乎:https://zhuanlan.zhihu.com/p/112337176)
CVPR 2020 共收录 1470篇文章,根据当前的公布情况,人工智能学社整理了以下约100篇,分享给读者. 代码开源情况:详见每篇注释,当前共15篇开源.(持续更新中,可关注了解). 算法主要领域 ...
- C语言数据结构栈
#include<stdio.h>#include<stdlib.h>typedef struct Node{ int data; struct Node* pnext;}no ...
- Flask 入门(十)
flask 中的 db.relationship() 上文提到的方法,也可以找到狗的主人,但是,方便吗?,如果一个人有多只狗呢? 承接上文,修改main.py中的代码如下: #encoding:utf ...
- 通过GSM模块发送经纬度求救信息。
本博客作为实验笔记,仅供学习交流.(转载请注明出处) 本实验通过GSM模块:SIM900a,实现向特定手机发送sos求救信号,并且利用GPS模块:微科VK2828U7G5LF,将经纬度信息同时发送到手 ...
- 用Python爬取大众点评数据,推荐火锅店里最受欢迎的食品
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:有趣的Python PS:如有需要Python学习资料的小伙伴可以加点 ...
- C语言二维数组超细讲解
用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入.处理和输出. 在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什 ...
- eclipse 集成git工具
1.eclipse git插件下载 打开Eclipse,然后点击Help>Install New Software>Add name:git location:http://downloa ...
- [PHP] excel 的导入导出
其实excel导入导出挺简单的,导出最简单! 其原理都是把数据读出来,导出是从数据库中读出数据,导入是从文件读出数据! 导出写入文件,导入写入数据库! 但是在导入表的时候,用的是PHPExcel, 不 ...
- vue结合百度地图Api实现周边配置查询及根据筛选结果显示对应坐标详情
在我们平常写房地产相关项目的时候经常会用到百度地图,因为这一块客户会考虑到房源周围的配套或者地铁线路所以在这类项目中就不可以避免的会用到百度地图,当然这只是其中一种,其他地图工具也可以,因为我这个项目 ...
- 【MyBatis深入剖析】应用分析与最佳实践(下)
MyBatis编程式开发 MyBatis编程式开发步骤 MyBatis和MySQL Jar包依赖 全局配置文件mybatis-config.xml 映射器Mapper.xml Mapper接口 编程式 ...