建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
温馨提示

抱歉,您需设置社区昵称后才能参与社区互动!

前往修改
我再想想

[参赛经验分享] 爱(AI)美食美食图片分类大赛——第一名方案分享

SS 2020/5/23 2078

模型

使用ResNeXt101-WSL,主要是由于训练数据比较小, 使用预训练模型能够获得更强的泛化能力。

ResNeXt101是ResNet多通路卷积改进版本,WSL表示预训练参数是用Instagram上9.4亿张图片进行弱监督预训练并在Imagenet-1k上fine-tune的模型参数。详细见https://pytorch.org/hub/facebookresearch_WSL-Images_resnext/#model-description

在本次比赛中我们使用了8d和16d两个模型最后做融合。

Adaptive CBAM

这是我们自研的、对预训练模型友好的注意力模块。

注意力模块或者注意力机制是常用的提升网络性能的方法,比如imagenet17年分类冠军senet,18年分类冠军cbam都是在网络结构上面增加注意力机制。

但是对于预训练网络,直接在每个残差块去加注意力机制,会使得网络的中间层输出改变。中间层输出变化了,网络的前向、反向全乱了,也就是破坏预训练模型参数所蕴含的语义信息。第二点在网络的每个残差块里面都加cbam 并不一定是最优的选择,可能某些残差块不加cbam是一个更好的选择。

针对以上两个弊端,我们改进的了CBAM。

image.png

Adaptive CBAM在CBAM的激活前增加了BN层,并把BN的参数初始化为0,因此第一次前向通过BN后的值为0,再通过2*sigmoid得到的权值为1,因此第一次前向输出的结果与没有加CBAM的效果一致。但是随着训练又能学习到不同通道、不同空间的权值,达到注意力的效果。第二点,Adaptive CBAM能对网络结构自适应性,如果某个残差块不需要加CBAM,只需要将BN的参数学习为0,就等价于没有加CBAM。

训练

主要分为两个步骤:先做迁移学习,再做微调。

迁移学习:只训练新加入的CBAM层和最后一层fc。详细配置:SGD ,0.1LR,每40个epoch学习率降低为原来的0.1,训练100个epoch。

微调:只微调最后的layer4和fc层,这两部分的梯度全部打开。详细配置:SGD ,0.01LR,每40个epoch学习率降低为原来的0.1,训练100个epoch。

训练时使用常规的数据增强:RandomResizedCrop、RandomHorizontalFlip。同时使用了cutmix。

image.png

BN设置

最新的一些论文已经指出来,BN不适合做迁移学习。

因为在迁移学习的时候,BN层的梯度虽然关闭了,但是running_{mean}、running_{var}这些统计量还是在变换,因此我们在迁移学习的时候将这两个统计量也冻结了。

模型增强

模型融合与TTA。

使用以上的步骤训练了两个模型,分别以8d和16d作为基础网络结构,最后将两个模型的输出的平均值作为最终的输出。

在测试时使用了FiveCrop作为测试时增强,将FiveCrop的结果取平均。



回复 (2)

2020/5/29 10:43

厉害了我的哥,向你学习。

2020/6/9 13:05

不明觉厉

上划加载中
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

SS

角色:成员

话题:1

发消息
发表于2020年05月23日 11:03:33 20782
直达本楼层的链接
楼主
倒序浏览 只看该作者
[选手分享] [参赛经验分享] 爱(AI)美食美食图片分类大赛——第一名方案分享

模型

使用ResNeXt101-WSL,主要是由于训练数据比较小, 使用预训练模型能够获得更强的泛化能力。

ResNeXt101是ResNet多通路卷积改进版本,WSL表示预训练参数是用Instagram上9.4亿张图片进行弱监督预训练并在Imagenet-1k上fine-tune的模型参数。详细见https://pytorch.org/hub/facebookresearch_WSL-Images_resnext/#model-description

在本次比赛中我们使用了8d和16d两个模型最后做融合。

Adaptive CBAM

这是我们自研的、对预训练模型友好的注意力模块。

注意力模块或者注意力机制是常用的提升网络性能的方法,比如imagenet17年分类冠军senet,18年分类冠军cbam都是在网络结构上面增加注意力机制。

但是对于预训练网络,直接在每个残差块去加注意力机制,会使得网络的中间层输出改变。中间层输出变化了,网络的前向、反向全乱了,也就是破坏预训练模型参数所蕴含的语义信息。第二点在网络的每个残差块里面都加cbam 并不一定是最优的选择,可能某些残差块不加cbam是一个更好的选择。

针对以上两个弊端,我们改进的了CBAM。

image.png

Adaptive CBAM在CBAM的激活前增加了BN层,并把BN的参数初始化为0,因此第一次前向通过BN后的值为0,再通过2*sigmoid得到的权值为1,因此第一次前向输出的结果与没有加CBAM的效果一致。但是随着训练又能学习到不同通道、不同空间的权值,达到注意力的效果。第二点,Adaptive CBAM能对网络结构自适应性,如果某个残差块不需要加CBAM,只需要将BN的参数学习为0,就等价于没有加CBAM。

训练

主要分为两个步骤:先做迁移学习,再做微调。

迁移学习:只训练新加入的CBAM层和最后一层fc。详细配置:SGD ,0.1LR,每40个epoch学习率降低为原来的0.1,训练100个epoch。

微调:只微调最后的layer4和fc层,这两部分的梯度全部打开。详细配置:SGD ,0.01LR,每40个epoch学习率降低为原来的0.1,训练100个epoch。

训练时使用常规的数据增强:RandomResizedCrop、RandomHorizontalFlip。同时使用了cutmix。

image.png

BN设置

最新的一些论文已经指出来,BN不适合做迁移学习。

因为在迁移学习的时候,BN层的梯度虽然关闭了,但是running_{mean}、running_{var}这些统计量还是在变换,因此我们在迁移学习的时候将这两个统计量也冻结了。

模型增强

模型融合与TTA。

使用以上的步骤训练了两个模型,分别以8d和16d作为基础网络结构,最后将两个模型的输出的平均值作为最终的输出。

在测试时使用了FiveCrop作为测试时增强,将FiveCrop的结果取平均。



点赞1 举报
分享

分享文章到朋友圈

分享文章到微博

CocoLiu2020

角色:成员

话题:0

发消息
发表于2020年05月29日 10:43:25
直达本楼层的链接
沙发
只看该作者

厉害了我的哥,向你学习。

点赞 评论 引用 举报

哈哈哈137

角色:成员

话题:0

发消息
发表于2020年06月09日 13:05:38
直达本楼层的链接
板凳
只看该作者

不明觉厉

点赞 评论 引用 举报

游客

您需要登录后才可以回帖 登录 | 立即注册