Paper: https://arxiv.org/abs/1906.08637
开源代码:https://github.com/hpi-xnor/BMXNet-v2
2019年6月19的一篇新paper。BNN用于降低成本和计算量,非常有效。作者重新思考了BNN中一些常用技术的有效性,并且为BNN网络提出了几项设计准则,并且搭建了一个BinaryDenseNet网络。
主要是通过实验数据去说明一些设计方法是否有效。可以作为应用的一个借鉴。
Introduction
在移动端执行CNN加速,主要有两种方式。
第一种:通过网络设计亚索网络信息,比如mobilenet和shufflenet等
第二种:做量化,减少每个数据表示时需要的精度。二值化会掉点,前期很多工作关注于通过一些tricks等减少量化误差。
但是,作者认为前期很少思考过这样一个问题“Are those real-valued network architectures
seamlessly suitable for BNNs?”
作者得出的结论是“most of these techniques are not necessary to reach state-of-the-art performance.”
主要contributions如下:
- 认为通过标准策略就可以训练出标准BNN,重新思考了如缩放因子,自定义渐变和微调全精度模型的有效性。认为这些对BNN的提升不是很重要。
- 提出了BNN的几项设计准则,搭了一个 BinaryDenseNet
- 开源了代码,用于分类和检
Common Techniques
首先看常见的方法:scaling factors, full-precision pre-training and approxsign function
Binary层的实现
Straight-Through Estimator(STE):
liu等提出的approxsign:
作者通过实验证明,approxsign函数只是更适合于微调全精度模型二值化网络的情况。
Scale Factor
作者通过实验说明,认为学习到的有用的scale factor对于具有BN层的网络而言不是必须的。
全精度模型的预训练
使用clip函数预训练的结果没有relu好,二值化网络从头开始训练的精度最高。
设计准则
- 保持网络丰富的信息流
- 紧凑的网络不适合BNN,因为设计理念相排斥(消除冗余vs弥补信息损失)
- BNN中不应该存在bottleneck设计或者提高bottleneck中滤波器的数量
- 仔细考虑BNN中关键层使用全精度(下采样层)来保留信息流
- 避免信息流bottleneck的直接方法是尽可能多的使用shortcut连接
- 为了解决信息流的bottleneck,适当提高网络的宽度和深度,这会带来额外的计算代价。
Shortcut部分
感觉这是作者提出来的最重要最实用的一点了
实验结果
Imagenet
voc2007
Thoughts
这篇paper作者主要通过实验来说明一些问题。最实用的地方就是消除bottleneck的设计。将一个block拆成两个block,每个block支路上只有一层3x3卷积。