本文主要是介绍基于CNN的棉花不同病害叶识别(Python代码,pytorch框架,代码有详细中文注释,准确率在90%以上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.效果视频(训练过程:基于CNN模型的棉花不同病害叶识别(Python代码,pytorch框架)_哔哩哔哩_bilibili(为减小视频时长,epoch为30,准确率在85%左右,epoch为60后,稳定在90%以上),
GUI识别过程:棉花也病害识别GUI运行界面_哔哩哔哩_bilibili)
CNN模型介绍( CNN模型代码,可以替换为MobileNetV3Small, VGG16,AlexNet,ResNet18,GoogLeNet,很容易):
表 3-1 CNN完整网络参数
网络 | 名称 | 层类型 | 核尺寸/ 步长 | 核数量 | 激活 函数 |
CNN 模块 | 卷积块1 | 卷积层 | 3*3/1 | 16 | ReLU |
BN层 | — | — | — | ||
卷积块2 | 卷积层 | 3*3/1 | 32 | ReLU | |
BN层 | — | — | — | ||
池化层1 | 最大池化层 | 2/2 | — | — | |
卷积块3 | 卷积层 | 3*3/1 | 64 | ReLU | |
BN层 | — | — | — | ||
卷积块4 | 卷积层 | 3*3/1 | 128 | ReLU | |
BN层 | — | — | — | ||
池化层2 | 自适应最大池化层 | — | — | — | |
分类器 | 全连接层1 | — | — | 256 | ReLU |
全连接层2 | — | — | 128 | ReLU | |
输出层 | 4 |
|
代码实现(这里把注释去掉了)
from torch import nn
import warnings
import torch
# ----------------------------inputsize >=28*28-------------------------------------------------------------------------
class CNN(nn.Module):def __init__(self, pretrained=False, in_channel=3, num_classes=4):super(CNN, self).__init__()if pretrained == True:warnings.warn("Pretrained model is not available")self.layer1 = nn.Sequential(nn.Conv2d(in_channel, 16, kernel_size=3), nn.BatchNorm2d(16),nn.ReLU(inplace=True))self.layer2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=3), nn.BatchNorm2d(32),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2)) self.layer3 = nn.Sequential(nn.Conv2d(32, 64, kernel_size=3),nn.BatchNorm2d(64),nn.ReLU(inplace=True))self.layer4 = nn.Sequential(nn.Conv2d(64, 128, kernel_size=3), nn.BatchNorm2d(128),nn.ReLU(inplace=True),nn.AdaptiveMaxPool2d((4,4))) self.layer5 = nn.Sequential(nn.Linear(128 * 4 * 4, 1024),nn.ReLU(inplace=True),nn.Linear(1024, 128),nn.ReLU(inplace=True))self.fc = nn.Linear(128, num_classes)def forward(self, x):x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)x = x.view(x.size(0), -1)x = self.layer5(x)x = self.fc(x)return x
2.数据集介绍
如果想识别的时候呈现中文名称:
文件夹改为中文名字即可
-
Bacterial Blight(细菌性枯萎病):细菌性枯萎病是由细菌引起的棉花疾病,主要受害部位是棉花的叶子和茎。这种病害可以导致叶片枯萎、变色和腐烂,对棉花产量产生不利影响。
-
Curl Virus(卷叶病毒):卷叶病毒是一种病毒性病害,影响棉花植株。感染后,棉花叶片会卷曲并显示异常的颜色,这可能导致棉花生长不良和减产。
-
Fusarium Wilt(枯萎病):枯萎病是由一种真菌引起的棉花疾病。这种病害会导致棉花植株的叶子和茎部出现枯萎、变色和凋落的症状。枯萎病对棉花的生长和产量也造成了负面影响。
-
Healthy(健康):"Healthy" 表示没有任何上述病害或问题,棉花植株处于正常健康状态。
1.Bacterial Blight(细菌性枯萎病)文件夹(448张照片)
2. Curl Virus(卷叶病毒)文件夹(417张照片)
3. Fusarium Wilt(枯萎病)文件夹(419张照片)
4.健康文件夹(426张照片)
只对数据集感兴趣额的,可以关注棉花叶病害数据集_cotton insect pests 数据集-CSDN博客
整个文件夹的截图
背景照片是GUI程呈现的背景,可以替换
train.py是训练主程序,调用model.py里面写的CNN模型
model.py就是CNN模型
hf.py是对data文件夹里的原始数据进行分割训练集和测试集,生成的训练集和测试集保存在了piture文件夹(如果运行hf.py,需要重新删除piture文件夹)
CNN.pth就是train.py训练结束保存的模型参数。
class_indices.join可以被pycharm或者Spyder等Python语言编译器打开,里面是标签和对应的类别名称
对项目感兴趣的额,可以关注最后一行
import threading
import os
import json
import torch
import cv2
from PIL import Image
from torchvision import transforms
import tkinter as tk
from tkinter import filedialog
from model import CNN
from PIL import ImageTk
#代码和数据集压缩包:https://mbd.pub/o/bread/mbd-ZZ6alZ9p
这篇关于基于CNN的棉花不同病害叶识别(Python代码,pytorch框架,代码有详细中文注释,准确率在90%以上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!