从数学方面重新学习目标检测的相关算法和优化原理。可以有助于我们更深刻的理解算法,找到优化方向。这样做当然是一个极为艰难的过程,但是一定要坚持做下去。主要参考吴恩达老师的深度学习课程。
首先对于最近在学的网络就要这样学起,所以每次更新的内容可能都不一样,有的可能看不到什么关联性,我会一边更新一边整理的,参考的内容和博文也会一一列在每一部分内容之后。之所以选择这种手打的方式,一面是在打字的过程中进行思考,另一面是整理后易于查询补充,废话不多说了,开始学习。
1.分组卷积
分组卷积主要用于轻量化网络结构,其着手点在于在相同计算量下尽可能的增加通道数量,最直接的做法是将通道进行稀疏连接。分组卷积就是一种非常有效的稀疏连接方式。
标准卷积操作,输入特征图尺寸为 ,进行卷积操作时,卷积核尺寸为h×w,卷积核在整个特征图上进行滑动,并对所有通道c1进行卷积,之后将卷积结果进行加和,就得到了该卷积核的输出。计算卷积计算量时只考虑了乘法的计算量。卷积核的个数=输出的通道数,所以假设有个卷积核,则输出图像尺寸为,最终的计算量为。
采用分组卷积时,每个卷积核不对上一个c1通道中的所有进行卷积,而是将其分为g份,每个卷积核对个通道数进行卷积,所以单个卷积的计算量变为,有个卷积核,则最终的计算量为,可以看到计算量是原来的.
这就是分组卷积,可以看到分组卷积的每一个卷积核没有学习上一层的所有特征,降低了通道之间的信息流通和表示能力,于是在shufflenet中提出了通道混洗,通道混洗是允许卷积能够得到不同组的输入,尽量关联各个通道,如下图所示:
所以如果单独使用一层通道混洗应该是没有效果的,因为还是各自独立的,但是几层连用就可以起到信息流通交互的作用。
通道混洗的操作实现如下:
Shufflenet使用大量的分组卷积,由于优化的原因,分组卷积的效率很低。理论计算的复杂度往往和实际的执行速度不完全对等。提出了4个指导原则:卷积的输入和输出通道数应尽可能的一致,谨慎使用分组卷积,减少网络碎片,逐元素运算的开销不能忽视。总的来说就是通道混洗放在了concat的连接之后,放一个v1和v2的对比图:
将分组卷积做到极致,产生了