柑橘缺陷病害识别数据集YOLO 1290张,xml和txt标签都有;5类别:yolov5-v10通用 包含数据集➕模型➕可视化界面

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 格式

    <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 进行训练的一个简单示例:

  1. 安装 YOLOv5

    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    pip install -r requirements.txt
    
  2. 准备数据集配置文件 : 将数据集转换为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']  # 类别名称
    
  3. 训练模型: 使用YOLOv5进行训练:

    python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt
    
  4. 评估模型: 训练完成后,可以使用验证集进行评估:

    python val.py --data data.yaml --weights runs/train/exp/weights/best.pt
    
  5. 推理测试: 使用训练好的模型进行推理测试:

    python detect.py --source ./orange_defect_dataset/test/images --weights runs/train/exp/weights/best.pt --conf 0.4
    

通过上述步骤,您将拥有一个完整的柑橘病害检测系统,包括数据集、预训练模型和相关的训练流程。

相关推荐
GoodStudyAndDayDayUp5 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
见欢.6 小时前
XXE靶场
xml
AI莫大猫7 小时前
(6)YOLOv4算法基本原理以及和YOLOv3 的差异
算法·yolo
KeepThinking!10 小时前
YOLO-World:Real-Time Open-Vocabulary Object Detection
人工智能·yolo·目标检测·多模态
前网易架构师-高司机14 小时前
游泳溺水识别数据集,对9984张原始图片进行YOLO,COCO JSON, VOC XML 格式的标注,平均识别率在91.7%以上
yolo·溺水·游泳溺水·游泳安全
发呆小天才O.oᯅ14 小时前
YOLOv8目标检测——详细记录使用OpenCV的DNN模块进行推理部署C++实现
c++·图像处理·人工智能·opencv·yolo·目标检测·dnn
深度学习lover15 小时前
<项目代码>YOLO Visdrone航拍目标识别<目标检测>
python·yolo·目标检测·计算机视觉·visdrone航拍目标识别
云和数据.ChenGuang19 小时前
《XML》教案 第1章 学习XML基础
xml·java·学习
王·小白攻城狮·不是那么帅的哥·天文19 小时前
Java操作Xml
xml·java
深度学习lover1 天前
[项目代码] YOLOv8 遥感航拍飞机和船舶识别 [目标检测]
python·yolo·目标检测·计算机视觉·遥感航拍飞机和船舶识别