目录
一、论文阅读与视频学习
1.ShuffleNet V1
- DepthWise卷积就是 group 卷积,连续的 group 卷积会产生边界效应,即某个输出channel仅仅来自输入channel的一小部分,这样提取到的特征会非常局限。
- 因此提出了channel shuffle来解决这个问题如图所示,在第二个 group 之前,将一个组内分成不同的子组,然后让子组分别与各组进行卷积。这样每次组卷积对应的channel就不再局限了。
- shuffleNet v1中的shuffle unit类似于ResNet中的bottleneck unit,将1x1的GConv后加入channel shuffle,其中利用channel shuffle操作来让通道间信息能够通过点组卷积进行有效编码再进行depthwise convolution,最后再进行一次GConv。
- 在第二个GConv后,不添加ReLu层,而是在Add之后才添加,这样做是为了防止信息损失过量。
- (c)中为步长为2的shuffle unit,可用于降采样。 通过使用depthwise convolution以及GConv,shuffleNet可以在一定计算资源有限的情况下,提高准确率。
可根据上图中的shuffleNet v1结构进行网络搭建。
2.ShuffleNet V2
- 模型执行效率的准则不能完全取决于FLOPs,FLOPs差不多的两个模型的运算速度却不一样,因为FLOPs仅仅反映了模型的乘加次数。
- 影响模型运行速度的另一个指标也很重要,那就是MAC(memory access cost)内存访问成本。shuffleNetv2充分考虑了不同结构的MAC,从而设计了更加高效的网络模shuffleNetV2。
- 作者根据四条Guidelines,设计了一个有效的网络模型。
两个具有代表性的网络在GPU和ARM上运行时的分解构造。
- G1:输入输出具有相同channel的时候,内存消耗是最小的。
- G2:过多的使用组卷积,会增加MAC。
- G3:网络分支数量虽然增加了模型的模型的性能,但对模型速度的有影响,网络的分支减少了并行度,模型的分支数量越少,模型的速度越快。
- G4:Element-wise 操作对模型速度的影响,element-wise所带来的时间消耗远比FLOPs上体现的数值要多,因此需要尽可能的减少element-wise操作。
- 卷积操作时,输入输出采用相同通道数可以降低MAC。
- 以1*1的卷积操作为例,hw为输入特征图,c1和c2为输入输出通道数,B为FLOPs 。
- 通过均值不等式可以得出,当且仅当 c1 == c2的时候MAC取得最小值,所以使用卷积要尽可能的平衡(c1 == c2),才会更高效。
- 过多的组,会导致MAC增加。通过公式转换可以得出:当FLOPs、通道数、特征图不变时,组数g的增加,会增加MAC。
- 分支数量过少,模型速度越快。
- element-wise操作导致速度的消耗,远比FLOPs上体现的多。
- (a)(b)为shuffleNet V1中的结构,(c)(d)中为shuffleNet V2中的结构。
- Channel split是将channel 分成了一半,根据 G3 ,让其中一个分支保持不变,另一个分支有相同的channel的输入和输出(G1),而且其中的1x1卷积不再是GC Conv了(G2),因为Channel Split 已经分成了两个组。
- 然后将两个结果concat,然后再利用 “channel shuffle” 来让两个分支的通道信息进行融合。
- 根据(G4)之前shuffleNet之后的Add操作去掉了,可以被看做是一种特征复用。
- 与shuffleNet V1不同的是在global pooling的前面增加了Conv5(1*1的卷积层),来进行特征的融合。
- 对于stage2的第一个block,它的两个分支中输出的channel并不等于输入的channel,而是直接设置为指定输出channel的一半
-
3.EfficientNet V3
在本篇论文中会同时增加网络的width
、网络的深度以及输入网络的分辨率来提升网络的性能如图(e)所示。
- 增加网络的
width
能够获得更高细粒度的特征并且也更容易训练,但对于width
很大而深度较浅的网络往往很难学习到更深层次的特征。 - 根据以往的经验,增加网络的深度
depth
能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。 - 增加输入网络的图像分辨率能够潜在得获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量。
我们先看下论文中通过 NAS(Neural Architecture Search) 技术搜索得到的EfficientNetB0的结构,如上图所示,整个网络框架总共分成了9个Stage。
如图所示,MBConv结构主要由一个1x1的普通卷积(升维作用,包含BN和Swish),一个kxk的Depthwise Conv卷积(包含BN和Swish)k的具体值可看EfficientNet-B0的网络框架主要有3x3和5x5两种情况,一个SE模块,一个1x1的普通卷积(降维作用,包含BN),一个Droupout层构成。
通过上面的内容,我们是可以搭建出EfficientNetB0网络,其他版本的详细参数可见上表。
4.Transformer中Self-Attention
该论文模型的整体结构如上图,由编码器和解码器组成,在编码器的一个网络块中,由一个多头attention子层和一个前馈神经网络子层组成,整个编码器栈式搭建了N个块。类似于编码器,只是解码器的一个网络块中多了一个多头attention层。
假设输入的序列长度为2,输入就两个节点x 1 , x 2 ,然后通过Input Embedding也就是图中的f(x)将输入映射到a 1 , a 2,紧接着分别将a 1 , a 2 分别通过三个变换矩阵W q , W k , W v 得到对应的q i , k i , v i 。
首先还是和Self-Attention模块一样将ai分别通过Wq Wk,Wv得到对应的qi,ki,vi,然后再根据使用的head的数目h进一步把得到的qi,ki,vi均分成h份。
通过上述方法就能得到每个head i 对应的Q i , K i , V i 参数,接下来针对每个head使用和Self-Attention中相同的方法即可得到对应的结果。
接着将每个head得到的结果进行concat拼接。
接着将拼接后的结果通过W°进行融合,如上图所示,融合后得到最终的结果b1,b2。
对于Encoder部分来说,整个的Encoder结构里包含6层,每一层里面有两层。分别是一层self-attention层和一层全连接层。需要注意的是,这里的self-attention并不是只有一层。模型中使用的是multi-head-Attention。
二、代码练习
1.使用VGG模型进行猫狗大战:
2.使用迁移学习思路完成研习社 AI艺术鉴赏挑战赛题