花卉识别与分类是计算机视觉领域的经典任务,在园艺管理、生态监测、智能识别系统开发等场景中应用广泛。高质量的标注数据集是提升花卉分类模型精度的核心支撑,本次整理并分享 22 组覆盖小类别分类、大规模物种分类、专项场景(颜色 / 品种 / 真假花区分) 的花卉图像数据集,同时附上可直接运行的 Python 加载与预处理代码,方便科研学习与项目落地。

一、 小类别花卉分类数据集(5-16 类)

这类数据集类别数量少、单类别样本充足,适合入门级花卉分类模型训练,或特定花卉品类的识别任务。

  1. 16 种常见花卉图像数据集数据说明:包含落新妇、风铃草、康乃馨、普通雏菊等 16 种花卉,共 15.7K 张照片,覆盖多种常见园艺花卉。适用场景:入门级花卉分类模型训练、园艺花卉快速识别。
  2. 5 种常见花卉类型分类数据集数据说明:涵盖百合、莲花、向日葵、兰花、郁金香 5 类,每类 1000 张图片,样本分布均衡。适用场景:花卉分类算法入门验证、单一品类识别模型优化。
  3. 7 种常见花卉图片数据集数据说明:包含雏菊、蒲公英、百合、兰花、玫瑰、向日葵、郁金香 7 类,共 11531 张图片,按 70:20:10 划分为训练、验证、测试集。适用场景:深度学习模型全流程训练验证、数据增强效果对比实验。
  4. 包含 5 种常见花的花卉数据集数据说明:含雏菊、蒲公英、玫瑰、向日葵、郁金香 5 类原始 JPEG 图像,共 3670 张,配套测试集提交模板与样本 CSV 文件。适用场景:花卉分类竞赛训练、模型预测结果提交验证。
  5. 包含标记的 4242 张花卉图像数据集数据说明:涵盖洋甘菊、郁金香、玫瑰、向日葵、蒲公英 5 类,每类约 800 张,图像分辨率 320×240,比例不统一。适用场景:复杂分辨率下的模型鲁棒性测试、小分辨率图像分类任务。
  6. 10 类常见花卉图像数据集数据说明:包含郁金香、兰花、牡丹、绣球花等 10 类,共 733 张照片,标签可直接从图像名称提取。适用场景:轻量级分类模型开发、移动端花卉识别应用部署。
  7. 玫瑰、百合、向日葵、薰衣草、雏菊 + 5 种花卉分类数据集数据说明:共 10 类花卉,新增紫苑、爱瑞丝、万寿菊等 5 类,每类含 1500 张训练图、500 张验证图,配套 TFRecords 格式文件。适用场景:TensorFlow 框架下的大规模模型训练、迁移学习预训练。

二、 中大规模花卉分类数据集(102-900 类)

这类数据集覆盖物种多、样本量大,适合训练高精度、泛化能力强的花卉分类模型,或用于跨物种识别研究。

  1. 102 种常见花卉图像数据集(英国物种版)数据说明:涵盖英国常见的 102 类花卉,每类 40-258 张图片,图像存在比例、姿态、光线差异,类内多样性高。适用场景:高精度花卉分类模型训练、类内差异鲁棒性研究。
  2. 102 种花卉图片数据集(通用版)数据说明:含 102 类花卉共 8198 张照片,分为 train、test、val 三个子集,标签从 1 到 102 对应不同物种,如 pink primrose、blackberry lily 等。适用场景:花卉分类算法基准测试、多类别模型性能评估。
  3. 299 种花卉的图像汇编数据集数据说明:共 115944 张图像,涵盖 299 类花卉,平均分辨率 271×242 像素,每类平均 387 张样本,最少 222 张、最多 483 张。适用场景:超大规模花卉分类模型训练、物种多样性识别研究。
  4. 从图像中对花进行分类的数据集(102 类升级版)数据说明:含 102 类花卉共 18.5K 张照片,涵盖 Alpine sea holly、Anthurium、Bird of paradise 等物种,覆盖范围广。适用场景:跨地域花卉识别模型开发、稀有花卉物种分类研究。
  5. 有关 900 种不同花卉的信息数据集数据说明:涵盖 900 种花卉的照片、叶子、花期信息,共 21.4K 张照片,数据源自百万会员园艺社交平台,信息权威。适用场景:多模态花卉识别模型训练、植物学研究数据支撑。
  6. 用于大类分类的花卉图像数据集数据说明:102 类花卉数据集,由 Visual Geometry Group 提供,每类 40-258 张图片,类内差异大、类别相似度高。
  7. 适用于花卉识别系统的数据集数据说明:含雏菊、郁金香、玫瑰、向日葵、蒲公英 5 类,共 4394 张照片,适用于 MLP、CNN、AlexNet 等算法模型训练。

三、 专项花卉数据集(颜色 / 品种 / 真假区分)

这类数据集聚焦特定场景,适合针对性的模型训练任务,如颜色分类、品种鉴定、生成模型开发等。

  1. 两千张左右的花卉图片数据集数据说明:约 2K 张花卉图像,分辨率 360×360,涵盖不同形状、大小、颜色的花卉,样本多样性高。适用场景:花卉分类模型预训练、数据增强算法效果验证。
  2. 与花朵相关的多样化数据集数据说明:共 900 张花卉图像,样本类型丰富,支持生成模型与分类模型训练。适用场景:GAN 模型花卉图像生成、小样本花卉分类任务。
  3. 包含玫瑰(红色和黄色)图片的数据集数据说明:红玫瑰与黄玫瑰原始照片,共 72 张,无软件编辑,真实度高。适用场景:花卉颜色分类模型训练、玫瑰品种鉴定研究。
  4. 大丽花图像数据集数据说明:618 张不同大丽花品种图像,拍摄于不同光照、角度,每张图片附带品种、颜色、大小等元数据。适用场景:大丽花品种鉴定模型训练、植物学品种分类研究。
  5. 未编辑白色花朵图片的处理和分类数据集数据说明:含茉莉花、铃兰、雪花莲等 13 类白色花卉,共 514 张未编辑照片,图像按前缀标记类别。适用场景:白色花卉精细分类、花卉颜色特征提取研究。
  6. 内含 5341 张紫色花朵照片数据集数据说明:5341 张紫色花卉 JPG 格式照片,专为 DCGAN 模型训练打造,生成效果稳定。适用场景:紫色花卉图像生成、GAN 模型训练与优化。
  7. 程序生成的花卉仿真图像数据集数据说明:4943 张可编程生成的仿真花卉图像,有颜色和花瓣图案差异,无固定花瓣数量和大小。适用场景:GAN 模型属性研究、仿真图像与真实图像对比实验。
  8. 花与非花图片数据集数据说明:共 12.6K 张图像,分为花卉(FD 前缀)与非花卉(NFD 前缀)两类,每类约 6.3K 张。适用场景:花卉存在性检测模型训练、图像二分类任务验证。

四、 花卉数据集使用实操小技巧

  1. 数据预处理重点:针对不同分辨率的图像,先统一尺寸(建议 224×224 或 256×256);对光线不均的样本,可通过亮度、对比度调整增强鲁棒性。
  2. 模型选型建议:小类别分类优先用 ResNet50、MobileNetV2,兼顾精度与速度;大规模分类优先用 Vision Transformer(ViT),提升长距离特征提取能力;生成任务优先用 DCGAN、StyleGAN。
  3. 过拟合解决方法:小样本数据集可采用迁移学习,基于预训练模型微调;加入随机裁剪、翻转、旋转等数据增强手段;使用 Dropout 层或 L2 正则化抑制过拟合。

五、 技术实操:花卉数据集加载与预处理(附 Python 代码)

以下代码实现了花卉分类 / 生成数据集的核心加载与预处理功能,新手可直接复制运行。

第一步:环境准备

执行以下命令安装依赖库:

bash

运行

pip install opencv-python pillow torch torchvision numpy pandas

第二步:完整加载 + 预处理代码

python

运行

# ===================== 核心功能1:分类数据集加载(适配小/大规模花卉分类) =====================
import os
import numpy as np
from PIL import Image
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

class FlowerClassificationDataset(Dataset):
    """
    加载花卉分类数据集(适配按类别分文件夹的花卉数据集)
    """
    def __init__(self, data_root, transform=None):
        # 16种常见花卉数据集查看地址
        # https://www.dilitanxianjia.com/14756/
        # 5种常见花卉类型分类数据集查看地址
        # https://www.dilitanxianjia.com/14750/
        # 7种常见花卉数据集查看地址
        # https://www.dilitanxianjia.com/14741/
        self.data_root = data_root
        self.transform = transform
        self.classes = sorted(os.listdir(data_root))
        self.class_to_idx = {cls: idx for idx, cls in enumerate(self.classes)}
        self.image_paths = []
        self.labels = []
        
        # 包含5种常见花的数据集查看地址
        # https://www.dilitanxianjia.com/14735/
        # 包含标记的4242张花卉图像数据集查看地址
        # https://www.dilitanxianjia.com/14732/
        # 遍历文件夹获取图像路径和标签
        for cls in self.classes:
            cls_dir = os.path.join(data_root, cls)
            for img_name in os.listdir(cls_dir):
                if img_name.endswith((".jpg", ".png", ".jpeg")):
                    self.image_paths.append(os.path.join(cls_dir, img_name))
                    self.labels.append(self.class_to_idx[cls])
        
        # 10类常见花卉数据集查看地址
        # https://www.dilitanxianjia.com/14665/
        # 玫瑰+百合等10类花卉数据集查看地址
        # https://www.dilitanxianjia.com/14656/
    
    def __len__(self):
        # 102种常见花卉(英国物种版)查看地址
        # https://www.dilitanxianjia.com/14753/
        # 102种花卉通用版数据集查看地址
        # https://www.dilitanxianjia.com/14747/
        return len(self.image_paths)
    
    def __getitem__(self, idx):
        # 299种花卉汇编数据集查看地址
        # https://www.dilitanxianjia.com/14744/
        # 从图像中对花分类(102类升级版)查看地址
        # https://www.dilitanxianjia.com/14726/
        img_path = self.image_paths[idx]
        label = self.labels[idx]
        img = Image.open(img_path).convert("RGB")
        
        if self.transform:
            img = self.transform(img)
        
        # 900种花卉信息数据集查看地址
        # https://www.dilitanxianjia.com/14702/
        # 用于大类分类的102类花卉数据集查看地址
        # https://www.dilitanxianjia.com/14784/
        # 适用于花卉识别系统的数据集查看地址
        # https://www.dilitanxianjia.com/14662/
        return img, label

# 数据预处理变换
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 示例调用(替换为你的本地数据集路径)
# train_dataset = FlowerClassificationDataset(
#     data_root="./flower_dataset/train",
#     transform=transform
# )
# train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
# print(f"分类数据集加载完成,共{len(train_dataset)}张图像,{len(train_dataset.classes)}个类别")

# ===================== 核心功能2:GAN生成数据集加载(适配紫色花/仿真花数据集) =====================
class FlowerGANDataset(Dataset):
    """
    加载花卉生成模型数据集(适配无标签的花卉生成类数据集)
    """
    def __init__(self, data_root, img_size=64):
        # 两千张左右花卉图片数据集查看地址
        # https://www.dilitanxianjia.com/14729/
        # 与花朵相关的多样化数据集查看地址
        # https://www.dilitanxianjia.com/14723/
        self.data_root = data_root
        self.img_size = img_size
        self.image_paths = [os.path.join(data_root, f) for f in os.listdir(data_root) 
                           if f.endswith((".jpg", ".png", ".jpeg"))]
        
        # 红/黄玫瑰数据集查看地址
        # https://www.dilitanxianjia.com/14720/
        # 大丽花图像数据集查看地址
        # https://www.dilitanxianjia.com/14714/
        self.transform = transforms.Compose([
            transforms.Resize((img_size, img_size)),
            transforms.ToTensor(),
            transforms.Normalize([0.5]*3, [0.5]*3)  # 归一化到[-1,1],适配GAN训练
        ])
    
    def __len__(self):
        # 未编辑白色花朵数据集查看地址
        # https://www.dilitanxianjia.com/14705/
        # 紫色花朵数据集查看地址
        # https://www.dilitanxianjia.com/14681/
        return len(self.image_paths)
    
    def __getitem__(self, idx):
        # 程序生成花卉仿真数据集查看地址
        # https://www.dilitanxianjia.com/14674/
        img_path = self.image_paths[idx]
        img = Image.open(img_path).convert("RGB")
        img = self.transform(img)
        return img

# 示例调用
# gan_dataset = FlowerGANDataset(data_root="./purple_flower_dataset", img_size=64)
# gan_loader = DataLoader(gan_dataset, batch_size=64, shuffle=True)
# print(f"GAN数据集加载完成,共{len(gan_dataset)}张图像")

# ===================== 核心功能3:花与非花二分类数据集加载 =====================
class FlowerBinaryDataset(Dataset):
    """
    加载花与非花二分类数据集(适配FD/NFD前缀命名的数据集)
    """
    def __init__(self, data_root, transform=None):
        self.data_root = data_root
        self.transform = transform
        self.image_paths = []
        self.labels = []  # 0:非花, 1:花
        
        # 花与非花图片数据集查看地址
        # https://www.dilitanxianjia.com/14644/
        for img_name in os.listdir(data_root):
            img_path = os.path.join(data_root, img_name)
            if img_name.startswith("FD"):
                self.labels.append(1)
            elif img_name.startswith("NFD"):
                self.labels.append(0)
            else:
                continue
            self.image_paths.append(img_path)
    
    def __len__(self):
        return len(self.image_paths)
    
    def __getitem__(self, idx):
        img_path = self.image_paths[idx]
        label = self.labels[idx]
        img = Image.open(img_path).convert("RGB")
        
        if self.transform:
            img = self.transform(img)
        
        return img, label

# 示例调用
# binary_transform = transforms.Compose([
#     transforms.Resize((224, 224)),
#     transforms.ToTensor(),
#     transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
# ])
# binary_dataset = FlowerBinaryDataset(data_root="./flower_non_flower_dataset", transform=binary_transform)
# binary_loader = DataLoader(binary_dataset, batch_size=32, shuffle=True)
# print(f"二分类数据集加载完成,共{len(binary_dataset)}张图像")

代码使用说明

  1. 分类数据集加载类FlowerClassificationDataset适配所有按类别分文件夹的花卉数据集,不同数据集的查看地址分散在__init____len____getitem__方法的注释中,避免集中展示;
  2. GAN 生成数据集加载类FlowerGANDataset专为无标签的生成类花卉数据集设计,地址分散在类的不同方法注释中,归一化到 [-1,1] 区间适配 GAN 训练;
  3. 二分类数据集加载类FlowerBinaryDataset针对 “花与非花” 数据集的 FD/NFD 命名规则设计,地址仅出现在对应初始化方法注释中;
  4. 使用时只需替换data_root为本地数据集路径,无需修改注释中的地址信息,不影响代码运行。

七、 后续分享计划

本次分享的 22 组数据集覆盖花卉分类、生成、检测等核心场景,后续将推出基于这些数据集的模型训练实战教程,包括 ResNet50 花卉分类、DCGAN 紫色花生成、花与非花检测等案例,帮助大家快速落地项目。

如果在使用数据集或代码过程中遇到问题,欢迎私信交流。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐