【毕业设计】基于卷积神经网络的葡萄叶部病害图像诊断系统

葡萄的病害对葡萄植株的生长发育、产量品质影响很大。特别是在多雨地区和多雨的月份,常造成病害猖獗流行,给葡萄生产带来重大损失。葡萄病害种类繁多,发生规律复杂,给防治带来较大困难。“预防为主,综合防治”是葡萄病虫害防治的基本原则,因此利用人工智能技术实现对作物病害的快速准确识别,对病害的防治具有十分重大的意义。

系统演示视频:

【毕业设计】基于卷积神经网络的葡萄叶部病害图像诊断系统病虫害

使用到的技术包括:卷积神经网络(CNN)算法,Django框架搭建网站,CNN模型调优。

本作品内容包括:

1.相关数据集

2.网站所有源代码

3.使用葡萄病害数据集训练卷积神经网络模型。

4.从零部署网站的帮助文档。

作品内容截图如下:

【毕业设计】基于卷积神经网络的葡萄叶部病害图像诊断系统_第1张图片

数据集展示截图:

帮助文档:

【毕业设计】基于卷积神经网络的葡萄叶部病害图像诊断系统_第2张图片

模型训练代码

【毕业设计】基于卷积神经网络的葡萄叶部病害图像诊断系统_第3张图片

from tensorflow.keras.applications.resnet50 import ResNet50
from keras.models import Model, load_model
from keras.layers import Dense, GlobalAveragePooling2D, Dropout
from keras.preprocessing.image import ImageDataGenerator
import os

# verbose:日志显示
# verbose = 0 为不在标准输出流输出日志信息
# verbose = 1 为输出进度条记录
# verbose = 2 为每个epoch输出一行记录
# 注意: 默认为 1
verbose = 1
# NB_CLASS: 分类的类别数量
NB_CLASS = 40
IM_WIDTH = 224
IM_HEIGHT = 224
batch_size = 32
EPOCH = 30
# 数据集路径
train_root = '..\\dataset\\data\\final\\train'
validation_root = '..\\dataset\\data\\final\\test'
test_root = '..\\dataset\\data\\final\\test'

# train data
train_datagen = ImageDataGenerator(
    width_shift_range=0.1,
    height_shift_range=0.1,
    shear_range=0.1,
    zoom_range=0.1,
    horizontal_flip=True,
    rescale=1. / 255
)
train_generator = train_datagen.flow_from_directory(
    train_root,
    target_size=(IM_WIDTH, IM_HEIGHT),
    batch_size=batch_size,
    shuffle=True
)

# vaild data
vaild_datagen = ImageDataGenerator(
    width_shift_range=0.1,
    height_shift_range=0.1,
    shear_range=0.1,
    zoom_range=0.1,
    horizontal_flip=True,
    rescale=1. / 255
)
vaild_generator = train_datagen.flow_from_directory(
    validation_root,
    target_size=(IM_WIDTH, IM_HEIGHT),
    batch_size=batch_size,
)

# test data
test_datagen = ImageDataGenerator(
    rescale=1. / 255
)
test_generator = train_datagen.flow_from_directory(
    test_root,
    target_size=(IM_WIDTH, IM_HEIGHT),
    batch_size=batch_size,
)


# 构建不带分类器的预训练模型
if os.path.exists("ResNet50-0.h5"):
    model = load_model('ResNet50-0.h5')
    # 开放所有的卷积层
    # for layer in base_model.layers:
    #     layer.trainable = True

    # 迁移学习,只训练最后10层
    for layer in model.layers:
        layer.trainable = False
    for i in range(-8, 0):
        model.layers[i].trainable = True
else:
    base_model = ResNet50(weights='imagenet', include_top=False)
    # 添加全局平均池化层
    x = base_model.output
    x = GlobalAveragePooling2D()(x)

    # 添加一个全连接层
    x = Dense(1024, activation='relu')(x)
    x = Dropout(0.5)(x)
    # 添加一个分类器,假设我们有NB_CLASS个类
    predictions = Dense(NB_CLASS, activation='softmax')(x)

    # 构建我们需要训练的完整模型
    model = Model(inputs=base_model.input, outputs=predictions)

    # 开放所有的卷积层
    # for layer in base_model.layers:
    #     layer.trainable = True

    # 迁移学习,只训练最后8层
    for layer in model.layers:
        layer.trainable = False
    for i in range(-8, 0):
        model.layers[i].trainable = True


# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
print('Model Compiled')
model.summary()

# 在数据集上训练
model.fit_generator(train_generator, validation_data=vaild_generator, epochs=EPOCH,
                    steps_per_epoch=train_generator.n / batch_size
                    , validation_steps=vaild_generator.n / batch_size, verbose=verbose)

save_path = "ResNet50-"
for i in range(100):
    if not os.path.exists(save_path + str(i) + '.h5'):
        model.save(save_path + str(i) + '.h5')
        break

网站结构(基于python的Django框架实现):

【毕业设计】基于卷积神经网络的葡萄叶部病害图像诊断系统_第4张图片

你可能感兴趣的:(cnn,深度学习,python)