天涯·明月·刀

  • 16

    获得赞
  • 5

    发布的文章
  • 2

    答辩的项目

蝴蝶分类开源竞赛Top1----答辩

Batch大小为64,循环次数为30次,通过在线上环境完成训练,模型最优精度评分为93.06。

最后更新 2020/12/11 15:53 阅读 779

1024程序员节—蝴蝶分类开源竞赛

最后更新 2020/12/11 15:53

阅读 779

图像分类

一、问题分析 

本赛题任务主要是通过对200类蝴蝶建立精准的分类模型。数据集大约有20,223张,涵盖200个物种,116属,23个亚科和5个科的四个不同级别。

 细颗粒度分类,在图像分类中是比较有挑战性的。普通的分类大多类间差距较大,比如说飞机和轮船,在图像特征上比较好区分,但细颗粒度图片,大体上属于同一类,比如猫的分类、狗的分类,类间差距小,很多特征相似,甚至相同,一般的分类网络,可能取得的效果并不好,所以要取得好的成绩并不容易。       

 图片中的蝴蝶有的比较大,有的比较小,图片大小也不一致,不同种类,数据有多有少,存在一定的不平衡,这些都给训练增加难度。        

在网络选择方面,首选带Attention的网络,比如seresnet系列,这类网络在细颗粒度分类上,应该会比其他网络会好一点。

 二、网络介绍 

对于图片分类,如果没有什么特别要求,一般两种方法最有效,模型集成和交叉验证。其实这两种方法是相似的,都是训练多个模型,再对判定结果进行平均,或者加权。缺点是训练时间长,在工程上并不实用,感觉有点像无赖打法。        不过选择什么样的模型集成,却是要不断尝试,耗费大量的时间。比如说,我那时刚好看到一篇介绍CVPR 2019年的细粒度分类挑战赛冠军的训练方案,上面用的就是模型集成,我也是给大家分享了(我是个好人吧,前女友就是这么说的),上面用的模型主要是seresnext系列,也证明了attention确实好。只是那时比赛刚开始,我也不急动手,想看看还有什么比较新颖的方法,比如说双线性网络。

偶然间,看到一篇介绍细颗粒度的新网络,叫“破坏-重建学习”(Destruction and Construction Learning),简称DCL网络。其实,也不算新,只是在原有的网络,比如resnet50,做了一点修改,据介绍,效果还不错,我就报着试试看的态度,学习了一下该网络,想看看效果怎么样,下面我就着重介绍一下该网络。 

该网络由四个部分组成: 

1)Region Confusion Mechanism (RCM):区域打乱机制2)Adversarial Learning Network:对抗学习网络3)Region Alignment Network (RAN):区域对齐网络4)Classification Network:常规的分类网络 

在推理阶段,只需要分类网络(classification network),所以在训练时要多花一点点时间,但在推理时,就和普通的网络无异。下面就逐个介绍上面四个组成部分。 

1)Region Confusion Mechanism (RCM):区域打乱机制 

英文名字看起来就高大上很多,其实就是把图片分成N*N块,然后再随机打乱。这个N是个超参,作者在测试时发现N=7,效果最好。我在这次比赛中测试了4,5,7三种数值,要求输入图像尺寸为(N*64, N*64 )。这种打乱方法破坏了全局结构并且确保局部区域在一个可调整的范围内抖动。由于全局结构被破坏了,为了识别出这些随机打乱的图片,分类网络必须寻找判别性区域,然后学习这些类别间的微妙的差异。 

 2)Adversarial Learning Network:对抗学习网络 

使用RCM破坏的图像并不总能为细粒度分类带来有益信息。 当打乱局部区域时,RCM还引入了噪声视觉模式。从这些噪声视觉模式中学习的特征对分类任务是有害的。为此提出了另一种对抗性损失,以防止过度拟合RCM引起的噪声模式进入特征空间。 

3)Region Alignment Network (RAN):区域对齐网络         

考虑到图像中相关区域的结合组成了复杂和多样的视觉模式,作者提出另一种学习方法来对局部区域间的相关性进行建模。具体来说,提出一种带有区域重建损失的区域对齐网络(region align network),它测量图像中的不同区域的位置精确度,引导基础网络通过端到端训练对区域间的语义相关性进行建模。区域重建损失有助于定位图像中的主要对象,并且倾向于找到子区域之间的相关性。 通过端到端的训练,区域重建损失可以帮助分类基础网络(backbone)建立对对象的深刻理解,并对结构信息进行建模,如对象的形状和对象各部分之间的语义相关性。

 4)Classification Network:常规的分类网络        

分类网络,我主要测试了seresnet50,seresnext50,seresnext101,efficientnet-b2,efficientnet-b3,efficientnet-b4等网络。在模型集成时,结果发现efficientnet和seresnext组合效果比较好。 

三、训练方法 

1.数据增强方式:随机旋转,15度角以内随机剪裁随机水平翻转 

 2. lr_scheduler.ReduceLROnPlateau(optimizer, mode=‘max’, factor=0.1, patience=2, verbose=True) 

3. Optimizer:AdaBound,常规分类网络学习率为1e-4,其他为1e-3 

 4. 标签平滑 

 5. 三模型集成+交叉验证 

 6. 预测时,采用TenCrop 

 主要训练结果: 

 N=5,输入图片大小320*320, Batch: 8        

Efficentnet-b4, se_resnext101_32x4d, efficientnet_b3: 92.84分        

Efficentnet-b4, se_resnext101_32x4d, Efficentnet-b4:92.8分        

Efficentnet-b4, Efficentnet-b3, Efficentne_b3: 92.8分 

 N=7,输入图片大小448*448,Batch: 4        

Efficentnet-b4, Efficentnet-b3, Efficentne_b3: 93.06分

本文为作者在FlyAI平台发布的原创内容,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请附上原文出处链接和本声明。
本文链接地址:https://flyai.com/n/156609
立即参加 1024程序员节—蝴蝶分类开源竞赛
代码展示

图像分类

选择查看文件
$vue{codeKeys}
  • $vue{ix}
$vue{typeSign ? "" : "15天内累计签到7天以上即可下载代码哦~"}
已签到
签到
©以上内容仅用于在FlyAI平台交流学习,禁止转载、商用;违者将依法追究法律责任。
讨论
500字
表情
每日优质讨论奖励 20FAI
发送
每日优质讨论奖励 20FAI
删除确认
是否删除该条评论?
取消 删除
感谢您的关注
该篇内容公开后我们将会给你推送公开通知
好的
发布成功!
您的公开申请已发送至后台审核,
通过后将公开展示本详情页!
知道了
向贡献者赞赏
¥25.00
微信支付
支付宝

请先绑定您的微信账号 点击立即绑定

立即支付
温馨提示:
支付成功后不支持申请退款,请理性消费;
支付成功将自动解锁当前页面代码内容,付款前请确认账号信息。
微信扫码支付
请前往Web网页进行支付

敬请谅解,如有疑问请联系FlyAI客服

知道了
举报
请选择举报理由
确定
提示
确定要删除?
取消删除

今日签到成功

获得 $vue{sianData.sign_fai} FAI的GPU算力积分

知道了