第五周学习任务

目录

论文阅读与视频学习

ShuffleNet V1&V2

ShuffleNet V1

ShuffleNet V2

 EfficientNet V3

Transformer里的multi-head self-attention

Self-Attention

 Multi-head Self-Attention

位置编码

代码练习

使用VGG模型进行猫狗大战

AI艺术鉴赏挑战


论文阅读与视频学习

ShuffleNet V1&V2

ShuffleNet V1

在ShuffleNet中提出了channel shuffle的思想,ShuffleNet Unit中全是GConv和DWConv。

GConv虽然能够减少参数与计算量,但GConv中不同组之间信息没有交流,为了解决此类问题,作者提出了Channel Shuffle的概念。

计算量主要来源于1×1卷积,将1×1卷积换为1×1的group卷积。

Input为c×h×w,bottleneck channel是m,各个网络block所需要的FLOPs:

ResNet:hw(2cm+9m^2)

ResNeXt:hw(2cm+9m^2/g)

ShuffleNet:hw(2cm/g+9m)

可以看出ShuffleNet所需FLOPs最小。

ShuffleNet V2

FLOPS:全大写,指每秒浮点运算次数,可以理解为计算的速度。是衡量硬件性能的一个指标。(硬件)

FLOPs:s小写,指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。(模型)在论文中常用GFLOPs(1 GFLOPs=10^9 FLOPs)

计算复杂度不能只看FLOPs,还有MAC(内存访问的时间成本),并行等级(在相同的FLOPs下,并行度高的模型要比并行度低的模型速度要快),平台(GUP,CPU等)。

提出的4条设计高效网络准则:

1.当卷积层的输入特征矩阵与输出特征矩阵channel相等时MAC最小(保持FLOPs不变时)。

2.当GConv的groups增大时(保持FLOPs不变时),MAC也会增大。

3.网络设计的碎片化程度越高,速度越慢。

4.Element-wise操作带来的影响是不可忽略的。(包括激活ReLu和相加的操作)

 

 对于stage2的第一个block,它的两个分支中输出channel并不等于输入的channel,而是直接设置为指定输出的channel的一半。

 

 EfficientNet V3

增加网络的深度depth能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。

增加网络的width(增大channel)能够获得更高细粒度的特征并且也更容易训练,但对于width很大而深度较浅的网络往往很难学习到更深层次的特征。

增加输入网络的图像分辨率能够潜在地获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分变率图像会增加计算量。

同时增加网络的depth、width和图像分辨率,在准确率达到80%时不会出现饱和,并且在相同FLOPS时,其准确率相较于其他几组最高。

 EfficientNet-B0:

 表中的卷积层后默认都跟有BN以及Swish激活函数。

MBConv:

第一个升维的1×1卷积层,它的卷积核个数是输入特征矩阵channel的n倍。DW卷积层channel不变,后一个1×1卷积层与表中对应channel相同。

当n=1时,不需要第一个升维的1×1卷积层,即Stage2中的MBConv结构都没有第一个升维的1×1卷积层(这与MobileNet V3网络类似)。

关于shortcut连接,仅当输入MBConv结构的特征矩阵与输出的特征矩阵shape相同时才存在。

这里的DW卷积的卷积核可能是3×3或5×5,具体参数根据表格。

注意在源码中,只有使用到shortcut连接的MBConv模块才有Dropout层。

 SE模块由一个全局平均池化,两个全连接层组成。第一个全连接层的节点个数是输入该MBConv特征矩阵channels的1/4,且使用Swish激活函数。第二个全连接层的节点个数等于Depthwish Conv层输出的特征矩阵channels,且使用Sigmoid激活函数。

Width_coefficient代表channel维度上的倍率因子,比如在EfficientNet B0中Stage1的3×3卷积层所使用的卷积核个数是32,那么在B6中就是32×1.8=57.6接着取整数到离它最近的8的整数倍即56,其他Stage同理。

Depth-coefficient代表depth维度上的倍率因子(仅针对Stage2到Stage8),比如在EfficientNet B0中Stage7的L=4,那么在B6中就是4×2.6=10.4,接着向上取整即11。

Transformer里的multi-head self-attention

Transform可以做并行化

Self-Attention

 Multi-head Self-Attention

位置编码

 1.根据论文公式计算出位置编码

2.可训练的位置编码

代码练习

使用VGG模型进行猫狗大战

引用相关库:

下载数据:

 训练集包含1800张图片(猫的图片900张,狗的图片900张),测试集包含2000张图片。

 数据处理:

datasets 是 torchvision 中的一个包,可以用做加载图像数据。它可以以多线程(multi-thread)的形式从硬盘中读取数据,使用 mini-batch 的形式,在网络训练中向 GPU 输送。在使用CNN处理图像时,需要进行预处理。图片将被整理成 224×224×3的大小,同时还将进行归一化处理。
torchvision 支持对输入数据进行一些复杂的预处理/变换 (例如normalization, cropping, flipping, jittering 等)。具体可以参照 torchvision.tranforms 的官方文档说明。

 创建VGG Model:

torchvision中集成了很多在 ImageNet (120万张训练数据) 上预训练好的通用的CNN模型,可以直接下载使用。

我们直接使用预训练好的 VGG 模型。同时,为了展示 VGG 模型对本数据的预测结果,还下载了 ImageNet 1000 个类的 JSON 文件。

在这部分代码中,对输入的5个图片利用VGG模型进行预测,同时,使用softmax对结果进行处理,随后展示了识别结果。可以看到,识别结果是比较非常准确的。

 修改最后一层,冻结前面层的参数:

为了使用预训练好的模型,需要把最后的 nn.Linear 层由1000类,替换为2类。为了在训练中冻结前面层的参数,需要设置 required_grad=False。这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。

 创建损失函数和优化器,然后训练模型:

 

 测试模型:

 可视化模型预测结果:

AI艺术鉴赏挑战

学习研习社上的代码方案:

下载数据集可以发现,训练集中的作品和对应作者的id都被存放在一个csv文件中。

阅读季军代码,可以发现作者首先将训练集和测试集中图片所对应的路径和其label分别存放于train.txt和val.txt两个txt文件中,并用‘,’分隔开,方便后续对图片和其label的读取、使用。

阅读ArtModel代码,可以发现定义了一个SELayer模块,引入了注意力机制。

通过观察model可以发现在网络结构中包含两个模型efficientnet-b3和resnext50,四个池化自适应平均值池化、自适应最大值池化、自适应组合池化(自适应最大值池化+自适应平均值池化)、广义均值池化。选择最优方案。

在训练时,涉及到一些分布式训练内容,理解和运行遇到了问题,还需要进一步学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值