智慧果园-16类高品质水果分类数据集

总数据量超20,000+张高分辨率图像(原图9451张+增强数据)

每张图像都应用了以下预处理:
- 像素数据的自动方向调整(并剥离EXIF方向信息)
- 调整大小至640x640(居中裁剪填充)
以下增强方式被应用于创建每张源图像的3个版本:
- 50%概率水平翻转
- 50%概率垂直翻转
- 等概率应用以下90度旋转之一:无旋转、顺时针旋转、逆时针旋转、上下颠倒
- -15至+15度之间的随机旋转
- -10%至+10%之间的随机曝光调整
- 0至0.7像素之间的随机高斯模糊
- 对0.1%的像素应用椒盐噪声
√ 严格标注16类日常高频水果(苹果/香蕉/橙子等全涵盖)(具体为:草莓,蓝莓,释迦果,梨子,番石榴,西瓜,橙子,菠萝,火龙果,葡萄,香蕉,苹果,山竹,西红柿,哈密瓜,芒果。)
√ 完整数据划分:训练集/验证集/测试集即插即用
开箱即用:已完成标准YOLO格式转换
这是一个经过工业级预处理和深度数据增强的高品质水果分类与检测数据集。其最大的亮点在于数据增强的多样性(包含旋转、曝光、噪声等),这使得训练出的模型具有极强的鲁棒性,能够适应超市自助结账、家庭冰箱识别、农业分拣等多种复杂光照和角度场景。
🍎 1. 16类高品质水果数据集概况
| 项目属性 | 详细说明 |
|---|---|
| 数据集名称 | High-Quality-16-Fruit-Dataset |
| 图像总量 | 20,000+ 张 (9,451 张原图 + 3倍增强数据) |
| 图像规格 | 640x640 分辨率 (已统一居中裁剪/填充,无需二次预处理) |
| 类别数量 | 16 类 (严格对应日常高频水果) |
| 数据划分 | 训练集 / 验证集 / 测试集 (标准划分,即插即用) |
| 标注格式 | YOLO 格式 (.txt),完美兼容 YOLOv5/v8/v9/v10/v11 |
| 预处理亮点 | ✅ EXIF方向自动校正✅ 统一分辨率处理 |
| 增强策略 | 🔄 几何变换: 水平/垂直翻转 (50%)、90°旋转、随机旋转 (±15°)💡 光度变换: 随机曝光 (±10%)🌫️ 噪声模拟: 高斯模糊 (0-0.7px)、椒盐噪声 (0.1%) |
🍇 16类水果类别定义
| ID | 类别名称 (English) | 中文名称 | 特征描述 |
|---|---|---|---|
| 0 | strawberry | 草莓 | 红色小果,表面有籽,形状不规则 |
| 1 | blueberry | 蓝莓 | 深蓝色/紫色小球,常成簇出现,目标极小 |
| 2 | sugar_apple | 释迦果 | 绿色/黄绿色,表面有鳞片状突起 |
| 3 | pear | 梨子 | 黄色/绿色,上窄下宽,表面光滑或有斑点 |
| 4 | guava | 番石榴 | 绿色/淡黄色,圆形或梨形,质地坚硬 |
| 5 | watermelon | 西瓜 | 大体积,绿色条纹外皮,红色果肉 (若切开) |
| 6 | orange | 橙子 | 橙色圆形,表面有细微凹坑 |
| 7 | pineapple | 菠萝 | 黄色果身,顶部有绿色硬叶,纹理粗糙 |
| 8 | dragon_fruit | 火龙果 | 粉红色/黄色外皮,有绿色鳞片 |
| 9 | grape | 葡萄 | 紫色/绿色小球,紧密成串,遮挡严重 |
| 10 | banana | 香蕉 | 黄色长条弯曲状,常成把出现 |
| 11 | apple | 苹果 | 红色/绿色/黄色圆形,表面光滑 |
| 12 | mangosteen | 山竹 | 深紫色圆形,顶部有绿色蒂,大小适中 |
| 13 | tomato | 西红柿 | 红色圆形,表面光滑 (注:植物学为浆果,此处归为水果类) |
| 14 | cantaloupe | 哈密瓜 | 网纹外皮,椭圆或圆形,体积较大 |
| 15 | mango | 芒果 | 黄色/红色/绿色,肾形或椭圆,表面光滑 |
💡 数据价值分析:
- 抗干扰能力强:由于加入了高斯模糊和椒盐噪声,模型在摄像头画质不佳、光线昏暗或镜头脏污的情况下依然能保持高精度。
- 角度无关性:随机旋转和翻转使得模型能识别任意摆放角度的水果(如倒置的香蕉、侧放的苹果),非常适合自助收银台的随意摆放场景。
- 小目标优化:蓝莓和葡萄通常较小,640x640 的输入尺寸配合增强数据,能有效提升小目标检测率。

💻 2. YOLOv8/v11 训练代码 (针对增强数据优化)
由于数据集已经经过了强增强预处理(特别是旋转和噪声),我们在训练时的在线增强(On-the-fly augmentation)策略需要相应调整,避免过度增强导致图像失真,同时利用预处理的多样性快速收敛。
📄 第一步:数据集配置文件 (fruits_16.yaml)
path: ./Fruits_16_Dataset # 数据集根目录
train: images/train # 训练集路径
val: images/val # 验证集路径
test: images/test # 测试集路径
# 类别数量
nc: 16
# 类别名称 (顺序必须严格对应 ID 0-15)
names:
0: strawberry
1: blueberry
2: sugar_apple
3: pear
4: guava
5: watermelon
6: orange
7: pineapple
8: dragon_fruit
9: grape
10: banana
11: apple
12: mangosteen
13: tomato
14: cantaloupe
15: mango
🐍 第二步:Python 训练脚本 (train_fruits.py)
核心策略:
- 降低几何增强强度:因为数据集中已经包含了大量的旋转和翻转,训练时减少
degrees和flip的概率,防止图像被过度扭曲。 - 保留光度增强:继续保留 HSV 和亮度调整,以模拟不同超市/家庭的灯光环境。
- 高分辨率微调:虽然原图是 640,但可以尝试稍微放大到 736 或 800 来进一步提升小果(蓝莓/葡萄)的精度。
from ultralytics import YOLO
import torch
import os
def train_fruit_detector():
print("🍎 开始训练16类高品质水果检测模型...")
# 1. 加载模型
# 推荐使用 yolov8m.pt 或 yolov8l.pt
# 16类分类任务中等复杂度,Medium型号在速度和精度间平衡最好
model = YOLO('yolov8m.pt')
# 2. 定义训练参数
results = model.train(
data='fruits_16.yaml',
epochs=100, # 数据量大且已增强,收敛较快,100轮通常足够
imgsz=736, # 【建议】略大于原图640,提升小目标(蓝莓/葡萄)检测力
batch=32, # 大数据集可以使用较大的Batch Size
device='0' if torch.cuda.is_available() else 'cpu',
workers=8, # 多核加载数据
# --- 优化器设置 ---
optimizer='SGD',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
# --- 针对性数据增强策略 ---
# 注意:数据集已做过强几何增强,此处需适当减弱,避免"增强过头"
augment=True,
hsv_h=0.015, # 轻微色调调整 (水果颜色敏感,不宜大变)
hsv_s=0.4, # 饱和度调整 (模拟成熟度差异)
hsv_v=0.2, # 亮度调整 (模拟不同灯光)
degrees=5.0, # 【关键】减小旋转角度 (原数据已有±15°和90°旋转,此处仅做微扰)
translate=0.1,
scale=0.2, # 轻微缩放
shear=0.0,
perspective=0.0,
flipud=0.0, # 【关键】关闭上下翻转 (原数据已包含,且某些水果倒置不自然)
fliplr=0.0, # 【关键】关闭左右翻转 (原数据已包含50%概率,避免重复)
mosaic=0.5, # 降低Mosaic概率 (原数据已非常丰富,防止背景拼接过于杂乱)
mixup=0.05,
copy_paste=0.0, # 不需要,原数据已足够
# --- 损失函数 ---
fl_gamma=0.0, # 数据均衡性好,可不使用Focal Loss
label_smoothing=0.01, # 轻微平滑,防止过拟合
box=7.5,
cls=0.5,
dfl=1.5,
# --- 训练策略 ---
patience=20,
save=True,
project='runs/fruit_detect',
name='fruits_16_yolov8m_v1',
exist_ok=False,
seed=42,
verbose=True,
# --- 推理预设 ---
conf=0.25, # 水果特征明显,置信度阈值可适当提高
iou=0.45 # NMS阈值,水果通常不重叠严重,可设低一点
)
print(f"✅ 训练完成!最佳模型路径:{results.save_dir}/weights/best.pt")
# 3. 测试集评估
print("📊 正在测试集上进行最终评估...")
metrics = model.val(split='test')
print("-" * 70)
print(f"🏆 16类水果检测整体指标:")
print(f" mAP50: {metrics.box.map50:.4f}")
print(f" mAP50-95: {metrics.box.map:.4f}")
print("-" * 70)
# 打印各类别表现,重点关注小目标 (蓝莓/葡萄) 和易混淆目标 (橙/柑/橘)
class_names = [
'strawberry', 'blueberry', 'sugar_apple', 'pear', 'guava',
'watermelon', 'orange', 'pineapple', 'dragon_fruit', 'grape',
'banana', 'apple', 'mangosteen', 'tomato', 'cantaloupe', 'mango'
]
print("📈 各类别 mAP50-95 详细分析:")
weak_classes = []
for i, name in enumerate(class_names):
map_score = metrics.box.maps[i]
status = "✅ 优秀" if map_score > 0.6 else "⚠️ 关注"
if map_score < 0.5:
weak_classes.append(name)
print(f" [{i:2d}] {name:15s}: {map_score:.4f} {status}")
if weak_classes:
print(f"\n💡 建议:以下类别可能需要更多针对性样本或检查标注: {', '.join(weak_classes)}")
if __name__ == '__main__':
if not os.path.exists('fruits_16.yaml'):
print("❌ 错误:未找到 fruits_16.yaml,请检查路径!")
else:
train_fruit_detector()
🛒 3. 应用场景与部署建议
A. 智能超市自助结账系统
- 逻辑:用户将水果放在扫描区 -> 摄像头抓拍 -> 模型识别种类 -> 称重系统获取重量 -> 自动计价。
- 优势:本数据集的旋转增强使得用户无需刻意摆放水果方向,随意放置即可识别。
- 难点攻克:针对葡萄和蓝莓这种成串/成堆的目标,模型通过训练已学会将其识别为一个整体或分割识别,配合重量传感器可准确计价。
B. 农业自动化分拣流水线
- 逻辑:传送带上的水果高速移动 -> 工业相机拍摄 -> 模型实时分类 -> 机械臂或气吹装置按类别分流。
- 优势:高斯模糊和运动模糊(通过增强模拟)的预处理,让模型能适应高速传送带带来的图像轻微模糊。
- 部署:建议使用 TensorRT 加速导出的模型,在 Jetson Orin 或工控机上实现 >60 FPS 的实时检测。
C. 家庭冰箱/健康助手 App
- 逻辑:用户拍摄冰箱内部或果盘照片 -> 识别现有水果种类及数量 -> 推荐食谱或提醒保质期。
- 优势:曝光调整增强使得模型在冰箱昏暗灯光或厨房强光下均能稳定工作。
这套方案充分利用了 20,000+ 张高质量增强数据,能够快速训练出一个在商业场景中落地的、鲁棒性极强的水果识别系统。
204

被折叠的 条评论
为什么被折叠?



