jesse01

  • 8

    获得赞
  • 0

    发布的文章
  • 1

    答辩的项目

基于efficientnet的细粒度蝴蝶分类

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

最后更新 2020/12/18 11:45 阅读 14411

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

最后更新 2020/12/18 11:45

阅读 14411

EfficientNet

一、需求分析

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

1、赛题属于细粒度图像分类任务 

2、可下载本地测试集2023张图片,图像最大宽度600,最小宽度274,最大高度600,最小高度264,平均宽高:589 X 450

3、本地测试集类别数:193,类别不平衡

二、基本思路:
1、使用目标检测进行裁剪,减少背景干扰 

2、使用高精度图像分类模型efficientnet迁移学习 

3、类别不均衡,使用数据增强策略

三、目标检测

1、使用PyTorch框架

2、使用fater-rcnn目标检测模型 

3、使用kaggle的butterfly语义分割数据集+本地数据集自行标注,标注工具:labelimg

 4、目标检测后的裁剪策略:对预测的bbox扩大10-20%再裁剪  

四、子模型确定

1、裁剪后图像平均宽高350 x 325 

2、efficientnet图象输入长宽相等,图像需要按短边裁剪,最适合子模型是: efficientnet-B3 (300 x 300)

五、数据增强

1、使用timm(pytorch-image-models)图像数据增强 

2、训练集:主增强使用概率0.5的水平翻转,次增强使用随机增强,后增强使用概率0.5的随机擦除

3、验证集:按1/0.875进行放大,再进行等经例缩放,短边缩放到模型输入要求(efficientnet-B3=300),再进行中心裁剪 

六、权重热身

1、迁移学习分类网络被替换后需要进行合适的参数初始化 

2、常规方法是冻结分类网络外所有层参数进行训练,但速度很慢 

3、我的方法是用Identity层替换分类层,使用整个模型变成特征提取器,然后用2-3个epoch进行特征提取,把提取的特征一次性加载入内存中,进行多个epoch的分类训练,用训练好的分类网络参数进行参数初始化

七、梯度累加

1、flyai服务器CPU共享内存11G,GPU显存10G 

2、B3模型batch_size最大到26 

3、使用梯度累加技术模拟大batch_size,每10个batch才更新一次梯度

八、其他优化

1、使用LabelSmoothLoss 

2、使用SGD,decay=1e-43、学习率衰减:MultiStepLR(30,60,90) 

4、模型保存:验证集精度提高或训练集LOSS减少(前提是训练集未过拟合)

5、训练集、验证集划化:0.9:0.1或0.95:0.05  

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

EfficientNet

选择查看文件
$vue{codeKeys}
  • $vue{ix}
讨论
500字
表情
发送
删除确认
是否删除该条评论?
取消 删除
感谢您的关注
该篇内容公开后我们将会给你推送公开通知
好的
发布成功!
您的公开申请已发送至后台审核,
通过后将公开展示本详情页!
知道了
向贡献者赞赏
¥24.00
微信支付
支付宝

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

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

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

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

今日签到成功

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

知道了