conDenseNet
问题来源
- DenseNet的连接十分冗余,对其进行剪枝成为共识。这样可以增强正则化减少参数与计算量。
- 将运用Group-Conv在
卷积上会导致精度下降。作者推断是因为:输入特征有内在的顺序(多层特征图的集合,有前后关系);因为是不同层的特征,所以特征更加分散。
- 作者将输入特征重新排序,然后再运用Group-Conv,可以减缓负面效应,但是效率不大。
基于上面的分析与实验,作者提出了Learned Group-Conv(从静态组织变成动态学习).
Learned Group Conv
在训练过程对每组连接进行剪枝,在测试时,采用传统组卷积实现方法,保证高效计算。整个过程分为两个阶段:condensing stage和optimization stage.
![05cff3a277414c0cde43d2f6c802e875.png](https://i-blog.csdnimg.cn/blog_migrate/23519ed8cf224f7b3f5019ceb59fee9c.jpeg)
图1
condensing stage
- 如上图所示,输出分为G(这里为3)组。将所有输入与所有输出连接在一起。
- 将网络训练
个轮回,其中M是训练的总轮回数, C是浓缩因子(Condensation Factor,最终每个输出通道与输入特征的连接数变为原始连接数的
)。训练完之后, 分别对每个组内不重要的连接进行剪枝,剪枝方法如下,通过下式求出每个输入通道的重要性:
其中
注意: 虽然上面的剪枝方法合理,但是对于某组,可能存在某个输入通道特征总体重要性低,但是对于某个输出通道重要的情形,因此去掉这个输入可能导致模型的精度下降。为了减缓这种情况的发生,作者在损失函数上加入了一个正则项(Group Lasso)。来促使在同一组内相同输入特征层对不同输出层有着相同的贡献。这样裁剪的时候,就不会对精度有较大的影响。
正则式如下(这样可以保证同一组内,同一输入对于不同的输出贡献是差不多的,平滑的):
![29830b8a90e98465ad4e32f4813dbcac.png](https://i-blog.csdnimg.cn/blog_migrate/d4afeee50dfcdd7685658d633ec1eaa3.jpeg)
3. 重复上面训练与剪枝的过程C-1次,这样每个组内的输入层数量变为原来的
optimization stage
- 如图1所示,再对新组织的网络进行训练优化。
- 测试时:去掉减掉的连接; 建立index Layer:根据连接情况对特征进行选择与重新排序,得到新的输入层。然后按照传统Group-Conv的方法进行高效实现。
整体框架
相对于DenseNet其在总体结构上有两点改变: 随着深度的增加,增长率也增加。变化规律为:
![1a3a6a4332552545161d9fa32426c9a3.png](https://i-blog.csdnimg.cn/blog_migrate/294a3bc45d9d03d2e40c734d39cc1c90.jpeg)
其详细结构如下,其中L-Conv(1)是指可学习的分组卷积,G-Conv(3)是指标准分组卷积(这里分成的是四个组):
![b9700c844ac562d1c2f2d4b0f313f800.png](https://i-blog.csdnimg.cn/blog_migrate/3ad32506e52dc587c2ff23b3ac2d6cb1.jpeg)
其中每个组(L-Conv(1)--->G-Conv(3))的具体操作如下所示:
![8079ca4c5f6bad36b40309a1ecdf7655.png](https://i-blog.csdnimg.cn/blog_migrate/9b2161e33d099a979fb8f8813c9c53ad.jpeg)
注意到上面在1x1卷积之后还有一个打乱操作,这样可以加强信息之间的交流。其实验对比结果如下:
![f0de9e23dd34d8eed23962da07c1f105.png](https://i-blog.csdnimg.cn/blog_migrate/30c4c5a19dae5d8ad8b1354b4ff0a489.jpeg)
实验与分析
- 验证每个因素对模型的影响---LGC(可学习的组卷积),IGR(指数级增长通道数),FDC(全部稠密连接):
![819a9d153da36e332f7c05df71eea242.png](https://i-blog.csdnimg.cn/blog_migrate/535b0fea6f157877d4aa0e775482e8e0.jpeg)
可以看到可学习组卷积对模型性能的提升尤其关键。
- 把可学习的分组卷积方法当做是一个剪枝的方法,其方法与目前最好的剪枝在相同压缩比下精度的变化:
![e21e49425fca0c70dbbec6d6dc92bae6.png](https://i-blog.csdnimg.cn/blog_migrate/bb1963df11bc02281e45bbe0ea0dc383.jpeg)
实验结果表明:动态剪枝的方法比静态好,实际上很多关于压缩的论文都有实验证明这一点(再训练会提高精度)。
- 为了验证裁剪的连接不是因为其初始化值的原因,作者用了三个不同随机因子随机化并训练了Model(1),Model(2), Model(3),并对强度进行可视化。第一行图展示的对于层中个group的连接情况(显示的连接强度的平均值,其中白色是指被减掉的连接),同一层不同group连续展开。第二行图显示的是层与层之间的连接强度。灰色的线表示的是做池化的地方:
![1ac24f553e4fc93ff56ef85faceaa8c8.png](https://i-blog.csdnimg.cn/blog_migrate/42a9b0b94aacb9781751fa2936370c84.jpeg)
总结与细节
- 作者采用特殊的正则化项来对网络进行特定的约束值得学习。
- 这里的浓缩因子C没有必要和分组数G一样,但是实验说明一样的组合,一般效率最好。
- 作者在训练时,去掉分支并没有真的去掉这些连接,而是通过Mask的方法进行实现,
- 从上面的可视化可以看出:前面特征的学习不同层之间的联系比较紧密,后面的特征学习只和最近的层有较强的联系。
PeleeNet
目标识别框架
其在目标识别框架上的改变主要有以下三点:
1. 如下图所示,将dense layer变成2-way dense layer,注意其开始的输入都是一样的(前面所有层输出的连接),产生分组效果是后面的卷积:
![71399e7ada6807a1d85b898797a8f189.png](https://i-blog.csdnimg.cn/blog_migrate/249e151eb530d844668e976b11b2cf80.jpeg)
2. 改进输入到Stage1之前的处理:
![0ff67bcb555b936bac727d84f7486cc0.png](https://i-blog.csdnimg.cn/blog_migrate/4390187bddce4724efd047e45c933fec.jpeg)
3. 在Transition Layer不对特征层进行压缩.
最终模型的整体框架如下:
![76b85e5269f828848a4c79dd1fd6739f.png](https://i-blog.csdnimg.cn/blog_migrate/a319d16a7831b539edd4bf3bb3a946a1.jpeg)
这些改进的效果实验情况如下(2way-dense_layer的效果最好):
![7bd192204199624c9cedcf649d17402d.png](https://i-blog.csdnimg.cn/blog_migrate/0d5c3102d32a44fbb1db711fea8ee9a0.jpeg)
和其他先进结构的比较如下:
![d5dbb98c03b006bc7bac43a9e4377be2.png](https://i-blog.csdnimg.cn/blog_migrate/ac2cf03eb44d9be06f2793bbc4990e8e.jpeg)
目标检测框架
其目标检测框架是SSD上进行改进的。主要的改进有以下三点:
1. 特征图的选择去掉了38, 剩下了19,10,5,3,1.减少了很多计算量。
2. 从特征图到最后的预测中间添上了一个ResBlock,增加了预测精度。其具体结构如下:
![eda1845866ef6e1704c7b338a4a6b9af.png](https://i-blog.csdnimg.cn/blog_migrate/2cd940005b6b73a1ec50e1539c3dc372.jpeg)
3. 在最后预测的计算过程中,将
目标检测总体框架图如下所示:
![70eeef6b0aacc2146aa43e1d35c43917.png](https://i-blog.csdnimg.cn/blog_migrate/1ade2f5b74a22eb10c422af1a2c6b854.jpeg)
上述各点对模型影响如下实验室所示:
![07ae330db1401381c29cbb589fa47846.png](https://i-blog.csdnimg.cn/blog_migrate/0485599ea97e896fd11576882a0681e9.jpeg)
与各个先进模型的对比实验:
![6ef9efa9f82ec60508013fb54b6c32c9.png](https://i-blog.csdnimg.cn/blog_migrate/99e353dc05226bf68b5dc8d457997ad5.jpeg)
实验与分析
下面展示的是模型在FP16上的运行速度与精度的实验,第一张图展示的各个模型在精度与速度的情况。第二图展示的是在FP16上增速情况。
![ffc5ed87e07f14a183bca3723830d5d4.png](https://i-blog.csdnimg.cn/blog_migrate/d411c3d18bd2f30a32e8fb5dc7d216ec.jpeg)
总结与细节
- 在网络结构设定时,对bottlenck进行了改进,使之中间层的通道数不会大于输入层。
- 其堆叠的顺序是Conv+BN+ReLU,这样的好处在于测试的时候可以将Conv与BN结合一起计算(fuse)。降低推断时间。