深度学习,目标检测中_如何使用Yolov5训练植物叶片病害疾病数据集,并通过训练好以后来识别苹果樱桃玉米桃子大豆南瓜草莓番茄等叶片病害
YOLO识别植物叶片疾病数据集 -10000张
数据集中,有 39 种不同类别的植物叶子和背景图像。数据集包含 61,486 张图像。使用了六种不同的增强技术来增加数据集大小。是图像翻转、伽马校正、噪声注入、PCA 颜色增强、旋转和缩放。
类别:1.苹果疥痂病 2.苹果黑腐病 3.苹果雪松锈病 4.苹果健康病 5.无叶背景病 6.蓝莓健康病 7.樱桃白粉病 8.樱桃健康病 9.玉米灰叶病 10.玉米普通锈病 11.玉米北叶枯病 12.玉米健康病 13.葡萄黑腐病 14.葡萄黑麻疹 15.葡萄叶枯 16.葡萄健康病 17.橙黄龙病 18.桃子细菌性斑点病 19.桃子健康病 20.胡椒细菌性斑点病 21.胡椒健康病22.马铃薯早疫病 23.马铃薯健康病 24.马铃薯晚疫病 25.树莓健康病 26.大豆健康病 27.南瓜白粉病 28.草莓健康病 29.草莓叶焦病 30.番茄细菌性斑点病 31.番茄早疫病 32.番茄健康病 33.番茄晚疫病 34.番茄叶霉病 35.番茄叶斑病
以下文章及代码仅供参考。
yixi 一个详细的指南,包括数据准备、环境设置、模型训练、评估以及预测等步骤。
数据准备
首先,确保你的数据集已经准备好,并且按照YOLO格式进行组织:
- 图像文件应该放在
images/
目录下,可以进一步划分为train/
,val/
等子目录。 - 对应的标签文件(YOLO格式)应该放在
labels/
目录下,与图像文件对应。 - 创建一个
data.yaml
文件描述数据集路径和类别信息。例如:
train: ./path/to/train/images
val: ./path/to/val/images
nc: 39 # 类别数量
names: ['Apple_scab', 'Apple_black_rot', 'Apple_cedar_rust', ..., 'Tomato_target_spot'] # 所有类别名称
环境设置
安装必要的依赖项并配置环境:
git clone https://github.com/ultralytics/yolov5 # 假设使用YOLOv5为例
cd yolov5
pip install -r requirements.txt
模型训练
使用以下命令开始训练过程。你可以根据自己的需求调整参数,比如批次大小(--batch-size
)、学习率(--lr
)、epoch数(--epochs
)等。
python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/data.yaml --weights yolov5s.pt
--img 640
设置输入图像尺寸为640x640像素。--batch 16
设置批次大小为16。--epochs 100
设置训练轮次为100。--data path/to/your/data.yaml
指定数据配置文件路径。--weights yolov5s.pt
加载预训练权重作为起点。如果想从头开始训练,可以去掉此选项或选择其他合适的预训练权重。
模型评估
训练完成后,可以使用以下命令评估模型性能:
python val.py --weights runs/train/exp/weights/best.pt --data path/to/your/data.yaml --img 640 --task val
这将输出验证集上的mAP(mean Average Precision)等指标。
预测新数据
对于新图像的预测,可以使用如下命令:
python detect.py --source path/to/test/images --weights runs/train/exp/weights/best.pt --conf 0.25
--source path/to/test/images
指定待预测图像或视频的路径。--weights runs/train/exp/weights/best.pt
指定最佳权重文件路径。--conf 0.25
设置置信度阈值。
自定义增强技术
数据集使用了六种不同的增强技术(如翻转、伽马校正等),在训练时可以通过修改YOLOv5中的数据增强部分来应用这些技术。YOLOv5默认支持多种数据增强方法,但如果你需要添加自定义的数据增强策略,在datasets.py
中进行相应的修改,或者通过编写自定义的albumentations
管道来实现。
使用YOLOv5训练一个植物叶片疾病识别模型,以下是关键步骤和代码示例。请注意,这些代码假设你已经按照之前描述的那样准备好了数据集,并安装了必要的依赖项。
数据准备
确保你的数据集按照以下结构组织:
dataset/
├── images/
│ ├── train/
│ ├── val/
├── labels/
│ ├── train/
│ ├── val/
data.yaml
data.yaml
文件内容示例如下:
train: ./dataset/images/train # 训练图像路径
val: ./dataset/images/val # 验证图像路径
nc: 39 # 类别数量
names: ['Apple_scab', 'Apple_black_rot', ...] # 所有类别名称
环境设置
如果你还没有准备好环境,请先克隆YOLOv5仓库并安装所需依赖:
git clone https://github.com/ultralytics/yolov5 # 克隆YOLOv5仓库
cd yolov5
pip install -r requirements.txt # 安装依赖
模型训练
在YOLOv5中开始训练过程的关键代码如下:
import torch
# 设置参数
img_size = 640 # 输入图像尺寸
batch_size = 16 # 批次大小
epochs = 100 # 训练轮次
data_yaml_path = 'path/to/data.yaml' # 数据配置文件路径
weights = 'yolov5s.pt' # 预训练权重
# 开始训练
def start_training():
model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model=weights, force_reload=True)
model.train(data=data_yaml_path, imgsz=img_size, batch_size=batch_size, epochs=epochs)
if __name__ == '__main__':
start_training()
或者直接通过命令行进行训练:
python train.py --img 640 --batch 16 --epochs 100 --data path/to/data.yaml --weights yolov5s.pt
模型评估
训练完成后,可以使用以下代码对模型进行评估:
from pathlib import Path
import torch
# 加载最佳权重
best_weights = 'runs/train/exp/weights/best.pt'
# 进行验证
def evaluate_model():
model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model=best_weights, force_reload=True)
results = model.val() # 默认使用data.yaml中的验证集
print(results)
if __name__ == '__main__':
evaluate_model()
或者使用命令行:
python val.py --weights runs/train/exp/weights/best.pt --data path/to/data.yaml --img 640 --task val
预测新数据
对于新的图像或视频进行预测,你可以使用以下代码:
import torch
# 加载最佳权重
model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model='runs/train/exp/weights/best.pt')
# 对单张图片进行预测
def predict_image(image_path):
results = model(image_path)
results.print() # 输出结果到控制台
results.show() # 显示检测结果
# 或者处理整个目录中的图像
def predict_directory(directory_path):
for image_file in Path(directory_path).glob('*.jpg'):
predict_image(str(image_file))
if __name__ == '__main__':
predict_image('path/to/test/image.jpg') # 单张图片预测
# 或者调用predict_directory('path/to/test/images/') 处理整个目录
常见的评估指标:
在评估机器学习模型尤其是像YOLO这样的目标检测模型时,有多种指标可以用来衡量模型的性能。以下是一些常见的评估指标:
-
精确率(Precision):
- 定义为所有被预测为正类的样本中实际为正类的比例。
- 公式:(Precision = \frac{TP}{TP + FP}),其中TP是真阳性(正确识别的目标),FP是假阳性(错误地被认为是目标的对象)。
-
召回率(Recall)或灵敏度(Sensitivity):
- 衡量的是所有实际为正类的样本中有多少被正确识别。
- 公式:(Recall = \frac{TP}{TP + FN}),其中FN是假阴性(未识别出的实际目标)。
-
F1分数(F1 Score):
- 精确率和召回率的调和平均数,提供了单一值来评估模型。
- 公式:(F1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall})。
-
平均精度均值(mAP, Mean Average Precision):
- 对于目标检测任务来说,这是一个非常重要的指标。它计算每个类别下的平均精度(AP),然后对所有类别取平均得到mAP。
- AP可以通过计算不同召回率水平下的精确率得到,通常使用PR曲线下的面积来表示。
-
交并比(IoU, Intersection over Union):
- 用于评估预测边界框与真实边界框之间的重叠程度。它是两个区域交集面积除以并集面积的结果。
- 公式:(IoU = \frac{area_{pred} \cap area_{gt}}{area_{pred} \cup area_{gt}}),其中
pred
代表预测框,gt
代表地面实况框。
-
准确率(Accuracy):
- 所有预测正确的样本占总样本的比例。
- 公式:(Accuracy = \frac{TP + TN}{TP + TN + FP + FN}),其中TN是真阴性(正确识别为非目标的对象)。
-
损失函数(Loss Function):
- 虽然不是直接的评估指标,但在训练过程中监控损失函数的变化对于了解模型的学习过程非常重要。对于目标检测模型,常用的损失函数包括分类损失和定位损失。
-
速度(Speed):
- 包括每秒帧数(FPS, Frames Per Second)等指标,评估模型处理图像的速度。这对于实时应用尤其重要。