摘要

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

问题背景

作为非洲第二大碳水化合物供应国,木薯是小农种植的重要粮食安全作物,因为它可以承受恶劣的条件。撒哈拉以南非洲至少有80%的家庭农场都种植这种淀粉状的根,但病毒性疾病是单产低下的主要根源。借助数据科学,可以识别常见疾病,以便对其进行治疗。 现有的疾病检测方法要求农民寻求政府资助的农业专家的帮助,以目视检查和诊断植物。这遭受了劳动密集,供应不足和成本高的困扰。另一个挑战是,针对农民的有效解决方案必须在明显的约束下表现良好,因为非洲农民可能只能使用低带宽的移动质量相机。 在本次比赛中,我们引入了在乌干达定期调查期间收集的21,367张带标签图像的数据集。大多数图像都是从农民那里采集的花园照片拍摄的,并由国家作物资源研究所(NaCRRI)的专家与坎帕拉的马克雷雷大学的AI实验室合作进行注释。这是最现实地表示农民在现实生活中需要诊断的格式。 您的任务是将每个木薯图像分类为四个疾病类别或第五个类别,指示健康的叶子。在您的帮助下,农民可能能够快速识别出患病的植物,从而有可能在遭受不可弥补的损害之前挽救他们的作物。

原始数据

模型的数据的制作

将tain.csv转为的txt文件

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@version: 1.0
@author: xjl
@file: csv_to_txt.py
@time: 2021/3/5 11:37
"""import pandas as pd
import osdef csv_to_txt(csv_file, txt_file,abs_path):if not os.path.exists(csv_file):print('Not that files:%s' % csv_file)else:data = pd.read_csv(csv_file, encoding='utf-8')with open(txt_file, 'a+', encoding='utf-8') as f:for line in data.values:newdata=abs_path+str(line[0]) + ' ' + str(line[1]) + '\n'f.write(newdata)if __name__ == '__main__':path=os.path.abspath('.').replace('\\','/')csv_file = path+r"/train.csv"txt_file =path+ r"/train.txt"abs_path=path+r"/train_images/"csv_to_txt(csv_file, txt_file,abs_path)

将data.txt文件化为了训练集、验证集

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@version: 1.0
@author: xjl
@file: split_date.py
@time: 2021/3/5 11:53
"""
# -*- coding: utf-8 -*-import random
import os
"""
随机按比例拆分数据
"""
def split(all_list, shuffle=False, ratio=0.8):num = len(all_list)offset = int(num * ratio)if num == 0 or offset < 1:return [], all_listif shuffle:random.shuffle(all_list)  # 列表随机排序train = all_list[:offset]test = all_list[offset:]return train, testdef write_split(film, train, test):infilm = open(film, 'r', encoding='utf-8')tainfilm = open(train, 'w', encoding='utf-8')testfilm = open(test, 'w', encoding='utf-8')li = []for datas in infilm.readlines():datas = datas.replace('\n', '')li.append(datas)traindatas, testdatas = split(li, shuffle=True, ratio=0.8)for traindata in traindatas:tainfilm.write(traindata + '\n')for testdata in testdatas:testfilm.write(testdata + '\n')infilm.close()tainfilm.close()testfilm.close()if __name__ == "__main__":path = os.path.abspath('.').replace('\\', '/')data_path=path+r"/train.txt"train_path=path+r"/train_list.txt"test_path=path+r"/val_list.txt"write_split(data_path, train_path,test_path)

建立基于的Paddle的深度模型

1采用的是ResNet50_vd的一个网络模型的结构

mode: 'train'# 当前所处的模式,支持训练与评估模式
ARCHITECTURE:name: 'ResNet50_vd'# 模型结构,可以通过这个这个名称,使用模型库中其他支持的模型checkpoints: ""
pretrained_model: ""# 预训练模型,因为这个配置文件演示的是不加载预训练模型进行训练,因此配置为空。
model_save_dir: "./output/"# 模型保存的路径
classes_num: 4# 类别数目,需要根据数据集中包含的类别数目来进行设置
total_images: 17117# 训练集的图像数量,用于设置学习率变换策略等。
save_interval: 1# 保存的间隔,每隔多少个epoch保存一次模型
validate: True# 是否进行验证,如果为True,则配置文件中需要包含VALID字段
valid_interval: 1# 每隔多少个epoch进行验证
epochs: 100# 训练的总得的epoch数量
topk: 4# 除了top1 acc之外,还输出topk的准确率,注意该值不能大于classes_num
image_shape: [3, 224, 224]# 图像形状信息LEARNING_RATE:# 学习率变换策略,目前支持Linear/Cosine/Piecewise/CosineWarmupfunction: 'Cosine'          params:                   lr: 0.0125OPTIMIZER:# 优化器设置function: 'Momentum'params:momentum: 0.9regularizer:function: 'L2'factor: 0.00001TRAIN:# 训练配置batch_size: 32# 训练的batch sizenum_workers: 0# 每个trainer(1块GPU上可以视为1个trainer)的进程数量file_list: "./dataset/cassava-leaf-disease-classification/train_list.txt"data_dir: "./dataset/cassava-leaf-disease-classification/train_images/"shuffle_seed: 0# 数据打散的种子transforms:# 训练图像的数据预处理- DecodeImage:# 解码to_rgb: Trueto_np: Falsechannel_first: False- RandCropImage:# 随机裁剪size: 224- RandFlipImage:# 随机水平翻转flip_code: 1- NormalizeImage: # 归一化scale: 1./255.mean: [0.485, 0.456, 0.406]std: [0.229, 0.224, 0.225]order: ''- ToCHWImage:# 通道转换VALID:# 验证配置,validate为True时有效batch_size: 20# 验证集batch sizenum_workers: 0# 每个trainer(1块GPU上可以视为1个trainer)的进程数量file_list: "./dataset/cassava-leaf-disease-classification/val_list.txt"data_dir: "./dataset/cassava-leaf-disease-classification/train_images/"shuffle_seed: 0# 数据打散的种子transforms:- DecodeImage:to_rgb: Trueto_np: Falsechannel_first: False- ResizeImage:resize_short: 256- CropImage:size: 224- NormalizeImage:scale: 1.0/255.0mean: [0.485, 0.456, 0.406]std: [0.229, 0.224, 0.225]order: ''- ToCHWImage:

1零基础训练-不加载预训练模型的训练:

训练的步数和没有加入参数的调整。训练完成后,验证集上的精度为63.668%。

训练参数的设置

mode: 'train'
ARCHITECTURE:name: 'ResNet50_vd'checkpoints: ""
pretrained_model: ""
model_save_dir: "./output/"
classes_num: 4
total_images: 17117
save_interval: 1
validate: True
valid_interval: 1
epochs: 100
topk: 4
image_shape: [3, 224, 224]LEARNING_RATE:function: 'Cosine'          params:                   lr: 0.0125OPTIMIZER:function: 'Momentum'params:momentum: 0.9regularizer:function: 'L2'factor: 0.00001TRAIN:batch_size: 32num_workers: 0file_list: "./dataset/cassava-leaf-disease-classification/train.txt"data_dir: "./dataset/cassava-leaf-disease-classification/train_images/"shuffle_seed: 0transforms:- DecodeImage:to_rgb: Trueto_np: Falsechannel_first: False- RandCropImage:size: 224- RandFlipImage:flip_code: 1- NormalizeImage:scale: 1./255.mean: [0.485, 0.456, 0.406]std: [0.229, 0.224, 0.225]order: ''- ToCHWImage:VALID:batch_size: 20num_workers: 0file_list: "./dataset/cassava-leaf-disease-classification/val_list.txt"data_dir: "./dataset/cassava-leaf-disease-classification/train_images/"shuffle_seed: 0transforms:- DecodeImage:to_rgb: Trueto_np: Falsechannel_first: False- ResizeImage:resize_short: 256- CropImage:size: 224- NormalizeImage:scale: 1.0/255.0mean: [0.485, 0.456, 0.406]std: [0.229, 0.224, 0.225]order: ''- ToCHWImage:
-c ./configs/quick_start/ResNet50_vd.yaml

模型微调-基于ResNet101_vd预训练模型:

采用预训练的模型的方式的

ResNet101_vd_ssld_pretrained.pdparams获取:

python tools/download.py -a ResNet101_vd_ssld_pretrained -p ./pretrained -d True

模型的获取:

https://paddleclas.readthedocs.io/zh_CN/latest/models/models_intro.html

训练的配置文件

mode: 'train'
ARCHITECTURE:name: 'ResNet101_vd'pretrained_model: "./pretrained/ResNet101_vd_ssld_pretrained"
model_save_dir: "./output/"
classes_num: 4
total_images: 17117
save_interval: 1
validate: True
valid_interval: 1
epochs: 200
topk: 4
image_shape: [3, 224, 224]use_mix: True
ls_epsilon: 0.1LEARNING_RATE:function: 'Cosine'          params:                   lr: 0.1               OPTIMIZER:function: 'Momentum'params:momentum: 0.9regularizer:function: 'L2'factor: 0.000100TRAIN:batch_size: 32num_workers: 0file_list: "./dataset/cassava-leaf-disease-classification/train_list.txt"data_dir: "./dataset/cassava-leaf-disease-classification/train_images/"shuffle_seed: 0transforms:- DecodeImage:to_rgb: Trueto_np: Falsechannel_first: False- RandCropImage:size: 224- RandFlipImage:flip_code: 1- NormalizeImage:scale: 1./255.mean: [0.485, 0.456, 0.406]std: [0.229, 0.224, 0.225]order: ''- ToCHWImage:mix:                       - MixupOperator:    alpha: 0.2      VALID:batch_size: 32num_workers: 0file_list: "./dataset/cassava-leaf-disease-classification/val_list.txt"data_dir: "./dataset/cassava-leaf-disease-classification/train_images/"shuffle_seed: 0transforms:- DecodeImage:to_rgb: Trueto_np: Falsechannel_first: False- ResizeImage:resize_short: 256- CropImage:size: 224- NormalizeImage:scale: 1.0/255.0mean: [0.485, 0.456, 0.406]std: [0.229, 0.224, 0.225]order: ''- ToCHWImage:

SSLD模型微调-基于ResNet50_vd_ssld预训练模型:

尝试更多的模型结构-MobileNetV3

数据增广的尝试-RandomErasing

知识蒸馏

模型的优化与设计

博文参考

深度学习项目实战——木薯叶图像识别与分类项目相关推荐

  1. 深度学习项目实战-关键点定位视频课程

    课程目标 快速掌握如何使用caffe框架完成一个深度学习的实际项目 适用人群 深度学习爱好者,全民皆可入门 课程简介 深度学习项目实战-关键点定位课程以人脸关键点检测为背景,选择多阶段检测的网络架构, ...

  2. 【PyTorch深度学习项目实战100例】—— 基于ResNet50实现多目标美味蛋糕图像分类 | 第51例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  3. 【PyTorch深度学习项目实战100例】—— 基于CNN实现书法字体风格识别任务 | 第62例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  4. 【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  5. 【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  6. 【PyTorch深度学习项目实战100例】—— 基于聚类算法完成航空公司客户价值分析任务 | 第18例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  7. 深度学习项目实战(一):猫狗识别

    深度学习项目实战(一):猫狗识别 文章目录 深度学习项目实战(一):猫狗识别 项目背景: 数据读取: 网络架构 卷积神经网络训练 项目背景: 猫狗识别是卷积神经网络的入门实战案例,目的在于计算机可以识 ...

  8. 【PyTorch深度学习项目实战100例】—— 基于逻辑回归方法完成垃圾邮件过滤任务 | 第22例

    前言 大家好,我是阿光. 本专栏整理了<PyTorch深度学习项目实战100例>,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新 ...

  9. 深度学习项目实战——1.基于WordCloud词云生成

    深度学习项目实战--1.基于WordCloud词云生成 准备 安装依赖库 pip install wordcloud matplotlib jieba pillow WordCloud()可选的参数 ...

最新文章

  1. ethercard php_使用Arduino和ENC28J60以太网LAN网络模块发送HTTP POST请求
  2. ASP.NET文件下载
  3. Django(part37)--session
  4. 如何安装python3.8_python3.8下载及安装步骤详解
  5. 妙啊!类别不平衡上的半监督学习
  6. android 5.1禁止休眠
  7. 【Python56--爬取妹子图】
  8. 南航的计算机专业好考吗,南航计算机拟录取名单公布,各个专业都有倒数第一逆袭成功...
  9. hp 126NW驱动安装
  10. cad如何多选对象_CAD快速选择和选择类似对象怎么用
  11. java JButton计算器布局
  12. 东京通勤概况及奥运会交通措施
  13. 2022年茶艺师(初级)考试试题及在线模拟考试
  14. matlab 批量导入excel,matlab批量导入excel表格数据-Matlab如何导入excel数据
  15. 小白声纹识别(说话人识别)探索
  16. python实例豆瓣代码_Python实例:通过selenium模拟登陆豆瓣
  17. 敏涵控股集团董事长刘敏:感恩奉献 一路向前
  18. Oracle内存管理PGA详解
  19. DCC2020:VVC帧间预测中的几何划分
  20. 交换机综合实验(华为)

热门文章

  1. SpringMvc接收请求
  2. 正序 逆序写 java_C语言版和JAVA版 把一个字节正序(高位在前)转为逆序(低位在前) 和 逆序转为正序...
  3. android 组件 excel,Android中利用jxl组件来操作excel
  4. 如何利用Syncthing+蒲公英快速实现异地文件同步
  5. 老照片怎么修复?模糊照片如何变清晰?试试这些方法
  6. excel 怎么自动往下生成编号
  7. [碎碎念]祝我的董小姐生日快乐~
  8. hypot函数、fmod函数
  9. 什么是android SDK和API
  10. Java现在好找工作吗?