博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模型小型化小结
阅读量:7023 次
发布时间:2019-06-28

本文共 1698 字,大约阅读时间需要 5 分钟。

  实习终于结束了,现把实习期间做的基于人体姿态估计的模型小型化的工作做个总结。

  现在深度学习模型开始走向应用,因此我们需要把深度学习网络和模型部署到一些硬件上,而现有一些模型的参数量由于过大,会导致在一些硬件上的运行速度很慢,所以我们需要对深度学习模型进行小型化处理。模型小型化旨在保证模型效果不会明显下降的情况下降低模型的参数量,从而提高模型的运算速度。

  以下是几种模型小型化的方法:

  1、修改某些卷积层的num_output

  其实很多模型的参数都有冗余,有些层根本不需要很多的卷积核,所以,通过修改该参数可以降低一部分的参数量。

  2、使用分离通道卷积

  对某些卷积层使用分离通道卷积的方法。使用分离通道卷积可以去掉一部分冗余的参数。分离通道卷积与常用卷积的不同之处在于,常用卷积是全卷积,group=1,分离通道有多个group,即group>1,做卷积操作时,group之间的特征信息没有交互,之后会采用一个1*1的全卷积运算,使分离通道卷积输出的特征的通道之间的信息有了一个交互。

  参考论文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

  3、使用channel shuffle方法

  channel shuffle方法是在分离通道卷积方法的基础上做的改进,将分离通道卷积之后的1*1的全卷积替换为channel shuffle。

  参考论文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

  4、使用ThiNet方法

  ThiNet方法是寻找一些对输出特征贡献较小的卷积核,将其裁剪掉,从而降低参数量。属于第一种方法的延伸。

  参考论文:ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression

  5、改变网络结构

  现在常见的网络结构有:以VGG为代表的单支流网络结构,GoogLeNet的Inception类型的网络结构,ResNet的残差结构,还有DenseNet的结构(类似残差结构,把残差结构中特征的相加变为特征拼接)。在曾经的ImageNet的比赛中,GoogLeNet取得了比VGG更好的成绩,但是GoogLeNet的参数量却比VGG小很多,这说明通过改变网络结构,我们不仅可以减低模型的参数量,还可能会提升模型的效果。

  前四种方法都是在原有网络上进行的操作,一般不会对网络结构造成太大改变。而第五种方法则是彻底改变了网络的结构。

  我们将模型的参数量降低后,如果随机初始化,模型由于参数量较小,很难达到原有的效果,所以构造了新的网络之后还会涉及到重构。

  重构其实是为了得到一个较好的初始化模型。我们一般去重构网络的倒数第二层的输出特征,因为最终的结果都是在倒数第二层的输出特征上得到的。但有时我们还会去重构其他卷积层输出的特征,比如一个较深的网络,我们单纯地去重构倒数第二层的特征也很难得到一个较好的初始化模型,因为监督信息(即重构时的loss)太靠后,前面的层很难学习到,所以有时我们可以将网络分为几个部分,依次重构,先重构前面的,然后使用重构好的模型去重构后面的部分。

  使用ThiNet方法,每裁剪完一层之后都要做finetunign,然后再裁剪下一层。我们也可以每裁剪完一层之后去做重构,全部都裁剪完之后,做姿态估计训练。 

  我们还可以重构和姿态估计训练一起做,使用两个监督信息(即重构和姿态估计两个loss)使模型边重构边训练,我们将其称为mimick。

  这就是我在模型小型化的工作中使用到的一些方法。但如何使用这些方法才能得到一个好的结果,这还需要亲自去尝试。

转载于:https://www.cnblogs.com/Peyton-Li/p/7620266.html

你可能感兴趣的文章
python 如何在某.py文件中调用其他.py内的函数
查看>>
对症治疗过敏性鼻炎,依巴斯汀比氯雷他定更有效
查看>>
iOS 多线程 GCD part3:API
查看>>
UITableView UITableViewCell
查看>>
H5 Notes:Navigator Geolocation
查看>>
P2------总结
查看>>
A题笔记(3)
查看>>
Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
java 初始化字段(翻译自Java Tutorials)
查看>>
andorid 帧布局
查看>>
php 数组2
查看>>
c++和java字节高低位的转换
查看>>
XNA Game Studio4.0 Programming 随便读,随便记。
查看>>
用python实现字符串的替换
查看>>
统计vs机器学习,数据领域的“少林和武当”
查看>>
WCF概念
查看>>
用ChemDraw画3D图的方法
查看>>
上拉电阻大小对i2c总线的影响
查看>>
canvas绘图详解-04-矩形
查看>>
测试管理012:结对测试 - 不错的测试实践
查看>>