谷歌新开源的MorphNet到底能为我们做什么?
几天前,谷歌AI Blog官宣开源MorphNet,标题为“MorphNet: Towards Faster and Smaller Neural Networks“。
“Morph“本意为“变形“,这意味着MorphNet是一个使网络变形的工具吗?
今天CV君仔细读了原文,发现原来这个东西很有价值。
相信各位经常阅读52CV文章的朋友对“知识蒸馏“并不陌生:
CVPR 2019 | 微软亚研院提出用于语义分割的结构化知识蒸馏
它希望用效果好的计算量可能很大的网络训练小型网络,尽量使小型网络学到知识“真谛“,保持较小的计算量、参数量,而精度接近复杂的大型网络模型。
读过上面三篇文章的朋友,可以看得出,手工设计小型网络往往是在大型网络基础上进行结构约减、卷积层约减,这其实带来一个难题:我怎么知道把参数改到多少呢?
当然你可以尝试神经架构搜索。
不过这不是一般人能玩得起来的。
请看下面几篇NAS论文公布的训练时间:
Neural Architecture Search with Reinforcement Learning 22,400 GPU days!
Learning Transferable Architectures for Scalable Image Recognition - RNN 2000 GPU days
Efficient Neural Architecture Search via Parameter Sharing ~ 2000 training runs
*来自Google工程师在GTC2019大会的PPT。
看来这条路成本太高。
一种很自然的想法是,能不能在已经验证的成功的大型网络基础上自动化设计轻量级网络架构?
能!这就是MorphNet要做的事。
请看下面这幅图:
神经架构搜索是要改变网络拓扑结构,而MorphNet则是要给网络瘦身,或者说变形。
而且它还允许你设置运算量(FLOP)和参数量限制。
看来更准确地说其实是按照要求“塑形“嘛。
MorphNet使用的方法是Weighted sparsifying regularization(加权稀疏正则化),感兴趣的朋友可以下载论文看看。
效果如何呢?
下图是应用在Inception V2网络ImageNet分类上的效果,与之对比的是直接按照一定比例整体改变原网络卷积宽度(Width multiplier)进而改变FLOPs的方法。
可见,在运算量一定的限制下,MorphNet都取得了更好的结果。
下图是在ResNet101网络JFT: Google Scale Image Classification分类的改进结果,同样比较的是Width multiplier方法。
MorphNet依然取得了一致性的精度提高。
按照不同的计算量和参数量约束,经MorphNet“塑形“的ResNet101网络,可以在保持精度不变的情况下,减少40% FLOPs,或者减少43%的参数。
使用MorphNet主要分两步:
1、网络结构学习
输入大型网络权重和约束条件,输出轻量级网络结构;
2、微调或者重训练轻量级网络。
就是这么简单。
最关键的是谷歌称该工具在其内部已经支撑多个深度学习应用的部署,经受住了实践的考验,它不是实验室的积木,而是一款技术成熟的应用工具!
开源网址:
https://github.com/google-research/morph-net/
使用TensorFlow实现。
论文地址:
https://arxiv.org/abs/1711.06798
代码及论文下载: