适用人群👤 普通本科生 📦 12类 · 11,520张 📱 手机高清拍摄

数据集基本信息

项目 详情
数据总量 11,520 张高清 JPG 图片
类别数量 12 类(4 大类 × 3 亚类)
拍摄设备 手机高清相机
场景条件 多光照、多背景
标注方式 按文件夹分类整理
可直接用于 图像分类模型训练

🥜 杏仁(ALMOND)

MAMRA(960张)· REGULAR(960张)· SANORA(960张)

🥜 腰果(CASHEW)

JUMBO(960张)· REGULAR(960张)· SPECIAL(960张)

🍇 无花果(FIG)

JUMBO(960张)· MEDIUM(960张)· SMALL(960张)

🍇 葡萄干(RAISIN)

BLACK(960张)· GRADE1(960张)· PREMIUM(960张)

📸 数据样张

数据集特点分析

1. 多品种细粒度分类

这个数据集不是简单的"干果 vs 非干果"二分法,而是包含了同一品类的不同品种差异。例如腰果的 JUMBO(超大果)、REGULAR(普通)、SPECIAL(特级),无花果的 JUMBO/MEDIUM/SMALL——这些细粒度分类在实际农业和电商场景中非常有价值。

2. 多光照多背景,数据更真实

不同于很多在纯色背景下拍摄的学术数据集,这批图片在自然环境中拍摄,光照和背景都有变化,模型在这上面训练出来的泛化能力会更强。

3. 手机拍摄,工程化友好

拍摄设备是手机而非专业相机,这反而更接近实际项目中的数据采集场景。对于想做端侧部署(比如手机App识别干果)的同学来说,这种分辨率和质量的图片更具有参考价值。

方法一:PyTorch ImageFolder(最推荐入门)

由于数据已经按类别整理好了,最简单的方法是直接用文件夹名作为标签。

import torch
from torchvision import transforms, datasets
from torch.utils.data import DataLoader

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

# 加载数据(自动识别12个类别)
dataset = datasets.ImageFolder(
    root='./干果图像数据集/',
    transform=transform
)

# 划分训练集和验证集(8:2)
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_ds, val_ds = torch.utils.data.random_split(
    dataset, [train_size, val_size]
)

train_loader = DataLoader(train_ds, batch_size=32, shuffle=True)
val_loader = DataLoader(val_ds, batch_size=32)

print(f"训练集:{len(train_ds)} 张 | 验证集:{len(val_ds)} 张")
print(f"类别列表:{dataset.classes}")
# 输出示例:['ALMOND_MAMRA','ALMOND_REGULAR','ALMOND_SANORA',
#           'CASHEW_JUMBO','CASHEW_REGULAR','CASHEW_SPECIAL',
#           'FIG_JUMBO','FIG_MEDIUM','FIG_SMALL',
#           'RAISIN_BLACK','RAISIN_GRADE1','RAISIN_PREMIUM']

ImageFolder 会自动以子文件夹名称作为类别标签,0~11 共12个类别,非常方便。

方法二:YOLOv8 分类模型(更简单)

from ultralytics import YOLO

# 加载预训练的分类模型
model = YOLO('yolov8n-cls.pt')

# 开始分类训练
results = model.train(
    data='./干果图像数据集/',   # 传文件夹根目录即可
    epochs=50,
    imgsz=224,
    batch=16,
    name='dry_fruit_classifier',
    device=0,                   # GPU;CPU训练改为 'cpu'
    augment=True,               # 开启数据增强
    patience=10,                # 早停,10轮没提升就停
)

# 验证集评估
val_results = model.val()
print(f"Top-1 准确率:{val_results.top1:.2f}%")
print(f"Top-5 准确率:{val_results.top5:.2f}%")

方法三:从零训练 CNN(完整代码)

import torch
import torch.nn as nn
import torch.optim as optim

class DryFruitCNN(nn.Module):
    def __init__(self, num_classes=12):
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Conv2d(64, 128, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Conv2d(128, 256, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
        )
        self.classifier = nn.Sequential(
            nn.Flatten(),
            nn.Linear(256 * 4 * 4, 512),
            nn.ReLU(), nn.Dropout(0.5),
            nn.Linear(512, num_classes)
        )
    def forward(self, x):
        return self.classifier(self.features(x))

model = DryFruitCNN(num_classes=12)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.5)

# 训练循环(省略,参照 PyTorch 官方教程)

模型效果评估建议

指标 说明 关注点
准确率(Accuracy) 整体正确率 整体效果如何
混淆矩阵 每类错分情况 容易混淆的类别对
Per-class 召回率 各类别识别率 哪些品类容易漏检
Per-class 精确率 各类别"误判率" 防止把A认成B
重点关注:CASHEW_JUMBO vs CASHEW_REGULAR、RAISIN_PREMIUM vs RAISIN_GRADE1 这类细粒度相近的类别。如果这两对之间互相错分较多,说明模型还没有学到区分它们的关键特征。

扩展方向

  • 细粒度图像分析(FGVC):在同品类内区分不同品种,是学术热门方向
  • 多标签分类:一张图里有多种干果,改成多标签任务
  • 缺陷检测:收集变质/发霉图片作为第13类,升级为质量检测任务
  • 知识蒸馏:用大模型(如 EfficientNet)当 teacher,蒸馏到小模型用于端侧部署
  • 迁移学习对比实验:分别用 ResNet、EfficientNet、MobileNet 做迁移学习,是很好的消融实验素材

数据集从哪里获取

详见文后的参考资料

总结

  • ✅ 数据量充足(11,520张),训练验证测试足够用
  • ✅ 类别清晰但有挑战性(12类,细粒度高)
  • ✅ 多场景图片,泛化能力锻炼价值大
  • ✅ 文件夹结构完整,上手门槛低
  • ✅ 可扩展方向多,毕设/论文/竞赛都能用

参考资料:Ultralytics YOLOv8 · PyTorch 官方文档 ·

干果图像数据集相关资源:https://www.dilitanxianjia.com/16823/

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐