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 ET
def 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').text
bbox = 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 Path
def 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').text
class_id = get_class_id(class_name) # 假设有一个函数获取类别ID
bbox = 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_width
y_center = (ymin + ymax) / 2.0 / image_height
width = (xmax - xmin) / image_width
height = (ymax - ymin) / image_height
f.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.size
convert_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 np
class OrangeDefectDataset(Dataset):
def __init__(self, image_dir, anno_dir, transform=None):
self.image_dir = image_dir
self.anno_dir = anno_dir
self.transform = transform
self.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.shape
annotations = 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
通过上述步骤,您将拥有一个完整的柑橘病害检测系统,包括数据集、预训练模型和相关的训练流程。