10种农作物叶子病害图像的数据集,注意是分类数据集,标注图片5万张,包含10种植物(苹果、樱桃、葡萄、柑桔、桃、草莓、番茄、辣椒、玉米、马铃薯)的27种病害,合计61个分类(按“物种-病害-程度”分),并附keras训练代码
10种农作物叶子病害图像分类数据集介绍
数据集概述
该数据集专注于10种农作物叶子的病害分类,包含了总共5万张标注图片,涉及10种植物(苹果、樱桃、葡萄、柑桔、桃、草莓、番茄、辣椒、玉米、马铃薯)的27种病害,总计61个分类。分类方式按照“物种-病害-程度”进行细分,使得数据集能够支持更加细致的病害识别任务。
数据集特点
- 多物种覆盖:涵盖了10种不同的农作物,增加了数据集的多样性。
- 细致分类:不仅区分不同的病害类型,还考虑了病害的程度,使得分类更加精确。
- 大规模数据集:包含5万张图片,提供了充足的训练样本。
- 标注清晰:每张图片都有明确的标注,方便模型训练和验证。
数据集内容
- 图像文件:共有5万张JPG/PNG格式的图像文件。
- 标注文件:每张图像都配有对应的标注信息。
数据集结构示例
假设数据集的根目录为 plant_leaf_disease_dataset
,其结构可能如下所示:
plant_leaf_disease_dataset/
├── train/
│ ├── Apple/
│ │ ├── Apple_scab/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Cherry/
│ │ ├── Cherry_powdery_mildew/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Grape/
│ │ ├── Grape_black_rot/
│ │ ├── Grape_esca/
│ │ └── ...
│ ├── Citrus/
│ │ ├── Citrus_canker/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Peach/
│ │ ├── Peach_bacterial_spot/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Strawberry/
│ │ ├── Strawberry_leaf_scorch/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Tomato/
│ │ ├── Tomato_bacterial_spot/
│ │ ├── Tomato_healthy/
│ │ └── ...
│ ├── Pepper_bell/
│ │ ├── Pepper_bell_bacterial_spot/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Corn_maize/
│ │ ├── Corn_maize_common_rust/
│ │ ├── Corn_maize_gray_leaf_spot/
│ │ └── ...
│ ├── Potato/
│ │ ├── Potato_early_blight/
│ │ ├── Potato_late_blight/
│ │ └── ...
├── validation/
│ ├── Apple/
│ │ ├── Apple_scab/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Cherry/
│ │ ├── Cherry_powdery_mildew/
│ │ ├── Healthy/
│ │ └── ...
├── test/
│ ├── Apple/
│ │ ├── Apple_scab/
│ │ ├── Healthy/
│ │ └── ...
│ ├── Cherry/
│ │ ├── Cherry_powdery_mildew/
│ │ ├── Healthy/
│ │ └── ...
└── data_info.txt # 数据集信息文件
数据集信息文件 data_info.txt
此文件可能包含关于数据集的元信息,例如采集日期、地理坐标、病害种类等。
Keras训练代码示例
以下是一个使用Keras框架进行模型训练的基本代码示例:
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
# 参数设置
IMAGE_SIZE = (224, 224) # 图像尺寸
BATCH_SIZE = 32
NUM_CLASSES = 61 # 分类数
EPOCHS = 50
PATIENCE = 5 # EarlyStopping patience
# 数据路径
train_dir = 'plant_leaf_disease_dataset/train'
validation_dir = 'plant_leaf_disease_dataset/validation'
# 数据生成器
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest'
)
validation_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=IMAGE_SIZE,
batch_size=BATCH_SIZE,
class_mode='categorical'
)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=IMAGE_SIZE,
batch_size=BATCH_SIZE,
class_mode='categorical'
)
# 构建模型
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(IMAGE_SIZE[0], IMAGE_SIZE[1], 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(256, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.5),
Dense(NUM_CLASSES, activation='softmax')
])
# 编译模型
model.compile(loss='categorical_crossentropy',
optimizer=Adam(lr=0.0001),
metrics=['accuracy'])
# 设置回调
checkpoint = ModelCheckpoint('best_model.h5', monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')
early_stopping = EarlyStopping(monitor='val_loss', patience=PATIENCE, verbose=1, mode='auto')
# 训练模型
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // BATCH_SIZE,
epochs=EPOCHS,
validation_data=validation_generator,
validation_steps=validation_generator.samples // BATCH_SIZE,
callbacks=[checkpoint, early_stopping]
)
print("Training complete.")
注意事项
- 数据预处理:确保图像尺寸一致,并进行适当的归一化处理。
- 数据增强:通过数据增强增加模型的鲁棒性,防止过拟合。
- 超参数调整:根据实际情况调整学习率、批次大小、迭代次数等超参数。
- 模型保存:使用回调函数保存最佳模型,以便后续使用。
- 评估指标:除了准确率外,还可以考虑其他评估指标如精确率、召回率等。
总结
这个数据集和代码示例为进行农作物叶子病害分类提供了一个良好的起点。通过使用这些资源,可以有效地训练出一个能够识别多种病害的模型。在实际应用中,可以根据具体需求调整模型结构和训练参数。