题目描述

kaggle挑战赛题目,构造一个分类模型,准确的识别出图像中木薯叶子感染的具体疾病。

详情可以参考链接:Cassva Leaf Disease Classification

木薯叶1

任务就是训练一个分类模型,能够准确的识别出图中木薯叶感染了哪种疾病。本次竞赛数据集中定义了5种类别:

{"0": "Cassava Bacterial Blight (CBB)", "1": "Cassava Brown Streak Disease (CBSD)", "2": "Cassava Green Mottle (CGM)", "3": "Cassava Mosaic Disease (CMD)", "4": "Healthy"}

解题思路

针对图像分类问题,有很多成熟的框架可以使用。比如:VGG、ResNet、EfficientNet或者基于机器学习的分类方法,SVM、Bagging、Boosting等。

解决算法模型相关问题,大致可以分为三个步骤:

1、数据预处理

2、确定模型架构

3、模型验证与调优

数据是问题的抽象变现,算法模型是针对数据表现出的问题提炼出的解决方法。毫不夸张的说,任何与算法模型相关的问题实际上都是分析数据、提炼数据的问题。

数据的预处理包括但不限于数据的收集、标注、增强、去噪声等。由于kaggle比赛会直接提供已标注的数据集,所以可以跳过数据收集和标注过程,专注于分析数据特征,根据预分析得到的数据特征,考虑数据增强方法和去噪方法。

经过博主分析统计,以及参考其他人分享的经验,数据中存在标注噪声,所以Label smoothing方法应该被考虑,同时数据中存在类别不均衡的现象,5中类别的样本数量不相等,所以类别不均衡现象也应该被考虑,focal-loss是解决类别不均衡问题的一个可选方法。

一、第一次实验

利用ResNet50,训练30个epoch,学习率设置为0.05,optimizer=Adam,提交acc=0.699。

ResNet网络结构。

class ResNet(nn.Module):def __init__(self,blocks,num_classes=5,expansion=4):super(ResNet,self).__init__()self.expansion = expansionself.conv1 = Conv1(in_planes=3,places=64)self.layer1 = self.make_layer(in_places=64,places=64,block=blocks[0],stride=1)self.layer2 = self.make_layer(in_places=256,places=128,block=blocks[1],stride=2)self.layer3 = self.make_layer(in_places=512,places=256,block=blocks[2],stride=2)self.layer4 = self.make_layer(in_places=1024,places=512,block=blocks[3],stride=2)self.avgpool = nn.AvgPool2d(7,stride=1)self.fc = nn.Linear(2048,num_classes)for m in self.modules():if isinstance(m,nn.Conv2d):nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')elif isinstance(m,nn.BatchNorm2d):nn.init.constant_(m.weight,1)nn.init.constant_(m.bias,0)def make_layer(self,in_places,places,block,stride):layers = []layers.append(Bottleneck(in_places,places,stride,downsampling=True))for i in range(1,block):layers.append(Bottleneck(places*self.expansion,places))return nn.Sequential(*layers)def forward(self,x):x = self.conv1(x)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)x = self.avgpool(x)x = x.view(x.size(0),-1)x = self.fc(x)return x 

ResNet50、ResNet101、ResNet152区别在于layer1,layer2,layer3,layer4中block数目。所以,利用上面的结构可以同时得到实例化的ResNet50、ResNet101、ResNet152。

def ResNet50():return ResNet([3,4,6,3])def ResNet101():return ResNet([3,4,23,3])def ResNet152():return ResNet([3,8,36,3])

submit之后的acc不到70%,很明显是模型没有收敛到全局最优,可能的结果是学习率设置不合理,过小还未收敛,过大跳过全局最优点。

所以设置动态学习率,同时在此基础上继续resume learning。

二、第二次实验

利用第一次实验的结果进行Resume Learning,optimizer=SGD,引入lr_scheduler,lr范围设置为[0.005,0.05],训练30个epoch,提交acc=0.810.

scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr=0.005, max_lr=0.05)

30个epoch之后,loss不在下降,在0.5附近一直震荡,推测可能学习率设置过大,可以设置为0.01进行实验。

三、第三次实验

前两次实验没有使用太多图像增强技术,本次实验引入大量图像增强技术,研究图像增强对模型性能的影响。

推荐使用albumentations,该方法集成了大量图像增强算法,可以直接嵌入到数据预处理阶段。

本次实验中使用的图像增强方法:

def get_inference_transforms():return Compose([RandomResizedCrop(224,224),Transpose(p=0.5),HorizontalFlip(p=0.5),VerticalFlip(p=0.5),HueSaturationValue(hue_shift_limit=0.2,sat_shift_limit=0.2, val_shift_limit=0.2, p=0.5),RandomBrightnessContrast(brightness_limit=(-0.1,0.1), contrast_limit=(-0.1, 0.1), p=0.5),Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225], max_pixel_value=255.0, p=1.0),ToTensorV2(p=1.0),],p=1.)

在做推理时,需要注意,测试图像必须要经过相同的图像增强方法处理,否则提交的acc会很低。

训练60个epoch,依然使用CyclicLR进行动态调整lr,参数设置与实验2相同,最后提交的acc=0.835

通过实验三可以得出适当的进行图像增强可以提高模型的性能。

四、第四次实验

引入k-flod validation方法训练模型。

k折交叉验证在传统机器学习模型中有着广泛的应用,在缺乏大量训练样本时,该算法可以提高在有限数据集上训练得到模型的泛化能力。

推荐使用sklearn model_selection 中的StratifiedKFold方法,k设置为5。每一折的epochs均设置为60,初始学习率设置为1e-2,学习率调整策略设置为MultiStepLR。沿用实验三中的图像增强处理,提交acc=0.801。

对比实验三,实验四的模型复杂程度提高,但是提交测试准确率下降,推测是发生了过拟合,或者是学习率设置不合理。

五、第五次实验

使用snapmix增强方法,使用pretrained参数,图像尺寸设置为512,5folds训练策略。

在第一个fold训练完之后,取得目前位置最好的提交结果,acc=0.885。

由于图像 尺寸变大,每个epoch的训练时间比前四次实验都要长。

使用第二个fold训练acc是0.910的参数提交acc=0.879

使用第三个flod训练acc是0.950的参数提交acc=0.874

初步分析结果是发生了过拟合。

最后提交

LeaderBoard得分0.886

模型架构

Input -> ResNet50 + ResNet101 -> classes

训练策略

1、snapmix数据融合方法2、少量数据增强方法:归一化,旋转,反转,随机裁剪等3、交叉验证4、Adam + multistepLR 

kaggle 最后提交代码链接 kaggle提交

TTA(测试时增强)

这里会为原始图像造出多个不同版本,包括不同区域裁剪和更改缩放程度等,并将它们输入到模型中;然后对多个版本进行计算得到平均输出,作为图像的最终输出分数。

Kaggle Cassava Leaf Disease Classification 木薯叶疾病分类竞赛相关推荐

  1. Kaggle Cassava Leaf Disease Classification

    Kaggle木薯病害分类 我要吃麦旋风-OpenBayes ---------------------- 12-01--------在kaggle上的第一个比赛,0.900, 先占个坑,慢慢刷锅 -- ...

  2. Kaggle新赛:木薯叶疾病分类

    介绍一个Kaggle近日新上的比赛,关于图像分类的,既解决实际问题,又容易参与,欢迎参赛. ●赛题背景● 作为非洲第二大碳水化合物供应者,木薯是小农户种植的关键选择,因为它能经受住恶劣的条件.在撒哈拉 ...

  3. 利用可分离卷积UNet进行木薯叶病分类

    1.研究内容 在这项工作中,我们开发并训练了深度学习模型,用于将木薯叶片疾病分割和分类为枯萎病或花叶病.作为非洲第二大碳水化合物供应商,木薯是小农种植的一种关键粮食安全作物,因为它能承受恶劣的环境.在 ...

  4. 【论文简读】Diffusion Kernel Attention Network for Brain Disorder Classification用于脑疾病分类的扩散核注意力网络

    期刊:MIA 2022 early accept 作者:Jianjia Zhang, Luping Zhou, Lei Wang, Mengting Liu and Dinggang Shen 摘要 ...

  5. 深度学习项目实战——木薯叶图像识别与分类项目

    摘要 本文主要通过使用的PaddlePaddle用于实现的图像分类的目标的.并设计与优化的相关的模型.该问题主要来源是的:Cassava Leaf Disease Classification | K ...

  6. 利用深度卷积模型对巴拉科咖啡叶疾病进行分类

    A B S T R A C T 本文介绍了最新的深度卷积模型(DCM)在巴拉科叶病害分类中的应用.几个选定的dcm使用迁移学习和微调,以及数据预处理和增强来执行图像分类任务.收集的数据集使用总数为46 ...

  7. Improved Disease Classification in Chest X-Rays with Transferred Features from Report Generation论文解读

    Improved Disease Classification in Chest X-Rays with Transferred Features from Report Generation 从文本 ...

  8. [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(BERT)

    文章目录 1. 数据处理 2. 下载预训练模型 3. 加载数据 4. 定义模型 5. 训练 6. 提交测试结果 练习地址:https://www.kaggle.com/c/ds100fa19 相关博文 ...

  9. [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(RNN/GRU/LSTM)

    文章目录 1. 读入数据 2. 文本处理 3. 建模 4. 训练 5. 测试 练习地址:https://www.kaggle.com/c/ds100fa19 相关博文 [Kaggle] Spam/Ha ...

最新文章

  1. 去重查询_《前端算法系列》数组去重
  2. tomcat通过conf-Catalina-localhost目录发布项目详解
  3. 一条路走不通了,就走另一条:
  4. Java编程思想:擦除的神秘之处
  5. linux虚拟主机_Windows虚拟主机和linux虚拟主机有什么区别?
  6. JS中的兼容问题总结
  7. OpenGL超级宝典(第7版)笔记9 基元装配 裁剪 光栅化
  8. 以内部管理员批准模式_UAC 在管理员批准模式下运行所有管理员(Windows 10) - Windows security | Microsoft Docs...
  9. JDBC在jsp中的使用
  10. cad被管理员阻止_CAD注册机无法以管理员身份输入的解决方案
  11. 用十分钟邮箱杜绝垃圾邮件
  12. 量子世界的测不准定律
  13. Python3输出所有大小写字母(字母表)、数字
  14. 作为技术人员,写博客对我们到底有什么好处?为什么要写博客?
  15. smarty-wap端
  16. 名帖38 桂馥 隶书《楹联六幅》
  17. 长期应用阿达木单抗时所产生的抗抗体会影响疗效
  18. unwrapped oracle,求助CentOS 5.4 +oracle 11g R2 ASM 模式 安装后 EM 启动后登陆不进去!
  19. dede教程:默认网站地图sitemap.html优化
  20. 循环不变量(loop invariant)的理解

热门文章

  1. 社交、工具类应用继续领跑手机app榜单
  2. 论文解读:基于迁移移学习的深卷积神经网络,用于从蛋白质主要序列预测与白血病相关的磷酸化位点
  3. STM32定时器中断_立即触发解决方案
  4. 南阳oj108--士兵杀敌(一)(线段树,求和)
  5. 移动app商城UI模板(仿淘宝)
  6. eas 税率修改_金蝶EAS系统怎么修改凭证?
  7. 将html字符串格式化成自己想要的格式
  8. Outlook Express 收发邮件出现quot;0x800CCC0Fquot;错误代码解决方法
  9. 【毕业设计】基于PID控制的智能平衡车 - stm32 物联网 单片机 超详细
  10. 黑色 仿Windows 8 Metro界面 网站css3+html5模板