使用YOLOv8来训练一个包含102,976张图像的腰果、木薯、小麦和番茄病虫害检测数据集。这个数据集分为22个类别,已经划分为训练集、验证集和测试集,可以直接用于模型训练。
数据集描述
数据量:102,976张图像
类别:
腰果(Cashew):
0: 炭疽病(Anthracnose)
1: 树胶病(Gummosis)
2: 健康的(Healthy)
3: 叶蛀虫(Leaf Miner)
4: 红锈病(Red Rust)
木薯(Cassava):
5: 细菌性斑点病(Bacterial Blight)
6: 褐斑病(Brown Streak)
7: 绿色螨(Green Mite)
8: 健康的(Healthy)
9: 马赛克病(Mosaic)
小麦(Maize):
10: 秋粉虫(Fall Armyworm)
11: 蝗虫(Grasshopper)
12: 健康的(Healthy)
13: 叶甲(Leaf Beetle)
14: 叶斑病(Leaf Blight)
15: 叶斑(Leaf Spot)
16: 条纹病毒(Stripe Virus)
番茄(Tomato):
17: 健康的(Healthy)
18: 叶斑病(Leaf Blight)
19: 叶卷曲(Leaf Curl)
20: 斑点病(Spot Disease)
21: 青枯病(Wilt)
数据大小:6.5GB
应用场景:作物病虫害检测
数据集组织
假设你的数据集目录结构如下:
crop_disease_dataset/
├── images/
│ ├── train/
│ │ ├── cashew_000001.jpg
│ │ ├── cassava_000001.jpg
│ │ ├── maize_000001.jpg
│ │ ├── tomato_000001.jpg
│ │ └── …
│ ├── val/
│ │ ├── cashew_000001.jpg
│ │ ├── cassava_000001.jpg
│ │ ├── maize_000001.jpg
│ │ ├── tomato_000001.jpg
│ │ └── …
│ └── test/
│ ├── cashew_000001.jpg
│ ├── cassava_000001.jpg
│ ├── maize_000001.jpg
│ ├── tomato_000001.jpg
│ └── …
├── labels/
│ ├── train/
│ │ ├── cashew_000001.txt
│ │ ├── cassava_000001.txt
│ │ ├── maize_000001.txt
│ │ ├── tomato_000001.txt
│ │ └── …
│ ├── val/
│ │ ├── cashew_000001.txt
│ │ ├── cassava_000001.txt
│ │ ├── maize_000001.txt
│ │ ├── tomato_000001.txt
│ │ └── …
│ └── test/
│ ├── cashew_000001.txt
│ ├── cassava_000001.txt
│ ├── maize_000001.txt
│ ├── tomato_000001.txt
│ └── …
└── data.yaml # 数据配置文件
数据配置文件
创建或确认data.yaml文件是否正确配置了数据集路径和类别信息:
yaml
深色版本
train: ./images/train/ # 训练集图像路径
val: ./images/val/ # 验证集图像路径
test: ./images/test/ # 测试集图像路径
Classes
nc: 22 # 类别数量
names:
- Anthracnose
- Gummosis
- Healthy
- Leaf Miner
- Red Rust
- Bacterial Blight
- Brown Streak
- Green Mite
- Healthy
- Mosaic
- Fall Armyworm
- Grasshopper
- Healthy
- Leaf Beetle
- Leaf Blight
- Leaf Spot
- Stripe Virus
- Healthy
- Leaf Blight
- Leaf Curl
- Spot Disease
- Wilt # 类别名称列表
安装YOLOv8
如果你还没有安装YOLOv8,可以使用以下命令安装:
bash
深色版本
pip install ultralytics
训练模型
使用YOLOv8训练模型的命令非常简单,你可以直接使用以下命令开始训练:
cd path/to/crop_disease_dataset/
克隆YOLOv8仓库
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
开始训练
python yolo.py detect train data=…/data.yaml model=yolov8n.pt epochs=100 imgsz=640 batch=16
在这个命令中:
data=…/data.yaml:指定数据配置文件。
model=yolov8n.pt:指定预训练权重,这里使用的是YOLOv8的小模型。
epochs=100:训练轮数。
imgsz=640:输入图像的大小。
batch=16:批量大小。
模型评估
训练完成后,可以使用以下命令评估模型在验证集上的表现:
python yolo.py detect val data=…/data.yaml model=runs/detect/train/weights/best.pt imgsz=640
这里的runs/detect/train/weights/best.pt是训练过程中产生的最佳模型权重文件。
模型预测
你可以使用训练好的模型对新图像进行预测:
python yolo.py detect predict source=path/to/your/image.jpg model=runs/detect/train/weights/best.pt imgsz=640 conf=0.4 iou=0.5
查看训练结果
训练过程中的日志和结果会保存在runs/detect/目录下,你可以查看训练过程中的损失、精度等信息。
数据增强
为了进一步提高模型性能,可以使用数据增强技术。以下是一个简单的数据增强示例:
安装albumentations库:
pip install -U albumentations
在yolo.py中添加数据增强:
import albumentations as A
from albumentations.pytorch import ToTensorV2
import cv2
定义数据增强
transform = A.Compose([
A.RandomSizedCrop(min_max_height=(400, 640), height=640, width=640, p=0.5),
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.Rotate(limit=10, p=0.5, border_mode=cv2.BORDER_CONSTANT),
A.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2, p=0.5),
A.GaussNoise(var_limit=(10.0, 50.0), p=0.5),
A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
ToTensorV2()
], bbox_params=A.BboxParams(format=‘yolo’, label_fields=[‘class_labels’]))
在数据加载器中应用数据增强
def collate_fn(batch):
images, targets = zip(*batch)
transformed_images = []
transformed_targets = []
for img, target in zip(images, targets):
bboxes = target['bboxes']
class_labels = target['labels']
augmented = transform(image=img, bboxes=bboxes, class_labels=class_labels)
transformed_images.append(augmented['image'])
transformed_targets.append({
'bboxes': augmented['bboxes'],
'labels': augmented['class_labels']
})
return torch.stack(transformed_images), transformed_targets
注意事项
数据集质量:确保数据集的质量,包括清晰度、标注准确性等。
模型选择:可以选择更强大的模型版本(如YOLOv8m、YOLOv8l等)以提高性能。
超参数调整:根据实际情况调整超参数,如批量大小(batch)、图像大小(imgsz)等。
监控性能:训练过程中监控损失函数和mAP指标,确保模型收敛。
通过上述步骤,你可以使用YOLOv8来训练一个包含多种作物病虫害检测的数据集,并使用训练好的模型进行预测。