1024程序员节—蝴蝶分类开源竞赛
最后更新 2020/12/18 11:45
阅读 14411
EfficientNet
jesse01
8
获得赞0
发布的文章1
答辩的项目Batch大小为32,循环次数为10次,通过在线上环境完成训练,模型最优精度评分为92.76。
最后更新 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
EfficientNet
请先绑定您的微信账号 点击立即绑定
敬请谅解,如有疑问请联系FlyAI客服