YOLO柑橘缺陷病害识别数据集
✓图片数量1290,xml和txt标签都有; 5类 类别:Orange-Black-Spot,Orange-Canker ,Orange-Greening,Orange-Healthy,Orange-Melanose; 数据集
YOLO柑橘缺陷病害识别数据集
✓图片数量1290,xml和txt标签都有; 5类 类别:Orange-Black-Spot,Orange-Canker ,Orange-Greening,Orange-Healthy,Orange-Melanose; 数据集
YOLO柑橘缺陷病害识别数据集
数据集➕模型➕可视化界面
用于yolo,Python,目标检测,机器学习,人工智能,深度学习,柑橘缺陷检测,柑橘病害识别
图片数量:1290张
标注格式:XML (PASCAL VOC 格式) 和 TXT (YOLO 格式)
类别:
- Orange-Black-Spot(柑橘黑斑病)
- Orange-Canker(柑橘溃疡病)
- Orange-Greening(柑橘黄龙病)
- Orange-Healthy(健康柑橘)
- Orange-Melanose(柑橘黑腐病)
用途:用于柑橘病害的检测和分类任务,适用于农业领域的病害监控、质量控制和病害管理等。该数据集特别适合基于深度学习的目标检测模型,如YOLO。
数据集特点
- 规模:包含1290张高分辨率图像,每张图像都带有详细的像素级或边界框标注。
- 多样性:图像涵盖了不同的光照条件、背景环境以及多种类型的柑橘病害,以确保模型能够适应多样的实际场景。
- 标注质量:每张已标注的图像都有精确的手动标注,确保了高质量的训练数据。
- 标注格式:
- PASCAL VOC 格式 (XML):每个目标用一个
<object>
标签表示,包含类别名、边界框坐标等信息。 - YOLO 格式 (TXT):每个目标用一行文本表示,包含类别ID、中心点坐标、宽度和高度等信息。
- PASCAL VOC 格式 (XML):每个目标用一个
标注信息
-
PASCAL VOC 格式:
<annotation><folder>images</folder><filename>image_0001.jpg</filename><size><width>800</width><height>600</height><depth>3</depth></size><object><name>Orange-Black-Spot</name><bndbox><xmin>250</xmin><ymin>100</ymin><xmax>400</xmax><ymax>300</ymax></bndbox></object><object><name>Orange-Healthy</name><bndbox><xmin>500</xmin><ymin>200</ymin><xmax>600</xmax><ymax>400</ymax></bndbox></object><!-- 更多对象 --> </annotation>
解释:
<name>
表示病害的类别名,<bndbox>
包含边界框的坐标信息。 -
YOLO 格式:
txt深色版本
0 0.375 0.25 0.25 0.333333 3 0.625 0.333333 0.25 0.333333
解释:每一行表示一个目标,格式为
class_id x_center y_center width height
,其中x_center
,y_center
,width
,height
是归一化后的值(范围在0到1之间)。
应用领域
- 病害监控:自动检测并报告柑橘中的各种病害,提高农业生产的病害监控水平。
- 质量控制:及时发现潜在的安全隐患,辅助进行质量控制和病害管理。
- 智能监控:结合无人机或地面机器人,实现自动化监控,减少人工成本。
- 数据分析:通过数据分析,提供关于病害分布和类型的统计报告,优化农业生产流程。
获取方式
通常情况下,研究人员可以通过官方提供的链接或相关机构网站下载该数据集。请注意,使用时应遵循相应的许可协议和引用要求。
关键代码示例
1. 下载数据集
假设我们已经有了数据集的下载链接,可以使用 Python 的 requests
库来下载数据集:
import requests
import os# 定义下载链接和保存路径
url = 'http://example.com/path/to/orange_defect_dataset.zip' # 替换为实际的下载链接
save_path = './orange_defect_dataset.zip'# 检查是否已经下载过
if not os.path.exists(save_path):print("Downloading dataset...")response = requests.get(url, stream=True)with open(save_path, 'wb') as f:for chunk in response.iter_content(chunk_size=8192):if chunk:f.write(chunk)print("Download complete.")
else:print("Dataset already exists.")# 解压数据集
import zipfile
with zipfile.ZipFile(save_path, 'r') as zip_ref:zip_ref.extractall('./orange_defect_dataset')
2. 解析 XML 格式的标注文件
以下是一个解析 PASCAL VOC 格式标注文件的函数:
import xml.etree.ElementTree as ETdef parse_voc_annotation(anno_file):annotations = []tree = ET.parse(anno_file)root = tree.getroot()for obj in root.findall('object'):class_name = obj.find('name').textbbox = obj.find('bndbox')xmin = int(bbox.find('xmin').text)ymin = int(bbox.find('ymin').text)xmax = int(bbox.find('xmax').text)ymax = int(bbox.find('ymax').text)annotations.append({'class_name': class_name,'bbox': [xmin, ymin, xmax, ymax]})return annotations
3. 将 XML 标注转换为 YOLO 格式
以下是一个将 PASCAL VOC 格式转换为 YOLO 格式的脚本:
import os
import xml.etree.ElementTree as ET
from pathlib import Pathdef convert_voc_to_yolo(voc_file, yolo_file, image_width, image_height):tree = ET.parse(voc_file)root = tree.getroot()with open(yolo_file, 'w') as f:for obj in root.findall('object'):class_name = obj.find('name').textclass_id = get_class_id(class_name) # 假设有一个函数获取类别IDbbox = obj.find('bndbox')xmin = float(bbox.find('xmin').text)ymin = float(bbox.find('ymin').text)xmax = float(bbox.find('xmax').text)ymax = float(bbox.find('ymax').text)x_center = (xmin + xmax) / 2.0 / image_widthy_center = (ymin + ymax) / 2.0 / image_heightwidth = (xmax - xmin) / image_widthheight = (ymax - ymin) / image_heightf.write(f"{class_id} {x_center} {y_center} {width} {height}\n")def get_class_id(class_name):class_map = {'Orange-Black-Spot': 0,'Orange-Canker': 1,'Orange-Greening': 2,'Orange-Healthy': 3,'Orange-Melanose': 4}return class_map[class_name]# 转换整个数据集
voc_anno_dir = './orange_defect_dataset/annotations'
yolo_anno_dir = './orange_defect_dataset/yolo_annotations'
image_dir = './orange_defect_dataset/images'os.makedirs(yolo_anno_dir, exist_ok=True)for filename in os.listdir(voc_anno_dir):if filename.endswith('.xml'):voc_file = os.path.join(voc_anno_dir, filename)yolo_file = os.path.join(yolo_anno_dir, filename.replace('.xml', '.txt'))image_file = os.path.join(image_dir, filename.replace('.xml', '.jpg'))image = Image.open(image_file)image_width, image_height = image.sizeconvert_voc_to_yolo(voc_file, yolo_file, image_width, image_height)
4. 使用数据集进行训练
如果您打算使用这个数据集进行深度学习模型的训练,可以使用 PyTorch 或 TensorFlow 等框架。以下是一个简单的 PyTorch DataLoader 示例:
import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
import numpy as npclass OrangeDefectDataset(Dataset):def __init__(self, image_dir, anno_dir, transform=None):self.image_dir = image_dirself.anno_dir = anno_dirself.transform = transformself.images = os.listdir(image_dir)def __len__(self):return len(self.images)def __getitem__(self, idx):img_name = self.images[idx]image = Image.open(os.path.join(self.image_dir, img_name)).convert("RGB")anno_name = img_name.replace('.jpg', '.txt')anno_path = os.path.join(self.anno_dir, anno_name)image_np = np.array(image)image_height, image_width, _ = image_np.shapeannotations = parse_yolo_annotation(anno_path, image_width, image_height)if self.transform:image = self.transform(image)return image, annotations# 创建 DataLoader
dataset = OrangeDefectDataset(image_dir='./orange_defect_dataset/images',anno_dir='./orange_defect_dataset/yolo_annotations'
)
dataloader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2)# 遍历数据
for images, annotations in dataloader:# 在这里进行模型训练pass
5. 目标检测模型训练
为了使用深度学习模型进行柑橘病害检测,您可以选择一些常用的目标检测架构,例如 YOLOv5、Faster R-CNN 或 SSD。以下是使用 PyTorch 和 YOLOv5 进行训练的一个简单示例:
-
安装 YOLOv5:
git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt
-
准备数据集配置文件: 将数据集转换为YOLO所需的格式,并创建配置文件(例如
data.yaml
):train: ./orange_defect_dataset/train/images val: ./orange_defect_dataset/val/images test: ./orange_defect_dataset/test/images nc: 5 # 类别数 names: ['Orange-Black-Spot', 'Orange-Canker', 'Orange-Greening', 'Orange-Healthy', 'Orange-Melanose'] # 类别名称
-
训练模型: 使用YOLOv5进行训练:
python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt
-
评估模型: 训练完成后,可以使用验证集进行评估:
python val.py --data data.yaml --weights runs/train/exp/weights/best.pt
-
推理测试: 使用训练好的模型进行推理测试:
python detect.py --source ./orange_defect_dataset/test/images --weights runs/train/exp/weights/best.pt --conf 0.4
通过上述步骤,您将拥有一个完整的柑橘病害检测系统,包括数据集、预训练模型和相关的训练流程。