文献阅读:基于改进ConvNext的玉米叶片病害分类

news2024/11/30 5:45:28

文献阅读:基于改进ConvNext的玉米叶片病害分类

CBAM注意力机制模块:

1:通道注意力模块,对输入进来的特征层分别进行全局平均池化(AvgPool)和全局最大池化(MaxPool)(两个池化都针对于输入特征层的高宽),再将平均池化和最大池化的结果利用共享的全连接层(Shared MLP)进行处理,然后将共享的全连接层所得到的结果进行相加再使用Sigmoid激活函数,进而获得通道注意图即获得输入特征层每一个通道的权重(0~1之间)。最后,将权重逐通道加权到特征层上。

2:与通道注意模块不同的是,空间注意模块关注的是输入图像的哪部分信息是更重要的,是通道注意模块的补充。为了计算空间注意力,首先沿着每一个特征点的通道方向应用平均池化和最大池化(两个池化都针对于输入特征层的通道)并将其堆叠起来生成一个有效的特征描述符(使用两个池化聚合一个Feature Map的通道信息,生成两个2D Map,分别为通道的平均池化特性和最大池化特性),即生成两个有效地二维特征图,再利用一个标准的卷积层(通道数为1的卷积)进行连接和卷积(调整了通道数),然后使用Sigmoid激活函数,进而得到二维空间注意力图即获得输入特征图每个特征点的权重值(0~1间),最后,将权重逐通道加权到特征层上。

ConvNext网络结构

首先输入一张224*224的图像,然后通过大小4×4,步长为4的卷积核,然后通过一个归一化层,接着进行下采样和ConvNext块,最后通过全局最大池化,归一化(减少不同样本之间的差异,提高模型对于输入的泛化能力),全连接输出最终的图像。

ConvNext块的构成:首先经过一个大小为7×7步长为1填充为3的Depthwise卷积层,(Depthwise 卷积的一个卷积核只负责一个通道,一个卷积核只与一个通道卷积。那么卷积核数需要与输入的通道数相等,输出的通道数也不变,等于输入的通道数,等于卷积核数。所以depthwise卷积只改变特征图的大小,不改变通道数。但这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的feature信息。)然后再卷积与激活(GELU激活函数:GELU (Gaussian Error Linear Units) 是一种基于高斯误差函数的激活函数,相较于 ReLU 等激活函数,GELU 更加平滑,有助于提高训练过程的收敛速度和性能),经过两次卷积之后特征图由1维变成了4维,之后通过1×1的卷积(相当于全连接层)和Layer Scale大小缩放,最后通过一个Drop Path正则化输出结果。

ConvNext原框架:
在这里插入图片描述

改进框架:
请添加图片描述

ConvNeXt Block模块代码:


class Block(nn.Module): # ConvNeXt Block模块
def __init__(self, dim, drop_rate=0., layer_scale_init_value=1e-6): # 初始化函数
    super().__init__()
    self.dwconv = nn.Conv2d(dim, dim, kernel_size=7, padding=3, groups=dim)  # 构建卷积depthwise conv
    self.norm = LayerNorm(dim, eps=1e-6, data_format="channels_last")
    self.pwconv1 = nn.Linear(dim, 4 * dim)  # 1x1的卷积层和全连接层的作用是一样的 pointwise/1x1 convs, implemented with linear layers
    self.act = nn.GELU() # GELU激活函数
    self.pwconv2 = nn.Linear(4 * dim, dim) # 注意pwconv1和pwconv2的输入输出channel是不同的
    self.gamma = nn.Parameter(layer_scale_init_value * torch.ones((dim,)), # layer_scale层
                              requires_grad=True) if layer_scale_init_value > 0 else None
    self.drop_path = DropPath(drop_rate) if drop_rate > 0. else nn.Identity() # 构建DropPath层
 
def forward(self, x: torch.Tensor) -> torch.Tensor: # 正向传播过程
    shortcut = x
    x = self.dwconv(x) # 通过DW卷积
    x = x.permute(0, 2, 3, 1)  # 通过permute方法调整通道顺序 [N, C, H, W] -> [N, H, W, C]
    x = self.norm(x) # LayerNorm层
    x = self.pwconv1(x) # 1x1的卷积层
    x = self.act(x) # GELU激活函数
    x = self.pwconv2(x) # 1x1的卷积层
    if self.gamma is not None:
        x = self.gamma * x   # 对每个通道的数据进行缩放
    x = x.permute(0, 3, 1, 2)  # 还原通道顺序 [N, H, W, C] -> [N, C, H, W]
 
    x = shortcut + self.drop_path(x) # 通过drop_path层并融合shortcut
    return x`

激活函数:Relu与LeakyRelu

由于 ReLU 在负半轴上的输出都为零,因此可以使得神经网络中的一些神经元变得不活跃,从而提高模型的稀疏性。但是负半轴为零使得输入数据为负值时会出现神经元不学习的情况。因此选用了LeakyRelu激活函数来处理这个问题。
在这里插入图片描述
在这里插入图片描述

通道数增多与卷积之后得到的图像特征数量有关

卷积层的作用本来就是把输入中的特征分离出来变成新的 feature map,每一个输出通道就是一个卷积操作提取出来的一种特征。在此过程中ReLU激活起到过滤的作用,把负相关的特征点去掉,把正相关的留下。输出的通道数越多就代表分理出来的特征就越多,但也可能存在重复的特征,毕竟是一个概率问题。

数据增强

数据集介绍

本研究采用的数据集进行了数据增强。通过采用旋转、高斯模糊、添加随机噪声、添加随机 位置的遮挡以及亮度调节等数据增强方法分别模 拟在图像采集中不同角度、其他背景叶片的遮挡以 及不同天气等外界因素的干扰,从而防止模型过拟合,同时提升模型的鲁棒性和泛化能力。对原数据集按照 6:2:2 的比例划分训练集、验证集与测试集。 本试验针对玉米种植中 3 种常见病害玉米灰斑病、玉米锈病以及玉米大斑病和健康叶片进行试验研究。 以 PlantVillagedataset公开数据集和吉林农业科技学院 “智慧农业”平台数据集作为试验对象,进行数据增强处理。

在这里插入图片描述

实验过程

本试验采用 PaddlePaddle2.3.2深度学习框架编程语言为python3.7,并采用4核CPU以及TaslaV100的GPU加速训练 。

网络采用交叉熵损失函数结合自适应矩估计(Adam)作为优化器进行训练,该优化器可以根据训练参数对学习率进行自适应调整训练迭代 100 次,批量大小设置为 64,学习率设置为0.000001。

实验结果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu系统使用快速入门实践(六)——Ubuntu深度学习环境配置(1)

Ubuntu系统使用快速入门实践系列文章 下面是Ubuntu系统使用系列文章的总链接,本人发表这个系列的文章链接均收录于此 Ubuntu系统使用快速入门实践系列文章总链接 下面是专栏地址: Ubuntu系统使用快速入门实践系列文章专栏 文章目录 Ubuntu系统使用快速…

android studio安装说明

一、安装文件下载: Android studio、SDK、NDK下载: https://developer.android.google.cn/ndk/downloads?hlzh-cn 二、双击android studio 安装文件,开始安装: 三、进入安装界面,点击“next”。 四、点击“next”&…

uni-app 微信小程序之加载行政区图

文章目录 1. 实现效果2. 实现步骤 1. 实现效果 2. 实现步骤 使用三方组件 ucharts echarts 高性能跨全端图表组件页面导入引入的三方组件 组件demo代码 <template><view class"qiun-columns"><view class"cu-bar bg-white margin-top-xs"…

Leetcode刷题笔记题解(C++):BM11 链表相加(二)

思路&#xff1a;先对两个链表进行反转&#xff0c;反转求和注意进位运算&#xff0c;求和完成之后再进行反转得到结果 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <cstddef> class Soluti…

STM32单片机项目实例:基于TouchGFX的智能手表设计(2)UI交互逻辑的设计

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;2&#xff09;UI交互逻辑的设计 目录 一、UI交互逻辑的设计 1.1 硬件平台的资源 1.2 界面切换功能 ​​​​​​​1.3 表盘界面 1.4 运动界面 ​​​​​​​1.6 设置界面 ​​​​​​​1.7 应…

SpringBoot 与Maven ProFile的使用

SpringBoot 与Maven ProFile的使用 目录结构 dev 开发环境 sit 测试环境 prd 正式环境 maven 配置 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId>&l…

Linux中的输入输出重定向

目录 1.输出重定向 > 2.追加重定向 >> 3.标准 正确/错误 输出重定向 4.输入重定向 < 5.标准输入 0 1.输出重定向 > 将命令执行之后的结果不打印出来&#xff0c;可以输入在另外一个文件当中。 如&#xff0c;我查看文件a.txt 的前3行&#xff0c;然后不显…

【PyTorch】训练过程可视化

文章目录 1. 训练过程中的可视化1.1. alive_progress1.2. rich.progress 2. 训练结束后的可视化2.1. tensorboardX2.1.1. 安装2.1.2. 使用 1. 训练过程中的可视化 主要是监控训练的进度。 1.1. alive_progress 安装 pip install alive_progress使用 from alive_progress i…

Vue 父传子组件传参 defineProps

defineProps 属性&#xff1a;用于接收父组件传递过来的数据。 注意&#xff1a;如果 defineProps 接收的参数名&#xff0c;和已有变量名相同&#xff0c;就会造成命名冲突。 语法格式&#xff1a; // 无限制 const props defineProps([参数名, 参数名]);// 限制数据类型 …

高德地图vue实现热力图(缩放时展示不同数据)

高德地图插件引入省略。。。 效果图 1.1&#xff1a;初始化时&#xff0c;按省进行统计 1.2&#xff1a;地图放大一定程度时&#xff0c;按市进行统计 2. 同一个经纬点可支持展示两个数据 代码实现 <template><div class"infringement-map"><di…

西南科技大学C++程序设计实验七(继承与派生二)

一、实验目的 1. 掌握多继承程序设计 2. 掌握虚基类编程 3. 拓展学习可视化程序设计中的继承与派生应用 二、实验任务 重点:掌握虚基类的定义与实现,拓展其功能。 阅读分析、完善程序。下面程序(1)与程序(2)分别是没有使用虚基类和使用虚基类的代码,其中A是最上层基…

MA营销自动化如何助力商家实现精准营销?

惟客数据 MAP 是一个跨渠道和设备的自动化营销平台&#xff0c;允许接触点编排个性化旅程&#xff0c;通过短信、社交推送等方式为您的客户创建无缝的个性化体验&#xff0c;加强客户关系并赢得忠诚度。可与惟客数据CDP 产品无缝配合使用&#xff0c;通过数据驱动做出更实时&am…

javaee实验:文件上传及拦截器的使用

目录 文件上传ModelAttribute注解实验目的实验内容实验过程项目结构编写代码结果展示 文件上传 Spring MVC 提供 MultipartFile 接口作为参数来处理文件上传。 MultipartFile 提供以下方法来获取上传的文件信息&#xff1a;  getOriginalFilename 获取上传的文件名字&#x…

ACM32F403/F433 12 位多通道,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…

Stable Diffusion AI绘画系列【17】:绘本童话风格场景

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

AidLux:手机/平板上的Linux环境与AI开发利器

AidLux是一个基于ARM架构的跨生态&#xff08;鸿蒙/AndroidLinux&#xff09;一站式智能物联网&#xff08;AIoT&#xff09;应用开发和部署平台&#xff0c;正受到越来越多开发者和用户的青睐。既可以作为手机/平板上的一个Linux环境使用&#xff0c;也可以作为AI开发利器以发…

文本编辑软件:Ulysses mac介绍说明

Ulysses mac是面向 Mac、iPhone 和 iPad 的一站式写作环境。Ulysses 提供令人愉悦、专注的写作体验&#xff0c;加上高效文稿管理、无缝同步以及灵活导出。markdown 可以直接对于文本进行不同类型的分类、编辑&#xff0c;比如标题、注解、评论之类的内容。 Ulysses让注意力专…

java学习part38一些常用类和api

151-常用类与基础API-其它常用类的使用&#xff1a;BigInteger、BigDecimal、Random等_哔哩哔哩_bilibili 1.System 2.Runtime 3.java.lang.math 4.java.math 4.1大整数类 4.2大浮点数类 4.3随机类

P1005 [NOIP2007 提高组] 矩阵取数游戏

网址&#xff1a;P1005 [NOIP2007 提高组] 矩阵取数游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 动态规划和高精度的组合&#xff0c;使我的滨州旋转 最后只得了80&#xff0c;两个测试点超时了 看题解有人是用了int128来做的&#xff0c;明天学一下 我的递归思路和…

RPC简介和grpc的使用

文章目录 Rpc基本概念RPC 机制和实现过程RPC的机制的诞生和基础概念总结下RPC执行步骤&#xff1a; 安装gRPC和Protobuf安装proto 服务定义gRPC 优势 gRPC入门简单使用 代码仓库 Rpc基本概念 RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用&#xff0c;是一种…