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

文献阅读:基于改进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。

实验结果

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解nginx优势以及应用场景,实操编译安装和nginx版本平滑升级

目录 一、nginx的特点 那么nginx有哪些特点? 先讲nginx的优点: 缺点: 二、nginx与Apache的区别 三、nginx的应用场景 四、nginx为什么能支持高并发 五、为什么nginx不使用多线程 六、nginx的两种进程分别有什么作用 七、编译安装ngi…

Linux文件部分知识

目录 认识inode 如何理解创建一个空文件? 如何理解对文件写入信息? 如何理解删除一个文件? 为什么拷贝文件的时候很慢,而删除文件的时候很快? 如何理解目录 ​编辑 文件的三个时间 ​编辑 Access: …

HarmonyOS架构及关键技术整理

技术解析:鸿蒙系统的底层优势 鸿蒙系统采用了先进的微内核设计,这是一种全新的系统架构,能够更好地适应现代智能设备的多样性和互联性。微内核通过最小化系统的核心功能,提高了系统的安全性和可定制性。此外,鸿蒙系统…

利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能

在这篇博客中,我们将详细讨论使用阿里云 CDN 和安全产品保护您的在线业务所需的步骤。 方案描述 创新技术的快速发展为世界各地的在线业务带来了新的机遇。今天的人们不仅习惯了,而且依靠互联网来开展他们的日常生活,包括购物、玩游戏、看电…

react 学习笔记 李立超老师 | (学习中~)

文章目录 react学习笔记01入门概述React 基础案例HelloWorld三个API介绍 JSXJSX 解构数组 创建react项目(手动)创建React项目(自动) | create-react-app事件处理React中的CSS样式内联样式 | 内联样式中使用state (不建议使用)外部样式表 | CSS Module React组件函数式组件和类组…

UDP多人群聊

一,创建类 二,类 1,Liao类 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String;public class Liao extends JFrame{private static final int D…

图像处理中的角点检测Python-OpenCV 中的实现

马丁亚当斯 (Martin Adams)在Unsplash上拍摄的照片 一、说明 在图像处理的背景下,“特征”可以直观地理解为图像中易于识别并用于表示图像的独特或独特的部分。将特征视为图像中使其可区分的“地标”或“焦点”。为了使这一点更具关联性,请考虑一下您如…

JFrog Artifactory二进制文件管理工具部署使用

1.简介 JFrog Artifactory二进制文件管理工具,目前已经在使用的公司有很多,足见他的方便好用。 2.下载安装包 点击下载地址 这里我下载的是7.9.2版本 3. 安装 (1)在安装JFrog Artifactory之前需要安装好jdk(需…

持续集成交付CICD:Sonarqube自动更新项目质量配置

目录 一、实验 1.Sonarqube手动自定义质量规则并指定项目 2.Sonarqube自动更新项目质量配置 一、实验 1.Sonarqube手动自定义质量规则并指定项目 (1)自定义质量规则 ①新配置 ②更多激活规则③根据需求激活相应规则④已新增配置 ⑤ 查看 &#x…

梯度下降(批量梯度下降、随机梯度下降、小批量梯度下降)

在上一篇中我们推导了损失函数 J ( θ ) 1 2 m ∑ i 1 m ( y i − h θ ( x i ) ) 2 J(\theta) \frac{1}{2m} \sum_{i1}^{m} (y^{i} - h_{\theta}(x^{i}))^2 J(θ)2m1​∑i1m​(yi−hθ​(xi))2的由来,结尾讲到最小化这个损失函数来找到最优的参数 θ \theta θ&…

【C++】简单工厂模式

2023年12月6日,周三下午 今天又学习了一次简单工厂模式 每多学习一次,都会加深对设计模式的理解 目录 什么是简单工厂模式简单工厂模式的优缺点举例说明 什么是简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种创建型…

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

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

管理和监控CentOS上的HTTP服务

CentOS作为一款稳定的开源服务器操作系统&#xff0c;为各种网络服务提供了优秀的支持。其中&#xff0c;HTTP服务是互联网上最常用的服务之一&#xff0c;它为人们提供了便捷的信息访问和交互方式。在CentOS上管理和监控HTTP服务是一项重要的任务&#xff0c;下面我们将介绍一…

华为配置风暴控制示例

组网需求 如下图所示&#xff0c;SwitchA作为二层网络到三层路由器的衔接点&#xff0c;需要防止二层网络转发的广播、未知组播或未知单播报文产生广播风 配置思路 用如下的思路配置风暴控制。 通过在GE0/0/1接口视图下配置风暴控制功能&#xff0c;实现防止二层网络转发的…

轻快小miniconda3在linux下的安装配置-centos9stream-Miniconda3 Linux 64-bit

miniconda与anaconda的区别&#xff1a; Miniconda 和 Anaconda 是用于管理环境和安装软件包的 Python 发行版。它们之间的主要区别在于以下几点&#xff1a; 1. 安装内容和大小&#xff1a; Anaconda&#xff1a; Anaconda 是一个完整的 Python 数据科学平台&#xff0c;包含…

10-tornado项目部署

1. python3的安装和配置 1.1 安装系统依赖包 sudo dnf install wget yum-utils make gcc openssl-devel bzip2-devel libffi-devel zlib-devel -y1.2 下载Python wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz1.3 解压 tar xzf Python-3.9.5.tgz 1.4 安装…

Java实现TCP一对一通信,UDP协议实现群聊

实现服务端对话框&#xff1a; 其中可自行更改对话框大小样式等配置。 package com.ex.controller;import javax.servlet.http.HttpServletRequest; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class …

Centos服务器上根据端口号查询jar包,根据jar包查端口号

在开发springboot服务器时&#xff0c;经常会遇到其他人部署的java服务&#xff0c;需要自己维护&#xff0c;留下的信息又非常少。经常面临找不到jar包位置&#xff0c;或者不知道占用端口&#xff0c;不知道启动命令的问题。这里记录一下常用的centos服务器上的命令&#xff…

【桑基图】绘制桑基图

绘制桑基图 一、绘制桑基图&#xff08;1&#xff09;方法一&#xff1a;去在线网站直接绘制&#xff08;2&#xff09;方法二&#xff1a;写html之后在vscode上运行 二、遇到的问题&#xff08;1&#xff09;当导入一些excel的时候&#xff0c;无法绘制出桑基图 一、绘制桑基图…

ROS-ROS通信机制-参数服务器

文章目录 一、基础理论知识二、C实现三、Python实现 一、基础理论知识 参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点…