【干货】11520张干果图像数据集,12类分类入门首选!附模型代码
适用人群👤 普通本科生 📦 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/
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)